首页 文章

Acumatica - 使用api创建客户付款方式

提问于
浏览
2

使用API创建客户付款方式的正确方法是什么?这也将回答如何使用具有键值对的网格与仅将值存储到特定字段中的网格 .

这段代码已经使用并且正常运行了近一年,然后在本周早些时候开始它不再有效 .

// Connect to Acumatica
    context = new acumatica.Screen();
    context.CookieContainer = new System.Net.CookieContainer();
    context.AllowAutoRedirect = true;
    context.EnableDecompression = true;
    context.Timeout = 1000000;
    context.Url = Properties.Settings.Default.WebServiceURL;
    LoginResult result = api.context.Login(Properties.Settings.Default.AcumaticaUserName, Properties.Settings.Default.AcumaticaPassword);

    context.AR303010Clear();
    AR303010Content AR303010 = context.AR303010GetSchema();

    try
    {
    Debug.WriteLine("--- Payment Method Start ---");
        // Create Invoice
        AR303010.Actions.Save.Commit = true;
        AR303010Content[] AR303010Content = context.AR303010Submit
        (
            new Command[]
            {

                new Value { Value = "ABARTENDE", LinkedCommand = AR303010.PaymentMethodSelection.Customer, Commit = true },

                AR303010.Actions.Insert,

                new Value { Value = "VISA", LinkedCommand = AR303010.PaymentMethodSelection.PaymentMethod, Commit = true },

                new Key
                {
                    ObjectName = AR303010.PaymentMethodDetails.Description.ObjectName,
                    FieldName = AR303010.PaymentMethodDetails.Description.FieldName,
                    Value = "=[" + AR303010.PaymentMethodDetails.Description.ObjectName + "." + AR303010.PaymentMethodDetails.Description.FieldName + "]"
                },

                new Value {Value = "Card Number", LinkedCommand = AR303010.PaymentMethodDetails.Description},
                new Value {Value = "4000000000003636", LinkedCommand = AR303010.PaymentMethodDetails.Value, Commit = true},

                new Key
                {
                    ObjectName = AR303010.PaymentMethodDetails.Description.ObjectName,
                    FieldName = AR303010.PaymentMethodDetails.Description.FieldName,
                    Value = "=[" + AR303010.PaymentMethodDetails.Description.ObjectName + "." + AR303010.PaymentMethodDetails.Description.FieldName + "]"
                },

                new Value {Value = "Card Verification Code", LinkedCommand = AR303010.PaymentMethodDetails.Description},
                new Value {Value = "321", LinkedCommand = AR303010.PaymentMethodDetails.Value, Commit = true},

                new Key
                {
                    ObjectName = AR303010.PaymentMethodDetails.Description.ObjectName,
                    FieldName = AR303010.PaymentMethodDetails.Description.FieldName,
                    Value = "=[" + AR303010.PaymentMethodDetails.Description.ObjectName + "." + AR303010.PaymentMethodDetails.Description.FieldName + "]"
                },

                new Value {Value = "Expiration Date", LinkedCommand = AR303010.PaymentMethodDetails.Description},
                new Value {Value = "012015", LinkedCommand = AR303010.PaymentMethodDetails.Value, Commit = true},

                AR303010.Actions.Save
            }
        );

        Debug.WriteLine("--- Payment Method Created ---");
    }
    catch (Exception ex)
    {
        Debug.WriteLine(" --- Failed to create Payment Method ---");
        Debug.WriteLine(ex.Message);
    }

该代码最初来自Acumatica论坛:

http://forum.acumatica.com/forum/acumatica-reseller-and-isv-community/development-and-customization/5873-setting-credit-card-fields-though-web-services

http://forum.acumatica.com/forum/acumatica-reseller-and-isv-community/development-and-customization/885-help-on-add-new-payment-method-to-a-given-customer-by-webservice-ar303010

•我们尝试使用以前版本的代码,我们知道它曾经使用过100%的代码 . •我们尝试取消发布自定义 . •我们已尝试将数据发送到位于tryacumatica.com的acumatica演示

我们测试过的每个站点/版本/计算机都返回相同的错误 .

Error #12: Inserting  'Customer Payment Method Detail' record raised one or more errors. Please review. Error: 'Value' may not be empty. ---> PX.Data.PXOuterException: Error #12: Inserting  'Customer Payment Method Detail' record raised one or more errors. Please review.

有人可以指点我正确的方向吗?

