« Opération SData (sdata) » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 1 : | Ligne 1 : | ||
__TOC__ | |||
[http://interop.sage.com/daisy/sdata/ServiceOperations.html Les opérations SData] peuvent être défini à trois niveaux dans le Contrat SData : | [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 entité en tant que méthode de classe.=== | ===Au niveau d'une entité en tant que méthode de classe.=== | ||
Ligne 145 : | Ligne 130 : | ||
then showMessage('udate ok') | then showMessage('udate ok') | ||
else showMessage('not found after update'); | 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; | end; | ||
</source> | </source> | ||
[[Category:SData]] | [[Category:SData]] |
Version du 23 mai 2011 à 15:03
Les opérations SData peuvent être défini à 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>
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>