当wf等待响应(书签OR空闲)并且未完成时,如何获取outArgument WorkflowApplication

时间:2013-05-16 07:26:41

标签: workflow workflow-foundation-4 workflow-foundation workflow-activity

当wf 等待响应(书签或空闲)并且未完成时,使用WorkflowApplication访问参数

3 个答案:

答案 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

所需的步骤是:

  • 定义跟踪配置文件,该配置文件查询状态已关闭的ActivityStates
  • 实施TrackingParticipant以将OutArgument保存在进程内存,数据库或磁盘上的文件中
  • 把所有东西都挂在一起

该链接包含您执行此操作所需的所有信息。

答案 2 :(得分:0)

更简单:在开始等待响应之前,使用另一个工作流活动来存储您正在寻找的值(数据库,文件,...)!