2013-07-25 67 views
0

因此,我一直在嘗試將customers添加到我們業務的本地數據庫實例的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?

UPDATE: 這是原始的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> 

Intuit公司的迴應:

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

回答

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進行測試,然後使用正確的setter在代碼中執行相同的操作。

請讓我知道它是怎麼回事。

謝謝

+0

這使得它更清晰。根據[文檔](https://developer.intuit.com/docs/0025_quickbooksapi/0050_data_services/v2/0400_quickbooks_online/customer),它看起來不像QBO Customer對象的AcctNum屬性。我絕對在我的代碼中使用Intuit.Ipp.Data.Qbo,所以這很讓人困惑。猜猜Intuit只是忽略了這個屬性。 – Jonathan

+0

AcctNum與QBD而非QBO有關。 Devkit提供了一個通用的包裝器,所以你在編碼時得到了這個領域。 QBO Doc向您提供允許的字段列表。 –

0

參考文獻:

你會注意到:

  • ID是IPP/IDS產生一個內部關鍵 - 這是不是你可以設定自己。
  • ExternalKey是相同的情況 - 它是由IPP/IDS生成的,不能由您設置。
  • ExternalId標記爲「UNSUPPORTED FIELD」。
  • AlternateId標記爲「NOT SUPPORTED」。

這些字段應該工作的只有一個:

  • ACCTNUM

如果你仍然有該領域的問題,解決的辦法是讓來自Intuit的原始XML傳出請求,返回的原始XML(顯示成功),以及查詢時返回的原始響應,並顯示它爲NULL。