J'ai un Workflow .net 4.0, que j'héberge moi-même (juste avec WorkflowInstance.Run) et lorsque je réhydrate le workflow, je voudrais initialiser certains de ses arguments internes afin que les activités suivantes puissent utiliser ces valeurs... Comment puis-je m'y prendre ?
Réponses
Trop de publicités?Utiliser les Arguments (In/OutArgument) pour définir l'entrée ou la sortie pour le workflow (les activités aussi) .
voici l'échantillon de syntaxe
Dictionary <string, object> input = new Dictionary <string, object> ();
input.Add( "UserName" , userName);
input.Add ( "UserName", userName);
WorkflowInstance myInstance = new WorkflowInstance(
new WorkflowConsoleApplication2.Sequence1(),input);
WorkflowInstance myInstance = new WorkflowInstance (
new WorkflowConsoleApplication2.Sequence1 (), input);
dans votre plan de travail, définissez l'argument d'entrée et vous pourrez ensuite accéder à la valeur de l'argument.
Normalement, les arguments sont à fournir à votre flux de travail avant que vous ne commenciez à exécuter le flux de travail la première fois.
Par exemple, vous pouvez avoir InArgument input1, InArgument input2, OutArugment output, et lorsque vous créez le flux de travail, vous passez toutes les entrées, et une variable pour que le flux de travail stocke toutes les sorties.
Une fois que le flux de travail est déjà en cours, il a des arguments, il ne s'attend pas à ce qu'ils soient modifiés par un facteur externe. (Et au cas où ce serait un point de confusion : normalement, il ne va pas non plus reprendre l'exécution au début de votre flux de travail - il va reprendre à un point de repère arbitraire au milieu). Alors, comment faire autrement pour transmettre des données à votre flux de travail au milieu de l'exécution ?
Je vous propose ici d'examiner les activités de messagerie. Les données entrent dans le flux de travail par le biais de la valeur OutArgument de ReceiveMessage. Comment est-elle arrivée là ? Elle a été définie par l'activité Receive. Mais comment l'activité de réception l'a obtenu pour le définir ? Eh bien, d'abord l'hôte du service dit à l'activité de réception de reprendre parce qu'il a un message. Puis l'activité de réception dit "quel message ai-je reçu ?". Personne n'a poussé des données dans cette activité comme par magie. Au contraire, une fois l'activité activée, elle sait qu'elle doit extraire des données d'une file d'attente quelque part.
J'espère que vous pourrez utiliser cette idée de 1) quelqu'un stocke les données nécessaires au flux de travail 2) le runtime ou l'hôte de service ou autre réactive le workflow 3) les activités récupèrent les données dont elles ont besoin lorsqu'elles s'exécutent (après réactivation) comme modèle pour votre solution.