« Opération SData (sdata) » : différence entre les versions

De Wiki1000
(Page créée avec « [http://interop.sage.com/daisy/sdata/ServiceOperations.html Les opérations SData] peuvent être défini à trois niveaux dans le Contrat SData : ===Au niveau d'une classe "… »)
 
Aucun résumé des modifications
 
(10 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[http://interop.sage.com/daisy/sdata/ServiceOperations.html Les opérations SData] peuvent être défini à trois niveaux dans le Contrat SData :
__TOC__


===Au niveau d'une classe "Support de service local"===
[http://interop.sage.com/daisy/sdata/ServiceOperations.html Les opérations SData] peuvent être définies à trois niveaux dans le Contrat SData :
Dans ce cas l'attribut "path" associé à l'opération ne fait pas référence à une entité du contrat :
 
<source lang="xml">
<xsd:element name="ndfContractOperation1"
type="tns:ndfContractOperation1--type"
sme:role="serviceOperation"
sme:path="$service/Operation1" />
<xsd:complexType name="ndfContractOperation1--type">
<xsd:all>
...
</xsd:all>
</xsd:complexType>
</source>
 
lors de l'import de ce contrat la méthode sera ajouté à une classe "Support de Service distant (sdata)" du même nom que le contrat.


===Au niveau d'une entité en tant que méthode de classe.===
===Au niveau d'une entité en tant que méthode de classe.===
Ligne 33 : Ligne 18 :
</source>
</source>


lors de l'import de ce contrat la méthode sera ajouté à une classe "Support de Service distant (sdata)" du même nom que le contrat.
lors de l'import de ce contrat la méthode sera ajouté à une classe "Support de Service distant (sdata)" du même nom que le contrat :
 
{{#images:entity-class-operation.png|sdata}}
 
Le flux SData généré par l'appel de la méthode :
 
<source lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
  xmlns:sdata="http://schemas.sage.com/sdata/2008/1"
  xmlns:http="http://schemas.sage.com/sdata/http/2008/1"
  xmlns:ns3="http://www.sage.com/fr/line1000/ndfContract">
<id>http://syfre/syfre/server/sdata/syfre/ndfContract/-/expenses/$service/UpdateAllExpenseStatus</id>
<sdata:payload>
<ns3:expenseUpdateAllExpenseStatus>
<ns3:request>
...
</ns3:request>
</ns3:expenseUpdateAllExpenseStatus>
</sdata:payload>
</entry>
</source>
 
Exemple d'appel d'une méthode de classe :
 
<source lang="delphi">
//Procedure OperationUpdateExpenses;
var aReason:string;
begin
  aReason := Format('All expenses has been accepted %s',[FormatDatetime('c',Now)]);
  RE_expense.UpdateAllExpenseStatus(RE_NDF_STATUS_PENDING,aReason);
end;
</source>
 
{{tip|Cette forme d'appel est la seule à être conforme au standard SData.}}


===Au niveau d'une entité en tant que méthode d'instance.===
===Au niveau d'une entité en tant que méthode d'instance.===
Dans ce cas l'attribut "path" associé à l'opération fait référence à l'entité du contrat en utilisant le nom singulier de l'entité :
Dans ce cas l'attribut "path" associé à l'opération fait référence à l'entité du contrat en utilisant le nom singulier de l'entité :


Ligne 50 : Ligne 70 :
</source>
</source>


lors de l'import de ce contrat la méthode sera ajouté en tant qu'opération de Service à l'entité correspondante.
lors de l'import de ce contrat la méthode sera ajouté en tant qu'opération de Service à l'entité correspondante :
 
{{#images:entity-instance-operation.png|sdata}}
 
Le flux SData généré par l'appel de la méthode :
 
<source lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
  xmlns:sdata="http://schemas.sage.com/sdata/2008/1"
  xmlns:http="http://schemas.sage.com/sdata/http/2008/1"
  xmlns:ns3="http://www.sage.com/fr/line1000/ndfContract">
<id>http://syfre/syfre/server/sdata/syfre/ndfContract/-/expense('11CD0000000001D20002000000360001')/$service/UpdateExpense</id>
<sdata:payload>
<ns3:expenseUpdateExpense>
<ns3:request>
...
</ns3:request>
</ns3:expenseUpdateExpense>
</sdata:payload>
<http:ifMatch>11CD0000000001D20002000000360001-0000002400000001</http:ifMatch>
</entry>
</source>
 
Exemple de code d'appel d'une méthode d'instance SData :
 
<source lang="delphi">
//Procedure OperationUpdateExpense;
var typ:RE_expenseType; inst:RE_Expense; aReason:string;
begin
  // Get the expense type
  //
  aReason := 'Hotel';
  typ := RE_expenseType.GetWhere('title=%1','',[aReason]) as RE_expenseType;
  if not Assigned(typ) then
  raise Exception.Create('Type Hotel not found');
 
  // Create an expense
  //
  aReason := Format('expense du %s',[FormatDatetime('c',Now)]);
 
  inst := RE_Expense.Create;
  inst.reason := aReason;
  inst.dateExpense := Now;
  inst.quantity := 1;
  inst.status.AsVariant := RE_NDF_STATUS_DRAFT;
  inst.typeExpense := typ;
  inst.Post;
 
  // Change status
  //
  aReason := Format('Accepted %s',[FormatDatetime('c',Now)]);
  inst.UpdateExpense(RE_NDF_STATUS_PENDING,aReason);
 
  // Check change
  //
  inst := RE_Expense.GetWhere('reason=%1','dateExpense',[aReason]) as RE_expense;
  if Assigned(inst)
  then showMessage('udate ok')
  else showMessage('not found after update');
end;
</source>
 
===Au niveau d'une classe "Support de service local"===
Dans ce cas l'attribut "path" associé à l'opération ne fait pas référence à une entité du contrat :
 
<source lang="xml">
<xsd:element name="ndfContractOperation1"
type="tns:ndfContractOperation1--type"
sme:role="serviceOperation"
sme:path="$service/Operation1" />
<xsd:complexType name="ndfContractOperation1--type">
<xsd:all>
...
</xsd:all>
</xsd:complexType>
</source>
 
lors de l'import de ce contrat la méthode sera ajouté à une classe "Support de Service distant (sdata)" du même nom que le contrat.
 
{{#images:contract-operation.png|sdata}}
 
Le flux SData généré par l'appel de la méthode :
 
<source lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
  xmlns:sdata="http://schemas.sage.com/sdata/2008/1"
  xmlns:http="http://schemas.sage.com/sdata/http/2008/1"
  xmlns:ns3="http://www.sage.com/fr/line1000/ndfContract">
<id>http://syfre/syfre/server/sdata/syfre/ndfContract/-/-/$service/DeleteAllExpenses</id>
<sdata:payload>
<ns3:ndfContractDeleteAllExpenses/>
</sdata:payload>
</entry>
</source>
 
Exemple d'appel d'une opération de contrat :
 
<source lang="delphi">
//Procedure OperationDeleteAllExpenses;
var inst:RE_ndfContract;
begin
  inst := RE_ndfContract.Create;
  inst.DeleteAllExpenses;
end;
</source>


[[Category:SData]]
[[Category:SData]]

Dernière version du 23 mai 2011 à 15:06

Les opérations SData peuvent être définies à trois niveaux dans le Contrat SData :

Au niveau d'une entité en tant que méthode de classe.

Dans ce cas l'attribut "path" associé à l'opération fait référence à l'entité du contrat en utilisant le nom pluriel de l'entité :

<source lang="xml"> <xsd:element name="expenseUpdateAllExpenseStatus"

type="tns:expenseUpdateAllExpenseStatus--type" 
sme:role="serviceOperation" 
sme:path="expenses/$service/UpdateAllExpenseStatus" />

<xsd:complexType name="expenseUpdateAllExpenseStatus--type"> <xsd:all> ... </xsd:all> </xsd:complexType> </source>

lors de l'import de ce contrat la méthode sera ajouté à une classe "Support de Service distant (sdata)" du même nom que le contrat :

{{#images:entity-class-operation.png|sdata}}

Le flux SData généré par l'appel de la méthode :

<source lang="xml"> <?xml version="1.0" encoding="utf-8"?> <entry xmlns="http://www.w3.org/2005/Atom"

 xmlns:sdata="http://schemas.sage.com/sdata/2008/1" 
 xmlns:http="http://schemas.sage.com/sdata/http/2008/1" 
 xmlns:ns3="http://www.sage.com/fr/line1000/ndfContract">

<id>http://syfre/syfre/server/sdata/syfre/ndfContract/-/expenses/$service/UpdateAllExpenseStatus</id> <sdata:payload> <ns3:expenseUpdateAllExpenseStatus> <ns3:request> ... </ns3:request> </ns3:expenseUpdateAllExpenseStatus> </sdata:payload> </entry> </source>

Exemple d'appel d'une méthode de classe :

<source lang="delphi"> //Procedure OperationUpdateExpenses; var aReason:string; begin

 aReason := Format('All expenses has been accepted %s',[FormatDatetime('c',Now)]);
 RE_expense.UpdateAllExpenseStatus(RE_NDF_STATUS_PENDING,aReason);

end; </source>

Tip : Cette forme d'appel est la seule à être conforme au standard SData.

Au niveau d'une entité en tant que méthode d'instance.

Dans ce cas l'attribut "path" associé à l'opération fait référence à l'entité du contrat en utilisant le nom singulier de l'entité :

<source lang="xml"> <xsd:element name="expenseUpdateExpense"

type="tns:expenseUpdateExpense--type" 
sme:role="serviceOperation" 
sme:path="expense/$service/UpdateExpense" />

<xsd:complexType name="expenseUpdateExpense--type"> <xsd:all> ... </xsd:all> </xsd:complexType> </source>

lors de l'import de ce contrat la méthode sera ajouté en tant qu'opération de Service à l'entité correspondante :

{{#images:entity-instance-operation.png|sdata}}

Le flux SData généré par l'appel de la méthode :

<source lang="xml"> <?xml version="1.0" encoding="utf-8"?> <entry xmlns="http://www.w3.org/2005/Atom"

 xmlns:sdata="http://schemas.sage.com/sdata/2008/1" 
 xmlns:http="http://schemas.sage.com/sdata/http/2008/1" 
 xmlns:ns3="http://www.sage.com/fr/line1000/ndfContract">

<id>http://syfre/syfre/server/sdata/syfre/ndfContract/-/expense('11CD0000000001D20002000000360001')/$service/UpdateExpense</id> <sdata:payload> <ns3:expenseUpdateExpense> <ns3:request> ... </ns3:request> </ns3:expenseUpdateExpense> </sdata:payload> <http:ifMatch>11CD0000000001D20002000000360001-0000002400000001</http:ifMatch> </entry> </source>

Exemple de code d'appel d'une méthode d'instance SData :

<source lang="delphi"> //Procedure OperationUpdateExpense; var typ:RE_expenseType; inst:RE_Expense; aReason:string; begin

 // Get the expense type
 //
 aReason := 'Hotel';
 typ := RE_expenseType.GetWhere('title=%1',,[aReason]) as RE_expenseType;
 if not Assigned(typ) then
  raise Exception.Create('Type Hotel not found');
 // Create an expense
 //
 aReason := Format('expense du %s',[FormatDatetime('c',Now)]);
 inst := RE_Expense.Create;
 inst.reason := aReason;
 inst.dateExpense := Now;
 inst.quantity := 1;
 inst.status.AsVariant := RE_NDF_STATUS_DRAFT;
 inst.typeExpense := typ;
 inst.Post;
 // Change status
 //
 aReason := Format('Accepted %s',[FormatDatetime('c',Now)]);
 inst.UpdateExpense(RE_NDF_STATUS_PENDING,aReason);
 // Check change
 //
 inst := RE_Expense.GetWhere('reason=%1','dateExpense',[aReason]) as RE_expense;
 if Assigned(inst)
  then showMessage('udate ok')
  else showMessage('not found after update');

end; </source>

Au niveau d'une classe "Support de service local"

Dans ce cas l'attribut "path" associé à l'opération ne fait pas référence à une entité du contrat :

<source lang="xml"> <xsd:element name="ndfContractOperation1"

type="tns:ndfContractOperation1--type" 
sme:role="serviceOperation" 
sme:path="$service/Operation1" />

<xsd:complexType name="ndfContractOperation1--type"> <xsd:all> ... </xsd:all> </xsd:complexType> </source>

lors de l'import de ce contrat la méthode sera ajouté à une classe "Support de Service distant (sdata)" du même nom que le contrat.

{{#images:contract-operation.png|sdata}}

Le flux SData généré par l'appel de la méthode :

<source lang="xml"> <?xml version="1.0" encoding="utf-8"?> <entry xmlns="http://www.w3.org/2005/Atom"

 xmlns:sdata="http://schemas.sage.com/sdata/2008/1" 
 xmlns:http="http://schemas.sage.com/sdata/http/2008/1" 
 xmlns:ns3="http://www.sage.com/fr/line1000/ndfContract">

<id>http://syfre/syfre/server/sdata/syfre/ndfContract/-/-/$service/DeleteAllExpenses</id> <sdata:payload> <ns3:ndfContractDeleteAllExpenses/> </sdata:payload> </entry> </source>

Exemple d'appel d'une opération de contrat :

<source lang="delphi"> //Procedure OperationDeleteAllExpenses; var inst:RE_ndfContract; begin

 inst := RE_ndfContract.Create;
 inst.DeleteAllExpenses;

end; </source>