Récupérer une liste d'enregistrements

Récupérer une liste d'enregistrements

Depuis une recherche YellowBox

Il est possible de définir des recherches dans YellowBox sous forme de critères ou SQL. Pour récupérer l’id d’une recherche, il faut se rendre sur une fiche recherche dans le paramétrage en déroulant le sous menu “Ecrans et structure” puis en cliquant sur “Recherches”.
Il est également possible de récupérer l’ensemble des recherches d’une table en utilisant le service /search permettant ainsi de connaître l’id de la recherche voulue.

Pour récupérer un ensemble d’enregistrements de YellowBox depuis un id de recherche, il faut utiliser le service /record/v3/search.

Un record correspond à un enregistrement d’une table dans YellowBox.

Un record décrivant un enregistrement des tables sociétés, contact ou action comprendra un tableau contenant deux linkedRecords. Ces records liés contiendront les données des tables principalement liées au record principal.

Dans le cas de la table société, le premier linkedRecord contiendra les données du contact principale, le deuxième, celles de l’addresse principale.

Dans le cas de la table contact, le premier linkedRecord contiendra les données de la société à laquelle il est lié, le deuxième, celles de son addresse principale.

Dans le cas d’une action, le premier linkedRecord contiendra les données de la société à laquelle il est lié, le deuxième, celles de son contact principal.

Les id des champs de la table adresse renseignés dans le linkedRecord seront toujours préfixés, par un ’s’ si le record principal est une société, par un ‘c’ s’il s’agit d’un contact.

Il faut effectuer une requête POST à l’url https://<yellowbox_url>/record/v3/search avec en body un objet JSON QueryPage. Cet objet est décrit dans la documentation Swagger comme suit :

{
  "idSearch": "string",
  "varReffiche": "string",
  "fields": [
    {
      "id": "string",
      "name": "string",
      "dbName": "string",
      "keywordListId": "string",
      "fieldType": "ALPHANUMERIQUE",
      "linkedTableId": "string",
      "linkedFieldId": "string"
    }
  ],
  "includeAllFields": false,
  "pageable": {
    "pageNumber": 0,
    "pageSize": 0
  }
}

idSearch correspond à l’id de la recherche.

varreffiche correspond à une référence de fiche (record) dans le cas où l’on souhaite récupérer une liste d’enregistrements basés sur la recherche sélectionnée, et limitée aux fiches liées à cette fiche de départ.

fields correspond à une liste d’objets Field

includeAllFields permet de récupérer tous les champs disponibles du record et de son record principalement lié. Il n’est alors pas nécessaire de définir les fields

L’objet pageable est composé d’un pageNumber permettant d’indiquer quelle page l’on souhaite obtenir et d’un pageSize qui permet d’indiquer la taille des pages.

Si le pageNumber est à 0, cela correspond à la page 1.

Par défaut, ces deux dernières valeurs sont à 0 et le service renvoie 100 enregistrements. Le service renvoie au maximum 1000 enregistrements.

Exemple

Pour récupérer le 1 premier enregistrement de la recherche 5 avecc tous les champs, le body de la requête sera :

{
  "idSearch": "5",
  
  "includeAllFields": true,
  "pageable": {
    "pageNumber": 1,
    "pageSize": 1
  }
}

Pour récupérer le suivant, il faudra passer le pageNumber à 2.

L’objet récupéré est un objet Page constitué :

content représente une liste de record

nbSelection fournit le nombre de record retournés

page représente l’objet Pageable correspondant le numéro de la page et le nombre d’élements demandés.

Exemple

