FAQ (bp)
Comment déclencher un PM à partir du code métier ?
L’évènement initial du processus métier doit être un évènement métier.
Le code métier crée un évènement de la classe de l’évènement initial du processus métier.
Comment déclencher un processus métier à partir d’une application externe ?
L’évènement initial du processus doit être un évènement métier.
L’application externe peut utilise une des méthodes suivantes :
- Appeler le service REST des Evènements Métiers pour créer un évènement de la classe de l’évènement initial du processus métier.
- Utiliser le serveur COM pour créer un objet évènement de la classe de l’évènement initial du processus métier.
Comment passer des paramètres lors du déclenchement du processus métier ?
Vous devez au préalable définir les paramètres au niveau du processus métier.
Lors de la création de l’évènement initial par le code métier, vous devez ajouter à l’évènement les paramètres sous la forme de couple (nom,valeur).
Comment définir un processus métier ayant plusieurs sources de déclenchement ?
Définir le corps du processus métier dans un processus dont l’évènement déclencheur est « jamais ». Ce processus métier sera utilisé comme un sous processus.
Définissez des processus métiers déclencheurs appelant le processus métier précédent grâce à l'activité Appel de processus.
Comment associer un objet métier à une instance de processus métier ?
Dans les propriétés du processus, définissez la classe de l’objet. Cela permet de manipuler les attributs de sa classe lors de la conception.
Dans une activité script, appelez l’API « SetInstance ». Cette API affecte à l’instance l’objet dont l’OID est passé en paramètre.
Comment déclencher un processus métier à partir d’un Web Service ?
L’évènement initial du processus doit être un évènement métier.
Réalisez un Web Service dont les paramètres d’entrée correspondent aux paramètres du processus métier.
Dans le code du service, créez un évènement métier correspondant à l’évènement déclencheur du processus métier.
Comment récupérer un document associé à l'objet d'une instance pour l'envoyer en pièce jointe ?
Il ni a pas d’API script pour manipuler facilement les documents ; néanmoins il est possible de le faire avec une activité script.
Ce code récupère le premier document de l’objet métier associé à l’instance du processus et le place dans le répertoire de l’instance :
var doc:TdbfDocument; docName:string; begin doc := TdbfDocument.Find('oidObject=%1','',true,[instance.oid]); if Assigned(doc) then begin docName := ExtractFileName(doc.Document); Set('docName',docName); doc.ObjectBinary.Value.SaveToFile(InstanceFolder+docName); Result := bprOK; end else Result := bprNOK; end;
Il positionne aussi une variable docName dans le contexte de l’instance pour permettre l’envoi du document dans une activité suivante.
Si l’instance contient plusieurs documents il faut ajouter un critère dans la clause du Find pour sélectionner le document souhaité.
Comment définir le périmètre société d'une instance de processus métier ?
Lorsqu'un processus métier est déclenché par un évènement métier le périmètre société de l'objet à l'origine de l'évènement détermine le périmètre société de l'instance du processus.
Lorsqu'un processus métier est déclenché par un évènement technique, le périmètre société du processus ne peut pas être déterminé automatiquement. Dans ce cas vous devez identifier le périmètre société du processus puis l'associé à l'instance du processus en positionnant la variable initial.oidEventPerimeter.
Dans l'exemple suivant le processus est déclenché par un la présence d'un fichier, le nom du fichier contient le nom de la société concernée :
Dans cet exemple les étapes sont décomposées pour plus de clarté.
Le nom du fichier déclenchant le processus comprend le nom du périmètre société :
La première activité script récupère le nom de la société :
var aFile,aSociety:string; xs,xe:Integer; begin Result := bprNOK; aFile := ExtractFileName(GetParameter('infile','filename')); xe := Pos('.',aFile); if xe<>0 then begin xs := xe-1; while (xs>1) and (copy(aFile,xs,1)<>'_') do xs := xs-1; aSociety := Copy(aFile,xs+1,xe-xs-1); AddParameter('','Society',aSociety); Result := bprOK; end; end;
La seconde activité associe le périmètre société à l'instance :
var aSociety:string; prm:TdbfPerimetrePartage; begin Result := bprNOK; aSociety := GetParameter('','Society'); addMessage('Current society OID:'+ClassManager.ShareSociety); addMessage('Change context to new '+aSociety); prm := ClassManager.FindObject('TdbfPerimetrePartage','(caption=%1)and(NiveauPartage=2)','Caption',false,[aSociety]); If Assigned(prm) then begin addMessage('New society OID:'+prm.OID); /////////////////////////////////////////////// // // The Society perimeter OID of the process instance is stored in the variable "initial.oidEventPerimeter" // addParameter('initial','oidEventPerimeter',prm.OID); // //////////////////////////////////////////////////// Result := bprOK; end else addMessage('No perimeter found for '+aSociety); end;
La troisième activité vérifie que le périmètre est correct pour les activités suivantes :
begin addMessage('current society OID:'+ClassManager.ShareSociety); Result := bprOK; end;