QuickBooks POS SDK添加客户自定义字段数据:DataIxtAdd
-
21-12-2019 - |
题
任何人都可以帮助将数据添加到Quickbooks POS 2013中的UI定义的自定义字段?
我正在尝试向UI定义的自定义字段添加数据(该字段在POS用户界面中进行,而不是通过编程;因此,从网页添加新客户时,Onwerid是“0”)。
我正在使用:在Microsoft Visual Studio 2012 WebForms中创建应用程序,C#.NET,QBPOSFC3LIB,与QB POS 2013 Pro交谈。应用程序和qbpos-server均在同一服务器上打开和运行。
目标:客户将信息输入到网页。数据包括11个属性,即QBPOS跟踪作为其核心编程的一部分,以及需要记录的7个属性,并在UI的自定义字段中定义。客户进入信息后,使用方法(不包括在下面代码中)验证数据以进行格式化和要求,则下面的代码运行以将数据发送到QBPOS-Server。 注意:AddCustomer命令效果100%。
程序流程:在下面的代码中,我正在制作客户添加请求(CSTREQ)并只将客户添加响应(CStresp)仅为ListID。使用一个方法7次来创建7次请求将数据添加到自定义字段(我评论了7中的6个作为“也许是问题”和仅用一个DataExtAddrq)的“可能只有一个dataextaddrq)(我不问)(在程序中)或需要对DataExtAddrq的响应)。然后栋和CloseConnection(在CSTRQ之后调试我结束并关闭并在DataExtAdd之前重新打开,结果没有变化)。
问题:dataextaddrq未将信息添加到自定义字段。客户进行且程序击中DataExtAdd零件后,它将相同的客户数据添加到QBPOS,并且不会添加EXT数据(var在dataextadd之前使null为null)。
所讨论的代码:
protected void DoCustomerAdd()
{
bool sessionBegun = false;
bool connectionOpen = false;
QBPOSSessionManager sessionManager = null;
try
{
String custDateOfBirth = KEY_BIRTHDATE.Text;
String custExpLevel = KEY_EXPERIENCE.Text;
String custCNum = KEY_C_NUM.Text;
String custCExpDate = KEY_C_EXP.Text;
String custMemCardNun = textMembershipNumber.Text;
String custIDNum = KEY_ID_NUM.Text;
String custWaiverAppr = "Yes";
//Create the session Manager object
sessionManager = new QBPOSSessionManager();
//Create the message set request object to hold our request
IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest(3, 0);
requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;
BuildCustomerAddRq(requestMsgSet);//Call
//Connect to QuickBooks and begin a session
sessionManager.OpenConnection("AddCust", "MyApp");
connectionOpen = true;
sessionManager.BeginSession("");
sessionBegun = true;
//Send the request to QuickBooks and get response
IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);
//look at response and get customer list id, needed for adding custom fields
IResponse response = responseMsgSet.ResponseList.GetAt(0);
ICustomerRet CustomerRet = (ICustomerRet)response.Detail;
string custListID = CustomerRet.ListID.GetValue();
//End the session and close the connection to QuickBooks
sessionManager.EndSession();
sessionBegun = false;
sessionManager.CloseConnection();
connectionOpen = false;
requestMsgSet = null;
//////////////////////////////////////////////////////////////////////////////
//Create the session Manager object
sessionManager = new QBPOSSessionManager();
//Create the message set request object to hold our request
requestMsgSet = sessionManager.CreateMsgSetRequest(3, 0);
requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;
AddCustomerCustField(requestMsgSet, custListID, "C Number", custCNum);
//Connect to QuickBooks and begin a session
sessionManager.OpenConnection("AddCust", "MyApp");
connectionOpen = true;
sessionManager.BeginSession("");
sessionBegun = true;
//add to customfields
sessionManager.DoRequests(requestMsgSet);
/*/
AddCustomerCustField(requestMsgSet, custListID, "Experience Level", custExpLevel);
AddCustomerCustField(requestMsgSet, custListID, "Date of Birth", custDateOfBirth);
sessionManager.DoRequests(requestMsgSet);
AddCustomerCustField(requestMsgSet, custListID, "C Number", custCNum);
sessionManager.DoRequests(requestMsgSet);
AddCustomerCustField(requestMsgSet, custListID, "C Experation Date", custCExpDate);
sessionManager.DoRequests(requestMsgSet);
AddCustomerCustField(requestMsgSet, custListID, "Member Number", custMemCardNun);
sessionManager.DoRequests(requestMsgSet);
AddCustomerCustField(requestMsgSet, custListID, "Waiver Approved", custWaiverAppr);
sessionManager.DoRequests(requestMsgSet);
AddCustomerCustField(requestMsgSet, custListID, "ID Number", custDrivLiceNum);
sessionManager.DoRequests(requestMsgSet);
/*/
sessionManager.EndSession();
sessionBegun = false;
sessionManager.CloseConnection();
connectionOpen = false;
}
catch (Exception q)
{
if (sessionBegun) { } //sessionManager.EndSession();
if (connectionOpen) { } //sessionManager.CloseConnection();
}
} //End DoCustomerAdd
void BuildCustomerAddRq(IMsgSetRequest requestMsgSet)
{
String CustFirstName = KEY_FIRST_NAME.Text;
String CustLastName = KEY_LAST_NAME.Text;
//String CustCompanyName = TextBox.Text;
String CustEMail = KEY_EMAIL.Text;
bool CustIsOkToEMail = emailList.Checked;
String CustPhone2 = KEY_PHONE.Text;
String CustStreet = KEY_ADDRESS.Text;
String CustCity = KEY_CITY.Text;
String CustState = KEY_STATE.Text;
String CustPostalCode = KEY_ZIP.Text;
String CustCountry = "US";
String CustType = textResultMembershipLevel.Text;
ICustomerAdd CustomerAddRq = requestMsgSet.AppendCustomerAddRq();
//Set field value's
//CustomerAddRq.CompanyName.SetValue(CustCompanyName);
CustomerAddRq.EMail.SetValue(CustEMail);
CustomerAddRq.IsOkToEMail.SetValue(CustIsOkToEMail);
CustomerAddRq.FirstName.SetValue(CustFirstName);
CustomerAddRq.LastName.SetValue(CustLastName);
CustomerAddRq.Phone2.SetValue(CustPhone2); //Cell
CustomerAddRq.BillAddress.City.SetValue(CustCity);
CustomerAddRq.BillAddress.Country.SetValue(CustCountry);
CustomerAddRq.BillAddress.PostalCode.SetValue(CustPostalCode);
CustomerAddRq.BillAddress.State.SetValue(CustState);
CustomerAddRq.BillAddress.Street.SetValue(CustStreet);
CustomerAddRq.CustomerType.SetValue(CustType);
} //End BuildCustomerAddRq
public void AddCustomerCustField(IMsgSetRequest requestMsgSet, String custListID, String fieldName, String enterData)
{
IDataExtAdd DataExtAddRq = requestMsgSet.AppendDataExtAddRq();
DataExtAddRq.OwnerID.SetValue("0"); //field visable in UI so it is "0"
DataExtAddRq.DataExtName.SetValue(fieldName); //name of field
string ORDataExtOwnerElementType = "ListDataExt";
if (ORDataExtOwnerElementType == "ListDataExt")
{
//set for customer add
DataExtAddRq.ORDataExtOwner.ListDataExt.ListDataExtType.SetValue(ENListDataExtType.ldetCustomer);
//give list id for cust
DataExtAddRq.ORDataExtOwner.ListDataExt.ListObjRef.ListID.SetValue(custListID);
}
if (ORDataExtOwnerElementType == "OtherDataExtType")
{
//Set field value for OtherDataExtType
DataExtAddRq.ORDataExtOwner.OtherDataExtType.SetValue(ENOtherDataExtType.odetCompany);
}
//Set field value for DataExtValue
DataExtAddRq.DataExtValue.SetValue(enterData);
} //End AddCustomerCustField
.
感谢您的任何帮助,但请在帮助之前阅读分析。
解决方案
我做了一些测试,发现了可能是造成问题的错误。我使用了默认的自定义字段名称,“自定义1”并收到错误响应“扩展错误(数据扩展名包含无效字符:”Custom 1“)”。我知道这是自定义字段的名称,它是活动的。我将字段的名称更改为“custom1”(没有空格),并且能够更新字段。
查看您的代码,所有字段似乎都有空格。我相信POS SDK中存在一个错误,它不允许在自定义字段名称中的空格。如果您尝试更改字段不包含空格,您仍然存在问题吗?
此外,请记住,如果客户屏幕打开,当您进行更改时,您有时需要关闭并返回客户屏幕以查看更新。它不会触发像QuickBooks中的屏幕刷新。