2013-08-13 16 views
5

In Quickbooks Pro 2009 Sto aggiungendo e importando list of Customers tramite C# windows application. Nel libro rapido stesso le opzioni Import and Export sono disponibili per l'elenco clienti, ma abbiamo definito le nostre logiche di convalida aziendale e stiamo trasferendo i dati al DB libro rapido per i clienti.Come importare ed esportare campi personalizzati per l'elenco clienti in QuickBooks

In Quick Book è disponibile un'opzione per definire campi personalizzati sotto Additional Tab.

Mentre a livello di codice l'aggiunta rapida Libro Elenco dei clienti, sono in grado di aggiungere i valori per Built-In Field values Come Customer NameCompany Name ed ecc Se provo a spingere i dati per custom fields. Mi ha dato l'errore ...

QuickBooks ha rilevato un errore durante l'analisi del flusso di testo XML fornito.

Se salto l'operazione di spinta dei dati del campo personalizzato, i campi definiti funzionano correttamente.

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

Che cosa sto facendo di sbagliato qui .. qualsiasi aiuta ?? o qualche suggerimento/idee ????

risposta

3

QuickBooks ha una sintassi molto specifica che è necessario seguire (definita da un XML .XSD) durante la creazione delle richieste per l'elaborazione. Non puoi semplicemente creare nuovi nodi XML e aspettarti che funzionino.

Così, questo sta andando a rompere le cose: sono aggiunti/modificati

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

campi personalizzati inviando DataExt richieste a QuickBooks. Sono completamente separati dalla richiesta principale CustomerAdd o CustomerMod. Per aggiungere i campi personalizzati, è possibile inviare una richiesta completamente separata:

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

In alternativa, è possibile concatenare le due richieste insieme:

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

Ulteriori esempi si possono trovare sul nostro QuickBooks development wiki.

+0

Grazie per la risposta e la risposta. – RajeshKdev

Problemi correlati