Présentation

Les propriétés de navigation permettent de définir les relations entre les différentes ressources. C’est donc par le biais de ces propriétés qu’il sera possible d’associer une écriture à un journal, un compte général, etc. ou encore associer un compte principal et une devise à un client.

Ces relations peuvent être de deux natures :

IMPORTANT : Ne pas confondre les propriétés de relation qui permettent d’accéder à une ressource ou une collection de ressources, avec les propriétés permettant d’accéder à une sous ressource ou une collection de sous ressources.

Une ressource est un élément pour lequel il existe une route de base permettant d’y accéder directement.

Exemple : les éléments suivants sont des ressources :

  • Comptes : /comptes('{idCompte}')
  • Clients : /clients('{idClient}')
  • Taxes : /taxes('{idTaxe}')
  • Ecritures : /ecritures('{idEcriture}')

Une sous ressource est un élément pour lequel la route permettant d’y accéder nécessite impérativement de renseigner la ressource parente.

Exemple : les éléments suivants sont des sous ressources :

  • Collection des conditions de paiement d’un client : /clients('{idClient}')/reglements
  • Une condition de paiement d’un client : /clients('{idClient}')/reglements('{idReglement}')
  • Registre de taxe d’une écriture : /ecritures('{idEcriture}')/registreTaxe

Relation simple (single-valued navigation)

Ce type de relation correspond aux relations de type 1..1 et 1..?.

Certaines propriétés sont identifiées dans le manuel de référence de l’API par un type single-value navigation. Ce type indique que la propriété est en lien unique avec une ressource.

Exemple :

  • la propriété comptePrincipal de la ressource clients est de type 1..1, puisqu’un client doit obligatoirement être associé à un compte général.
  • Par contre, la propriété devise de la ressource clients est de type 1..?, puisqu’un client peut être associé à une devise, mais ce n’est pas obligatoire.

Relation avec une collection (collection-valued navigation)

Il s’agit d’une relation de type 1..+ ou 1..*

Exemple :

  • une ressource clients ou une ressource taxes peut être associée à une collection de comptes généraux : propriété comptes sur la ressource clients, propriété comptesHT sur la ressource taxes.

Manipulation des relations

Les méthodes de sélection, affectation ou de suppression des relations diffèrent suivant la nature de la relation.

Cependant, quel que soit le type de relation, pour les opérations d’affectation (POST, PUT et PATCH), la valeur qui devra être affectée à la propriété de relation correspondra toujours au lien de référence de la ressource à associer.

Ce lien de référence correspond à l’url permettant d’accéder directement à une ressource, elle est codifiée de la manière suivante : {url API}/{datasetId}/{ressource}(‘{id ressource}’)

Exemple :

  • Pour un compte général dont l’id est {id compte}, l’url de référence sera sous la forme :
    {url API}/{datasetId}/comptes(‘{id compte}’)

Relation simple

Lecture

D’une manière générale, pour toutes les propriétés de relation, une route spécifique permettant d’accéder aux données est publiée.

Exemple : pour récupérer les données du compte principal d’un client, il sera possible d’utiliser :

{url API}/{datasetId}/clients('{id client}')/comptePrincipal

Il existe cependant une autre méthode permettant de récupérer ces données. Elle consiste à utiliser le paramètre $expand dans la route de la ressource parente de la propriété de relation.
Le résultat retournera le détail des informations de la ressource parente (clients dans notre exemple), avec en plus le détail de la ressource associée (comptePrincipal dans notre exemple).

Ainsi, pour récupérer les informations du compte principal d’un client on pourrait utiliser :

{url API}/{datasetId}/clients('{id client}')?$expand=comptePrincipal

Enfin, il existe une route permettant de récupérer directement l’url de référence de la propriété de relation. Celle-ci se termine avec l’extension $ref.

Exemple :

{url API}/{datasetId}/clients('{id client}')/comptePrincipal/$ref

Affectation

Sur les propriétés permettant une relation simple, pour exécuter des opérations d’ajout ou modification de données (POST, PUT ou PATCH), il faudra affecter l’url de référence en utilisant la syntaxe :
propriété@odata.bind à affecter avec l’url de référence de la ressource à associer.

Exemple : pour affecter la propriété comptePrincipal de la ressource clients, dans le corps de la requête il faudra affecter la propriété comptePrincipal de la manière suivante :
[email protected] avec {url API}/{datasetId}/comptes(‘{id compte}’)/comptePrincipal

Création

Lors de la création, les propriétés permettant une relation simple seront à affecter au même niveau que les autres propriétés.

Exemple : Pour créer un client en affectant en même temps le compte principal et la devise, la requête à exécuter pourra être la suivante :

