Rest API SalesOrder с оплатой - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь ввести заказ на продажу с платежом против 2019R2, который из демонстрации, которую я видел, должен работать, однако я получаю довольно бесполезное сообщение об исключении:

{
    "message": "An error has occurred.",
    "exceptionMessage": "Operation failed",
    "exceptionType": "PX.Data.PXInvalidOperationException",
    "stackTrace": "   at PX.Api.ContractBased.EntityService.Put(ISystemContract systemContract, String version, String name, EntityImpl entity, CbOperationContext operationContext, Boolean throwOnError)\r\n   at PX.Api.ContractBased.Soap.SoapFacadeBase.PutImpl(EntityImpl entity, Boolean throwOnValidationError)\r\n   at PX.Api.ContractBased.SystemContracts.V2.RestController.PutEntity(EntityImpl entity, String select, String filter, String expand, String custom)\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.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.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.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.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.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.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.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>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.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.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.Web.Http.Filters.ActionFilterAttribute.<CallOnActionExecutedAsync>d__5.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.Web.Http.Filters.ActionFilterAttribute.<ExecuteActionFilterAsyncCore>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.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.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>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.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>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.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>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.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()",
    "innerException": {
        "message": "An error has occurred.",
        "exceptionMessage": "Exception has been thrown by the target of an invocation.",
        "exceptionType": "System.Reflection.TargetInvocationException",
        "stackTrace": "   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)\r\n   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)\r\n   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)\r\n   at PX.Api.ContractBased.EntityExportContextBuilder.<>c__DisplayClass87_1.<FindImplementations>b__3(PXGraph graph, EntityImpl entity, EntityImpl targetEntity)\r\n   at PX.Api.SyImportProcessor.SyStep.ProcessCommand(SyCommand cmd, Boolean& needCommit)\r\n   at PX.Api.SyImportProcessor.ExportTableHelper.ExportTable()",
        "innerException": {
            "message": "An error has occurred.",
            "exceptionMessage": "Inserting  'AR Payment' record raised at least one error. Please review the errors.",
            "exceptionType": "PX.Data.PXOuterException",
            "stackTrace": "   at PX.Data.PXUIFieldAttribute.CommandPreparing(PXCache sender, PXCommandPreparingEventArgs e)\r\n   at PX.Data.PXCache.OnCommandPreparing(String name, Object row, Object value, PXDBOperation operation, Type table, FieldDescription& description)\r\n   at PX.Data.PXTableAttribute.PrepareParametersForInsert(PXCache sender, Object row, Type[] tables, ISqlDialect dialect, Boolean audit, List`1[] pars)\r\n   at PX.Data.PXTableAttribute.PersistInserted(PXCache sender, Object row)\r\n   at PX.Data.PXCache`1.PersistInserted(Object row, Boolean bypassInterceptor)\r\n   at PX.Data.PXCache`1.Persist(PXDBOperation operation)\r\n   at PX.Data.PXGraph.Persist(Type cacheType, PXDBOperation operation)\r\n   at PX.Data.PXGraph.Persist()\r\n   at PX.Objects.AR.ARPaymentEntry.Persist()\r\n   at PX.Data.PXSave`1.<Handler>d__2.MoveNext()\r\n   at PX.Data.PXAction`1.<Press>d__28.MoveNext()\r\n   at PX.Data.PXAction`1.<Press>d__28.MoveNext()\r\n   at PX.Data.PXAction`1.PressImpl(Boolean internalCall, Boolean externalCall)\r\n   at PX.Data.PXAction`1.Press()\r\n   at PX.Objects.EndpointAdapters.DefaultEndpointImpl18.Payments_Insert(PXGraph graph, EntityImpl entity, EntityImpl targetEntity)"
        }
    }
}

