Netsuite получает транзакции SalesOrder из массива внутренних идентификаторов. - PullRequest
0 голосов
/ 24 марта 2020

Я хочу получить массив SalesOrders на основе внутренних идентификаторов Netsuite.

Вот с чем я работаю:

<?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);

Ответ, который я получаю с string или integer значения для $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, чтобы увидеть, что такое searchValue, это именно то, что я предоставляю; RecordRef[]

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

Как получить список или Заказы на продажу с помощью набора инструментов Netsuites PHP при передаче массива внутренних идентификаторов?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Это было решение, я нашел ссылку глубоко в другой части приложения. По правде говоря, я не уверен, в чем разница. Я прошел через это 2-3 раза, и хотя я уверен, что упускаю что-то очевидное, я думаю я связываю одни и те же переменные в тех же точках, хотя в этой ситуации я ' m связывая значения на месте, а не в исходном вопросе, я строил каждую часть по отдельности, а затем связывал их вместе в конце. Концептуально они кажутся одинаковыми. В любом случае, надеюсь, это поможет кому-то в будущем.

$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);
0 голосов
/ 27 марта 2020

Прошло много времени с тех пор, как я работал с PHP, но вы не пропустили индекс массива здесь?

foreach ($salesOrderIds as $id) {
    $ref = new RecordRef();
    $ref->internalId = $id;
    $ref->type = RecordType::salesOrder;
    $salesOrders[MISSING INDEX] = $ref;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...