【问题标题】:Associate primarycontactid to Case-Dynamics CRM web API将 primarycontactid 关联到 Case-Dynamics CRM Web API
【发布时间】:2018-01-03 21:44:11
【问题描述】:

我正在尝试创建一个案例并在 primarycontactId 字段中关联一个联系人。我正在使用备用键来查找联系人,如下所示。

POST https://xxxxx.crm.dynamics.com/api/data/v8.2/incidents HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Content-Type: application/json; charset=utf-8
Host: xxxxxx.crm.dynamics.com
Content-Length: 161

{
  "title": "case101",
  "primarycontactid@odata.bind": "https://xxxxx.crm.dynamics.com/api/data/v8.2/contacts(xxi_xxx='2533274975913147')"
}

代码如下

using (HttpClient httpClient = new HttpClient())
            {
                var method2 = new HttpMethod("POST");
                Uri requesturi = new Uri(string.Format("{0}/api/data/v8.2/", url));
                httpClient.BaseAddress = requesturi;
                httpClient.Timeout = new TimeSpan(0, 0, 4);  // 10 minutes
                httpClient.DefaultRequestHeaders.Accept.Clear();
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                result = GetS2SAccessToken(url, pwd);
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result);
                httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
                httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0");
                HttpRequestMessage request = new HttpRequestMessage(method,string.Format( "contacts(xxxxx_xxxx='{0}')",xxxx.ToString()));
                request.Content = new StringContent(props.ToString(), Encoding.UTF8, "application/json");
                HttpRequestMessage request2 = new HttpRequestMessage(method2, string.Format("incidents"));
                request2.Content = new StringContent(props1.ToString(), Encoding.UTF8, "application/json");

                HttpResponseMessage createResponse1;
                createResponse1 = await httpClient.SendAsync(request2);
                return createResponse1.Content;
         }

但是我得到:

发生意外错误。","innererror":{ "message":"发生意外错误。","type":"System.ServiceModel.FaultException.","type":"System.ServiceModel.FaultException1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Crm.Extensibility.OData.CrmODataServiceDataProvider.CreateEdmEntity(CrmODataExecutionContext context, String edmEntityName, EdmEntityObject entityObject, Boolean isUpsert)\r\n at Microsoft.Xrm.Sdk, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]","stacktrace":" at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Create(Entity entity, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType, Boolean checkAdminMode, Dictionary2 optionalParameters)\r\n 在 Microsoft.Crm。 Extensibility.OData.CrmODataExecutionContext.Create(Entity entity)\r\n at Microsoft.Crm.Extensibility.OData.EntityController.PostEntitySet(String entitySetName, EdmEntityObject entityObject)\r\

以前有人经历过吗?

【问题讨论】:

    标签: c# dynamics-crm dynamics-crm-webapi


    【解决方案1】:

    在请求正文中试试这个,它会有所帮助。

    "primarycontactid@odata.bind":"/contacts(alternate_key_field='2222222')"
    

    【讨论】:

      【解决方案2】:

      你搞错了。验证这一点并更正架构名称。

      事件有 2 个可选的联系人查找和架构名称是 primarycontactid 和负责的contactid。

      primarycontactid@odata.bind
      

      但事件有一个强制客户查找和架构名称是customerid。如果没有此事件,则无法创建。通过这个,请求就会成功。

      customerid_contact@odata.bind
      

      【讨论】:

      • 当我使用 customerIderror":{ "code":"","message":"An undeclared property 'customerid' which only have property annotations in the payload but no property value在有效载荷中找到。在 OData 中,只有声明的导航属性和声明的命名流可以表示为没有值的属性。","innererror":{ "message":"一个未声明的属性 'customerid' 在有效负载中只有属性注释但没有 p跨度>
      • 关于如何在我的代码中使用 Jobject 传递它的任何建议?感谢您的帮助!
      • 尝试使用 CRM Rest builder 构建请求
      【解决方案3】:

      我不确定 Web API 是否允许通过备用键填充查找字段。

      这两个步骤应该可以工作......

      1. 通过备用键检索联系人的 GUID
      2. 使用 ID 而不是备用键填充查找,即:

      "primarycontactid@odata.bind": "/contacts(F56D5D25-8B0D-E711-8104-00155D6FD705)"

      【讨论】:

      • 我也尝试使用 GUID 作为contactid,似乎得到了同样的错误
      • 我正在使用 C# 执行此操作,创建一个 JObject(props1) 到字符串并通过 HTTP 请求传入。
      猜你喜欢
      • 1970-01-01
      • 2017-03-08
      • 2021-05-29
      • 2017-03-15
      • 2017-06-06
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 2016-11-24
      相关资源
      最近更新 更多