1、winform(web程序)下使用工作流
怎樣才能像控制台那樣讓winform或web頁面窗體阻塞等待工作流的繼續執行呢
2、BookMark書簽
書簽:和一般的書簽看書的時候方便查看上次看的內容,工作流中的書簽意思是讓工作流停頓下來,等待用戶在當前狀態繼續操作。
3、書簽的制作
在項目中點擊右鍵→添加新建項→代碼活動。名稱為BookMarkCodeActivity.cs//代碼活動的一個基類是CodeActivity
下面的代碼是創建出來的一個代碼活動
namespace EazyBPMS.WorkFlow { public sealed class ceshi : CodeActivity { // 定義一個字符串類型的活動輸入參數 public InArgument<string> Text { get; set; } // 如果活動返回值,則從 CodeActivity<TResult> // 並從 Execute 方法返回該值。 protected override void Execute(CodeActivityContext context) { // 獲取 Text 輸入參數的運行時值 string text = context.GetValue(this.Text); } } }
但是如果是做為書簽使用必須做以下修改
//1、改基類將CodeActivity 改為NativeActivity
//2、重寫屬性CanInduceIdle
//3、修改傳入參數CodeActivityContext修改為NativeActivityContext
//4、創建書簽
namespace EazyBPMS.WorkFlow { //1、改基類將CodeActivity 改為NativeActivity //2、重寫屬性CanInduceIdle //3、修改傳入參數CodeActivityContext修改為NativeActivityContext //4、創建書簽 public sealed class WaitInputDataActivity<T> : NativeActivity {//這個屬性的意思是是否允許工作流空閑/停頓下來 protected override bool CanInduceIdle { get { return true; } } // 定義一個字符串類型的活動輸入參數 public InOutArgument<string> BookMarkName { get; set; } public OutArgument<T> OutResult { get; set; } // 如果活動返回值,則從 CodeActivity<TResult> // 並從 Execute 方法返回該值。 protected override void Execute(NativeActivityContext context) { // 獲取 BookMarkName 輸入參數的運行時值 string text = context.GetValue(this.BookMarkName);
context.CreateBookmark(text, new BookmarkCallback(MyCallback)); } //把傳過來的數據value作為輸出參數outResult的值 傳到書簽外面 private void MyCallback(NativeActivityContext context, Bookmark bookmark, object value) { var data = value as BaseResumeBookMarkValue; if (data != null) { context.SetValue(OutResult, (T)data.value); context.SetValue(BookMarkName, data.BookMarkName); } } } }