入力引数を受け入れて結果を返す、シリアル化可能なフローチャート Windows ワークフローをプログラムで定義する必要があります。デザイナーを使用してこれらのワークフローを作成する方法は理解していますが、コードで作成し、フローチャート ワークフローをシリアル化できるようにする必要があります (したがって、ラムダ式はありません)。
Assign の「To」フィールドを取得できません。以下のコードは、WriteLine とそれに続く Assign のフローチャート ワークフローを作成します。
var ab = new ActivityBuilder<string> {
Name = "ActivityBuilt",
Implementation = new Flowchart {
StartNode = new FlowStep {
Action = new WriteLine { Text = new VisualBasicValue<string>("greeting") },
Next = new FlowStep {
Action = new Assign {
DisplayName = "Set result",
To = new OutArgument<string>(new VisualBasicReference<string> {
ExpressionText = "results"}),
Value = new VisualBasicValue<string>("bye")
}
}
}
}
};
ab.Properties.Add(new DynamicActivityProperty {
Name = "greeting",
Type = typeof (InArgument<string>),
Value = "hello"});
ab.Properties.Add(new DynamicActivityProperty {
Name = "results",
Type = typeof (OutArgument<string>),
Value = "bye"});
// Convert the ActivityBuilder to a callable activity
using (var sw = new StringWriter()) {
using (var xw = ActivityXamlServices.CreateBuilderWriter(new XamlXmlWriter(sw, new XamlSchemaContext()))) {
XamlServices.Save(xw, LastCreated);
}
using (var sr = new StringReader(sw.ToString())) {
var wf = ActivityXamlServices.Load(sr);
return wf;
}
}
上記のコードは、「テキスト 'bye' から 'OutArgument' を作成できませんでした」というメッセージを表示して、ActivityBuilder から Activity に変換しようとすると失敗します。これは、OutArgument を使用せずに渡すだけで問題なく動作します。
私の質問は、To プロパティに何を入れるかです。ActivityBuilder.Properties に追加した OutArgument を参照するにはどうすればよいですか? VisualBasicReference は OutArgument ではありません。これを必要以上に難しくしていませんか?
ヒントをありがとう!
編集:プログラムでワークフローを作成したい。ワークフローには入力引数があり、結果を返す必要があります (出力引数)。
ワークフローを作成する方法と、入力引数を宣言して使用する方法を理解しています。ActivityBuilder を使用してワークフローを作成し、ActivityBuilder のプロパティを介して InArgument を設定しています。XAML にシリアル化し、ActivityXamlServices.Load を使用して逆シリアル化することで、ActivityBuilder からワークフローを作成します。
私が理解していないのは、ワークフローから結果を取得する方法です。OutArgument が含まれていると思います。ワークフローに OutArgument を追加する方法/場所は? 私が提供したコード スニペットは OutArgument に値を割り当てると思っていましたが、ActivityXamlServices.Load の呼び出しが失敗し、OutArgument を作成できないというエラーが表示されます。
- ActivityBuilder を使用するアプローチは正しいですか?
- Assign アクションの「To」フィールドは OutArgument を適切に参照していますか?
- ActivityBuilder に OutArgument を認識させ、アクティビティ / ワークフローに変換できるようにするにはどうすればよいですか?
これで私の問題が明確になることを願っています。