谁做过CRM Web API调用,用另一个实体的Lookup值更新CRM实体。
我正在尝试使用WebAPI,CRM 2016将查找值设置为CRM中的另一个实体。如果我禁用查找值但是一旦启用查找值,我就会收到错误请求。
以下是我在LinqPad中的代码,所以它确实有效。
void Main()
{
using(var webClient = new WebClient()){
webClient.Credentials = new NetworkCredential("Username", "Password", "Domain");
webClient.Headers.Add("OData-MaxVersion", "4.0");
webClient.Headers.Add("OData-Version", "4.0");
webClient.Headers.Add("accept", "application/json");
webClient.Headers.Add("Content-Type","application/json");
webClient.Headers.Add("Prefer", "odata.include-annotations=*");
webClient.BaseAddress = "http://dev.company.com/DEV2016/api/data/v8.0/";
var JO = new JObject();
JO.Add("col_name","My Name");
//JO.Add("col_contactid@odata.bind","/contacts(7266f26b-7105-e611-811e-005056b61789)");
var dataString = JO.ToString();
var responseString = webClient.UploadString("col_advisors", "POST", dataString);
Console.WriteLine(webClient.ResponseHeaders.Get("OData-EntityId"));
}
}
答案 0 :(得分:5)
案例与WebAPI有关。确保col_contactid是模式名称,而不是逻辑名称。例如,属性的逻辑名称为col_contactid(逻辑名称始终为小写),但模式名称通常具有大写字母。例如,您可能是col_ContactId,在这种情况下,您可能希望使用col_ContactId@odata.bind
。
查找属性架构名称的最简单方法是转到CRM - >设置 - >解决方案 - >你的解决方案 - > Entites(左侧) - >顾问 - >场。在该网格中,您将看到模式名称的列。
答案 1 :(得分:3)
我得到了它的工作。这些字段必须是唯一的,因为它区分大小写。这里的评论以及这篇博客真的很有帮助。
http://inogic.com/blog/2016/02/set-values-of-all-data-types-using-web-api-in-dynamics-crm/
第1步:转到Cutomization开发人员资源。
第2步:点击“下载Odata元数据”链接并下载相同内容。
第3步:下载后,打开它,找出查找属性的名称(即
new_qualifiedleadid
)并检查其外壳。第4步:使用您在代码中设置的值验证它应该是相同的。
虽然我的专栏是col_contactid
,但CRM会将导航列重命名为col_ContactId
以上的内容。
我还使用了Postman(谷歌浏览器)插件,并将以下标题添加到我的帖子中。
webClient.Headers.Add("Prefer", "odata.include-annotations=*");