遅延が終了したときにワークフローを自動的に再開しようとしています(遅延アクティビティを使用)。これは、WorkflowServiceHostを使用している場合は自動的に実行されますが、WorkflowApplicationを使用しています。
これを処理するインターネット上のコードがいくつかあります 。これらの目標を達成するためにWorkflowApplicationを使用しているサンプルを次に示します。
- ユーザーがタスクを作成し、このタスクはワークフローに従います
- ユーザーは、再ホストされたデザイナーを使用して独自のワークフローを設計し、彼のワークフロー定義はデータベースに保存されます。
- 各ワークフロー定義では、ユーザーがワークフローを変更できるようにデータベースに異なるバージョンを保存できます。コードは、タスクでアクションが実行され、ブックマークを再開する必要がある場合に正しいバージョンを使用します。
- タスクはワークフローを使用して開始できるため、タスクテーブルには、このタスクに使用されるワークフロー定義とバージョンを格納します。
私が今抱えている問題は、遅延アクティビティを使用する場合です。上記のリンクを使用して、実行可能なインスタンスが検出された場合、WorkflowApplicationを作成し、LoadRunnableInstanceメソッドを使用してワークフローをロードする必要があります。
if (hasRunnableWorkflows)
{
Console.WriteLine("Found runnable workflows");
WorkflowApplication app = new WorkflowApplication(...);
app.InstanceStore = store;
app.LoadRunnableInstance();
}
問題は次のとおりです。
- LoadRunnableInstanceを呼び出すには、WorkflowApplicationを作成する必要があるため、WorkflowApplicationCTorにルートアクティビティを与える必要があります。
- ルートアクティビティを作成するには、データベースからロードする必要のあるワークフロー(およびバージョン)を知る必要があります
- ロードするワークフローを知るには、タスクIDが必要です
- タスクIDを知るには、ワークフローIDを知る必要があります。ワークフローIDは、LoadRunnableInstanceを呼び出した後にのみ使用できます。
だから...私はこのループを壊す必要があります:)
ワークフローをロードする前にワークフローIDを取得する方法を誰かが知っていますか?