2016-11-23 2 views
0

Сценарий:Dynamics CRM Вызов Workflow от внешнего источника

Я хотел бы ссылаться на уже определенный рабочий или пользовательское действие с веб-страницы, которая находится вне контекста CRM Dynamics. (Скажем, 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. Внутри этого веб-сайта у меня есть функция 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 rest или web api, обратитесь в службу IOrganizationService и с помощью службы CRM. Лучше всего вызвать промежуточную WCF, чем IOrganizationService.