{
  "content": [
    {
      "editable": true,
      "id": "24762",
      "linkedRecords": [
        {
          "calculated": false,
          "fieldId": "116",
          "idRecord": "",
          "record": {
            "editable": true,
            "id": "",
            "linkedRecords": [],
            "table": {
              "id": "104",
              "name": "societe"
            },
            "values": []
          }
        },
        {
          "calculated": true,
          "fieldId": "127",
          "idRecord": "28301",
          "record": {
            "editable": true,
            "id": "28301",
            "linkedRecords": [],
            "table": {
              "id": "68",
              "name": "contact"
            },
            "values": [
              {
                "field": {
                  "dbName": "ID_ELEMENT",
                  "fieldType": "ALPHANUMERIQUE",
                  "id": "70",
                  "keywordListId": "",
                  "linkedFieldId": "",
                  "linkedTableId": "",
                  "name": "idElement"
                },
                "operator": "EQUAL",
                "value": "28301"
              },
              {
                "field": {
                  "dbName": "NOM_COMPLET",
                  "fieldType": "ALPHANUMERIQUE",
                  "id": "74",
                  "keywordListId": "",
                  "linkedFieldId": "",
                  "linkedTableId": "",
                  "name": "Nom complet"
                },
                "operator": "EQUAL",
                "value": "Monsieur Olivier ACIEN"
              },
              {
                "field": {
                  "dbName": "ID_GESTIONNAIRE",
                  "fieldType": "IDUTILISATEUR",
                  "id": "87",
                  "keywordListId": "",
                  "linkedFieldId": "",
                  "linkedTableId": "",
                  "name": "Gestionnaire"
                },
                "operator": "EQUAL",
                "value": "14707"
              },
              {
                "field": {
                  "dbName": "NOM",
                  "fieldType": "ALPHANUMERIQUE",
                  "id": "72",
                  "keywordListId": "",
                  "linkedFieldId": "",
                  "linkedTableId": "",
                  "name": "Nom"
                },
                "operator": "EQUAL",
                "value": "ACIEN"
              },
              ....................
            ]
          }
        },
        {
          "calculated": true,
          "fieldId": "adresse",
          "idRecord": "7093",
          "record": {
            "editable": true,
            "id": "7093",
            "linkedRecords": [],
            "table": {
              "id": "9",
              "name": "adresse"
            },
            "values": [
              {
                "field": {
                  "dbName": "ADRESSECOMPLETE",
                  "fieldType": "ALPHANUMERIQUE",
                  "id": "s156",
                  "keywordListId": "",
                  "linkedFieldId": "",
                  "linkedTableId": "",
                  "name": "Adresse complète"
                },
                "operator": "EQUAL",
                "value": "77, Avenue des Lilas\r\n\r\n\r\n 64000 PAU France"
              },
              ...........
            ]
          }
        }
      ],
      "table": {
        "id": "104",
        "name": "societe"
      },
      "values": [
        {
          "field": {
            "dbName": "CREATEUR",
            "fieldType": "IDUTILISATEUR",
            "id": "5397",
            "keywordListId": "",
            "linkedFieldId": "",
            "linkedTableId": "",
            "name": "Créateur"
          },
          "operator": "EQUAL",
          "value": "2"
        },
        {
          "field": {
            "dbName": "ID_ELEMENT",
            "fieldType": "ALPHANUMERIQUE",
            "id": "106",
            "keywordListId": "",
            "linkedFieldId": "",
            "linkedTableId": "",
            "name": "idElement"
          },
          "operator": "EQUAL",
          "value": "24762"
        },
        {
          "field": {
            "dbName": "TYPECOMMERCIAL",
            "fieldType": "ALPHANUMERIQUE",
            "id": "112",
            "keywordListId": "7",
            "linkedFieldId": "",
            "linkedTableId": "",
            "name": "Type"
          },
          "operator": "EQUAL",
          "value": "Client"
        },
        {
          "field": {
            "dbName": "ID_GESTIONNAIRE",
            "fieldType": "IDUTILISATEUR",
            "id": "126",
            "keywordListId": "",
            "linkedFieldId": "",
            "linkedTableId": "",
            "name": "Gestionnaire"
          },
          "operator": "EQUAL",
          "value": "14706"
        },
        ......................
      ]
    }
  ],
  "nbSelection": 1,
  "page": {
    "pageNumber": 1,
    "pageSize": 1
  }
}

Depuis une association de champ valeur

Il est possible de définir une recherche à partir de champs et de valeurs directement depuis un service. Pour ce faire, il faut utiliser le service /record/v3/searchvalues.
Il faut effectuer une requête POST à l’url https://<yellowbox_url>/record/v3/searchvalues avec en body un objet JSON SearchValues, un un objet fields et un objet Pageable. Ces objets sont décrits dans la documentation Swagger comme suit :

{
  "searchValues": {
    "table": {
      "id": "string",
      "name": "string"
    },
    "values": [
      {
        "field": {
          "id": "string",
          "name": "string",
          "dbName": "string",
          "keywordListId": "string",
          "fieldType": "ALPHANUMERIQUE",
          "linkedTableId": "string",
          "linkedFieldId": "string"
        },
        "value": "string",
        "operator": "EQUAL"
      }
    ]
  },
  "pageable": {
    "pageNumber": 0,
    "pageSize": 0
  },
  "fields": [
    {
      "id": "string",
      "name": "string",
      "dbName": "string",
      "keywordListId": "string",
      "fieldType": "ALPHANUMERIQUE",
      "linkedTableId": "string",
      "linkedFieldId": "string"
    }
  ],
  "includeAllFields": false
}

L’objet SearchValues est composé d’un objet Table et d’une liste de Value.
Une value est une association champ / valeur.

Operator peut prendre les valeurs suivantes :

  • EQUAL
  • NOTEQUAL
  • GREATER
  • GREATEROREQUAL
  • LESS
  • LESSOREQUAL

Spécificités du critère sur champ ‘date’ La définition de la valeur d’un critère sur un champ de type date peut prendre la forme suivante :

  • periode.egalvide
  • periode.differentdevide
  • x#periode.inferieurxjour où x est le nombre de jours
  • x#periode.superieurxjour où x est le nombre de jours
  • periode.anneeencours
  • periode.anneeprochaine
  • periode.anneederniere
  • periode.semaineencours
  • periode.semaineprochaine
  • periode.semainederniere
  • periode.apresdatedujour
  • periode.avantdatedujour
  • periode.moisencours
  • periode.moisprochain
  • periode.moisprecedent
  • periode.aujourdhui
  • periode.hier
  • periode.demain
  • x#periode.egaldateplusxjour où x est le nombre de jours
  • aaaammdd#aaaammdd#periode.definir les deux dates saisies fournissant l’intervalle de recherche

