Gestion des relations des classes entité de service distant
Relations
Type de relation
sme:relationship | Type de role |
---|---|
parent | Référence réciproque d'une liste composition |
child | Liste composition |
reference | Référence |
association | Liste non composition |
Valeur des clés
Les relations des classes d'entité de service distant sont définies par les valeurs des clés primaires des ressources, c'est à dire les valeurs des propriétés SDataKey.
Ces valeurs sont stockés dans les attributs techniques oidXXX utilisés par les relations.
Sérialisation
La propriété de composition de la relation défini le style de sérialisation :
- Pour une relation de composition l'objet lié est inclus dans la sérialisation.
- Pour un relation simple l'objet lié est référencé par la valeur de sa clé SDataKey.
Références
Référence composition
Les références de type composition sont définies par valeur
Cet exemple crée simultanément l'objet parent et l'objet référencé :
<source lang="delphi"> function CreateRemoteAB(const aTextA:string; const aTextB:string):String; var instB:RE_ClassB; inst:RE_ClassA; aKey:String; begin
instB := RE_ClassB.Create; instB.aString := aTextB;
inst := RE_ClassA.Create; inst.aString := aTextA; inst.Ref2 := instB; inst.Post; Result := inst.SDataKey;
end; </source>
le flux généré est le suivant :
</ns3:ClassA> <ns3:Ref2> <ns3:aString>B</ns3:aString> </ns3:Ref2> </ns3:ClassA>
Référence simple, lien par valeur
Dans ce cas on utilise une instance représentant l'objet lié pour définir la référence :
<source lang="delphi">
function CreateRemoteA(const aText:string; const iKeyB:string):String; Var inst:RE_ClassA; instB:RE_ClassB; aKey:String; begin
// Create a A object with a reference on the B object // The reference is defined by value
// Retreive the instance of B from the server instB := RE_ClassB.Get(iKeyB); if not Assigned(instB) then raise Exception.Create('B not found');
// Create the A object inst := RE_ClassA.Create; inst.aString := aText; inst.Ref1 := instB; // by value inst.Post; Result := inst.SDataKey;
end; </source>
<ns3:ClassA> <ns3:Ref1 sdata:key="78AC2ED1D3660A0B000A00000002002B"/> </ns3:ClassA>
Référence simple, lien par clé
Dans ce cas on utilise la clé primaire de la ressource pour définir la référence :
<source lang="delphi">
function CreateRemoteA(const aText:string; const iKeyB:string):String; var inst:RE_ClassA; instB:RE_ClassB; aKey:String; begin
// Create a A object with a reference on the B object // The reference is defined by the SDataKey value of the B object
inst := RE_ClassA.Create; inst.aString := aText; inst.oidRef1 := iKeyB; // by key inst.Post; Result := inst.SDataKey;
end; </source>
le flux généré est le suivant :
<ns3:ClassA> <ns3:Ref1 sdata:key="78AC2ED1D3660A0B000A00000002002B"/> </ns3:ClassA>
Listes
Listes composition de type parent/child
Les relations de type parent/child (liste de type composition) sont créées par valeur :
<source lang="delphi">
function CreateRemoteAC(const aText:string; cCount:Integer); var inst:RE_ClassA; instC:RE_ClassC; idx:Integer; begin
inst := RE_ClassA.Create; inst.aString := aText; for idx:=1 to cCount do begin instC := RE_ClassC.Create; instC.aString := C+inttostr(idx); inst.List2.AddRef(instC); end; inst.Post; Result := inst.SDataKey;
end;
</source>
Le flux généré est le suivant :
<ns3:List2> <ns3:ClassC> <ns3:aString>C1</ns3:aString> </ns3:ClassC> <ns3:ClassC> <ns3:aString>C2</ns3:aString> </ns3:ClassC> </ns3:List2>
Voir aussi:
{{#if:Classe entité de service distant (stereotype)|
{{#if:Classe entité de service distant (stereotype)|— Classe entité de service distant (stereotype) |}} — Développement DSM —
|
{{#if:|— [[{{{1}}}]] |}} — Développement DSM —
}}