3

谁执行了 CRM Web API 调用以使用来自另一个实体的查找值更新 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"));
}
}
4

2 回答 2

6

WebAPI 的大小写很重要。确保您的 col_contactid 是架构名称,而不是逻辑名称。例如,您的属性的逻辑名称是 col_contactid (逻辑名称总是小写),但模式名称通常使用大写字母。例如,您的可能是 col_ContactId,在这种情况下您可能希望使用col_ContactId@odata.bind.

查找属性模式名称的最简单方法是转到 CRM -> 设置 -> 解决方案 -> 您的解决方案 -> 实体(左侧)-> 顾问 -> 字段。在该网格中,您将看到模式名称列。

于 2016-04-18T18:52:54.713 回答
5

我让它工作。这些字段确实必须是唯一的,因为它区分大小写。这里的评论和这个博客,真的很有帮助。

http://inogic.com/blog/2016/02/set-values-of-all-data-types-using-web-api-in-dynamics-crm/

第 1 步:转到自定义  开发人员资源。

第 2 步:单击“下载 Odata 元数据”链接并下载。

第 3 步:下载后,打开它并找出查找属性的名称(即new_qualifiedleadid)并检查其大小写。

第 4 步:使用您在代码中设置的值验证它应该相同。

虽然我的专栏是col_contactid,但 CRM 将导航列重命名为上面的内容col_ContactId

我还使用了 Postman(google chrome) 插件并将以下标题添加到我的帖子中。

webClient.Headers.Add("Prefer", "odata.include-annotations=*");
于 2016-04-20T18:42:16.943 回答