Как импортировать и экспортировать Настраиваемые поля для списка клиентов в QuickBooks
на Quickbooks Pro 2009
Я добавляю и импорта list of Customers
до C# windows application
. В самой быстрой книге Import and Export
опции существуют для списка клиентов, но мы определили наши собственные логики проверки бизнеса, и мы нажимаем данные на быструю книгу DB для клиентов.
в Quick Book есть возможность определить пользовательские поля в разделе Additional Tab
.
при программном добавлении списка быстрых книг клиентов я могу добавить значения для Built-In Field values
как Customer Name
Company Name
и т. д. Если я попытаюсь нажать данные для custom fields
. Это дает мне ошибку...
QuickBooks обнаружил ошибку при анализе предоставленного текстового потока XML.
если я пропущу операцию нажатия пользовательских данных полей, то передача данных определенных полей будет работать нормально.
Мой Код:
XmlDocument inputXMLDoc = new XmlDocument();
inputXMLDoc.AppendChild(inputXMLDoc.CreateXmlDeclaration("1.0", null, null));
inputXMLDoc.AppendChild(inputXMLDoc.CreateProcessingInstruction("qbxml", "version="2.0""));
XmlElement qbXML = inputXMLDoc.CreateElement("QBXML");
inputXMLDoc.AppendChild(qbXML);
XmlElement qbXMLMsgsRq = inputXMLDoc.CreateElement("QBXMLMsgsRq");
qbXML.AppendChild(qbXMLMsgsRq);
qbXMLMsgsRq.SetAttribute("onError", "stopOnError");
XmlElement custAddRq = inputXMLDoc.CreateElement("CustomerAddRq");
qbXMLMsgsRq.AppendChild(custAddRq);
custAddRq.SetAttribute("requestID", "1");
XmlElement custAdd = inputXMLDoc.CreateElement("CustomerAdd");
custAddRq.AppendChild(custAdd);
//In-Built Columns
custAdd.AppendChild(inputXMLDoc.CreateElement("Name")).InnerText = Name;
custAdd.AppendChild(inputXMLDoc.CreateElement("AccountNumber")).InnerText = AccountNumber;
//Defined Custom Columns
custAdd.AppendChild(inputXMLDoc.CreateElement("CUSTFLD1")).InnerText = JRNL_NO;
String name = CustName.Text.Trim();
string input = inputXMLDoc.OuterXml;
//Push the Data to do the qbXMLRP request
RequestProcessor2 rp = null;
string ticket = null;
string response = null;
try
{
rp = new RequestProcessor2();
rp.OpenConnection("", "IDN CustomerAdd C# sample");
ticket = rp.BeginSession("", QBFileMode.qbFileOpenDoNotCare);
response = rp.ProcessRequest(ticket, input);
}
catch (System.Runtime.InteropServices.COMException ex)
{
MessageBox.Show("COM Error Description = " + ex.Message, "COM error");
}
что я делаю неправильно здесь.. любой помогает?? или любые предложения / идеи ????
1 ответов
QuickBooks имеет очень специфический синтаксис, которому вы должны следовать (определенный XML .XSD) при создании запросов на его обработку. Вы не можете просто создавать новые узлы XML и ожидать, что они будут работать.
таким образом, это собирается сломать вещи:
//Defined Custom Columns
custAdd.AppendChild(inputXMLDoc.CreateElement("CUSTFLD1")).InnerText = JRNL_NO;
пользовательские поля добавляются / изменяются путем отправки DataExt
запросы к QuickBooks. Они полностью отделены от основного CustomerAdd
или CustomerMod
запрос. Чтобы добавить настраиваемые поля, вы можете либо отправить полностью отдельный запрос:
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<DataExtModRq>
<DataExtMod>
<OwnerID>0</OwnerID>
<DataExtName>Your Custom Field Name</DataExtName>
<ListDataExtType>Customer</ListDataExtType>
<ListObjRef>
<FullName>Your Customer Name</FullName>
</ListObjRef>
<DataExtValue>Custom field value</DataExtValue>
</DataExtMod>
</DataExtModRq>
</QBXMLMsgsRq>
</QBXML>
или вы можете связать два запроса вместе:
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<CustomerAddRq requestID="Q3VzdG9tZXJBZGR8MTExMTIxMjE=">
<CustomerAdd>
<Name>Keith Palmer Jr.</Name>
<FirstName>Keith</FirstName>
<MiddleName></MiddleName>
<LastName>Palmer Jr.</LastName>
<BillAddress>
<Addr1>134 Stonemill Road</Addr1>
<City>Mansfield</City>
<State>CT</State>
<PostalCode>06268</PostalCode>
<Country>USA</Country>
</BillAddress>
<Phone>999-99-9999</Phone>
<Email>test@example.com</Email>
<Contact>Keith Palmer Jr.</Contact>
</CustomerAdd>
</CustomerAddRq>
<DataExtModRq>
<DataExtMod>
<OwnerID>0</OwnerID>
<DataExtName>Your Custom Field Name</DataExtName>
<ListDataExtType>Customer</ListDataExtType>
<ListObjRef>
<FullName>Keith Palmer Jr.</FullName>
</ListObjRef>
<DataExtValue>Custom field value</DataExtValue>
</DataExtMod>
</DataExtModRq>
</QBXMLMsgsRq>
</QBXML>
дополнительные примеры можно найти на нашем разработка QuickBooks wiki.