2

私はWindowsワークフローを使用しようとしていますが、以下のリンクの画像に似たモデルがあります。
ワークフローのスクリーンショット

各送信アクティビティ(、、)の後にGetSomthingGetSomthingElse同じGetSomeMoreStuffカスタムアクティビティが呼び出されます(LogSomthingBadHappened)。

私の実際のモデルでは、この図ではそれほど悪くはないかもしれませんが、カスタムアクティビティはSequenceActivtyであり、かなりの数のノードがあり、3回繰り返すと、ワークフローが非常に見苦しくなります。

私はこのようなことをしたいと思います:
編集されたワークフローのスクリーンショット

IfElseこのようにブランチをマージできますか?
代わりにステートマシンワークフローを使用する必要がありますか(これらはまだ理解されていません)?

4

4 に答える 4

1

ワークフローで FaultHandler を使用し、ハンドラーがキャッチする特定の例外の種類をスローします。最も優雅ではありませんが、うまくいくはずです。

于 2009-01-08T21:48:45.367 に答える
1

シーケンシャル ワークフローでは、すべてのステップが特定の順序で表示される必要があり、実行パスは制御構造 (IF、WHILE) によってのみ制御されます。
あなたが説明した方法で実行パスを変更することは、命令型コードで GOTO ステートメントを使用するようなものであり、不必要な複雑さにつながることがわかっています。ワークフローのさまざまな段階で実行する必要があるSequenceActivity

に含まれるアクティビティがまったく同じである場合は、それらをカスタム アクティビティに埋め込むことができます。この方法では、単一の論理ユニットに含まれているため、管理が容易になります。命令型コードでは、これは複製されたコードの一部をメソッドにリファクタリングし、複数の場所で呼び出されるようなものです。

于 2009-01-08T22:18:25.480 に答える
1

うまくいく可能性がある別の方法は、LogSomthingBadHappenedアクティビティをカスタム ワークフローに入れ、それを数回含めることです。LogSomthingBadHappenedアクティビティがメイン ワークフローからの状態情報を必要とする場合、それをサブ ワークフローにコピーするのは難しい場合があります。

私はこれを試していないので、うまくいかないかもしれません。

于 2009-01-08T23:03:17.557 に答える
0

gbanfill による答えは正しい方向を示していると思います。

一般化して、問題を次のように定義します。

ワークフローのいくつかの場所で実行されるアクティビティのグループを定義する方法はありますか?
その他の要件は次のとおりです。

  1. アクティビティのグループは、XAML のみで定義する必要があります。つまり、コードはありません。
  2. もちろん、このグループへの入力のタイプは固定されますが、実際の値は呼び出しに依存する必要があります (関数の呼び出しなど)。

おそらく、それを行う方法は、サブワークフローを定義し、サブワークフローをインスタンス化し、続行する前に完了するのを待つカスタムアクティビティを構築することです.

このカスタム アクティビティには、サブワークフロー ID と入力パラメーターの少なくとも 2 つのパラメーターが必要です。

于 2009-02-28T09:19:47.697 に答える