Périmètre société d'une instance de processus métier (bp)
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é :
<source lang="delphi"> 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; </source>
La seconde activité associe le périmètre société à l'instance :
<source lang="delphi"> 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; </source>
La troisième activité vérifie que le périmètre est correct pour les activités suivantes :
<source lang="delphi"> begin
addMessage('current society OID:'+ClassManager.ShareSociety); Result := bprOK;
end; </source>