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

De Wiki1000
Version du 28 août 2014 à 13:09 par Syfre (discuter | contributions)
(diff) ← Version précédente | Voir la version courante (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 :

Wf-faq-perimetre-societe-1.png

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

Wf-faq-perimetre-societe-2.png

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;
Outils personnels