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ées par les descendants de TObserverController.
| OnMainObjectChanged | Appelée lorsque l'objet observé change. |
| OnMainObjectPropChanged | Appelée lorsque un attribut de l'objet observé change. |
| OnMainObjectBeforeCommit | Appelée avant le commit de l'objet observé. |
Voir aussi :
Exemple d'utilisation d'un observateur, dans cet exemple, la classe observée est WFClasseA :
<source lang="delphi"> 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. </source>