0

Ich brauche eine JS-Bibliothek zu erstellen, die Workflow mit neuen WebAPI für Dynamics CRM 2016 ausführen können:in Dynamics CRM 2016

ich anfangen müssen Workflow von mein Code. (Workflow sollte "Echtzeit" sein) und nicht asynchron. Ich werde meinen Funktionsaufruf in Ribbon auf Formular erstellen. Wenn jemand mir helfen kann dann würde ich dankbar mehr sein, da ich alle Internet gesucht und konnte nicht gefunden wie diese zu lösen, mit Ausnahme von oben Link, wo ich diese Methode

gefunden, aber Ich bin nicht sicher, wie man diese Methode benutzt? Sobald agin es „real-time“ sein I Lösungen gefunden wie:

-https: //processjs.codeplex.com/

aber nicht für mich arbeiten, da es Workflow asynchron ausgeführt werden. Es muss Web-API von oben angegebenen Link verwenden. Ich glaube, dass diese Web-API nur für Microsoft Dynamics 2016

+0

Könnten Sie bitte die Frage bearbeiten und etwas mehr Kontext hinzufügen? Ich habe Mühe zu verstehen, was Sie erreichen wollen, wenn Sie einen synchronisierten Workflow mit dem Webapi-Endpunkt ausführen. –

+0

@Federico Jousset Ich erkannte, dass Workflow hat seine eigene Einrichtung, um "Echtzeit" und es ist nicht auf Javascript zu erreichen. Ich habe eine Lösung von processjscodeplex.com verwendet, obwohl es seinen asynchronen Anruf sagt Ich nehme an, dass sie an Ajax-Anruf gedacht haben, ich werde in ein paar Tagen wissen, ist diese Art von Zugriff ok, aber da ich nichts anderes im Internet gefunden habe oder Auf dieser WebApi-Dokumentation vermute ich es. Zur Zeit versuche ich, den Workflow anhand seines Namens zu lesen: -http: //columbuscrm.blogspot.rs/2016/04/get-workflow-guid-in-javascript-using.html, aber ich stoße auf einige Probleme. Im Falle einiger Fortschritte/Probleme – Dan

+0

Great Dan, ich fragte hauptsächlich, weil die ExecuteWorkflowRequest derzeit nicht auf dem WebAPI-Endpunkt verfügbar ist. Schreibe einfach, wenn du etwas anderes brauchst. –

Antwort

2

Nun, da wir Aktionen haben, ist es nicht mehr notwendig, einen Workflow von Javascript aus zu starten. Früher habe ich eine JavaScript-Bibliothek verwendet, die die SOAP-API verwendet, aber die Web-API-Aktionen sind viel einfacher zu verwenden. Und eine Aktion wird auf die gleiche Weise wie ein Workflow erstellt. Um eine Aktion zu erstellen, erstellen Sie einen Arbeitsablauf, wählen aber anstelle des Arbeitsablaufs aus der Dropdown-Auswahlaktion aus. Sie werden mit einem Formular wie diesem enden. enter image description here Merken Sie sich den eindeutigen Namen und die Entität, gegen die Sie ihn ausführen. In diesem Beispiel verwende ich diesen Workflow, der auf einem Kontaktdatensatz basiert. Von Javascript kann ich nun eine POST

https://<your-crm-server>/api/data/v8.0/contacts(<contact-id>)/Microsoft.Dynamics.CRM.wa_GetContactSyncStatus

Ausgabe Wieder ist dies eine Aktion Kontakte Targeting und die wa_GetContactSyncStatus Aktion ausgeführt wird, ändern Sie die Werte an, was Sie sie brauchen. Auch als Nebenbemerkung ist dies gegen einen 2016er Server, der später eine andere API-Version für Sie verwenden wird. Konsultieren Sie die Entwickler-Ressourcen-Seite in Ihrer crm-Instanz, um herauszufinden, was Ihre URL für die Web-API ist.

