TObserverController (class)
Introduction
La classe TObserverController est une classe non persistante utilisable comme classe ancêtre d'un observateur.
Un observateur est un objet lié à un objet source et notifié des changements de cet objet.
Attributs
| MainObject | Référence sur l'objet observé. |
Méthodes
| SetMainObjectOID | Positionne l'OID de l'objet observé |
Méthodes d'interface
Les méthodes suivantes peuvent être implémenté par les descendants de TObserverController.
| OnMainObjectChanged | Appelé lorsque l'objet observé change. |
| OnMainObjectPropChanged | Appelé lorsque un attribut de l'objet observé change. |
| OnMainObjectBeforeCommit | Appelé avant le commit de l'objet observé. |
Voir aussi :
Exemple d'utilisation d'un observateur, dans cet exemple, la classe observée est WFClasseA :
unit TestSYFREWF;
interface
Type
TWFClasseAObserver = Class(TObserverController)
public
Function getWFClasseA():WFClasseA;
Procedure OnMainObjectBeforeCommit;
Procedure OnMainObjectChanged;
Procedure OnMainObjectPropChanged(const iPropName:string);
end;
Implementation
{TWFClasseAObserver}
Function TWFClasseAObserver.getWFClasseA():WFClasseA;
//Function getWFClasseA():WFClasseA;
begin
// get the typed actual instance
Result := MainObject as WFClasseA;
end;
Procedure TWFClasseAObserver.OnMainObjectBeforeCommit;
//Procedure OnMainObjectBeforeCommit;
var inst:WFClasseA;
begin
// do some additional checks before commit
inst := GetWFClasseA;
if Assigned(inst) then
begin
if inst.uneChaine='' then raise ERule.Create('La chaine est obligatoire');
end;
end;
Procedure TWFClasseAObserver.OnMainObjectChanged;
//Procedure OnMainObjectChanged;
var inst:WFClasseA;
begin
// do something when main instance changed
inst := GetWFClasseA;
if Assigned(inst) then
begin
end;
end;
Procedure TWFClasseAObserver.OnMainObjectPropChanged(const iPropName:string);
//Procedure OnMainObjectPropChanged(const iPropName:string);
var inst:WFClasseA;
begin
// do something when property of main instance changed
if (iPropName='unCode') then
begin
inst := GetWFClasseA;
if Assigned(inst) and (inst.uneChaine='') then inst.uneChaine := inst.unCode;
end;
end;
end.