2012-07-18 22 views
5

リボンボタンを使用して、ビューで選択したレコードのワークフローを実行しようとしています。私は、CRM 4互換性のために「レガシー」のサービスを使用して作業例があります。CRM 2011のJavaScriptからワークフローを実行

function invokeWorkflow(workflowId, entityId) { 
    var request = 
     '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' + 
     '    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' + 
     '    xmlns:xsd="http://www.w3.org/2001/XMLSchema">' + 
      GenerateAuthenticationHeader() + 
     ' <soap:Body>' + 
     ' <Execute xmlns="http://schemas.microsoft.com/crm/2007/WebServices">' + 
     '  <Request xsi:type="ExecuteWorkflowRequest">' + 
     '  <EntityId>' + entityId + '</EntityId>' + 
     '  <WorkflowId>' + workflowId + '</WorkflowId>' + 
     '  </Request>' + 
     ' </Execute>' + 
     ' </soap:Body>' + 
     '</soap:Envelope>'; 

    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', '/MSCRMservices/2007/crmservice.asmx', false); 

    xhr.setRequestHeader('Content-Type', 'text/xml; charset=utf-8'); 
    xhr.setRequestHeader('SOAPAction', 'http://schemas.microsoft.com/crm/2007/WebServices/Execute'); 

    xhr.send(request); 
} 

をしかし、私は、将来のリリースのためのメンテナンス性を高めるためにCRM 2011人のサービスを使用して、これを書きたいです。ここまで私がこれまでに試したことはありますが、これはうまくいきません - 呼び出しの戻りコードはHTTP 500(内部サーバーエラー)です。

function invokeWorkflow(workflowId, entityId) { 
    var request = 
     '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' + 
     '    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' + 
     '    xmlns:xsd="http://www.w3.org/2001/XMLSchema">' + 
     ' <soap:Body>' + 
     ' <Execute xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">' + 
     '  <Request xsi:type="ExecuteWorkflowRequest">' + 
     '  <EntityId>' + entityId + '</EntityId>' + 
     '  <WorkflowId>' + workflowId + '</WorkflowId>' + 
     '  </Request>' + 
     ' </Execute>' + 
     ' </soap:Body>' + 
     '</soap:Envelope>'; 

    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', '/XRMServices/2011/Organization.svc/web', true); 

    xhr.setRequestHeader('Accept', 'application/xml, text/xml, */*'); 
    xhr.setRequestHeader('Content-Type', 'text/xml; charset=utf-8'); 
    xhr.setRequestHeader('SOAPAction', 'http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute'); 

    xhr.onreadystatechange = function() { alert(xhr.status); }; 
    xhr.send(request); 
} 

2人目のスクリプトに間違いがあることを知っている人はいますか?私はこれを最善の方法でグーグルで試してみましたが、CRM 2011の主張は実際にCRM 4互換性サービスを使用しているすべての例(最初の例のように)です。私は、CRM 2011 SDKのサンプルの2番目の例をベースにしていますが、これはExecuteWorkflowRequestオブジェクトの例を含んでいませんので、最良の推測のみです。

ありがとうございます!

答えて

7

SOAPLoggerというアプリケーションが、CRMのsdkフォルダ\ samplecode \ cs \ client \ soaploggerにあり、特定のアクションのためにjavascriptでリクエストを生成します。

以下、「ExecuteWorkflow」のhttp要求を確認できます(EntityIdValueWorkflowIdValueの値を変更するだけです)。

<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/">EntityIdValue</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/">WorkflowIdValue</c:value> 
      </a:KeyValuePairOfstringanyType> 
     </a:Parameters> 
     <a:RequestId i:nil="true" /> 
     <a:RequestName>ExecuteWorkflow</a:RequestName> 
     </request> 
    </Execute> 
    </s:Body> 
</s:Envelope> 

XMLHttpRequestの建設はcorectので、soapEnvelopeを変更してみてください。

関連する問題