Il est important de comprendre le mécanisme de création d’une activité au sein du BAM.
Imaginons l’activité défini avec les items suivants :
Une activité est crée lors de la première saisie d’une information. (Par exemple, le mapping de la shape Receive de l’orchestration sur le StartProcess)
A cette instant, un GUID est renseigné dans l’item ActivityID.(Ce GUID peut-être mappé comme étant l’InterchangeID ou bien une clé unique fonctionnelle)
A partir de ce moment, le cycle de vie de l’activité est liée au cycle de vie de l’instance qui l’a démarré. Par cela, il faut comprendre que :
- Si notre activité est crée à partir d’une orchestration, elle sera complète à la fin de l’orchestration
- Si notre activité est crée à partir d’un port, elle sera complète à la fin de ce port
- Si l’on effectue la tâche suivante :
- mapping de StartActivity sur un port de reception physique (pas la shape de l’orchestration)
- mapping de données fonctionnelles dans l’orchestration
On peut penser qu’il serait judicieux de mapper deux fois l’interchangeID dans l’item ActivityID afin d’enrichir la première activité crée dans le port. La réponse est non, car cela produirai une erreur d’unicité dans la base. (il va essayer de créer une nouvelle activité avec un ActivityID déjà en base…)
C’est pour cela que la continuation existe. Elle permet de prolonger le cycle de vie de l’activité sur plusieurs instances différentes afin d’enrichir l’activité en cours. Le principe est le suivant :
- Initialisation de la continuation en utilisant une valeur unique (cela garde l’activité “en vie”) dans la port de reception par exemple. On nomme la continuation, ContinuationTest
- Poursuite de la continuation (au début de l’orchestration) en renseignant cette valeur dans un continuationID . (que l’on nomme de la même manière que la continuation)
A savoir :
- L’utilisation d’un Suspend, Terminate ne termine pas l’activité. Le BAM considère que toute activité qui se termine est un process metiers qui s’est correctement déroulé. Dès l’instant qu’un Suspend ou Terminate est utilisé alors selon la philosophie du BAM, le process metiers est en erreurs et l’activité ne peut être terminé.(Personnellement ce principe ne m’arrange pas dans mon utilisation du BAM)
- L’utilisation du bam au sein d’une loop va créer plusieurs instance BAM
- Il n’est pas possible de mapper une activité BAM lorsque l’orchestration commence ou finit avec les shapes suivantes:
- Message Assignment
- Transform
- Group (Task)
- Suspend
- Loop (While)
- Branch
- Terminate
- Throw
- Catch
- While shape
- Il existe d’autres petits soucis et detournement que nous évoquerons plus tard.
Voici le lien microsoft concernant ce dernier point : http://msdn.microsoft.com/en-us/library/aa561699%28BTS.20%29.aspx