workflow如何设置书签

设计workflow时候,如果通过代码向向工作流传入数据,则使用代码流CodeActivity类型的活动,如果有想要加入书签,则需要使用NaviteActivity类型的活动。创建工作流的同时给工作流数据。

public partial class Form1 : Form
{
private WorkflowApplication WorkflowApp;
public Form1()
{
InitializeComponent();
}

private void btnStartWF_Click(object sender, EventArgs e)
{

//WorkflowInvoker.Invoke(new DemoActivity1());

//创建工作流可以同时传参数
WorkflowApp = new WorkflowApplication(new DemoActivity1(), new Dictionary<string, object>()
{
{"BookMarkName",this.txtMarkName.Text }
});

//给工作流实例绑定进入空闲状态时想要执行的事件
WorkflowApp.Idle += AfterWorkflowIdle;

#region 其他的
WorkflowApp.OnUnhandledException += OnWfAppException;
WorkflowApp.Unloaded = a => { Console.WriteLine("工作流卸载了..."); };
WorkflowApp.Aborted = a => { Console.WriteLine("工作流中止了.."); };
#endregion

WorkflowApp.Run();


}

//出现异常时调用的方法
private UnhandledExceptionAction OnWfAppException(WorkflowApplicationUnhandledExceptionEventArgs arg)
{
Console.WriteLine("出现未处理的异常"+arg.UnhandledException.ToString());
return UnhandledExceptionAction.Terminate;
}

//工作流进入空闲时执行的方法
private void AfterWorkflowIdle(WorkflowApplicationIdleEventArgs obj)
{
Console.WriteLine("工作流停止了");
}

private void continueMark_Click(object sender, EventArgs e)
{
WorkflowApp.ResumeBookmark(txtMarkName.Text, int.Parse(txtMoney.Text));
}
}



创建继承NaviteActivity类型的子类,并且定义一个输入参数InArgument<string>,来接受工作流的参数传入的值
来创建书签,同时给书签一个恢复书签所要执行的方法。
定义一个输出参数OutArgument<int>,向工作流的变量传出值,使书签能够继续进行。同时若想书签能够
使用,则必须重定义CanInduceIdle,并且赋值为true
 public sealed class InputMoneyActivity1 : NativeActivity
    {
        // 定义一个字符串类型的活动输入参数
        public InArgument<string> InBookMarkName { get; set; }

        protected override bool CanInduceIdle
        {
            get
            {
                return true;
            }
        }

        public OutArgument<int> OutMoney { get; set; }

        // 如果活动返回值,则从 CodeActivity<TResult>
        // 并从 Execute 方法返回该值。
        protected override void Execute(NativeActivityContext context)
        {
            // 获取 Text 输入参数的运行时值
            //string text = context.GetValue(this.Text);

            //int money = int.Parse(Console.ReadLine());
            //context.SetValue(OutMoney, money);

            //拿到书签名
            string bookMark = context.GetValue(InBookMarkName);
            Console.WriteLine("创建书签");
            //给活动创建书签
            context.CreateBookmark(bookMark, new BookmarkCallback(CallBackFun));

        }

        //恢复书签时调用的方法
        private void CallBackFun(NativeActivityContext context, Bookmark bookmark, object value)
        {
            context.SetValue(OutMoney, (int)value);
            Console.WriteLine("书签继续执行");

        }
    }
 

猜你喜欢

转载自www.cnblogs.com/crazyrude/p/9692266.html