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

时间:2014-10-31 20:53:14

标签: acumatica

使用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 个答案:

答案 0 :(得分:3)

好的,所以这里是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)
        {
        }

答案 1 :(得分:-2)

这是我使用的例子

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);
}