wfが応答を待機し(ブックマークまたはアイドル状態)、完了していないときに、WorkflowApplicationを使用して引数にアクセスする
質問する
1283 次
3 に答える
1
また、トラッキングを使用して値を取得しましたが、データベースに保存する代わりに、次の解決策を考え出しました。
Trackingparticipant を作成し、アクティビティからデータを収集します。特定の追跡クエリを使用して、追跡参加者プロファイルを微調整できます。レコードからデータの値を設定するために、パブリック プロパティ Output を追加しました。
public class CustomTrackingParticipant : TrackingParticipant
{
//TODO: Fine tune the profile with the correct query.
public IDictionary<String, object> Outputs { get; set; }
protected override void Track(TrackingRecord record, TimeSpan timeout)
{
if (record != null)
{
if (record is CustomTrackingRecord)
{
var customTrackingRecord = record as CustomTrackingRecord;
Outputs = customTrackingRecord.Data;
}
}
}
}
カスタム アクティビティでは、CustomTrackingRecord を使用して追跡用に公開する値を設定できます。ここにアイデアを与えるためのサンプルがあります。
protected override void Execute(NativeActivityContext context)
{
var customRecord = new CustomTrackingRecord("QuestionActivityRecord");
customRecord.Data.Add("Question", Question.Get(context));
customRecord.Data.Add("Answers", Answers.Get(context).ToList());
context.Track(customRecord);
//This will create a bookmark with the display name and the workflow will go idle.
context.CreateBookmark(DisplayName, Callback, BookmarkOptions.None);
}
WorklfowApplication インスタンスで、追跡参加者を拡張機能に追加できます。
workflowApplication.Extensions.Add(new CustomTrackingParticipant());
次のメソッドでサブスクライブした、workflowApplication インスタンスからの永続化可能なアイドル イベントで。メソッドでは、拡張機能から追跡参加者を取得します。パブリック プロパティに出力を設定したので、出力にアクセスして、ワークフロー外のメンバーに設定できます。次の例を参照してください。
private PersistableIdleAction PersistableIdle(WorkflowApplicationIdleEventArgs
workflowApplicationIdleEventArgs)
{
var ex = workflowApplicationIdleEventArgs.GetInstanceExtensions<CustomTrackingParticipant>();
Outputs = ex.First().Outputs;
return PersistableIdleAction.Unload;
}
この例がお役に立てば幸いです。
于 2013-08-22T20:26:40.733 に答える
0
さらに簡単: 別のワークフロー アクティビティを使用して、探している値をどこかに (データベース、ファイルなど) 保存してから、応答を待ちます。
于 2013-05-16T12:18:41.203 に答える