Pour ces cas, peut importe l’opérateur, il ne sera pas pris en compte. Le format de date aaaa-mm-dd hh:mm:ss.n est accepté. Il ne tiendra pas compte des heures. Il devra être utilisé avec l’opérateur LESS ou GREATER. Néanmoins, l’opérateur LESSOREQUAL sera traité comme LESS, GREATER comme GREATEROREQUAL.

Exemple

Pour rechercher l’ensemble des sociétés de YellowBox dont l’activité est égal à “Enseignant”, le body de la requête sera :

{
  "searchValues": {
    "table": {
      "id": "104",
      "name": "societe"
    },
    "values": [
      {
        "field": {
          "id": "261",
          "name": "C261Activit",
          "dbName": "C261ACTIVIT",
          "fieldType": "ALPHANUMERIQUE"
        },
        "value": "Enseignant",
        "operator": "EQUAL"
      }
    ]
  },
  "pageable": {
    "pageNumber": 0,
    "pageSize": 0
  },
  "includeAllFields": true
}

Le pageNumber et le pageSize étant à 0, on va récupérer les 100 premiers enregistrements.

Récupérer un ensemble d’enregistrements lié à un enregistrement

Il est possible de récupérer un ensemble d’enregistrements liés à un enregistrement. Pour ce faire, il faut utiliser le service /record/v3/linktable.
Il faut effectuer une requête POST à l’url https://<yellowbox_url>/record/v3/linktable avec en body un objet JSON décrit dans la documentation Swagger comme suit :

{
  "idElement": "string",
  "idTableElement": "string",
  "idTableLink": "string",
  "fields": [
    {
      "id": "string",
      "name": "string",
      "dbName": "string",
      "keywordListId": "string",
      "fieldType": "ALPHANUMERIQUE",
      "linkedTableId": "string",
      "linkedFieldId": "string"
    }
  ],
  "includeAllFields": false,
  "pageable": {
    "pageNumber": 0,
    "pageSize": 0
  }
}

idElement correspond à l’id de l’enregistrement principal.
idTableElement correspond à l’id de la table de l’enregistrement principal.
idTableLink correspond à l’id de la table liée.
L’objet pageable est décrit précédemment.

Exemple

Pour rechercher l’ensemble des contacts liés à la societe dont l’id est 24762, le body de la requête sera :

{
  "idElement": "24762",
  "idTableElement": "104",
  "idTableLink": "68",
  "pageable": {
    "pageNumber": 0,
    "pageSize": 0
  },
  "includeAllFields": true
}

Récupérer un enregistrement issu d’un champ type table de l’enregistrement sélectionné

Il est possible de récupérer un enregistrement correspondant la fiche du champ type table donné en paramètre de l’enregistrement sélectionné. Pour ce faire, il faut utiliser le service /record/v3/linkfield.
Il faut effectuer une requête POST à l’url https://<yellowbox_url>/record/v3/linkfield avec en body un objet JSON décrit dans la documentation Swagger comme suit :

{
  {
  "idRecord": "string",
  "tableFieldId": "string",
  "fields": [
    {
      "id": "string",
      "name": "string",
      "dbName": "string",
      "keywordListId": "string",
      "fieldType": "ALPHANUMERIQUE",
      "linkedTableId": "string",
      "linkedFieldId": "string"
    }
  ],
  "includeAllFields": false
}

idRecord correspond à l’id de l’enregistrement principal.
tableFieldId correspond à l’id du champ type table dont on veut récuéprer le record correspondant à la valeur de ce champ

Exemple

Pour rechercher le nom du contact principal (champ id_contactdefaut d’id 127) de la société dont l’id est 25425, le body de la requête sera :

{
  "idRecord": "25425",
  "tableFieldId": "127",
  "fields": [
    {
      "id": "72",
      "name": "string",
      "dbName": "string",
      "keywordListId": "string",
      "fieldType": "ALPHANUMERIQUE",
      "linkedTableId": "string",
      "linkedFieldId": "string"
    }
  ],
  "includeAllFields": false
}

Le résultat sera :

{
  "editable": true,
  "id": "29710",
  "linkedRecords": [],
  "table": {
    "id": "68",
    "name": "contact"
  },
  "values": [
    {
      "field": {
        "dbName": "NOM",
        "fieldType": "ALPHANUMERIQUE",
        "id": "72",
        "keywordListId": "",
        "linkedFieldId": "",
        "linkedTableId": "",
        "name": "Nom"
      },
      "operator": "EQUAL",
      "value": "GUILLAUDIN"
    }
  ]
}