2016-11-23 13 views
0

シナリオ:ダイナミックCrm外部ソースからのワークフローの呼び出し

CRM Dynamicsコンテキスト外にあるWebページから、すでに定義されたワークフローまたはカスタムアクションを呼び出したいとします。 (のは、MS CRM 2011-2013-2015-2016および365を言ってみましょう)

私のソリューション:

私の考えは、CRMコンテキストにウェブからアクセスコントローラページの種類の定義についても、残りのコールを実行しますそのページ内で(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があるとします。このWebサイト内には、jmという機能があり、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 restまたはweb apiを作成することをお勧めします。IOrganizationServiceを参照してください。これはCRMサービスの操作を使用します。直接IOrganizationServiceよりも中間のWCFを呼び出す方が良いです。

関連する問題