0

Мне нужно создать JS-библиотека, которая может запустить рабочий процесс с использованием нового WebAPI для Dynamics CRM 2016:Начало рабочего процесса с JavaScript в Dynamics CRM 2016

мне нужно, чтобы начать рабочий процесс от мой Кодекс. (рабочий процесс должен быть «в режиме реального времени»), а не асинхронно. Я построю свой вызов функции в ленте по форме. Если кто-нибудь может помочь мне, что я был бы более благодарным, так как я искал все интернет и не удалось найти, как решить эту проблему, за исключением выше ссылке, где я нашел этот метод

но Я не уверен, как использовать этот метод? После того, как Агинский он должен быть «в реальном времени» я нашел решения, такие как:

-https: //processjs.codeplex.com/

, но это не работает для меня, так как его запустить рабочий процесс в асинхронном режиме. Он должен использовать веб-API из приведенной выше ссылки. Я думаю, что это Web API работает только для Microsoft Dynamics 2016

+0

Не мог бы вы изменить вопрос и добавить некоторые дополнительный контекст? Я изо всех сил пытаюсь понять, что вы хотите выполнить, чтобы синхронизировать рабочий процесс с помощью конечной точки webapi. –

+0

@Federico Jousset Я понял, что рабочий процесс имеет свою собственную настройку, чтобы быть «в реальном времени» и ее не на javascript для достижения. Я использовал решение из processjscodeplex.com/, хотя он говорит о своем асинхронном вызове. Я предполагаю, что они думали о вызове ajax, через несколько дней я узнаю, что этот вид доступа одобрен, но поскольку я не нашел ничего другого в Интернете или на этой документации WebApi, я предполагаю, что это так. В настоящее время я пытаюсь прочитать рабочий процесс на основе его имени: -http: //columbuscrm.blogspot.rs/2016/04/get-workflow-guid-in-javascript-using.html, но я сталкиваюсь с некоторыми проблемами. В случае некоторого прогресса/проблем – Dan

+0

Великий Дэн, я спрашивал, потому что ExecuteWorkflowRequest в настоящее время недоступен в конечной точке WebAPI. Просто дайте крик, если вам нужно что-то еще. –

ответ

2

Теперь, когда у нас есть действия, на самом деле нет необходимости запускать рабочий процесс из javascript. Я использовал это, используя библиотеку javascript, которая использовала SOAP api, но действия веб-api намного проще в использовании. И действие создается так же, как рабочий процесс. Чтобы создать действие, создайте рабочий процесс, но вместо того, чтобы выбирать рабочий процесс из раскрывающегося списка, выберите действие. У вас будет такая форма. enter image description here Помните уникальное имя и сущность, с которой вы будете работать. В этом примере я буду использовать этот рабочий процесс на рисунке, который выполняется против записи контакта. Из JavaScript теперь я могу выпустить POST для

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

Опять же это действие нацеливания контактов и запустить действие wa_GetContactSyncStatus, изменить значение, что вам нужно, чтобы они были. Кроме того, в качестве побочного примечания это против сервера 2016, у чего-то позже будет другая версия api для вас. Обратитесь на страницу ресурсов разработчиков в вашем экземпляре crm, чтобы выяснить, какой у вас URL-адрес для веб-api.

Действие будет выполняться асинхронно и до тех пор, пока ваш запрос javascript будет синхронным, и ваш запрос вернется, когда действие будет завершено.

В качестве другой стороны обратите внимание, что если у вас есть действие, вызовите другой рабочий процесс, который не является синхронным, он вполне вероятно вернется до вашего асинхронного фонового рабочего процесса.

+0

Но в этом случае действие будет выполняться асинхронно, не так ли? Поскольку условие для рабочего процесса должно быть синхронным, почему действие должно быть асинхронным в этом случае? Также мне нужно изменить веб-api-вызов каждый раз, когда новая версия api используется на сервере правильно? Спасибо – Dan

+0

@ Запустите действия, выполняемые синхронно. Вы должны хорошо использовать API 8.0, поскольку он будет обратно совместим некоторое время. –

+0

@ReubenSwartz - для этого все еще требуется полное создание XML-запроса? Например. Я вижу, что вы указали URL-адрес, но как бы это выглядело? – mmcrae

1

Я делаю это довольно часто: сделать процесс Action, они разработаны специально для этой цели (нажмите кнопку ленты и вызвать то, что по существу является рабочего процесса через WebAP, они также становятся настраиваемыми сообщениями для регистрации плагинов, что приятно в некоторых сценариях).

Чтобы иметь синхронные вызовы все, что вам нужно сделать, это сделать XmlHttpRequest синхронные путем настройки open заявления:

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

Я никогда не использую библиотеки для вызова WebAPI так, к сожалению, я не могу предложить какие-либо библиотечно- конкретный фрагмент кода, но я бы предположил, что любая достойная библиотека позволяет делать синхронные запросы XHR.

(Обязательное предупреждение: запросы синхронизации являются субоптимальными, и браузеры жалуются на них, я ожидаю, что Chrome, в частности, начнет нарушать код синхронизации в какой-то момент в будущем).

+0

Это похоже на то же решение, что и ответ Доменикоса Зинзи выше. – mmcrae

+0

@mmcrae это не так, что ответ ссылается на конечную точку 2011 года, которая устарела и ожидает удаления из CRM https://msdn.microsoft.com/en-us/library/dn281891.aspx#Crm2011Endpoint – Alex

+0

В итоге я использовал третий чтобы вызвать действие с помощью кнопки ленты. - https://github.com/PaulNieuwelaar/processjs – mmcrae

0

мыло запрос в 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'); 
     } 
    } 
} 

Пример:

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

Оконечная точка SOAP в настоящее время устарела и будет удалена в ближайшем будущем https://msdn.microsoft.com/en-us/library /dn281891.aspx#Crm2011Endpoint – Alex