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 }