Следующее было сделан запрос:

    {
    "CashAccount" : {"value" : "MERCHANT"},
    "OrderType" : {"value" : "SO"},
    "CustomerID" : {"value" : "35"},
    "CustomerOrder" : {"value" : "1"},
    "DisableAutomaticDiscountUpdate" : {"value" : true},
    "Description" : {"value" : "ecommerce order"},
    "LocationID" : {"value" : "MAIN"},
    "Details" : [
        {
            "rowNumber" : 1,
            "InventoryID" : {"value" : "item1"},
            "UnitPrice" : {"value" : 320.00},
            "SalesAcctID" : {"value" : "40200"},
            "UOM" : {"value" : "EA"},
            "OrderQty" : {"value" : "1.0000"}
        }
    ],
    "BillToContactOverride" : {"value" : true},
    "BillToContact" : {
            "rowNumber" : 1,
            "Attention" : {"value" : "Joe DiMaggio"},
            "BusinessName" : {"value" : "Major League Baseball"},
            "Email" : {"value" : "joe@baseball.fun"},
            "Phone1" : {"value" : "877-123-4567"}
    },
    "BillToAddressOverride" : {"value" : true},
    "BillToAddress" : {
            "rowNumber" : 1,
            "AddressLine1" : {"value" : "123 Main Street"},
            "AddressLine2" : {"value" : "attn: team manager"},
            "City" : {"value" : "Los Angeles"},
            "Country" : {"value" : "US"},
            "State" : {"value" : "CA"},
            "PostalCode" : {"value" : "91324"}
    },
    "ShipToContactOverride" : {"value" : true},
    "ShipToContact" : {
            "rowNumber" : 1,
            "Attention" : {"value" : "Joe DiMaggio"},
            "BusinessName" : {"value" : "Major League Baseball"},
            "Email" : {"value" : "joe@baseball.fun"},
            "Phone1" : {"value" : "877-123-4567"}
    },
    "ShipToAddressOverride" : {"value" : true},
    "ShipToAddress" : {
            "rowNumber" : 1,
            "AddressLine1" : {"value" : "123 Main Street"},
            "AddressLine2" : {"value" : "attn: team manager"},
            "City" : {"value" : "Los Angeles"},
            "Country" : {"value" : "US"},
            "State" : {"value" : "CA"},
            "PostalCode" : {"value" : "91324"}
    },
    "ShipVia" : {"value" : "FEDEXGRND"},
    "ShippingSettings" : {
            "ShippingTerms" : {"value" : "WEBORDER"},
            "ShipVia" : {"value" : "FEDEXGRND"}
    },
    "Status" : {"value" : "open"},
    "TaxTotal" : {"value" : 24.80},
    "Totals" : {
            "PremiumFreight" : {"value" : 6.00},
            "FreightTaxCategory" : {"value" : "FR020100"}
    },
    "Payments" : [{
        "AppliedToOrder" : {"value" : 326.00},
        "CashAccount" : {"value" : "MERCHANT"},
        "PaymentAmount" : {"value" : 326.00},
        "DocType" : {"value" : "Prepayment"},
        "PaymentMethod" : {"value" : "CC"},
        "PaymentRef" : {"value" : "12345"}
    }]
}

Заказ успешно введен, когда я отправляю его, однако платеж - нет. Пробовал разные комбинации в поле Платежи. Я знаю, что есть одно предложение - получить запись заказа на продажу и использовать $ expand для получения дополнительных данных, однако добавление Payments в $ expand не работает, он возвращает пустой массив даже для заказа, в котором зарегистрированы платежи.

Я пробовал несколько комбинаций в массиве Payments, пробовал записывать несколько платежей одновременно, пробовал не применять платежи или применять только 1 доллар. Опробованные виды платежей и предоплаты. Единственное, что работает, - это если я предварительно ввожу платеж, я могу использовать ReferenceNbr этого платежа, чтобы применить сумму к заказу, однако это не то, что описано в документации или демонстрации видео, которые я видел.

У кого-нибудь есть реальный рабочий пример этого? Я бы предпочел вводить транзакции электронной торговли в одном запросе и не использовать 2 запроса для ввода заказа на продажу и оплаты.

...