Netsuite - 如何为getall请求指定record_type

时间:2013-10-09 14:40:21

标签: soap wsdl netsuite

我想获得所有InventoryItems的列表 根据这份文件: https://system.netsuite.com/help/helpcenter/en_US/Output/Help/SuiteCloudCustomizationScriptingWebServices/SuiteTalkWebServices/getAll.html

我正在形成以下请求:

<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:platformMsgs="urn:platform_2013_1.webservices.netsuite.com" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Header>
        <passport>
            <email>******</email>
            <password>******</password>
            <account>******</account>
        </passport>
    </env:Header>
    <env:Body>
        <platformMsgs:getAll>
            <recordType>InventoryItem</recordType>
        </platformMsgs:getAll>
    </env:Body>
</env:Envelope>

但接收到错误的回复:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Header>
        <platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2013_1.platform.webservices.netsuite.com">
            <platformMsgs:nsId>WEBSERVICES_969904_100920131651936419141601801_cbf1690968b43</platformMsgs:nsId>
        </platformMsgs:documentInfo>
  </soapenv:Header>
  <soapenv:Body>
      <getAllResponse xmlns="urn:platform_2013_1.webservices.netsuite.com">
          <platformCore:getAllResult xmlns:platformCore="urn:core_2013_1.platform.webservices.netsuite.com">
              <platformCore:status isSuccess="false">
                  <platformCore:statusDetail type="ERROR">
                      <platformCore:code>GETALL_RCRD_TYPE_REQD</platformCore:code>
                      <platformCore:message>The getAll record type is required.</platformCore:message>
                  </platformCore:statusDetail>
              </platformCore:status>
          </platformCore:getAllResult>
      </getAllResponse>
   </soapenv:Body>
</soapenv:Envelope>

我试图请求货币,状态 - 响应始终相同

我尝试过以下变体:

<GetAllRecordType>inventoryItem</GetAllRecordType>

<recordType>inventoryItem</recordType>

<GetAllRecordType>currency</GetAllRecordType>

<recordType>currency</recordType>

有相同的回应:

 <platformCore:message>The getAll record type is required.</platformCore:message>

根据https://webservices.netsuite.com/xsd/platform/v2013_2_0/coreTypes.xsd - 我已经正确指定了recordType(顺便说一下,我也尝试过没有任何成功)

我正在使用ruby,并且没有完整的ruby库。存在的那个几乎不包含我将要使用的所有东西。

有人可以帮我解决我做错了或者可能有人有工作的例子

7 个答案:

答案 0 :(得分:4)

getAll不能用于所有记录类型。以下是getAll支持的内容:

budgetCategory

campaignAudience

campaignCategory

campaignChannel

campaignFamily

campaignOffer

campaignSearchEngine

campaignSubscription

campaignVertical

costCategory

货币

leadSource

salesTaxItem

supportCaseIssue

supportCaseOrigin

supportCasePriority

supportCaseStatus

supportCaseType

taxGroup

taxType

答案 1 :(得分:1)

inventoryItem,而不是InventoryItem。

另外,您使用的是哪种语言?如果是PHP,那么有一个PHPToolkit可以帮助你。

答案 2 :(得分:1)

正如Dave建议的那样,请求将区分大小写,因此请确保您使用的值与XSD所说的完全匹配。

如果您进一步向下滚动XSD,您会看到GetAllRecordType的枚举,而不只是RecordType。这没有inventoryItem或类似内容的条目,因此库存项目很可能在此类请求中不可用。

您可能需要构建一个没有过滤器的项目搜索来返回所有库存项目。

答案 3 :(得分:1)

Ruby中SuiteTalk的最完整实现是netsuite ruby gem

它还不支持ItemSearchAdvanced(请注意,与大多数NetSuite记录不同,不存在ItemSearchBasic)。另请注意,您没有像预期的那样InventoryItemAdvancedSearchNonInventoryItemAdvancedSearch等。有关schema browser的更多信息,请查看lists.accounting.xsd