Die Aktion wird asynchron ausgeführt, und solange Ihre JavaScript-Anforderung synchron ist, wird Ihre Anforderung zurückgegeben, wenn die Aktion abgeschlossen ist.

Als eine weitere Randnotiz, wenn Sie Ihre Aktion aufrufen einen anderen Workflow, der nicht synchron ist, wird es wahrscheinlich vor Ihrem asynchronen Hintergrund Workflow zurückkehren.

+0

Aber in diesem Fall wird Aktion asynchron ausgeführt, oder? Da die Bedingung für den Workflow synchron sein soll, warum sollte die Aktion in diesem Fall asynchron sein? Außerdem muss ich den Web-API-Aufruf jedes Mal ändern, wenn eine neue API-Version auf dem Server verwendet wird, oder? Danke – Dan

+0

@Dan die Aktionen laufen synchron. Sie sollten gut sein, das 8.0 API zu verwenden, da es für eine Weile rückwärtskompatibel sein wird. –

+0

@ReubenSwartz - erfordert dies immer noch den gesamten Aufbau der XML-Anfrage? Z.B. Ich sehe, du hast eine URL angegeben, aber wie würde sie aussehen? – mmcrae

1

arbeitet mache ich das sehr oft: Der Prozess machen ein Action, werden sie speziell für diesen Zweck entworfen (klicken Sie auf eine Schaltfläche Band und rufen, was im Wesentlichen ist ein Workflow durch WebAP; sie werden auch zu benutzerdefinierten Nachrichten für die Plugin-Registrierung, was in einigen Szenarien gut ist).

haben synchrone Anrufungen alles, was Sie tun müssen, ist durch Zwicken die open Anweisung die XmlHttpRequest synchron zu machen:

// 'xhr' is the XMLHttpRequest 
xhr.open(http_method, request_url, false); <-- third parameter 'false' means sync request 

ich nie Bibliotheken verwenden, um die WebAPI aufrufen, so kann ich leider keine Bibliotheks- vorschlagen bestimmte Stück Code, aber ich würde annehmen, dass jede anständige Bibliothek ermöglicht XHR-Anforderungen synchron zu machen.

(Zwingende Warnung: Synchronisierungsanfragen sind suboptimal und Browser beschweren sich über sie, ich erwarte insbesondere, dass Chrome in der Zukunft damit beginnt, den Synchronisierungscode zu brechen).

+0

Das sieht nach der gleichen Lösung aus wie Domenicos Zinzi oben. – mmcrae

+0

@mmcrae es ist nicht, dass die Antwort auf den Endpunkt 2011 verweist, der veraltet ist und aus dem CRM-System entfernt wird https://msdn.microsoft.com/en-us/library/dn281891.aspx#Crm2011Endpoint – Alex

+0

Ich landete mit einem dritten Party-Bibliothek, um eine Aktion von einem Ribbon-Button aufrufen - https://github.com/PaulNieuwelaar/processjs – mmcrae

0

Soap Anfrage in JS:

function RunWorkflow(in_entitiId,in_workflowId,in_url) { 
    var _return = window.confirm('Do you want to execute workflow ?'); 
    if (_return) { 
     var url = in_url; 
     var entityId =in_entitiId ; 
     var workflowId = in_workflowId; 
     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, true) 
     // 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.onerror = displayError; 
     req.onreadystatechange = function() { assignResponse(req); }; 
     req.send(request); 
    } 
    function displayError(e) { 
    alert(this.status); 
    } 

} 

function assignResponse(req) { 
    if (req.readyState == 4) { 
     if (req.status == 200) { 
      alert('successfully executed the workflow'); 
     } 
    } 
} 

Beispiel:

RunWorkflow(Xrm.Page.data.entity.getId(),"21E95262-5A36-46CA-B5B5-3F5AA539A9AF","https://org.dynamics.com"); 
+0

SOAP-Endpunkt ist derzeit veraltet und wird in naher Zukunft entfernt werden https://msdn.microsoft.com/en-us/library /dn281891.aspx#Crm2011Endpoint – Alex

Verwandte Themen