Cette page présente quelques services web permettant d'interagir avec EzGED.
Le retour se fait au format JSON.
La liste n'est pas exhaustive et prend la forme d'un ensemble de tutoriaux.
===== Gestion de la connexion =====
==== S'authentifier ====
C'est la première étape. Il nous faut obtenir un id de session EzGED.
Le login : admin\\
Le mot de passe : admin\\
Le mot de passe doit être envoyé haché en md5 ce qui donne pour //admin// : 21232f297a57a5a743894a0e4a801fc3
=== URL ===
POST /data/service.php?service=sec/authenticate
**Content-type:** application/x-www-form-urlencoded
=== Paramètres ===
* **login**: le login avec lequel s'authentifier
* **pwd**: le mot de passe (haché avec MD5)
=== Exemple ===
| **Paramètre** | **Valeur** |
| login| admin|
| pwd | 21232f297a57a5a743894a0e4a801fc3 |
Réponse:
{
"errorcode": 0,
"errormsg": "You're authenticated !",
"rows": {
"SECUSRPAR_LANG": "fr_FR",
"SECUSRPAR_FMTFLOAT": "xx3xx,xxxx",
....
....
"SECUSRPAR_TOOLBARRIGHT": "1",
"sessionid": "640418229",
"IHMVERSION": 0,
"URLADMIN": "http://localhost/ezged33/data/../apps/administration",
"LOGODIST": "resources/images/distributeur.jpg",
"URLDIST": "http://www.ezged.com",
"ACTIVATE_OLDDASHBOARD": 0,
"ACTIVATE_PREVIEWDASHBOARD": null,
"URLDOC": "resources/doc/manuel_utilisateur_v3.pdf"
}
}
Il s'agit d'un aperçu de la réponse, l'élément le plus important est l'identifiant de session **sessionid**
==== Maintenir la connexion ====
La connexion est maintenue 60 secondes. Au-delà si aucun appel à un service n'est effectué sur cette session elle est supprimée. Si l'on souhaite maintenir la connexion il existe un service dédié à cela que voici:
http://localhost/ezged3/data/service.php?service=secses/keepalive
Paramètres:
* **sessionid**: l'identifiant de la session ezged à maintenir ouverte.
{
"rows": [{
"type" : "keepalive",
"countsignbook" : "0",
"countcorrection" : "0",
"counttrash" : "0",
"countmessage" : "0",
"countworkflow" : "0"
}],
"errorcode":0,"errormsg":"Ok","count":0
}
Si le service retourne sans erreur, il renvoi également quelques informations sur l'état de la ged de l'utilisateur:
* countsignbook indique le nombre de tâches en attente dans le parapheur.
* countcorrection indique le nombre d'éléments à corriger dans le centre d'indexation.
* counttrash indique le nombre d'éléments dans la corbeille.
* countmessage indique le nombre de message dans la bannette.
* countworkflow indique le nombre de tâches en attente dans le workflow.
==== Se déconnecter ====
Service à appeler :
http://localhost/ezged3/data/service.php?service=secses/delete?sessionid=414034936
Le retour :
{
"errorcode" : 0,
"errormsg" : "Success logout"
}
===== Consultation et visualisation =====
Nous allons dans ce tutoriel voir comment utiliser les web services pour
1 - Se connecter à EzGED.
2 - Lister les vues/requêtes disponible pour le compte utilisé.
4 - Obtenir toutes les lignes retournées par une requête.
5 - Afficher la liste des fichiers d'une fiche (i.e une ligne).
6 - Visualiser un fichier.
Structure de la table courriers utilisée pour ce tutoriel :
^ CHAMP ^
| COURRIERS_ID |
| COURRIERS_DATE |
| COURRIERS_OBJET |
| COURRIERS_FROM |
| COURRIERS_TO |
==== S'authentifier ====
[[#s_authentifier | Voir le tutoriel précédent]].
==== Lister les vues de l'utilisateur ====
http://localhost/ezged3/data/service.php/?service=query/gettreearchive
{
"rows":[
{
"type":"queries",
"label":"CLASSEURS",
"rows":[
{
"type":"family",
"QRYSET_DESC":"Courriers",
"QRYSET_ID":"1",
"rows":[
{
"type":"query",
"QRY_ASK":"0",
"QRY_ID":"2",
"QRY_DESC":"Courriers à corriger",
"QRY_RANK":"20",
"QRY_PUBCNTCOR":"1",
"QRY_TREE":"0"
}
]
}
]
}
],
"errorcode":0,
"errormsg":"Ok",
"count":0
}
Nous avons ici un classeur **Courrier** et dans ce classeur une vue **Courriers à corriger**.\\
La clé primaire pour un classeur est composée du champ QRYSET_ID.\\
La clé primaire pour une vue/requête est composée du champ QRY_ID\\
Elles ont ici pour valeurs respectives 1 et 2.
==== Afficher les résultats d'une vue ====
http://localhost/ezged3/data/service.php?service=query/getexec&qryid=2&limitstart=0&limitgridlines=20
* qryid : Identifiant de la requête.
* limitgridlines : permet de limiter le nombre de résultats retournés.
* limitstart :
{
"rows":[
{
"type":"row",
"COURRIERS_FROM":"florian@ezdev.fr",
"COURRIERS_ID":"107",
"COURRIERS_DATE":"2015-01-20 16:47:19",
"COURRIERS_TO":"tech@ezdev.Fr",
"COURRIERS_OBJET":"MAJ EzGED disponible"
},
{
"type":"row",
"COURRIERS_FROM":"florian",
"COURRIERS_ID":"106",
"COURRIERS_DATE":"2014-11-18 11:26:00",
"COURRIERS_TO":"contact@cogip.com",
"COURRIERS_OBJET":"Rapport intervention"
}
],
"errorcode":0,
"errormsg":"ok",
"count":2
}
==== Rechercher sur une Vue ====
=== URL ===
GET /data/service.php?service=query/getexec
=== Paramètres ===
* **sessionid**: Identifiant de session EzGED
* **qryid** : Identifiant de la requête/vue.
* **qryusrffqn** : Nom de champ sur lequel filtrer
* **qryusrop** : Type d'opérateur (**=**, **>=**, **%%<=%%**, **like**, **in**).
* **qryusrval** : Valeur à rechercher.
* **limitgridlines** : permet de limiter le nombre de résultats retournés.
* **limitstart** : index de départ pour les résultats à retourner
N.b: les paramètres *qryusrffqn*, *qryusrop* et *qryusrval* acceptent des listes
afin d'effectuer un filtrage sur plusieurs champs de la requête. Le champ, l'opérateur et la valeur doivent être à la même position dans leurs listes respectives.
=== Exemple 1===
| **Paramètre** | **Valeur** |
| sessionid | 1607761151|
| qryid | 675 |
| qryusrffqn | ["lstdosone.LSTDOSONE_LIB","one.ONE_LIB"] |
| qryusrop | ["=","="] |
| qryusrval | ["Client","Inconnu"] |
Url d'appel :
http://localhost/ezged/data/service.php?service=query/getexec&sessionid=1607761151&qryid=675&qryusrffqn=["lstdosone.LSTDOSONE_LIB","one.ONE_LIB"]&qryusrop=["=","="]&qryusrval=["Client","Inconnu"]
Réponse:
{
"errorcode": 0,
"errormsg": "ok",
"rows": [
{
"ONE_FLAG": 0,
"ONE_DATE": "2022-01-14 16:54:42",
"ONE_ID": 580,
"LSTTIERSONE_LIB": null,
"LSTTYPDOCONE_LIB": null,
"LSTDOSONE_LIB": "Client",
"year(one.ONE_DATE)": 2022,
"type": "row",
"ONE_TEXTE": "",
"ONE_LIB": "inconnu"
}
],
"count": 1
}
=== Exemple 2===
Recherche avec opérateur IN sur le champ ONE_LIB
| **Paramètre** | **Valeur** |
| sessionid | 1607761151|
| qryid | 675 |
| qryusrffqn | ["lstdosone.LSTDOSONE_LIB","one.ONE_LIB"] |
| qryusrop | ["=","in"] |
| qryusrval | ["Client","Inconnu,test"] |
Url d'appel :
http://localhost/ezged/data/service.php?service=query/getexec&sessionid=1607761151&qryid=675&qryusrffqn=["lstdosone.LSTDOSONE_LIB","one.ONE_LIB"]&qryusrop=["=","in"]&qryusrval=["Client","Inconnu,test"]
Réponse:
{
"count": 2,
"errorcode": 0,
"errormsg": "ok",
"rows": [
{
"LSTDOSONE_LIB": "Client",
"ONE_DATE": "2022-01-14 16:54:42",
"ONE_FLAG": 0,
"ONE_ID": 580,
"ONE_LIB": "inconnu",
"type": "row"
},
{
"LSTDOSONE_LIB": "Client",
"ONE_DATE": "2019-07-30 10:02:30",
"ONE_FLAG": 0,
"ONE_ID": 41,
"ONE_LIB": "test",
"type": "row"
}
]
}
==== Recherche Globale ====
http://localhost/ezged3/data/service.php?service=query/globalsearch_v3&word=["facture","test"]&usrfltmode=1&gridlines=100
* word: la liste des mots à rechercher
* usrfltmode : Si passé avec la valeur 1, ne recherche que sur les requêtes qui sont dans le filtre de l'utilisateur.
* gridlines : Nombre de lignes max retournées par le service.
La réponse est composée de deux types d'éléments:
* family : les classeurs.
* gsearch: les lignes de résultats.
Les éléments de types de gsearch suivent toujours l'élément family dont ils sont les enfants.
Exemple de retour:
{
"rows" : [{
"type" : "family",
"COUNT" : "1",
"QRY_PUBCNTCOR" : "0",
"QRY_DESC" : "Tous les courriers",
"QRY_ID" : "653",
"QRY_MAINFFQN" : "courriers.COURRIERS_ID"
}, {
"type" : "gsearch",
"RSID" : "1",
"QRY_DESC" : "Tous les courriers",
"QRY_ID" : "653",
"FFQN" : "courriers.COURRIERS_ID",
"DESC" : "ID<\/b> : 1, DATE<\/b> : 2016-11-09 00:00:00, OBJET<\/b> : Classe de Neige, FULLTEXT<\/b> : facture test<\/font> "
}, {
"type" : "gsearch",
"RSID" : "1",
"QRY_DESC" : "Tous les courriers",
"QRY_ID" : "654",
"FFQN" : "courriers.COURRIERS_ID",
"DESC" : "ID<\/b> : 1, DATE<\/b> : 2017-11-09 00:00:00, OBJET<\/b> : Classe de Neige, FULLTEXT<\/b> : facture test<\/font> "
}, {
"type" : "family",
"COUNT" : "1",
"QRY_PUBCNTCOR" : "0",
"QRY_DESC" : "client1___devis",
"QRY_ID" : "658",
"QRY_MAINFFQN" : "client1___devis.CLIENT1___DEVIS_ID"
}, {
"type" : "gsearch",
"RSID" : "1",
"QRY_DESC" : "client1___devis",
"QRY_ID" : "658",
"FFQN" : "client1___devis.CLIENT1___DEVIS_ID",
"DESC" : "Dossier<\/b> : Dossier1, Titre<\/b> : Test<\/font>, Recherche<\/b> : facture<\/font> "
}, {
"type" : "family",
"COUNT" : "1",
"QRY_PUBCNTCOR" : "0",
"QRY_DESC" : "client1___devis Test",
"QRY_ID" : "666",
"QRY_MAINFFQN" : "client1___devis.CLIENT1___DEVIS_ID"
}, {
"type" : "gsearch",
"RSID" : "1",
"QRY_DESC" : "client1___devis Test",
"QRY_ID" : "666",
"FFQN" : "client1___devis.CLIENT1___DEVIS_ID",
"DESC" : "Merge<\/b> : Oui, Dossier<\/b> : Dossier1, Titre<\/b> : Test<\/font>, Recherche<\/b> : facture<\/font> "
}, {
"type" : "family",
"COUNT" : "1",
"QRY_PUBCNTCOR" : "1",
"QRY_DESC" : "Toutes les factures client",
"QRY_ID" : "623",
"QRY_MAINFFQN" : "facture.FACTURE_ID"
}, {
"type" : "gsearch",
"RSID" : "9",
"QRY_DESC" : "Toutes les factures client",
"QRY_ID" : "623",
"FFQN" : "facture.FACTURE_ID",
"DESC" : "ID<\/b> : 9, NUMERO<\/b> : 0, CLIENT_NOM<\/b> : Agro Discount, FULLTEXT<\/b> : facture test<\/font> "
}
],
"errorcode" : 0,
"errormsg" : "ok",
"count" : 977
}
==== Lister les fichiers ====
http://localhost/ezged3/data/service.php?service=docpak/loadalllastrevision&fsfileinfo=1&docpakrsid=107&docpaktbl=courriers&docpakpage=*&limitstart=0&limitgridlines=10
* docpakpage : * pour avoir toutes les pages
* docpakrsid : Le RSID de l'enregistrement (i.e ici la valeur de COURRIERS_ID )
* docpaktbl : Le nom de la table.
* fsfileinfo : Passer à 1 pour indiquer au service de retourner les informations du fichier.
{
"rows":[
{
"datefilearchive":"2015-01-23 15:27:23",
"oname":"loremipsum.pdf",
"rank":"1",
"ostamp":"2015-01-23 15:27:04",
"nstamp":"2015-01-23 15:27:23",
"table":"courriers",
"size":"39060",
"sizefileorigin":"39060",
"fsfileid":"12618",
"rsid":"107",
"version":"0",
"namefileorigin":"loremipsum.pdf",
"datefileorigin":"2015-01-23 15:27:04",
"mime":"application\/pdf",
"path":"c:\\nchp\\var\\nchp\\instance\\EMDOM\\DEFTSA\\00000003\\8b\\19\\44DUMHAJ.pdf",
"extension":"pdf",
"ripefilearchive":"8b195bf49b33bcb0be26d83076fa12f332a7d2bd",
"ext":"pdf",
}
],
"errorcode":0,
"errormsg":"ok",
"count":1
}
Encore une fois cet exemple ne reprend pas toutes les informations réellement renvoyées par le service.
Pour l'étape suivante deux éléments nous intéressent :
* fsfileid : 12618
* ripefilearchive : 8b195bf49b33bcb0be26d83076fa12f332a7d2bd (= fsfileripe)
==== Visualiser un fichier ====
http://localhost/ezged3/data/showdocs.php?fsfileid=12618&fsfileripe=8b195bf49b33bcb0be26d83076fa12f332a7d2bd
==== Obtenir les activités d'une fiche ====
=== URL ===
GET /data/service.php?service=log/getactivity
=== Paramètres ===
* **type**: < index | workflow >
* **filter** (optionnel): [ all | users] (all => toutes les activités, users => les activités ayant pour source une action utilisateur). "all" par défaut.
* **detail** (optionnel): 1 pour inclure tout le détail (des activités workflow et parapheur). 0 par défaut.
Si type = index :
* **tbl** : nom de la table
* **rsid** : identifiant de la fiche sur la table
Si type = workflow:
* **wfbagid**: identifiant de pochette
=== Exemple ===
URL d'appel pour obtenir les activités détaillées (detail=1) sur un élément de type "index" (fiche descriptive)
http://localhost/ezged33/data/service.php?service=log/getactivity&rsid=7&tbl=facture&type=index&detail=1&filter=all
Réponse:
{
"errorcode": 0,
"errormsg": "ok",
"rows": [
{
"reserved": "18677",
"description": "fact_10403.pdf",
"label": "Fichier ajouté",
"action": "C",
"user": "Florian MASY",
"date": "2021-01-21 21:46:05",
"type": "file"
},
{
"reserved": "END",
"description": "",
"label": "Scénario terminé",
"action": "F",
"user": "Florian MASY",
"date": "2019-06-14 13:38:19",
"type": "workflow"
},
{
"reserved": "Vérification",
"description": "FIN",
"label": "Changement d'étape",
"action": "MS",
"user": "Florian MASY",
"date": "2019-06-14 13:38:17",
"type": "workflow"
},
{
"reserved": "Vérification",
"description": "@factureok==1 ( 1==1 )",
"label": "Condition évaluée",
"action": "MC",
"user": "Florian MASY",
"date": "2019-06-14 13:38:17",
"type": "workflow"
},
{
"reserved": "Vérification",
"description": "Facture validée ? : Oui\nMail : florian@ezdev.fr,florian.masy@ezdev\nNom ? : \n",
"label": "Tâche , réponse effectuée",
"action": "MA",
"user": "Florian MASY",
"date": "2019-06-14 13:38:13",
"type": "workflow"
},
{
"reserved": "",
"description": "Vérification",
"label": "Tâche visualisée",
"action": "V",
"user": "Florian MASY",
"date": "2018-11-09 10:19:18",
"type": "workflow"
},
{
"reserved": "",
"description": "WORKFLOW FACTURE_DATE => 2018-10-08 15:01:46",
"label": "Description modifiée",
"action": "M",
"user": "Florian MASY",
"date": "2018-10-08 15:01:47",
"type": "index"
},
{
"reserved": "",
"description": "12901",
"label": "Fichier ajouté",
"action": "MF",
"user": "Florian MASY",
"date": "2018-10-08 15:01:40",
"type": "workflow"
},
{
"reserved": "",
"description": "",
"label": "Scénario de Workflow créé",
"action": "C",
"user": "Florian MASY",
"date": "2018-10-08 15:01:40",
"type": "workflow"
},
{
"reserved": "",
"description": "MAIL : abena => florian.masy@ezdev;florian@ezdev.fr\nECHEANCE : => 2017-07-24 00:00:00\n",
"label": "Description modifiée",
"action": "M",
"user": "Florian MASY",
"date": "2017-07-25 09:55:21",
"type": "index"
},
{
"reserved": "",
"description": "NUMERO : 42 => 54987\n",
"label": "Description modifiée",
"action": "M",
"user": "Florian MASY",
"date": "2016-03-07 17:16:30",
"type": "index"
}
],
"count": 0,
"object": {
"count": "27",
"type": "object"
}
}
===== Création et upload =====
Nous reprenons l'exemple de la table courriers du tutoriel précédent.
==== S'authentifier =====
[[#s_authentifier | Voir le tutoriel précédent]].
==== Créer un enregistrement ====
=== URL ===
POST /data/service.php?service=doctbl/insertrow
Les paramètres sont à envoyer via le payload de la requête.
Content-type: application/x-www-formurlencoded
=== Paramètres ===
* **sessionid**: Identifiant de session EzGED
* **tfqn**: nom de la table sur laquelle faire l'insertion
* **fields** : liste des champs
* **values** : liste des valeurs (dans l'ordre de la liste des champs)
=== Exemple ===
| **Paramètre** | **Valeur** |
| sessionid | 874249274 |
| tfqn |one |
| fields | ["ONE_DOSSIERID","ONE_TIERSID","ONE_TYPDOCID","ONE_DATE","ONE_LIB"] |
| values | ["17","32","2","2021-11-10T09:54:40","Document ref1234"] |
Réponse:
{
"errorcode": 0,
"errormsg": "ok",
"rows": [{
"RETID": 543,
"type": "returnid"
}],
"count": 0
}
==== Mettre-à-jour un enregistrement ====
=== URL ===
POST /data/service.php?service=doctbl/updaterow
Les paramètres sont à envoyer via le payload de la requête.
Content-type: application/x-www-formurlencoded
=== Paramètres ===
* **sessionid**: Identifiant de session EzGED
* **tfqn**: nom de la table sur laquelle faire l'insertion
* **field_ID** : nom du champ clé primaire
* **value_ID** : clé primaire de l'enregistrement à modifier
* **fields** : liste des champs à mettre à jour
* **values** : liste des valeurs (dans l'ordre de la liste des champs)
=== Exemple ===
| **Paramètre** | **Valeur** |
| sessionid | 874249274 |
| tfqn |one |
| field_ID | ONE_ID |
| value_ID | 542 |
| fields | ["ONE_LIB","ONE_FLAG"] |
| values | ["Nouveau nom du document","1"] |
Réponse:
{
"errorcode" : 0,
"errormsg" : "ok",
"rows" : [],
"count" : 0
}
==== Supprimer un enregistrement ====
=== URL ===
POST /data/service.php?service=doctbl/deleterowwfiles
Les paramètres sont à envoyer via le payload de la requête.
Content-type: application/x-www-formurlencoded
=== Paramètres ===
* **sessionid**: Identifiant de session EzGED
* **tfqn**: nom de la table sur laquelle faire l'insertion
* **field_ID** : nom du champ clé primaire
* **value_ID** : clé primaire de l'enregistrement à modifier
* **qryid** : Identifiant de la requête depuis laquelle a lieu la suppression
=== Exemple ===
| **Paramètre** | **Valeur** |
| sessionid | 874249274 |
| tfqn |one |
| field_ID | ONE_ID |
| value_ID | 542 |
| qryid | 42 |
Réponse:
{
"errorcode" : 0,
"errormsg" : "ok",
"rows" : [],
"count" : 0
}
==== Uploader un fichier ====
=== URL ===
POST /data/pupload.php
=== Paramètres ===
* **token** : c3e335143464469a1ca542c21147f913
* **sessionid**: identifiant de session EzGED
* **file**: le contenu du fichier à envoyer
* **mode** (optionnel): si le mode est "cold" alors le fichier est diriger vers un sous répertoire du répertoire d'attente (par défaut: ///var/spool/ezged/instance/ocr/wait//). Utilisez le paramètre //waitdir// pour indiquer le nom de ce sous-répertoire
* **waitdir** (optionnel): le nom d'un sous-répertoire de la racine des répertoires d'attente.
Si les paramètres mode et waitdir ne sont pas précisés, le répertoire de dépôt sera ///var/spool/ezged/instance/enqueued//
En cas de succès le chemin de dépôt sera indiqué dans la réponse.
=== Exemple ===
Voici un exemple en ligne de commande avec cURL
curl \
-F "token=c3e335143464469a1ca542c21147f913" \
-F "sessionid=874249274" \
-F "file=@document_test.pdf" \
http://localhost/ezged/data/pupload.php
Réponse:
{
"success": true,
"chunkpart": false,
"message": "File successfully uploaded.",
"filePath": "F:\\nchp\\var\\spool\\ezged\\instance\/enqueued\/document_test.pdf"
}
==== Lier le fichier à la fiche ====
* service : addPages
* paramètres :
* tfqn : Le nom de la table.
* rsid : L'ID de la fiche (ici 118).
* file : Le chemin, sur le serveur, du fichier.
* start : -1
* ocr : 0 pour garder le format d'origine, 1 pour procéder à l'OCR.
http://localhost/ezged/data/service.php?service=docpak/addpages&tfqn=courriers&rsid=118&file=F:\\nchp\\var\\spool\\ezged\\instance\/enqueued\/document_test.pdf&start=-1&ocr=1
{
"rows" : [
{
"type" : "addpages",
"JOBQUEUE_ID" : "8985"
}
],
"errorcode" : 0,
"errormsg" : "ok",
"count" : 8985
}
===== Surveiller un travail =====
* service : loadJobQueue
* paramètres :
* jobqueueid : ID du travail.
Si l'on cherche à surveiller l'état du travail d'ajout de fichier que nous avons précédemment créé :
http://localhost/ezged3/data/service.php?service=jobqueue/load&jobqueueid=8985
Et voici le retour :
{
"rows": [
{
"type" : "generic",
"JOBQUEUE_PURGEABLE" : "1",
"JOBQUEUE_RUNMISSED" : "1",
"JOBQUEUE_RUNONCE" : "1",
"JOBQUEUE_PRIORITY" : "1",
"JOBQUEUE_ID" : "8985",
"JOBQUEUE_STARTTIME" : "2015-01-26 11:00:00",
"JOBQUEUE_CRON" : "",
"JOBQUEUE_STEP" : "3",
"JOBQUEUE_ACTIVE" : "1",
"JOBQUEUE_WEIGHT" : "102",
"JOBQUEUE_TSTAMP" : "2015-01-26 10:14:25",
"JOBQUEUE_JOBTPLID" : "2",
"JOBQUEUE_SUPERJOB" : "0",
"JOBQUEUE_VALEND" : "0",
"JOBQUEUE_TYPE" : "Syst\u00e8me",
"JOBQUEUE_STATUS" : "2",
"JOBQUEUE_RUNATSTARTUP" : "0",
"JOBQUEUE_SECUSRID" : "1"
}
],
"errorcode" : 0,
"errormsg" : "ok",
"count" : false
}