{url API}/{datasetId}/clients
{
    "sommeil": false,
    "commentaire": "",
    "siret": "",
    "identifiant": "FR373087844356",
    "ape": "95.25Z",
    "contact": "Jean-claude BERTAU",
    "classement": "Bertau S.a.r.l",
    "qualite": "Société",
    "intitule": "Client Bertau",
    "type": "Client",
    "numero": "BERTAU",
    "encoursMaximum": 100000.0,
    "nonSoumisPenalites": false,
    "modeCtrlEncours": "Automatique",
    "adresse": {
        "complement": "BP 14",
        "codePostal": "44000",
        "adresse": "144, route de la soie",
        "ville": "NANTES",
        "codeRegion": "",
        "pays": "France"
    },
    "telecom": {
        "telephone": "02 40 48 67 95",
        "telecopie": "02 40 48 67 90",
        "eMail": "",
        "site": ""
    },
    "[email protected]": "{url API}/{datasetId}/comptes('{id compte}')",
    "[email protected]": "{url API}/{datasetId}/devises('{id devise}')"
}
Modification

Pour modifier une propriété de relation, comme pour le cas du POST, il faudra utiliser la syntaxe propriété@odata.bind.

Exemple de modification partielle d’un client :

{url API}/{datasetId}/clients('id client')
{
    "commentaire": "Client à contacter",
    "[email protected]":"{url API}/{datasetId}/comptes('{id compte}')"
}
Suppression

La suppression d’une relation simple n’est possible que pour les propriétés de relation de type 1..?.
Comme pour les routes permettant la sélection, il existe une route spécifique permettant de supprimer la relation. Ces routes sont de type DELETE et se terminent par l’extension $ref.

Exemple : pour supprimer la relation d’un client avec une devise, il faudra exécuter la requête suivante :

{url API}/{datasetId}/clients('{id client}')/devise/$ref

Relation avec une collection de ressources

Lecture

Pour les propriétés de relation avec une collection de ressources, il existe deux types de route de sélection :

IMPORTANT : La commande $expand n’est utilisable que pour les propriétés de relation simple. Son utilisation sur une propriété retournant une collection n’est pas autorisée.

Exemple Pour récupérer la liste des comptes généraux associés à un client :

{url API}/{datasetId}/clients('{id client}')/comptes

renverra par exemple :

"@odata.context": "{url API}/{datasetId}/$metadata#comptes",
"value": [
    {
        "sommeil": false,
        "optDevise": true,
        "optTiers": true,
        "optEcheance": true,
        "report": "Detail",
        "classement": "Collectif clients",
        "intitule": "Collectif clients",
        "type": "Detail",
        "numero": "4110000",
        "dateModification": "2020-02-03T00:00:00Z",
        "dateCreation": "2020-04-08T09:00:11Z",
        "id": "{id compte 411000}"
    },
    {
        "sommeil": false,
        "optDevise": true,
        "optTiers": true,
        "optEcheance": true,
        "report": "Detail",
        "classement": "Collectif client-",
        "intitule": "Collectif client-effets à recevoir",
        "type": "Detail",
        "numero": "4130000",
        "dateModification": "2019-02-05T00:00:00Z",
        "dateCreation": "2020-04-08T09:00:11Z",
        "id": "{id compte 413000}"
    }
]
}

Pour récupérer la liste des références des comptes généraux associés au même client :

{url API}/{datasetId}/clients('{id client}')/comptes/$ref

renverra par exemple :

{
    "@odata.context": "{url API}/{datasetId}/$metadata#Collection($ref)",
    "value": [
        {
            "@odata.id": "{url API}/{datasetId}/comptes('{id compte 4110000}')"
        },
        {
            "@odata.id": "{url API}/{datasetId}/comptes('{id compte 4130000}')"
        }
    ]
}

Affectation

Ce type de collection ne peut contenir qu’une liste de ressources existantes (ressources comptes par exemple).

Ainsi il n’est pas possible de modifier directement ce type de ressource dans la collection de relations. Il n’existe donc pas de requête PUT ou PATCH pour ce type de propriété.

De la même manière, l’ajout d’un élément dans la collection permet d’ajouter un lien de référence vers une ressource existante, ça ne permet donc pas de créer une nouvelle ressource.

Exemple : pour ajouter une relation avec un autre compte dans la liste des comptes généraux associés à un client, il faudra exécuter une requête du type :

{url API}/{datasetId}/clients('{id client}')/comptes/$ref
{
  "@odata.id":"{url API}/{datasetId}/comptes({id compte})"
}
Suppression

Pour supprimer un élément dans la collection (requête de type DELETE), il faudra spécifier l’url de référence de l’élément à supprimer dans la collection.
Pour ce faire, il faudra également utiliser la syntaxe : @odata.id

Exemple : pour ajouter une relation avec un autre compte dans la liste des comptes généraux associés à un client, il faudra exécuter une requête du type :

{url API}/{datasetId}/clients('{id client}')/comptes/$ref
{
  "@odata.id":"{url API}/{datasetId}/comptes({id compte})"
}