6

で、を介しQuickbooks Pro 2009て追加およびインポートしています。クイックブック自体には、顧客リスト用のオプションがありますが、独自のビジネス検証ロジックを定義しており、データを顧客用のクイックブック DB にプッシュしています。list of CustomersC# windows applicationImport and Export

Quick Book では、下にカスタム フィールドを定義するオプションがありますAdditional Tab

プログラムで Quick Book List of Customers を追加しているときに、Built-In Field valuesLikeCustomer Name Company Nameや Etcの値を追加できますcustom fields。エラーが表示されます...

提供された XML テキスト ストリームの解析中に、QuickBooks がエラーを検出しました。

カスタム フィールド データのプッシュ操作をスキップすると、定義済みフィールド データの受け渡しが正常に機能します。

私のコード:

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

ここで何が間違っているのですか..何か助けになりますか?? または任意の提案/アイデア????

4

1 に答える 1

4

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>

または、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>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にあります。

于 2013-08-13T10:37:50.393 に答える