与其他人提到的一样,项目记录类型没有getAll调用。获取NetSuite实例中所有项目的最佳(也可能是唯一)方法是通过搜索执行分页并组合所有结果。

我编写了一个quick hack来演示为了在NetSuite gem中实现项目搜索需要做些什么。我不会在生产中使用引用的hack,但是您可以使用上面引用的hack信息轻松地将项目搜索集成到NetSuite gem中。

下面是搜索代码,当与上述hack结合使用时,它将为您提供NetSuite实例中的所有项目。

item_list = []
item_search = NetSuite::Records::InventoryItem.search(
  criteria: {
    basic: [

    ]
  },

  preferences: {
    page_size: 100,
  }
)

item_search.results_in_batches do |batch|
  item_list += batch
end

(如果搜索返回NonInventoryItem或其他不是InventoryItem的项目记录,上述代码可能会中断,但这应该足以让您入门了)

答案 4 :(得分:1)

我在与

相同的问题上偶然发现了这个问题
<platformCore:message>The getAll record type is required.</platformCore:message>

想知道我会发一个适当的肥皂信封对于这个请求应该是什么样子的片段。正如其他人所提到的,这个调用只支持某些记录类型......但是一旦你确定了你想要的记录类型,下面的代码应该有所帮助。

<soap:Envelope xmlns:platformFaults="urn:faults_2014_1.platform.webservices.netsuite.com" xmlns:platformMsgs="urn:messages_2014_1.platform.webservices.netsuite.com" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="urn:platform_2014_1.webservices.netsuite.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soap:Header>
        <passport>
            <email>test@example.com</email>
            <password>*******</password>
            <account>AccountNumber</account>
            <role internalId="3"/>
        </passport>
    </soap:Header>
    <soap:Body>
        <platformMsgs:getAll xmlns="urn:messages_2014_1.platform.webservices.netsuite.com" xmlns:platformMsgs="urn:messages_2014_1.platform.webservices.netsuite.com">
            <platformMsgs:record recordType="currency"/>
        </platformMsgs:getAll>
    </soap:Body>
</soap:Envelope>

此外,我们使用node-soap模块与此Web服务进行通信,这也是从这个角度看起来的样子。

soap.createClient(this.url, function (err, client) {
            client.addSoapHeader({
                passport: {
                    email: 'test@example.com',
                    password: 'pass',
                    account: 'Acct Number',
                    role: {
                        attributes: { internalId: 3 }
                    }
                }
            });
            client.getAll({
                "record": {
                  "attributes": {
                    "recordType": "currency"
                    }
                 }
           }, callback);
        });
});

无论如何,我希望这会帮助别人,因为它确实让我感到遗憾。

答案 5 :(得分:1)

对于任何使用PHP而且特别是this library的人,您可以这样指定记录类型:

$getAllRequest = new GetAllRequest();
$getAllRequest->record = new GetAllRecord();
$getAllRequest->record->recordType = RecordType::currency;
$getAllResponse = $service->getAll($getAllRequest);

例如,这会返回所有现有货币的列表。

答案 6 :(得分:0)

也许这个链接很有用:http://tellsaqib.github.io/NSPHP-Doc/df/d09/class_get_all_record_type.html
    GetAllRecordType类没有InventoryItem
  数据字段 const budgetCategory =“budgetCategory”

const campaignAudience =“campaignAudience”

const campaignCategory =“campaignCategory”

const campaignChannel =“campaignChannel”

const campaignFamily =“campaignFamily”

const campaignOffer =“campaignOffer”

const campaignSearchEngine =“campaignSearchEngine”

const campaignSubscription =“campaignSubscription”

const campaignVertical =“campaignVertical”

const costCategory =“costCategory”

const currency =“currency”

const leadSource =“leadSource”

const salesTaxItem =“salesTaxItem”

const state =“state”

const supportCaseIssue =“supportCaseIssue”

const supportCaseOrigin =“supportCaseOrigin”

const supportCasePriority =“supportCasePriority”

const supportCaseStatus =“supportCaseStatus”

const supportCaseType =“supportCaseType”

const taxGroup =“taxGroup”

const taxType =“taxType”