2013-08-13 4 views
5

In Quickbooks Pro 2009 Ich bin Hinzufügen und Importieren list of Customers über die C# windows application. In Quick Book selbst Import and Export Optionen gibt es für Kunden-Liste, aber wir haben unsere eigenen Business-Validierungen Logiken definiert und wir schieben die Daten zu Quick Book DB für Kunden.So importieren und exportieren Sie benutzerdefinierte Felder für die Kundenliste in QuickBooks

In Quick Book gibt es eine Option zum Definieren benutzerdefinierter Felder unter Additional Tab.

Während Schnell Buch Liste der Kunden, programmatisch hinzufügen, ich bin in der Lage, die Werte für Built-In Field values Wie Customer NameCompany Name und Etc. hinzufügen Wenn ich versuche, die Daten für custom fields zu schieben. Es gibt mir den Fehler ...

QuickBooks fand einen Fehler beim Parsen des bereitgestellten XML-Text-Stream.

Wenn ich die benutzerdefinierte Feld Daten Push-Operation überspringen dann definierte Felder Datenübergabe funktioniert gut.

Mein Code:

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

Was bin ich hier falsch machen .. jeder hilft ?? oder irgendwelche Vorschläge/Ideen ????

Antwort

3

QuickBooks hat eine sehr spezifische Syntax, der Sie bei der Erstellung von Anforderungen für die Verarbeitung folgen müssen (definiert durch XML .XSD). Sie können nicht einfach neue XML-Knoten erstellen und erwarten, dass sie funktionieren.

So, das wird die Dinge brechen:

//Defined Custom Columns 
custAdd.AppendChild(inputXMLDoc.CreateElement("CUSTFLD1")).InnerText = JRNL_NO; 

Benutzerdefinierte Felder werden hinzugefügt/geändert durch DataExt Anfragen an Quickbooks zu senden. Sie sind vollständig getrennt von der Hauptanforderung CustomerAdd oder CustomerMod. Um die benutzerdefinierten Felder hinzufügen, können Sie entweder über eine eigene Anfrage senden:

<?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> 

Oder Sie können die Kette die beiden Anfragen zusammen:

<?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>[email protected]</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> 

Weitere Beispiele finden Sie auf unserer QuickBooks development wiki finden.

+0

Danke für Ihre Antwort und Antwort. – RajeshKdev