Netsuite 从一组内部 ID 中获取 SalesOrder 交易

Netsuite get SalesOrder transactions from an array of internal IDs

我正在寻找基于 Netsuite 内部 ID 的销售订单数组。

这是我正在处理的内容:

<?php

// Collect record references to sales orders by internal ID.
$salesOrderIds = [ 1, 2, 3, 4 ];
$salesOrders = [];

foreach ($salesOrderIds as $id) {
    $ref = new RecordRef();
    $ref->internalId = $id;
    $ref->type = RecordType::salesOrder;
    $salesOrders[] = $ref;
}

// Prepare Sales Orders as field for basic search.
$field = new SearchMultiSelectField();
$field->operator = SearchMultiSelectFieldOperator::anyOf;
$field->searchValue = $salesOrders; // I have also tried a RecordRefList here as well with no luck.

// Declare search to search sales order transactions with the internal id multiselect field above.
$basic = new TransactionSearchBasic();
$basic->type = RecordType::salesOrder;
$basic->internalId = $field; // Expected type is correct: SearchMultiSelectField

// Set the search record within the search request.
$search = new SearchRequest();
$search->searchRecord = $basic;

// This is based on application code and is working as expected. 
// As far as i'm concerned, this is out of scope of the question (to my knowledge).
$response = $this->basicSearch->queryNetsuite($search, RecordType::salesOrder);

我得到的 stringinteger$ref->internalId 的响应是:

class NetSuite\Classes\Status#480 (2) {
    public $statusDetail =>
    array(1) {
      [0] =>
      class NetSuite\Classes\StatusDetail#557 (4) {
        public $code =>
        string(20) "INVALID_SEARCH_VALUE"
        public $message =>
        string(35) "You need to provide a search value."
        public $afterSubmitFailed =>
        NULL
        public $type =>
        string(5) "ERROR"
      }
    }
    public $isSuccess =>
    bool(false)
  }

当我查看 SearchMultiSelectField class 以查看 searchValue 是什么时,这正是我提供的; RecordRef[]

class SearchMultiSelectField {
    public $searchValue;
    public $operator;
    static $paramtypesmap = array(
        "searchValue" => "RecordRef[]",
        "operator" => "SearchMultiSelectFieldOperator",
    );
}

如何在传递内部 ID 数组时通过 Netsuites PHP 工具包获取列表或销售订单?

我已经有一段时间没用 PHP 了,但你是不是遗漏了这里的数组索引?

foreach ($salesOrderIds as $id) {
    $ref = new RecordRef();
    $ref->internalId = $id;
    $ref->type = RecordType::salesOrder;
    $salesOrders[MISSING INDEX] = $ref;
}

这就是解决方案,我在应用程序的另一部分深处找到了参考。说实话,我不确定有什么区别。我已经经历了这 2-3 倍,虽然我确定我遗漏了一些明显的东西,但我 认为 我正在将相同的变量链接到相同的位置,即使在在这种情况下,我将值链接到位,而不是在最初的问题中,我是单独构建每个部分,然后最后将它们链接在一起。从概念上讲,它们似乎是同一件事。无论哪种方式,希望这对将来的人有所帮助。

$ids = [1, 2, 3, 4];

$tranSearchBasic = new TransactionSearchBasic();
$tranSearchBasic->internalId = new SearchMultiSelectField();
$tranSearchBasic->internalId->operator = SearchMultiSelectFieldOperator::anyOf;

foreach ($ids as $id) {
    $internalIdField = new RecordRef();
    $internalIdField->internalId = $id;
    $internalIdField->type = RecordType::salesOrder;

    $tranSearchBasic->internalId->searchValue[] = $internalIdField;
}

$searchRequest = new SearchRequest();
$searchRequest->searchRecord = $tranSearchBasic;

// Same out of scope application code.
$response = $this->basicSearch->queryNetsuite($searchRequest, RecordType::salesOrder);