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é :
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;