通过 WEB SERVICE 创建 SO 时 Acumatica 出错

Acumatica Error in Creating SO via WEB SERVICE

我在通过 Acumatica Web 服务创建 SO 时遇到以下错误。以下是错误和示例编码。

PX.Data.PXException: Error #289: The button Save is disabled.

SO301000Content soSchema = context.SO301000GetSchema();            

        var commands = new List<Acumatica_LSOne_Integration.SALES.Command>();
        commands.Add(new Acumatica_LSOne_Integration.SALES.Value
            {Value = vType, LinkedCommand = soSchema.OrderSummary.OrderType});
        commands.Add(new Acumatica_LSOne_Integration.SALES.Value
            {Value = vCustomer, LinkedCommand = soSchema.OrderSummary.Customer});
        commands.Add(new Acumatica_LSOne_Integration.SALES.Value
            {Value = TransDate.ToLongTimeString(), LinkedCommand = soSchema.OrderSummary.Date});
        commands.Add(new Acumatica_LSOne_Integration.SALES.Value
            {Value = TransDate.ToLongTimeString(), LinkedCommand = soSchema.OrderSummary.RequestedOn});            
        commands.Add(new Acumatica_LSOne_Integration.SALES.Value
            {Value = "X",LinkedCommand = soSchema.OrderSummary.Project});
        commands.Add(new Acumatica_LSOne_Integration.SALES.Value
            {Value = APaymentMethod,LinkedCommand = soSchema.PaymentSettings.PaymentMethod});
        commands.Add(new Acumatica_LSOne_Integration.SALES.Value
            {Value = "FROM LSOne TransactionID: " + vRecordID + " ReceiptID: " + vReceiptID,LinkedCommand = soSchema.OrderSummary.Description});            
        commands.Add(soSchema.Actions.Save);
        commands.Add(soSchema.OrderSummary.OrderNbr);

        context.SO301000Submit(commands.ToArray());

出现该问题是因为您正在设置关键字段之一 OrderType,但未指示您要添加记录。从用户界面执行此操作时,系统会将屏幕放在记录上,但在通过 Web 服务调用时似乎不会自动发生。

您可以在设置订单类型后添加soSchema.Actions.Insert,或者您可以传入一个虚拟的OrderNbr,例如:new SO301000.Value { Value = "<NEW>", LinkedCommand = soSchema.OrderSummary.OrderNbr }

最后,提醒一句 - 您正在使用 ToLongTimeString() 转换 TransDate 字段,但未指定区域性。如果您的客户端计算机具有与 Acumatica 服务器不同的区域设置,您可能会遇到错误。我建议您改用 TransDate.ToString(System.Globalization.CultureInfo.InvariantCulture)

您是否尝试一次创建一个订单?还是您有多个线程来执行此操作?

无论如何尝试添加

context.SO301000Clear();

SO301000Content soSchema = context.SO301000GetSchema();

您可以添加为 Gabriel 提到的..

SOSchema.Actions.Insert

设置订单类型后。看看对你有没有帮助。