java - 如何为 QuickBooks 中的客户列表导入和导出自定义字段

标签 java c# window quickbooks

Quickbooks Pro 2009 中,我通过 C# windows 应用程序 添加和导入客户列表。在 quick book 本身中,Import 和 Export 选项用于客户列表,但我们已经定义了自己的业务验证逻辑,我们正在将数据推送到客户的 Quick book DB。

在 Quick Book 中,有一个选项可以在 Additional Tab 下定义自定义字段。

在以编程方式添加客户快速预订列表时,我能够为 Built-In Field values 添加值,例如 Customer Name Company Name 等等。如果我尝试为 自定义字段 推送数据。它给我错误...

QuickBooks found an error when parsing the provided XML text stream.

如果我跳过自定义字段数据推送操作,则定义的字段数据传递工作正常。

我的代码:

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

我在这里做错了什么……有什么帮助吗??或任何建议/想法????

最佳答案

QuickBooks 在创建要处理的请求时必须遵循非常具体的语法(由 XML .XSD 定义)。您不能只创建新的 XML 节点并期望它们能够工作。

因此,这会破坏事情:

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

通过向 QuickBooks 发送 DataExt 请求来添加/修改自定义字段。它们完全独立于主要的 CustomerAddCustomerMod 请求。要添加自定义字段,您可以发送一个完全独立的请求:

<?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 development wiki 上找到.

关于java - 如何为 QuickBooks 中的客户列表导入和导出自定义字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18202469/

相关文章:

c# - 如何在列表中找到最接近的字符串

cocoa - Cocoa 中不支持的配置错误 (Xcode)

java - 配置到jsf中的错误页面时出错?

java - 服务器无缘无故返回 415 HTTP 代码

Java在Windows和Mac按键检测上的差异

java - 如何在JSP页面中垂直打印出ArrayList对象?

c# - 无法让 Lamar (IOC) 解决 .NET Core 3.1 中的 API Controller 依赖关系

c# - IoC 容器 - 仅为特定服务注入(inject)新的 DbContext 实例

c# - 在光标位置打开一个小 float 窗口

html - 当我调整窗口大小时,即使使用包装器 div,div 也会四处移动?