Gestion des relations des classes entité de service distant

De Wiki1000
(Différences entre les versions)
(Listes)
Ligne 35 : Ligne 35 :
 
==Références==
 
==Références==
  
===Lien par valeur===
+
===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 :
 +
 
 +
<pre>
 +
</ns3:ClassA>
 +
<ns3:Ref2>
 +
  <ns3:aString>B</ns3:aString>
 +
</ns3:Ref2>
 +
</ns3:ClassA>
 +
</pre>
 +
 
 +
===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 :
 
Dans ce cas on utilise une instance représentant l'objet lié pour définir la référence :
  
Ligne 59 : Ligne 89 :
 
</source>
 
</source>
  
===Lien par clé===
+
<pre>
 +
<ns3:ClassA>
 +
<ns3:Ref1 sdata:key="78AC2ED1D3660A0B000A00000002002B"/>
 +
</ns3:ClassA>
 +
</pre>
 +
 
 +
===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 :
 
Dans ce cas on utilise la clé primaire de la ressource pour définir la référence :
  
Ligne 78 : Ligne 114 :
 
</source>
 
</source>
  
 +
le flux généré est le suivant :
 +
 +
<pre>
 +
<ns3:ClassA>
 +
<ns3:Ref1 sdata:key="78AC2ED1D3660A0B000A00000002002B"/>
 +
</ns3:ClassA>
 +
</pre>
  
 
==Listes==
 
==Listes==
 +
 +
===Listes composition de type parent/child===
 
Les relations de type parent/child (liste de type composition) sont créées par valeur :
 
Les relations de type parent/child (liste de type composition) sont créées par valeur :
  
Ligne 101 : Ligne 146 :
 
</source>
 
</source>
  
 +
Le flux généré est le suivant :
 +
 +
<pre>
 +
<ns3:List2>
 +
<ns3:ClassC>
 +
  <ns3:aString>C1</ns3:aString>
 +
</ns3:ClassC>
 +
<ns3:ClassC>
 +
  <ns3:aString>C2</ns3:aString>
 +
</ns3:ClassC>
 +
</ns3:List2>
 +
</pre>
 +
 +
===Listes de type association===
 +
 +
Les relations de type associations sont définies par les clés primaires des objets :
 +
 +
<source lang="delphi">
 +
function CreateRemoteA(const aText:string; iKeys:Array of string):String;
 +
var inst:RE_ClassA; idx:Integer;
 +
begin
 +
  inst := RE_ClassA.Create;
 +
  inst.aString := aText;
 +
  for idx:=0 to length(iKeys)-1 do
 +
    inst.List1.AddOID(iKeys[idx]);
 +
  inst.Post;
 +
  Result := inst.SDataKey;
 +
end;
 +
</source>
 +
 +
Le flux généré est le suivant :
 +
 +
<pre>
 +
<ns3:List1>
 +
<ns3:ClassC sdata:key="78AC2ED1D3660A0B0004000000020018"/>
 +
<ns3:ClassC sdata:key="78AC2ED1D3660A0B000400000002001A"/>
 +
</ns3:List1>
 +
</pre>
  
 
Voir aussi:
 
Voir aussi:

Version du 22 août 2011 à 10:14

Sommaire

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é :

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;

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 :

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;
<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 :

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;

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 :

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;

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>

Listes de type association

Les relations de type associations sont définies par les clés primaires des objets :

function CreateRemoteA(const aText:string; iKeys:Array of string):String;
var inst:RE_ClassA; idx:Integer;
begin
   inst := RE_ClassA.Create;
   inst.aString := aText;
   for idx:=0 to length(iKeys)-1 do
     inst.List1.AddOID(iKeys[idx]);
   inst.Post;
   Result := inst.SDataKey;
end;

Le flux généré est le suivant :

<ns3:List1>
 <ns3:ClassC sdata:key="78AC2ED1D3660A0B0004000000020018"/>
 <ns3:ClassC sdata:key="78AC2ED1D3660A0B000400000002001A"/>
</ns3:List1>

Voir aussi:

Classe entité de service distant (stereotype)Développement DSM





Whos here now:   Members 0   Guests 1   Bots & Crawlers 0
 
Outils personnels