Ressource (sdata)
Sommaire |
Ressource (GET)
Dans l'interface SData les ressources sont les objets de l'application.
Une ressource est identifié par son uri qui représente le chemin de la ressource.
L'uri est composé du chemin de la classe et d'un sélecteur qui est l'oid de l'objet.
Exemple :
GET http://localhost:8080/sdata/gentiers/ttiers('9D33A23CFA6A005500F6000000285DAE') Response: 200 OK { "$baseUrl":"http://localhost:8080/sdata/l1000/gentiers/-/", "$title":"TTiers - -", "$updated":"2020-12-22T08:10:09.740Z", "$resources":[ { "$url":"TTiers('9D33A23CFA6A005500F6000000285DAE')", "$title":"ABI Jardin", "$updated":"2010-03-23T15:37:46.000Z", "$etag":"9D33A23CFA6A005500F6000000285DAE-000002C60000421C", "$key":"9D33A23CFA6A005500F6000000285DAE", "$baseUrl":"http://localhost:8080/sdata/l1000/GenTiers/-/", "stamp":"000002C60000421C", .... Attribute list ... } ] }
Sélecteur de ressource
Un sélecteur permet de retrouver une ressource spécifique, il est possible de rechercher une ressource par clé ou clause
Sélecteur | Exemple |
---|---|
Clé | TTiers('9D33A23CFA6A005500F6000000285DAE') |
Clé | TTiers(9D33A23CFA6A005500F6000000285DAE) |
clause | TTiers(code eq SYFRE1) |
Code de retour HTTP
Code | Résultat |
---|---|
200 | La ressource existe |
404 | La ressource n'existe pas |
Gestion du périmètre société
Par défaut, les requêtes s'exécutent dans le contexte société défini dans le jeton d'authentification.
Vous pouvez définir le contexte société dans le l'url de la requête :
METHOD https://host/sdata/society/package/class ...
Requête sur les ressources (GET)
Une requête sur les ressources est une requête sur une classe du modèle.
GET http://localhost:8080/sdata/gentiers/ttiers?parameters
Paramètres de la requête
Paramètre | valeur | Usage |
---|---|---|
select | liste d'attributs séparés par des virgules | Liste des attributs à retourner |
where | Expression objet | Filtre de la requête |
orderBy | Attribut de tri | Ordre de tri de la requête |
count | Taille de page | Pagination : Taille de page |
startIndex | Index de page | Pagination par page : Numéro de page (0 première) |
startKey | Valeur de clé ou de tri | Pagination par clé : Clé de position |
keyDirection | lt,le,gt,ge | Pagination par clé : direction par rapport à startKey |
Les valeurs passées en paramètre doivent être encodées en HTML
Exemple :
where=code eq 'ABI 007'
doit être encodée en :
where=code%20eq%20%27ABI%20007%27
Select
GET http://localhost:8080/sdata/gentiers/ttiers?select=code,caption
Filtre
Opérateurs:
opérateur | équivalence | exemple | encoded |
---|---|---|---|
eq | = | where=code eq 'ABI 007' | where=code%20eq%20%27ABI%20007%27 |
neq | <> | ||
lt | < | ||
le | <= | ||
gt | > | ||
ge | >= | ||
like | like | where=code like 'ABI %' | where=code%20like%20%27ABI %25%27 |
in | in |
Valeurs des paramètres:
Les valeurs des paramètres sont passées en littérale
Type de donnée | exemple |
---|---|
Chaîne | code eq 'xxx' |
boolean | flag eq true |
numérique | value eq 1 |
flottant | value eq 1.0 |
date | $updated > '2020-12-21T00:00:00' |
enum | ? |
Ordre de tri
Tri ascendant :
orderby=code
Tri descendant :
orderby=code%20desc
GET http://localhost:8080/sdata/gentiers/ttiers?orderBy=code%20desc
Pagination par page
Utiliser orderBy, count et startIndex
GET http://localhost:8080/sdata/gentiers/ttiers?select=code&orderby=code&count=10&startIndex=0 GET http://localhost:8080/sdata/gentiers/ttiers?select=code&orderby=code&count=10&startIndex=1 GET http://localhost:8080/sdata/gentiers/ttiers?select=code&orderby=code&count=10&startIndex=2 ...
Pagination par clé
Utiliser orderBy, startKey et keyDirection
GET http://localhost:8080/sdata/gentiers/ttiers?select=code&orderby=code&count=10&startKey=1B28EFFFF1C3000200F6000000230893&keyDirection=lt
Création de ressource (POST)
POST http://localhost:8080/sdata/gentiers/ttiers Request: { "code":"SYFRE1", "caption":"syfre 1", "sitesList":[ { "code":"SITE1", "caption":"site1 de syfre1", "adresse":{ "nomRueVoie":"rue de la pompe", "ville":"Clichy", "codePostal":"92100", "pays":{ "$key":"9D33A23CFA6A005500150000001700FD" } } } ] } Response: 200 OK { "$resources": [ { "$key": "9D33A23CFA6A005500F6000001E20022", "$url": "http://localhost:8080/sdata/l1000/gentiers/-/TTiers('9D33A23CFA6A005500F6000001E20022')", ... attribute list ... } ] }
Gestion du périmètre de partage
Le niveau de partage d'une ressource de niveau activité peut être contrôlé par des propriétés de contrôle au niveau de la définition de la ressource :
Contrôle | Usage |
---|---|
$shareId | Valeur du périmètre sur lequel créer l'objet |
$shareLevel | Niveau de partage sur lequel créer l'objet (0:dossier,1:activité ou 2:société) |
POST https://localhost/sdata/S3/gentiers/ttiers Request: { "$shareLevel":2, "code":"SYFRES3-2", "caption":"syfre S3-2", "sitesList":[ { "code":"SITE1", "caption":"site 1", "adresse":{ "nomRueVoie":"rue de la pompe", "ville":"Clichy", "codePostal":"92100", "pays":{ "$key":"9D33A23CFA6A005500150000001700FD" } } } ] } Response : 201 OK
Gestion des rôles
La création de ressource dans les rôles dépend de la nature du rôle.
- Pour les rôles de type composition les ressources liées sont créés simultanément.
- Pour les rôles qui ne sont pas des compositions les ressources liées sont rattachés.
Identification des références
Par clé:
{ "pays":{ "$key":"9D33A23CFA6A005500150000001700FD" } }
Par uri:
{ "pays":{ "$url":TPays("9D33A23CFA6A005500150000001700FD") } }
Par expression:
{ "pays":{ "$where":"codeISO = 'FRA'", "$orderby":"codeISO" } }
Lorsqu'une expression est utilisée la première ressource retournée par l'expression est utilisée.
Modification de ressource (PUT)
PUT http://localhost:8080/sdata/gentiers/ttiers('9D33A23CFA6A005500F6000001E20018') Request: { "codeSIRET":"12345678" } Response: 200 OK [ { .... resource modified ... } ]
Modification de rôle liste composition :
Par défaut les rôles composition sont gérés en remplacement, pour contrôler le mode de gestion des rôles utilisez un élément de contrôle "$" pour le rôle :
PUT http://localhost:8080/sdata/gentiers/ttiers('9D33A23CFA6A005500F6000001E20018') Request : { "sitesList":[ { "code":"SITE3", "caption":"site3 de syfre1", "adresse":{ "nomRueVoie":"rue Mogador", "ville":"Paris", "codePostal":"75008", "pays":{ "$where":"codeISO = 'FRA'", "$orderby":"codeISO" } } } ] } Response: 200 OK { "$resources": [ { "$key": "9D33A23CFA6A005500F6000001E30019", "$url": "/sdata/gentiers/ttiers('9D33A23CFA6A005500F6000001E30019')", "stamp": "000001710000002A", .... "sitesList": [ ... Site3 has been added, other sites has been removed. ... There is one site left in the list ] ] }
PUT http://localhost:8080/sdata/gentiers/ttiers('9D33A23CFA6A005500F6000001E20018') Request : { "$":{ "sitesList:["create"] }, "sitesList":[ { "code":"SITE3", "caption":"site3 de syfre1", "adresse":{ "nomRueVoie":"rue Mogador", "ville":"Paris", "codePostal":"75008", "pays":{ "$where":"codeISO = 'FRA'", "$orderby":"codeISO" } } } ] } Response: 200 OK { "$resources": [ { "$key": "9D33A23CFA6A005500F6000001E30019", "$url": "/sdata/gentiers/ttiers('9D33A23CFA6A005500F6000001E30019')", "stamp": "000001710000002A", .... "sitesList": [ ... Site3 has been added, other sites are not affected ... There is one site more in the list } ] ] }
contrôle | action |
---|---|
create | Les nouvelles ressources sont ajoutées au rôle |
update | Les ressources existantes dans le rôle sont mise à jour |
delete | Les ressources existantes et non présentes dans la requête sont supprimées |
La valeur par défaut est "create","update","delete"
Suppression de ressource (DELETE)
DELETE http://localhost:8080/sdata/gentiers/ttiers('9D33A23CFA6A005500F6000001E20018') Response: 200 OK
Opération sur une ressource (POST)
Les opérations des ressources correspondent aux méthodes publiques de cette ressource.
Méthode d'instance de ressource:
POST http://localhost:8080/sdata/testsyfrewf/wfclassea('B5A28A92EB0C00020010000000DB0006')/testmethode Request: { "pString":"value1", "pInteger":1, "pFloat":1.2, "pEnum":1, "pBoolean":false } Response: 200 OK { "result": "pString:value1 pInteger:1 pBoolean:false pFloat:1,2 pEnum:1" }
Méthode de classe de ressource, ou méthode de classe non persistante :
POST http://localhost:8080/sdata/testsyfrewf/myProcessus/testmethode Request: { "pString":"value1", "pInteger":1, "pFloat":1.2, "pEnum":1, "pBoolean":false } Response: 200 OK { "result": "pString:value1 pInteger:1 pBoolean:false pFloat:1,2 pEnum:1" }
Les paramètres sont passés par nom et valeur.
Les types de paramètres et de retour supportés sont :
Type | Exemple |
---|---|
Chaîne | "p":"xxx" |
Entier | "p":1 |
Boolean | "p":true |
Flottant | "p":1.1 |
Datetime | "p":"2020-12-25T01:01:01" |
Enuméré (par valeur) | "p":1 |
Requête Batch (POST $batch)
Une requête Batch permet de réaliser plusieurs opérations de type POST/PUT/DELETE en une seule fois.
Une requête Batch contient un tableau de ressources, pour chaque ressource l'action et l'uri doivent être précisées :
POST http://.../sdata/$batch { "$resources":[ { "$httpMethod":"POST", "$url":"gentiers/ttiers", "code":"SYFRE2", "caption":"syfre 2", "sitesList":[ { "code":"SITE1", "caption":"site2 de syfre2", "adresse":{ "nomRueVoie":"rue de la pompe", "ville":"Clichy", "codePostal":"92100", "pays":{ "$where":"codeISO = 'FRA'", "$orderby":"codeISO" } } } ] } ] }
Par défaut les opérations réalisées sont unitaires (une transaction par ressource).
Schéma d'une ressource (GET $schema)
Le schéma d'une ressource retourne la structure de la classe.
GET http://localhost:8080/sdata/testsyfrewf/wfclassea/$schema Response : 200 OK { "title": "Libellé de la Classe A", "properties": { "unBool": { "type": "boolean", "title": "Un Bool" }, "unCode": { "type": "string", "title": "Un code" }, "unCompteur": { "type": "string" }, "unDerive": { "type": "string", "title": "Un dérivé" }, "unDouble": { "type": "double", "title": "Un double" }, "uneChaine": { "type": "string", "title": "une chaine" }, "unEmail": { "type": "string", "title": "Un email" }, "unEntier": { "type": "int", "title": "Un Entier" }, "unEtat": { "type": "integer", "title": "Un Etat" }, "unStatus": { "type": "int", "title": "Statut de l'objet (Panel)" }, "WFClasseBRef": { "type": { "$ref": "http://localhost:8080/sdata/l1000/testsyfrewf/-/WFClasseB/$schema", "$relationship": "reference" }, "title": "Référence B" }, "WFClasseCList": { "type": "array", "item": { "title": "Classe C", "properties": { "uneChaine": { "type": "string", "title": "une chaine" }, "unEntier": { "type": "int", "title": "un entier" } } } } }, "$url": "http://localhost:8080/sdata/l1000/testsyfrewf/-/WFClasseA/$schema" }