我正在寻找基于Netsuite内部ID的SalesOrder数组。
这是我正在使用的东西:
<?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",
);
}
这是解决方案,我在应用程序的另一部分中找到了参考。说真的,我不确定有什么区别。我经历了2-3倍,虽然我确定我遗漏了一些明显的东西,但我think我在相同的位置链接了相同的变量,即使在这种情况下,我正在链接在适当的位置建立价值,而不是在最初的问题中,我分别构建每个部分,然后最终将它们链接在一起。从概念上讲,它们似乎是同一回事。无论哪种方式,希望对以后的人有所帮助。
$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);
自从我使用PHP以来已经有一段时间了,但是您不是在这里错过了数组索引吗?
foreach ($salesOrderIds as $id) {
$ref = new RecordRef();
$ref->internalId = $id;
$ref->type = RecordType::salesOrder;
$salesOrders[MISSING INDEX] = $ref;
}