创建价格水平时无法创建产品价格水平

时间:2019-06-11 12:12:16

标签: java dynamics-crm microsoft-dynamics dynamics-crm-webapi

我正在尝试通过api在Dynamics CRM中创建价格级别对象。

虽然我正在创建价格水平对象(价格列表),但我也想创建带有所谓的深层插入但至今没有成功的产品价格水平(价格列表项目)。

我正在遵循this指南。

This is a link到价格级别实体类型。

有用于商品价格水平的集合值导航属性,称为price_level_product_price_levels

如果我按照教程进行操作,则需要撰写以下请求

[POST] /pricelevels

授权标头设置正确,内容主体为:

{
    "name": "MA - 2019W24",
    "paymentmethodcode": 1,
    "price_level_product_price_levels": [{
            "quantitysellingcode": 1,
            "amount": 89,
            "amount_base": 89,
            "pricingmethodcode": 1,
            "productid@odata.bind": "/products(ef43bf1f-e605-e911-a818-000d3a2cd4e8)",
            "uomid@odata.bind": "/uoms(942b3c4c-e405-e911-a818-000d3a2cd4e8)"
        }
    ]
}

响应中的错误消息是:

  

具有ID的价格级别= c0184273-ed8c-e911-a83b-000d3a2dd73b不   存在

UUID随每个请求而变化。响应中包含的stacktrace是:

at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.CreateInternal(Entity entity, InvocationContext invocationContext, CallerOriginToken callerOriginToken, WebServiceType serviceType, Boolean checkAdminMode, Dictionary`2 optionalParameters)
at Microsoft.Crm.Extensibility.OData.CrmODataExecutionContext.CreateOrganizationResponse(Entity entity)
at Microsoft.Crm.Extensibility.OData.CrmODataServiceDataProvider.CreateEdmEntity(CrmODataExecutionContext context, String edmEntityName, EdmEntityObject entityObject, Boolean isUpsert)
at Microsoft.Crm.Extensibility.OData.EntityController.PostEntitySetImplementation(String& entitySetName, EdmEntityObject entityObject)
at Microsoft.PowerApps.CoreFramework.ActivityLoggerExtensions.Execute[TResult](ILogger logger, EventId eventId, ActivityType activityType, Func`1 func, IEnumerable`1 additionalCustomProperties)
at Microsoft.Xrm.Telemetry.XrmTelemetryExtensions.Execute[TResult](ILogger logger, XrmTelemetryActivityType activityType, Func`1 func)
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()\
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()

我检查了帐户实体和价格水平的导航属性。帐户中的属性是相关属性,price_level_product_price_levels是引用属性。

如果我尝试在第一个链接中执行教程请求,那么它将起作用。

Dynamics CRM不支持批量创建产品价格水平。

我已经尝试了批处理操作,但是因为我使用Java并使用google-http-api。我发现很难满足批处理操作的复杂且特定的合同。此外,关于这种解决方案的信息确实很有限。

我的目标是在同一请求中至少创建所有产品价格水平。因为否则,我可能需要做20个请求,以便在crm中创建产品价格水平。

1 个答案:

答案 0 :(得分:1)

分批处理。尽管我同意这不是很简单。

  

https://docs.microsoft.com/en-us/powerapps/developer/common-data-service/webapi/execute-batch-operations-using-web-api

这是修改后的片段(请注意,我使用的是javascript,而不是java,但应该易于转换)。

var payload1 = {
    "name": "NEW - 01",
    "paymentmethodcode": 1,
    "pricelevelid": "7e3876b5-9066-4df4-9bb5-5cf276ccbad7"
};

var payload2 = {
    "pricelevelid@odata.bind": "/pricelevels(7e3876b5-9066-4df4-9bb5-5cf276ccbad7)",
    "productid@odata.bind": "/products(7687b3fb-b48e-e911-a82b-000d3a112148)",
    "uomid@odata.bind": "/uoms(43e8aed3-5631-4ee2-9cea-093637817cbb)"
};

var headers = {
  'Content-Type': 'multipart/mixed;boundary=batch_123456',
  'Accept': 'application/json',
  'Odata-MaxVersion': '4.0',
  'Odata-Version': '4.0'
};

var data=[]
data.push('--batch_123456');
data.push('Content-Type: multipart/mixed;boundary=changeset_BBB456');
data.push('');
data.push("--changeset_BBB456");
data.push("Content-Type: application/http");
data.push("Content-Transfer-Encoding:binary");
data.push("Content-ID: 1");
data.push('');
data.push('POST /api/data/v9.0/pricelevels HTTP/1.1');
data.push('Content-Type:application/json;type=entry');
data.push('');
data.push(JSON.stringify(payload1));
data.push("--changeset_BBB456");
data.push("Content-Type: application/http");
data.push("Content-Transfer-Encoding:binary");
data.push("Content-ID: 2");
data.push('');
data.push('POST /api/data/v9.0/productpricelevels HTTP/1.1');
data.push('Content-Type:application/json;type=entry');
data.push('');
data.push(JSON.stringify(payload2));
data.push('--changeset_BBB456--');
data.push('');
data.push('--batch_123456');


var payload = data.join('\r\n');

$.ajax({method:"POST",url:"/api/data/v9.0/$batch", data:payload, headers: headers });