2016-10-19 5 views
0

Я видел решения для выполнения плагина с помощью кнопки ленты. Например, здесь: https://www.greenbeacon.com/insights/trigger-plugin-from-ribbon-button-using-custom-actions-in-dynamics-crm-2013/. Однако то, что я хочу сделать, это включить выполнение плагина, который не относится к одному объекту в частности. В JavaScript в этом решении он включает в себя:Плагин Trigger из CRM для нескольких объектов

requestXML += "   <b:value i:type="a:EntityReference">"; 
requestXML += "    <a:Id>" + Xrm.Page.data.entity.getId() + "</a:Id>"; 

Однако я не хочу ограничивать его одним идентификатором. Я хочу, чтобы кто-то был в представлении учетных записей и нажал кнопку, чтобы выполнить пакетный процесс, используя плагин, на всех учетных записях (отфильтрованных в коде C#). Есть ли способ сделать это?

ответ

1

Когда вы создаете свое действие, укажите None для Entity. Это делает действие глобальным. Глобальным действиям не нужно передавать ссылку на сущность. Таким образом, JS будет выглядеть следующим образом:.

function ExecuteAction(requestName, refreshPage, stringParameter) { 
    // Creating the request XML for calling the Action 
    var requestXML = "" 

    requestXML += '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">'; 
    requestXML += ' <s:Body>'; 
    requestXML += ' <Execute xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">'; 
    requestXML += '  <request xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts">'; 
    requestXML += '  <a:Parameters xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic">'; 
    requestXML += '   <a:KeyValuePairOfstringanyType>'; 
    requestXML += '   <b:key>Data</b:key>'; 
    requestXML += '   <b:value i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">' + stringParameter + '</b:value>'; 
    requestXML += '   </a:KeyValuePairOfstringanyType>'; 
    requestXML += '  </a:Parameters>'; 
    requestXML += '  <a:RequestId i:nil="true " />'; 
    requestXML += '  <a:RequestName>' + requestName + '</a:RequestName>'; 
    requestXML += '  </request>'; 
    requestXML += ' </Execute>'; 
    requestXML += ' </s:Body>'; 
    requestXML += '</s:Envelope>'; 

    var req = new XMLHttpRequest(); 
    req.open("POST", GetServiceUrl(), false) 
    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(requestXML); 
    //refresh the page if the request was successful. 
    if (req.status == 200) { 
     if (refreshPage) { 
      RefreshForm() 
     } 
    } else { 
     Xrm.Utility.alertDialog(req.statusText + "n" + req.responseXML.getElementsByTagName("faultstring")[0].textContent); 
    } 
} 

(Обратите внимание, что когда я скопировал код из блога я должен был перевернуть все кавычки и переформатировать код, который я, возможно, пропустил что-то, так что вы 'll хочу удвоить проверку правильности XML.)

+0

Спасибо! Он говорит еще 8, прежде чем я могу добавить комментарий по какой-то причине. – gareth99

0

При регистрации шага для такого плагина не выберите Entity, а Message, то при вызове его из Javascript не нужно передавать какой-либо входной параметр в плагин.