Dynamics CRM 2015-Custom Workflow Activity

      CRM的Workflow給咱們的流程處理帶來很多便利,可是這種自帶的Workflow並非萬能的,中間某一step不能支持,每每會牽一髮而動全身,可能形成整個Workflow Steps的從新設計。幸虧CRM還提供了其它的方案來實現這類需求,這裏要說的就是Custom Workflow Activity。ide

      下面用個具體的實例來講明下,如今有Entity A,B,C,D,它們的關係是,A上有對B的Lookup字段BLookup,B上有C的Lookup字段CLookup,C上有D的Lookup字段DLookup,但願由A的某個字段的變更觸發Workflow,發送郵件,而郵件的接收人是D上的某個User字段的值。配置過Workflow的人都知道,CRM的Workflow是不能跨多層去指定這個User的,因此這裏咱們能夠藉助Custom Workflow Activity來實現。spa

      首先在Visual Studio Project的配置上,Custom Workflow跟Plugin是類似的,須要額外引用一些dll,好比microsoft.xrm.sdk.workflow.dll,System.Activities.dll等設計

     

      接着是指定類的繼承,與Plugin須要繼承IPlugin類似,這裏須要繼承CodeActivity(System.Activities.dll)3d

     

      再而後,就是指定輸入參數和輸出參數了,畢竟咱們是要根據必定的規則去獲取最終的User。code

      指定輸入參數:blog

     

      指定輸出參數:繼承

     

      指定輸入輸出Attribute,並使用InArgument<Type>和OutArgument<Type>,在這裏須要注意的是,Custom Workflow僅支持以下的Typeget

     

      還有一點就是,有一些特殊的類型,須要指定額外的Attribute:EntityReference,須要指定ReferenceTarget;OptionSetValue,須要指定AttributeTarget。workflow

      最後就是方法實現it

protected override void Execute(CodeActivityContext executionContext)
{
            try
            {
                IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
                IOrganizationServiceFactory factory = executionContext.GetExtension<IOrganizationServiceFactory>();
                IOrganizationService service = factory.CreateOrganizationService(null);
                //service.Execute 獲取user
                ReferringOfficer.Set(executionContext, user);
           }
            catch{...}
}

      Project完工以後,可使用Plugin註冊Tool註冊這個,不用添加任何Step。而Debug Custom Workflow,也是跟Plugin類似的套路,這裏就再也不多贅述了。

      以後就能夠在CRM自帶的Workflow->Add Step中看到這個Custom Workflow了,配置好輸入信息,並在Send Email Step中,配置返回值做爲郵件的To,就達到了咱們想要的效果了。

      在使用Custom Workflow的時候,必定要注意返回值是空的狀況,畢竟咱們不能保證全部的數據都是完整的,好比D上的User是空,那麼這個時候,須要注意配置默認值,也就是我在上面截圖中的[Default]。

相關文章
相關標籤/搜索