使用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论坛:
•我们尝试使用之前版本的代码,我们知道它曾经使用过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.
有人可以指出我正确的方向吗?
答案 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);
}