1. 程式人生 > 實用技巧 >課時三:工作流

課時三:工作流

參考文件

流程

流程的種類

  • 業務流程BusinessProcess:視覺化的流程,建立流線型的業務流程讓使用者對客戶都遵循相同的步驟,告訴使用者當前在哪一步要做什麼

  • 指令碼Dialog:使用指令碼可以建立一個嚮導式介面,指引使用者完成客戶互動指令碼

  • 工作流Workflow:使用工作流可以在後臺實現業務流程自動化,可以由事件觸發,也可以按需執行

  • 操作Action:操作是一種能通過API/後端程式碼呼叫的自定義程式碼邏輯的流程

業務流程

業務流程階段、步驟和類別

​ 每個階段只能指定一個實體;每個階段包含一組步驟,每個步驟代表可以輸入資料的一個欄位。

​ 使用者可以使用下一階段按鈕前進到下一階段;可以將某個步驟設為必需步驟,使得使用者必須為對應的欄位輸入資料後才能繼續到下一階段,這稱為“階段門限”。

​ 每個實體最多有10個啟用的業務流程;每個業務流程可以最多包含30個階段;每個階段最多30個步驟。

業務流程許可權

  • 編輯安全形色:選擇某個安全形色-業務流程選項卡-設定許可權

  • 建立:允許建立業務流程的例項,在建立新記錄的同時完成。

  • 讀取:允許檢視已建立記錄中的業務流程。

  • 寫入:允許更新業務流程。 例如,更改狀態和導航。

  • 刪除:允許刪除例項,如在刪除記錄時。

  • 追加:允許從實體的跨實體導航。 例如,潛在顧客轉化為商機銷售流程業務流程中的潛在顧客實體。

  • 追加到:允許到實體的跨實體導航。 例如,潛在顧客轉化為商機銷售流程業務流程中的商機實體。

業務流程的順序

​ 多個業務流程顯示順序可通過點選上下箭頭進行排序,業務流程預設顯示的是有許可權看到的第一個業務流程。另外多個業務流程時可通過自動或手動方式進行切換。

工作流

工作流的分類

  • 後臺工作流(非同步):依賴於Windows服務(Microsoft Dynamics CRM非同步處理服務),是CRM伺服器上執行的服務。有可能不會立即執行。

  • 實時工作流(同步):立即執行的工作流,跟外掛一樣,也是用事件執行管道執行。如果在執行過程中有異常發生,會取消並回滾整個操作。實時工作流裡所有的活動和子流程都是一個事務。如果工作流執行成功,就看不到執行的log。如果執行失敗且啟用日誌,則實時工作流錯誤記錄在程序會話(ProcessSession)實體記錄中。

工作流的執行方式

  • 在後臺執行此工作流(推薦):勾選代表非同步工作流,不勾選代表同步工作流
  • 作為按需流程:手動執行
  • 作為子流程:由其他工作流Workflow或指令碼Dialog中呼叫

工作流配置項

  • 範圍:使用者/業務部門/上下級業務部門/組織。
  • 啟動時間:建立記錄後-記錄狀態更改後-分派記錄後-記錄欄位更改後-刪除記錄後。記錄指工作流中定義的實體。啟動時間可多個組合,兩者間是或的條件。

Workflow步驟

  • 條件:檢查條件【推薦】判斷當前欄位是否滿足某個值;等待條件;
  • 操作:建立-更新-分派-傳送電子郵件-啟動子工作流-執行操作-更改狀態-停止工作流。

自定義工作流

建立工作流專案

安裝工作流專案模板

開啟VS安裝工具,在單元件選項中搜索windows workflow foundation安裝

建立工作流專案

開啟VS,新建專案,選擇workflow分組下活動庫(Activiy Lbray)模板,點選確定建立

刪除自動生成的.xaml檔案

建立工作流檔案

右鍵專案,選擇新增,新建項

選擇Workflow組下程式碼活動檔案(code activity),點選確定建立

引入相關庫

  • Microsoft.crm.sdk
  • Microsoft.crmsdk.workflow

編寫程式碼

using System;
using System.Activities;
using Microsoft.Xrm.Sdk.Workflow;
using Microsoft.Xrm.Sdk;

namespace T2
{

    public sealed class CodeActivity1 : CodeActivity
    {
        // 定義一個字串型別的活動輸入引數
        [Input("Text")]
        public InArgument<string> Text { get; set; }

        // 定義一個字串型別的活動輸出引數
        [Output("OutText")]
        public OutArgument<string> OutText { get; set; }

        protected override void Execute(CodeActivityContext context)
        {
            // 獲取 Text 輸入引數的執行時值
            string text = context.GetValue(this.Text);

            IWorkflowContext workflowContext = context.GetExtension<IWorkflowContext>();
            IOrganizationServiceFactory factory = context.GetExtension<IOrganizationServiceFactory>();
            IOrganizationService service = factory.CreateOrganizationService(null);

            Guid id = Guid.Empty;
            Entity entity = new Entity("new_customer");
            entity.Attributes.Add("new_phone",Text.Get(context));
            id = service.Create(entity);
            OutText.Set(context,id.ToString());
        }
    }
}

生成,簽名

右鍵專案,屬性

簽名,勾選程式集簽名,選擇新建,取消加密,輸入簽名名稱,確定,儲存

註冊工作流

  • 開啟註冊工具

  • 新增工作流DLL

  • 選擇DLL檔案,勾選新增的工作流類檔案,點選新增,完成

使用工作流

  • 流程中心,流程

  • 新建流程

    輸入流程名稱,型別為工作流,選擇關聯的實體,建立

  • 配置工作流

    勾選流程執行時機,新增步驟,添加註冊的工作流

  • 配置屬性

    若流程有輸入屬性,可設定輸入屬性關聯資訊(繫結值,預設值等)