2013-08-13 18 views
5

Quickbooks Pro 2009list of CustomersC# windows applicationに追加してインポートしています。クイックブック自体にはImport and Exportのオプションがありますが、独自のビジネス検証ロジックを定義しており、クイックブックDBに顧客向けにプッシュしています。カスタムフィールドをインポートおよびエクスポートする方法QuickBooksの顧客一覧の場合

クイックブックには、Additional Tabのカスタムフィールドを定義するオプションがあります。

プログラムでお客様のクイックブックリストを追加している間、私は私がcustom fieldsのためのデータをプッシュしようとした場合Built-In Field valuesCustomer Name同様Company Nameとなどに値を追加することができますよ。それは私にエラーを与える...

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

私はここで間違って何をやっている...任意のに役立ちます?または任意の提案/アイデア?

答えて

3

QuickBooksは、処理するリクエストを作成するときに、XML(.XSD)で定義された非常に特殊な構文を持っています。新しいXMLノードを作って動作させるだけでは意味がありません。

したがって、これは物事を破るために起こっている:

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

カスタムフィールドは、QuickBooksのにDataExtリクエストを送信して修正/追加されます。それらは、メインの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> 

それとも、あなたができるチェーン2つの要求を一緒に:

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

追加の例は、私たちのQuickBooks development wikiで見つけることができるカスタムフィールドを追加するには、いずれか全く別のリクエストを送信することができます。

+0

ご回答ありがとうございます。 – RajeshKdev

関連する問題