当wf 等待响应(书签或空闲)并且未完成时,使用WorkflowApplication访问参数
答案 0 :(得分:1)
我还使用了Tracking来检索值,但是我没有将它保存到数据库中,而是提出了以下解决方案 创建一个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;
}
我希望这个例子有所帮助。
答案 1 :(得分:0)
您可以使用Tracking。
所需的步骤是:
该链接包含您执行此操作所需的所有信息。
答案 2 :(得分:0)
更简单:在开始等待响应之前,使用另一个工作流活动来存储您正在寻找的值(数据库,文件,...)!