0

因此,我一直在尝试从我们公司的本地数据库实例将客户添加到 QuickBooks Online。我想在 QBO 中跟踪我们的内部客户参考号,因此尝试将它们保存到几个不同的属性中,例如 AcctNum、ExternalKey、ExternalId、AlternateId,甚至直接保存到 Id 属性中。尝试保存到这些字段后,返回结果看起来不错。

var qbCustomer = new Customer
                    {
                        AcctNum = customer.CustRef.ToString(CultureInfo.InvariantCulture),
                        ExternalKey = new IdType {idDomain = idDomainEnum.NG, Value = customer.CustRef.ToString(CultureInfo.InvariantCulture)},
                        Id = new IdType {idDomain = idDomainEnum.NG, Value = customer.CustRef.ToString(CultureInfo.InvariantCulture)},
                        Name = customer.CustName1,
                        FamilyName = customer.CustRef.ToString(CultureInfo.InvariantCulture),
                    };

Customer resultCustomer = dataServices.Add(qbCustomer);

但是下次我检索这些客户时,所有这些字段都是空的。为什么这些字段不保存?除了仅使用纯文本字段之一(姓名、地址等)之外,是否还有另一个更合适的字段可用于存储外部 ID?

更新:这是原始的 XML 交换。

添加新客户时我发送的内容:

<?xml version="1.0" encoding="utf-8"?>
<q1:Customer xmlns="http://www.intuit.com/sb/cdm/qbo" xmlns:q1="http://www.intuit.com/sb/cdm/v2">
<q1:Id>7</q1:Id>
<q1:ExternalKey>7</q1:ExternalKey>
<q1:TypeOf>Person</q1:TypeOf>
<q1:Name>Customer Name</q1:Name>
<q1:FamilyName>7</q1:FamilyName>
<q1:AcctNum>7</q1:AcctNum>
</q1:Customer>

直觉的回应:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Customer xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:qbp="http://www.intuit.com/sb/cdm/qbopayroll/v1" xmlns:qbo="http://www.intuit.com/sb/cdm/qbo">
<Id idDomain="QBO">12</Id>
<SyncToken>0</SyncToken>
<MetaData><CreateTime>2013-07-25T13:51:43-07:00</CreateTime><LastUpdatedTime>2013-07-25T13:51:43-07:00</LastUpdatedTime></MetaData>
<Name>Customer Name</Name>
<WebSite/>
<Email/>
<FamilyName>7</FamilyName>
<CustomField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="StringTypeCustomField"><DefinitionId>Preferred Delivery Method</DefinitionId><Value>DONT</Value></CustomField>
<CustomField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="StringTypeCustomField"><DefinitionId>Resale Number</DefinitionId></CustomField>
<CustomField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="BooleanTypeCustomField"><DefinitionId>Bill With Parent</DefinitionId><Value>false</Value></CustomField>
<ShowAs>Erik Kunze/Magdalena Guarda Munoz</ShowAs>
<OpenBalance><Amount>0</Amount></OpenBalance>
</Customer>

我后来的检索:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<qbo:SearchResults xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:qbp="http://www.intuit.com/sb/cdm/qbopayroll/v1" xmlns:qbo="http://www.intuit.com/sb/cdm/qbo">
<qbo:CdmCollections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Customers">
<Customer>
<Id idDomain="QBO">12</Id>
<SyncToken>0</SyncToken>
<MetaData><CreateTime>2013-07-25T13:51:43-07:00</CreateTime><LastUpdatedTime>2013-07-25T13:51:43-07:00</LastUpdatedTime></MetaData>
<Name>Customer Name</Name>
<WebSite/>
<Email/>
<FamilyName>7</FamilyName>
<CustomField xsi:type="BooleanTypeCustomField"><DefinitionId>Bill With Parent</DefinitionId><Value>false</Value></CustomField>
<CustomField xsi:type="StringTypeCustomField"><DefinitionId>Preferred Delivery Method</DefinitionId><Value>DONT</Value></CustomField>
<ShowAs>Erik Kunze/Magdalena Guarda Munoz</ShowAs>
<OpenBalance><Amount>0</Amount></OpenBalance>
</Customer>
</qbo:CdmCollections>
<qbo:Count>1</qbo:Count>
<qbo:CurrentPage>1</qbo:CurrentPage>
</qbo:SearchResults>

任何地方的原始 XML 中都没有 AcctNum。

4

2 回答 2

1

您在 apiexplorer 中引用 QBD 的客户端点。

正确的 QBO 链接 - https://developer.intuit.com/apiexplorer?apiname= V2QBO #Customer

Api 文档和示例创建请求 - https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/v2/0400_quickbooks_online/customer#Sample_Create_Request_XML

创建 QBO 客户的最简单请求体 -

<Customer xmlns:ns2="http://www.intuit.com/sb/cdm/qbo" xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:ns3="http://www.intuit.com/sb/cdm/baseexceptionmodel/xsd">
    <TypeOf>Person</TypeOf>
    <Name>TestQBCustomer12345</Name>
</Customer>

最简单的反应

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Customer xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:qbp="http://www.intuit.com/sb/cdm/qbopayroll/v1" xmlns:qbo="http://www.intuit.com/sb/cdm/qbo">
    <Id idDomain="QBO">14</Id>
    <SyncToken>0</SyncToken>
    <MetaData>
        <CreateTime>2013-07-25T14:08:49-07:00</CreateTime>
        <LastUpdatedTime>2013-07-25T14:08:49-07:00</LastUpdatedTime>
    </MetaData>
    <Name>TestQBCustomer12345</Name>
    <WebSite/>
    <Email/>
    <CustomField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="StringTypeCustomField">
        <DefinitionId>Preferred Delivery Method</DefinitionId>
        <Value>DONT</Value>
    </CustomField>
    <CustomField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="StringTypeCustomField">
        <DefinitionId>Resale Number</DefinitionId>
    </CustomField>
    <CustomField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="BooleanTypeCustomField">
        <DefinitionId>Bill With Parent</DefinitionId>
        <Value>false</Value>
    </CustomField>
    <ShowAs>TestQBCustomer12345</ShowAs>
    <OpenBalance>
        <Amount>0</Amount>
    </OpenBalance>
</Customer>

您可以先使用 apiexplorer 对其进行测试,然后使用适当的设置器在您的代码中执行相同的操作。

请让我知道情况如何。

谢谢

于 2013-07-25T21:16:42.257 回答
0

参考文档:

你会注意到:

  • Id 是 IPP/IDS 生成的内部密钥 - 这不是您可以自己设置的。
  • ExternalKey 是同样的情况——它是由 IPP/IDS 生成的,你不能设置。
  • ExternalId 被标记为“不支持的字段”。
  • AlternateId 被标记为“不支持”。

这些领域中唯一应该起作用的是:

  • 帐号

如果您仍然遇到该字段的问题,则排除故障的方法是从 Intuit 获取原始 XML 传出请求、您返回的原始 XML(显示成功)以及查询时返回的原始响应,表明它是NULL。

于 2013-07-25T20:16:06.840 回答