Périmètre société d'une instance de processus métier (bp)

De Wiki1000
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

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>