Ordonnanceur externe (automate)
Sommaire |
Il est possible d'utiliser un ordonnanceur externe pour déclencher des tâches à partir d'un automate métier.
Principe
- 1. L'ordonnanceur POST un message sur le service 1000
- 2. Le message est empilé dans une file d'attente
- 3. L'automate est déclenché
- 4. Le message est dépilé
- 6. Le traitement est exécuté
- 8. Le résultat est stocké dans le journal de l'automate
- 9. L'ordonnanceur effectue un GET sur le service REST du journal de l'automate
- 10. L'ordonnanceur obtient le résultat du traitement
Pour pouvoir interroger le service 1000 et obtenir le résultat du traitement un identifiant de traitement est véhiculé dans le message de traitement, cet identifiant sera stocké dans le journal et utilisé comme clé pour obtenir le résultat.
Près requis
Ordonnanceur
L'ordonnanceur doit être capable de :
- Poster un message REST sur serveur HTTP.
- Interroger un service REST pour retrouver le compte rendu d'exécution.
Si l’ordonnanceur n'est pas capable d'exécuter des actions HTTP vous pouvez réaliser ces actions en PowerShell et les exécuter par l'ordonnanceur.
Service 1000
- Utiliser une file d'attente pour stocker les messages à traiter.
- Utiliser un automate déclenché par un évènement file d'attente et exécutante une tâche consommation de message de traitement.
Ce type de fonctionnement est décrit dans cet exemple.
Déclencher la tâche
Le déclenchement de la tâche se fait en postant un message sur le service 1000
Exemple :
# prepare a payload with parameters $postParams = @{ "message.action"="importdip"; "message.accessToken"="16000000C20E570115009001F700000...............670582A44094EE57C02A4F71F"; "message.jobID"="3"; "message.reference"="my reference"; "import.name"="testimport-wfclassea.dip"; "content"=$fileContentEncoded } # This is because my test server certificate is self signed [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true } # line has been splitted for formatting Invoke-WebRequest -Uri https://xxxxx/xxx/server/rpc.l1000/rest/queue.inqueue?queueName=DBQUEUE1 -Headers @{"Authorization"="Bearer 16000000C20E570115009001F700000022A.............44094EE57C02A4F71F"} -Method POST -Body $postParams
Dans le message les champs libres suivant peuvent être utilisé comme identifiant du job :
- message.jobID
- Identifiant de job
- message.reference
- Référence libre
Récupérer le résultat
La récupération du résultat est forcément asynchrone.
L'ordonnanceur doit réaliser un GET sur le flux REST du journal de l'automate :
https://pc100301.sagefr.adinternal.com/sdata/admin/schedulerLogs?where=jobID eq 3 Accept=application/xml Authorization=Bearer 16................... OK <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:sdata="http://schemas.sage.com/sdata/2008/1" xmlns:http="http://schemas.sage.com/sdata/http/2008/1" xmlns:ns3="http://www.w3.org/2005/Atom"> <id>https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs</id> <title>Journal de l'automate</title> <updated>2015-05-05T13:16:54+02:00</updated> <link rel="self" type="application/atom+xml; type=feed" href="https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs?orderBy=oid&count=100&where=jobID eq 3"/> <link title="Première page" rel="first" type="application/atom+xml; type=feed" href="https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs?orderBy=oid&count=100&where=jobID eq 3"/> <link title="Dernière page" rel="last" type="application/atom+xml; type=feed" href="https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs?orderBy=oid&count=100&where=jobID eq 3"/> <link title="schema" rel="http://schemas.sage.com/sdata/link-relations/schema" type="application/xml" href="https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs/$schema"/> <link title="post" rel="http://schemas.sage.com/sdata/link-relations/post" type="application/atom+xml; type=feed" href="https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs"/> <link title="service" rel="http://schemas.sage.com/sdata/link-relations/service" type="application/atom+xml; type=feed" href="https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs/$service"/> <entry> <id>https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs('00000000000000000089000148D10039')</id> <title>Import de message de traitement</title> <content type="html" mode="escaped"><table class="sdata1"><tr><td>Source</td><td>SYFRE</td></tr><tr><td>Categorie</td><td>Général</td></tr><tr><td>Instance</td><td>Import de message de traitement</td></tr><tr><td>Date début</td><td>05/05/2015 13:15:40</td></tr><tr><td>Date fin</td><td>05/05/2015 13:15:40</td></tr><tr><td>Résultat</td><td>OK</td></tr><tr><td>JobID</td><td>3</td></tr><tr><td>Référence</td><td>my reference</td></tr></table></content> <updated>2015-05-05T13:15:40+02:00</updated> <link rel="alternate" href="https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs('00000000000000000089000148D10039')" type="application/atom+xml; type=feed"/> <link rel="self" href="https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs('00000000000000000089000148D10039')" type="application/atom+xml; type=feed" title="Refresh"/> <link rel="enclosure" href="https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLogs('00000000000000000089000148D10039')/informations" type="text" title="Détails"/> <sdata:payload> <schedulerLog xmlns="http://www.sage.com/fr/line1000/adminContract" sdata:key="00000000000000000089000148D10039" sdata:url="https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/schedulerLog('00000000000000000089000148D10039')"> <Caption/> <categoryName>Général</categoryName> <endDate>20150505T131540</endDate> <informations> Tâche "consommation de queue" déclenchée Importation par descriptif "testimport-wfclassea.dip" Paramètres du message: message.inqueue.date="05/05/2015 13:15:33" message.inqueue.nodeID="pc100301.443.syfre" message.action="importdip" message.accessToken="16000000C20E570115009001F700000022A2F82E610CB9427933209C66C2510135850FA21ECE9C5A3E7206A532379F132F05975C2E25D85D31569CBDF2519E6A3BF3011BD71954D6B61CD063939C0D09AA1BFDD3C65D5268A6B60E07B73B5E60110E1660CAA256CF1DD59867AE7B805EE4FB9F2A671342AB6C989C2DE69DE74A565D6FCBE766AC981B27D19635682F7CDBBED3613885BB6175629A5B853BF88C5629132D7816C1D4BC52005845B5A8AAE6D76F8DBF1050D7D4DF70C9369FB2B6DEE75FBD8C1050D7D4DF70C9369FB2B6DEE75FBD8C1050D7D4DF70C9369FB2B6FE7BC6AB94BAC3D0EA6039070EB613A9A19A347E4108C6E10EC37A3670582A44094EE57C02A4F71F" import.name="testimport-wfclassea.dip" message.reference="my reference" message.jobID="3" message.binary.datalength:"2392" ************************************************** ** Importation de fichier ** ************************************************** Fichier descripteur : testimport-wfclassea.dip Dossier : Test SYFRE Workflow Base de données : mssql://L1000-PORTAL/TestWorkFlowdup_7?prefix="dbo." Gestion des partages: Utilisateur : syfre Préparation des données en cours... Préparation terminée. Importation des données en cours... 1 objets insérés. 0 objets mis à jour. 0 objets en échec. 0 objets ignorés. Importation terminée. Durée de la tâche : 00:00:00 </informations> <instanceName>Import de message de traitement</instanceName> <jobId>3</jobId> <processName>Tâche consommation de queue</processName> <reference>my reference</reference> <resultCode>0</resultCode> <resultText>OK</resultText> <sourceName>SYFRE</sourceName> <startDate>20150505T131540</startDate> </schedulerLog> </sdata:payload> <http:etag>00000000000000000089000148D10039-</http:etag> </entry> </feed>
Le résultat peut être obtenu en format json :
https://pc100301.sagefr.adinternal.com/sdata/admin/schedulerLogs?where=jobID eq 3 Accept=application/json Authorization=Bearer 16................... OK { "$baseUrl":"https://pc100301.sagefr.adinternal.com/sdata/l1000/admin/-/", "$title":"schedulerLogs - -", "$updated":"2015-05-05T11:18:13.618Z", "$resources":[ { "$url":"schedulerLogs('00000000000000000089000148D10039')", "$title":"00000000000000000089000148D10039", "$updated":"2015-05-05T11:15:40.000Z", "$etag":"00000000000000000089000148D10039-", "$key":"00000000000000000089000148D10039", "Caption":"", "categoryName":"Général", "endDate":"2015-05-05T11:15:40.000Z", "informations":"Tâche \"consommation de queue\" déclenchée\r\nImportation par descriptif \"testimport-wfclassea.dip\"\r\n\r\nParamètres du message:\r\n\r\nmessage.inqueue.date=\"05/05/2015 13:15:33\"\r\nmessage.inqueue.nodeID=\"pc100301.443.syfre\"\r\nmessage.action=\"importdip\"\r\nmessage.accessToken=\"16000000C20E570115009001F700000022A2F82E610CB9427933209C66C2510135850FA21ECE9C5A3E7206A532379F132F05975C2E25D85D31569CBDF2519E6A3BF3011BD71954D6B61CD063939C0D09AA1BFDD3C65D5268A6B60E07B73B5E60110E1660CAA256CF1DD59867AE7B805EE4FB9F2A671342AB6C989C2DE69DE74A565D6FCBE766AC981B27D19635682F7CDBBED3613885BB6175629A5B853BF88C5629132D7816C1D4BC52005845B5A8AAE6D76F8DBF1050D7D4DF70C9369FB2B6DEE75FBD8C1050D7D4DF70C9369FB2B6DEE75FBD8C1050D7D4DF70C9369FB2B6FE7BC6AB94BAC3D0EA6039070EB613A9A19A347E4108C6E10EC37A3670582A44094EE57C02A4F71F\"\r\nimport.name=\"testimport-wfclassea.dip\"\r\nmessage.reference=\"my reference\"\r\nmessage.jobID=\"3\"\r\nmessage.binary.datalength:\"2392\"\r\n\r\n**************************************************\r\n** Importation de fichier **\r\n**************************************************\r\nFichier descripteur : testimport-wfclassea.dip\r\nDossier : Test SYFRE Workflow\r\nBase de données : mssql://L1000-PORTAL/TestWorkFlowdup_7?prefix=\"dbo.\"\r\nGestion des partages: \r\nUtilisateur : syfre\r\n\r\nPréparation des données en cours...\r\nPréparation terminée.\r\nImportation des données en cours...\r\n1 objets insérés.\r\n0 objets mis à jour.\r\n0 objets en échec.\r\n0 objets ignorés.\r\nImportation terminée.\r\n\r\nDurée de la tâche : 00:00:00\r\n", "instanceName":"Import de message de traitement", "jobId":"3", "processName":"Tâche consommation de queue", "reference":"my reference", "resultCode":0, "resultText":"OK", "sourceName":"SYFRE", "startDate":"2015-05-05T11:15:40.000Z" } ] }
Voir aussi :