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.
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
POST <URL_GED>/data/service.php?service=sec/authenticate
Content-type: application/x-www-form-urlencoded
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
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:
{ "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:
Service à appeler :
http://localhost/ezged3/data/service.php?service=secses/delete?sessionid=414034936
Le retour :
{ "errorcode" : 0, "errormsg" : "Success logout" }
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 |
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.
http://localhost/ezged3/data/service.php?service=query/getexec&qryid=2&limitstart=0&limitgridlines=20
{ "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 }
GET <URL_GED>/data/service.php?service=query/getexec
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.
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 }
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" } ] }
http://localhost/ezged3/data/service.php?service=query/globalsearch_v3&word=["facture","test"]&usrfltmode=1&gridlines=100
La réponse est composée de deux types d'éléments:
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" : "<b>ID<\/b> : 1, <b>DATE<\/b> : 2016-11-09 00:00:00, <b>OBJET<\/b> : Classe de Neige, <b>FULLTEXT<\/b> : <font style=\"background-color:#95c11e;\">facture test<\/font> " }, { "type" : "gsearch", "RSID" : "1", "QRY_DESC" : "Tous les courriers", "QRY_ID" : "654", "FFQN" : "courriers.COURRIERS_ID", "DESC" : "<b>ID<\/b> : 1, <b>DATE<\/b> : 2017-11-09 00:00:00, <b>OBJET<\/b> : Classe de Neige, <b>FULLTEXT<\/b> : <font style=\"background-color:#95c11e;\">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" : "<b>Dossier<\/b> : Dossier1, <b>Titre<\/b> : <font style=\"background-color:#95c11e;\">Test<\/font>, <b>Recherche<\/b> : <font style=\"background-color:#95c11e;\">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" : "<b>Merge<\/b> : Oui, <b>Dossier<\/b> : Dossier1, <b>Titre<\/b> : <font style=\"background-color:#95c11e;\">Test<\/font>, <b>Recherche<\/b> : <font style=\"background-color:#95c11e;\">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" : "<b>ID<\/b> : 9, <b>NUMERO<\/b> : 0, <b>CLIENT_NOM<\/b> : Agro Discount, <b>FULLTEXT<\/b> : <font style=\"background-color:#95c11e;\">facture test<\/font> " } ], "errorcode" : 0, "errormsg" : "ok", "count" : 977 }
http://localhost/ezged3/data/service.php?service=docpak/loadalllastrevision&fsfileinfo=1&docpakrsid=107&docpaktbl=courriers&docpakpage=*&limitstart=0&limitgridlines=10
{ "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 :
http://localhost/ezged3/data/showdocs.php?fsfileid=12618&fsfileripe=8b195bf49b33bcb0be26d83076fa12f332a7d2bd
GET <URL_GED>/data/service.php?service=log/getactivity
Si type = index :
Si type = workflow:
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" } }
Nous reprenons l'exemple de la table courriers du tutoriel précédent.
POST <URL_GED>/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è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 }
POST <URL_GED>/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è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 }
POST <URL_GED>/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ètre | Valeur |
sessionid | 874249274 |
tfqn | one |
field_ID | ONE_ID |
value_ID | 542 |
qryid | 42 |
Réponse:
{ "errorcode" : 0, "errormsg" : "ok", "rows" : [], "count" : 0 }
POST <URL_GED>/data/pupload.php
Si les paramètres mode et waitdir ne sont pas précisés, le répertoire de dépôt sera <chemin_install_ezged>/var/spool/ezged/instance/enqueued
En cas de succès le chemin de dépôt sera indiqué dans la réponse.
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" }
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 }
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 }