2016-11-23 76 views
0

情景:Dynamics CRM中調用工作流從外部源

我想引用一個已定義的工作流或從一個網頁,位於CRM動態上下文之外的自定義操作。 (比方說,MS CRM 2011-2013-2015-2016和365)

我的解決辦法:

我的想法是如何定義的一種控制器頁面進入CRM背景下通過Web訪問和執行的REST調用在該頁面內(通過JavaScript)。
此頁面將能夠讀取輸入參數並執行正確的休息呼叫。

它有道理嗎?你能建議更好的實施嗎?

在此先感謝!

+0

您可以執行測試來實施您的解決方案 –

回答

1

如果您有資源,可以使用以下方法設置服務,然後使用ajax。

private static void ExecuteWorkflow(Guid workflowId, Guid entityId) 
    { 
     try 
     { 
      string url = ConfigurationManager.ConnectionStrings["crm"].ConnectionString; 
      ClientCredentials cc = new ClientCredentials(); 
      cc.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; 
      OrganizationServiceProxy _service = new OrganizationServiceProxy(new Uri(url), null, cc, null); 

      ExecuteWorkflowRequest request = new ExecuteWorkflowRequest() 
      { 
       WorkflowId = workflowId, 
       EntityId = entityId 
      }; 

      ExecuteWorkflowResponse r = (ExecuteWorkflowResponse)_service.Execute(request); 
      _service.Dispose(); 
     } 
     catch (Exception ex) 
     { 
      //Handle Exception 
     } 
    } 

如果你無法對同一個域中CRM服務器的服務,你應該能夠模仿。

cc.Windows.ClientCredential.Domain = "DOMAIN"; 
cc.Windows.ClientCredential.Password = "PASSWORD"; 
cc.Windows.ClientCredential.UserName = "USERNAME"; 

你可以在這裏找到更多的細節。

https://msdn.microsoft.com/en-us/library/microsoft.crm.sdk.messages.executeworkflowrequest.aspx

+0

我知道這種方法,但對我的情況沒有幫助。想象一下,有一個網站www.mywebsite.com。在這個網站中,我有js的功能,想要在crm www.dynamicscrm.com上調用工作流程。 –

+0

對不起,我忘了提。這將不得不作爲服務設置。然後您可以致電該服務。 – hack3rfx

+0

噢好吧...那麼用戶認證呢?工作流將代表誰來執行? –

0

您可以在這樣一個js調用工作流程:

您可以通過它的名稱和類型定義查詢workflowId。

var entityId = // The GUID of the entity 
    var workflowId = // The GUID of the workflow 
    var url = // Your organization root 
    var orgServicePath = "/XRMServices/2011/Organization.svc/web"; 
    url = url + orgServicePath; 
    var request; 
    request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">" + 
     "<s:Body>" + 
     "<Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">" + 
     "<request i:type=\"b:ExecuteWorkflowRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\" xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">" + 
     "<a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">" + 
     "<a:KeyValuePairOfstringanyType>" + 
     "<c:key>EntityId</c:key>" + 
     "<c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">" + entityId + "</c:value>" + 
     "</a:KeyValuePairOfstringanyType>" + 
     "<a:KeyValuePairOfstringanyType>" + 
     "<c:key>WorkflowId</c:key>" + 
     "<c:value i:type=\"d:guid\" xmlns:d=\"http://schemas.microsoft.com/2003/10/Serialization/\">" + workflowId + "</c:value>" + 
     "</a:KeyValuePairOfstringanyType>" + 
     "</a:Parameters>" + 
     "<a:RequestId i:nil=\"true\" />" + 
     "<a:RequestName>ExecuteWorkflow</a:RequestName>" + 
     "</request>" + 
     "</Execute>" + 
     "</s:Body>" + 
     "</s:Envelope>"; 

    var req = new XMLHttpRequest(); 
    req.open("POST", url, false); 
    // Responses will return XML. It isn't possible to return JSON. 
    req.setRequestHeader("Accept", "application/xml, text/xml, */*"); 
    req.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); 
    req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute"); 
    req.send(request); 

如果request.status是200,那麼請求是成功的。這在CRM2011環境中進行了測試。

我建議您創建一個WCF休息或web api,引用IOrganizationService並從中使用CRM服務的操作。直接調用中間WCF比IOrganizationService更好。

相關問題