使用WebAPI设置CRM查找值

时间:2016-04-18 17:41:03

标签: dynamics-crm-2016

谁做过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"));
}
}

2 个答案:

答案 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=*");