課時三:工作流
參考文件
流程
流程的種類
-
業務流程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檔案,勾選新增的工作流類檔案,點選新增,完成
使用工作流
-
流程中心,流程
-
新建流程
輸入流程名稱,型別為工作流,選擇關聯的實體,建立
-
配置工作流
勾選流程執行時機,新增步驟,添加註冊的工作流
-
配置屬性
若流程有輸入屬性,可設定輸入屬性關聯資訊(繫結值,預設值等)