2 回答

  • -2

    好的,所以这里是Acumatica提供的工作代码 . 我仍然不知道为什么旧的代码在它整年工作时都会破坏,但是这里的工作代码很简洁,因为你不需要处理密钥/值 .

    var context = new acumatica.Screen();
            context.CookieContainer = new System.Net.CookieContainer();
            context.AllowAutoRedirect = true;
            context.EnableDecompression = true;
            context.Timeout = 1000000;
            LoginResult result = context.Login("admin", "admin");
    
            context.AR303010Clear();
            AR303010Content AR303010 = context.AR303010GetSchema();
    
            try
            {
                var commands = new Command[]
                        {
                            new Value { Value = "ABARTENDE", 
                                LinkedCommand = AR303010.PaymentMethodSelection.Customer},
                            AR303010.Actions.Insert,
                            new Value { Value = "VISA", 
                                LinkedCommand = AR303010.PaymentMethodSelection.PaymentMethod},
    
                            new Value
                            {
                                Value = "='CCDNUM'",
                                LinkedCommand = AR303010.PaymentMethodDetails.Description
                            },
    
                            new Value { Value = "41111111111111118",
                                        LinkedCommand = AR303010.PaymentMethodDetails.Value,
                                        Commit = true
                            },
    
                            new Value
                            {
                                Value = "='CVV'",
                                LinkedCommand = AR303010.PaymentMethodDetails.Description
                            },
    
                            new Value { Value = "121",
                                        LinkedCommand = AR303010.PaymentMethodDetails.Value,
                                        Commit = true
                            },
    
                            new Value
                            {
                                Value = "='EXPDATE'",
                                LinkedCommand = AR303010.PaymentMethodDetails.Description
                            },
    
                            new Value {Value = "01/2019", 
                                       LinkedCommand = AR303010.PaymentMethodDetails.Value,
                                        Commit = true
                            },
    
                            new Value
                            {
                                Value = "='NAMEONCC'",
                                LinkedCommand = AR303010.PaymentMethodDetails.Description
                            },
    
                            new Value {Value = "Mr Jon Doe 8", 
                                       LinkedCommand = AR303010.PaymentMethodDetails.Value,
                                        Commit = true
                            },
    
                            AR303010.Actions.Save};
                AR303010Content[] AR303010Content = context.AR303010Submit(commands.ToArray());
    
            }
            catch (Exception ex)
            {
            }
    
  • 3

    这是我用过的例子

    public void CreateARPayment()
    {
        string paymentType = GetParamValue("lblARPaymentType");
        string paymentNbr = GetParamValue("lblARPaymentNbr");
        string customerID = GetParamValue("txbCustomerID");
        string cardAccountNo = GetParamValue("lblCardAccountNo");
    
        string arInvoiceNbr = GetParamValue("txbARInvoiceNbr");
        string soInvoiceNbr = GetParamValue("txbSOInvoiceNbr");
    
        Screen context = new Screen();
        context.CookieContainer = new System.Net.CookieContainer();
        context.Url = Url;
        context.Login(Login, Password);
    
        AR302000Content paymentSchema = context.AR302000GetSchema();
    
        paymentSchema.PaymentSummary.CardAccountNo.FieldName += "!Descr";
    
        var commands = new Command[]
        {
            new Value 
            { 
                Value = customerID, 
                LinkedCommand = paymentSchema.PaymentSummary.Customer 
            },
            new Value 
            {
                Value = "TOKENCC", 
                LinkedCommand = paymentSchema.PaymentSummary.PaymentMethod 
            },
            new Value 
            {
                Value = cardAccountNo, 
                LinkedCommand = paymentSchema.PaymentSummary.CardAccountNo 
            },
            new Value 
            {
                Value = "101000", 
                LinkedCommand = paymentSchema.PaymentSummary.CashAccount 
            },
            new Value 
            {
                Value = "09/2014/AR-00001", 
                LinkedCommand = paymentSchema.PaymentSummary.PaymentRef 
            },
    
            paymentSchema.DocumentsToApply.ServiceCommands.NewRow,
            new Value 
            {
                Value = arInvoiceNbr, 
                LinkedCommand = paymentSchema.DocumentsToApply.ReferenceNbr, 
                Commit = true 
            },
    
            paymentSchema.DocumentsToApply.ServiceCommands.NewRow,
            new Value 
            {
                Value = soInvoiceNbr, 
                LinkedCommand = paymentSchema.DocumentsToApply.ReferenceNbr, 
                Commit = true 
            },
    
            paymentSchema.PaymentSummary.AppliedToDocuments,
        };
        var payment = context.AR302000Submit(commands)[0];
    
        commands = new Command[]
        {
            new Value 
            {
                Value = payment.PaymentSummary.AppliedToDocuments.Value, 
                LinkedCommand = paymentSchema.PaymentSummary.PaymentAmount 
            },
    
            paymentSchema.Actions.Save,
    
            paymentSchema.PaymentSummary.ReferenceNbr,
            paymentSchema.PaymentSummary.Status,
            paymentSchema.PaymentSummary.PaymentAmount
        };
        payment = context.AR302000Submit(commands)[0];
    
        UpdateSetting("lblARPaymentNbr", payment.PaymentSummary.ReferenceNbr.Value);
        UpdateSetting("lblARPaymentStatus", payment.PaymentSummary.Status.Value);
        UpdateSetting("lblARPaymentAmount", payment.PaymentSummary.PaymentAmount.Value);
    }
    

相关问题