通过Dynamics Web API更改主要所有者

时间:2017-03-01 15:22:17

标签: odata dynamics-crm

我正在根据https://msdn.microsoft.com/en-us/library/mt607875.aspx

上的示例工作

我可以用PATCH更新其他单值导航属性,即

PATCH [DYNAMICS_URL]/api/data/v8.1.0.538/leads(355c33b0-88fe-e611-80f1-c4346bad60a8)

{
  "campaignid@odata.bind":"[DYNAMICS_URL]/api/data/v8.1.0.538/campaigns(fdfa106a-5dd1-e511-80df-3863bb349bd8)",
}

但是,尝试运行相同的更改所有者ID

PATCH [DYNAMICS_URL]/api/data/v8.1.0.538/leads(355c33b0-88fe-e611-80f1-c4346bad60a8)

{
  "ownerid@odata.bind":"[DYNAMICS_URL]/api/data/v8.1.0.538/systemusers(4bf3d2d8-f2ec-e511-80d5-5065f38b15d1)"
}

提供500内部服务器错误
"message": "email With Id = 1a70458b-92fe-e611-80f1-c4346bad60a8 Does Not Exist"

发生了什么事?通过CRM Web应用程序分配潜在客户可以正常工作。

此外,尝试以同样的方式更新owninguser会产生204 No content,但似乎不会更新任何内容。

1 个答案:

答案 0 :(得分:0)

更改记录的所有者不是更新操作。这是分配操作,遗憾的是,不可能使用REST请求分配记录。但您可以使用SOAP来执行此操作:

function AssignRecord(Assignee, Target, entityName) {
var request = "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
request += "<s:Body>";
request += "<Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\"";
request += " xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
request += "<request i:type=\"b:AssignRequest\"";
request += " xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\"";
request += " xmlns:b=\"http://schemas.microsoft.com/crm/2011/Contracts\">";
request += "<a:Parameters xmlns:c=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>Target</c:key>";
request += "<c:value i:type=\"a:EntityReference\">";
request += "<a:Id>" + Target + "</a:Id>";
request += "<a:LogicalName>" + entityName + "</a:LogicalName>";
request += "<a:Name i:nil=\"true\" />";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "<a:KeyValuePairOfstringanyType>";
request += "<c:key>Assignee</c:key>";
request += "<c:value i:type=\"a:EntityReference\">";
request += "<a:Id>" + Assignee + "</a:Id>";
request += "<a:LogicalName>systemuser</a:LogicalName>";
request += "<a:Name i:nil=\"true\" />";
request += "</c:value>";
request += "</a:KeyValuePairOfstringanyType>";
request += "</a:Parameters>";
request += "<a:RequestId i:nil=\"true\" />";
request += "<a:RequestName>Assign</a:RequestName>";
request += "</request>";
request += "</Execute>";
request += "</s:Body>";
request += "</s:Envelope>";
// Get server URL

var serverUrl = Xrm.Page.context.getServerUrl();

var req = new XMLHttpRequest();

req.open("POST", serverUrl, 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&#8221");

req.onreadystatechange = function () { if (req.readyState == 4) {

    if (req.status === 200) {

        alert("Success !!!");

    }

    else {

        alert("Error – " + req.responseXML);

    }

}

};
req.send(request); }
相关问题