Ordonnanceur externe (automate)

De Wiki1000

version710-32x32.png

Sommaire

Il est possible d'utiliser un ordonnanceur externe pour déclencher des tâches à partir d'un automate métier.

Principe

Ext-scheduler.jpg

  • 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

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 :

Outils personnels