2011-05-27 3 views
0

J'essaie de créer un flux de travail de traitement de facture et j'ai essayé la partie System.Activities.Rules de WF4 et je l'aime bien. Cependant, je voudrais prendre le point de départ avec les règles au lieu de lancer une activité en premier.Comment utiliser les règles WF4 pour exécuter des activités WF4

Vous aimez cette

collection Incomming des factures = factures

Pour chaque facture le mettre dans une Wich d'enveloppe contiendra les métadonnées flux de travail comme le statut, nextActivity etc.

Throw l'enveloppe sur un ensemble de règles que si les matches de l'état définit l'activité suivante avec un ensemble de paramètres comme celui-ci, sI = XYZ CustomerID alors setNextActivity (SplitInvoiceActivity (Customer1, Customer2, pourcentage))

alors la L'activité divise la facture en 2 factures et les remet dans la boucle et lorsqu'aucune règle s'applique, nous mettons l'état Enveloppe à quelque chose comme "Processed Done" et il se termine.

Comment est-ce que je modéliserais cela avec les activités de WF4? De quel type d'activité devrais-je dériver, nativeActivity, CodeActivity, etc.

Thx à l'avance!

Répondre

0

D'où provient l'espace de noms System.Activities.Rules? Il n'y a pas de telle chose dans WF4. Il existe un espace de noms System.Workflow.Activities.Rules dans WF3 mais il est complètement indépendant de WF4. Il y a quelques exemples sur comment interopérer entre les deux technologies et utiliser le moteur de règles WF3 dans un workff WF4 mais je ne peux pas vraiment recommander cette approche.

En ce qui concerne votre action de classe de base d'activité. En général dérive de CodeActivity pour le type simple d'activités qui font un peu de travail et qui sont faites. Ce n'est que lorsque vous avez besoin d'activités plus puissantes qui sont composées de plusieurs activités enfants ou doivent être longues et créer des signets que vous devez utiliser un NativeActivity. Cela dit, vous pouvez simplement utiliser NativeActivity tout le temps car il n'y a rien dans CodeActivity que vous ne pouvez pas faire dans une NativeActivity et il n'y a pas de réelle différence de performance non plus.

+0

Salut, merci de répondre! Je n'ai pas maintenant que System.Workflow.Activities.Rules était purement Wf3. Alors, la vraie question serait. Comment utiliser les règles de Wf3 pour lancer certaines activités de Wf4? Dois-je utiliser la nouvelle machine d'état dans Wf4, puis créer des CodeActivités qui vérifient ensuite les factures et qui définissent ensuite l'état suivant? – Stefan

+0

Si vous utilisez la machine d'état ou un organigramme, cela dépend en grande partie du reste du workflow et de la manière dont il est modélisé. Selon la complexité des règles, vous pouvez les coder dans une activité CodeActivity ou composite. Il est plus facile de travailler avec CodeActivity avec des règles complexes, mais l'activité composite montre mieux à un analyste métier ce qui se passe. – Maurice

+0

Thx Je vais essayer de créer une startActivity qui lance ensuite un codeActivity à partir duquel je lis la prochaine facture à traiter, puis je vérifie cela par rapport aux règles. J'utiliserai l'exemple db de ruleset externalisé contenu dans les WFSamples pour stocker les règles. Les règles feront soit une opération simple directement sur l'objet sur facture, soit un coup de pied d'une activité qui effectuera l'opération. – Stefan