【问题标题】:Updating stageid of a Dynamics CRM entity using the OData API resulting in Invalid Cast exception使用 OData API 更新 Dynamics CRM 实体的 stageid 导致 Invalid Cast 异常
【发布时间】:2018-03-02 19:40:48
【问题描述】:

我正在尝试更新启用业务流程工作流 (BPF) 的实体的 stageid,以尝试使用 Odata api 移动下一个阶段。

以下是我的 HTTP 请求详细信息

[organization]/api/data/v8.1/MyEntity(0df630c1-3e1e-e811-810f-3863bb35ed38)
Method :- Patch

Body :-

{"stageid@odata.bind":"/processstages(0e603558-a5e2-176b-6c18-3b498377ab12)","traversedpath":"4625784d-7813-4e07-aef5-a7e3f231219f,0e603558-a5e2-176b-6c18-3b498377ab12"}

但是,我的请求因无效转换异常而失败。

{
  "error":{
    "code":"","message":"System.InvalidCastException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #E6D73AE1","innererror":{
      "message":"System.InvalidCastException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #E6D73AE1","type":"System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]","stacktrace":"   at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Update(Entity entity, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType, Boolean checkAdminMode, Boolean checkForOptimisticConcurrency, Dictionary`2 optionalParameters)\r\n   at Microsoft.Crm.Extensibility.OData.CrmODataExecutionContext.Update(Entity entity, UpdateOption updateOption)\r\n   at Microsoft.Crm.Extensibility.OData.CrmODataServiceDataProvider.UpdateEdmEntity(CrmODataExecutionContext context, String edmEntityName, String entityKeyValue, EdmEntityObject entityObject)\r\n   at Microsoft.Crm.Extensibility.OData.EntityController.PatchEntity(String entityName, String key, EdmEntityObject entityDelta)\r\n   at lambda_method(Closure , Object , Object[] )\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n   at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n   at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n   at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"
    }
  }
}

对我在这里可能做错的事情有任何帮助吗?我通常使用 @odata.bind 进行查找,但 stageid 似乎是唯一标识符类型。如何更新唯一标识符?

此外,了解如何调试或了解有关此管理员参考号的更多详细信息非常有帮助。

P.S:- 我知道可以使用 CRM SDK 来更新 stageid,但我找不到任何使用 odata API 的帮助。

【问题讨论】:

    标签: dynamics-crm


    【解决方案1】:

    从技术上讲,stageid 只是一个指导而不是查找。尝试使用以下负载更新您的实体:

    {"stageid":"0e603558-a5e2-176b-6c18-3b498377ab12"}
    

    【讨论】:

    • 是的,我在尝试和错误尝试中尝试了此操作,但这也因以下错误而失败。 { "error":{ "code":"","message":"尝试读取导航属性 'stageid' 的值时,发现了一个具有非空值的 'PrimitiveValue' 节点;但是,一个 'StartArray'节点、'StartObject' 节点或具有空值的 'PrimitiveValue' 节点应为。","innererror":{ "message":"在尝试读取值时发现具有非空值的 'PrimitiveValue' 节点导航属性“stageid”;但是,“StartArray ...(太长,无法粘贴完整的错误消息)
    • {"stageid":"0e603558-a5e2-176b-6c18-3b498377ab12","traversedpath":"4625784d-7813-4e07-aef5-a7e3f231219f,0e603558-a5e2-176b-6abc18-3" } 这是我的有效载荷。
    猜你喜欢
    • 1970-01-01
    • 2017-10-19
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多