« Opération SData (sdata) » : différence entre les versions
| Ligne 52 : | Ligne 52 : | ||
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. | ||
Le flux SData généré par l'appel de la méthode : | |||
<source lang="xml"> | <source lang="xml"> | ||
| Ligne 70 : | Ligne 70 : | ||
<http:ifMatch>11CD0000000001D20002000000360001-0000002400000001</http:ifMatch> | <http:ifMatch>11CD0000000001D20002000000360001-0000002400000001</http:ifMatch> | ||
</entry> | </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> | </source> | ||
[[Category:SData]] | [[Category:SData]] | ||
Version du 23 mai 2011 à 11:33
Les opérations SData peuvent être défini à trois niveaux dans le Contrat SData :
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 :
<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>
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.
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é :
<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>
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 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é :
<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>
lors de l'import de ce contrat la méthode sera ajouté en tant qu'opération de Service à l'entité correspondante.
Le flux SData généré par l'appel de la méthode :
<?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>
Exemple de code d'appel d'une méthode d'instance SData :
//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;