我想引用一個已定義的工作流或從一個網頁,位於CRM動態上下文之外的自定義操作。 (比方說,MS CRM 2011-2013-2015-2016和365)
我的解決辦法:
我的想法是如何定義的一種控制器頁面進入CRM背景下通過Web訪問和執行的REST調用在該頁面內(通過JavaScript)。
此頁面將能夠讀取輸入參數並執行正確的休息呼叫。
它有道理嗎?你能建議更好的實施嗎?
在此先感謝!
我想引用一個已定義的工作流或從一個網頁,位於CRM動態上下文之外的自定義操作。 (比方說,MS CRM 2011-2013-2015-2016和365)
我的解決辦法:
我的想法是如何定義的一種控制器頁面進入CRM背景下通過Web訪問和執行的REST調用在該頁面內(通過JavaScript)。
此頁面將能夠讀取輸入參數並執行正確的休息呼叫。
它有道理嗎?你能建議更好的實施嗎?
在此先感謝!
如果您有資源,可以使用以下方法設置服務,然後使用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
我知道這種方法,但對我的情況沒有幫助。想象一下,有一個網站www.mywebsite.com。在這個網站中,我有js的功能,想要在crm www.dynamicscrm.com上調用工作流程。 –
對不起,我忘了提。這將不得不作爲服務設置。然後您可以致電該服務。 – hack3rfx
噢好吧...那麼用戶認證呢?工作流將代表誰來執行? –
您可以在這樣一個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休息或web api,引用IOrganizationService並從中使用CRM服務的操作。直接調用中間WCF比IOrganizationService更好。
您可以執行測試來實施您的解決方案 –