Netsuite PHP Toolkit - 限制保存搜索中返回的字段



我正在为Netsuite进行集成。当我返回保存的搜索时,searchRowBasic属性返回了 300+ 字段。我将在下面包括一个var_dump。

我的源代码来自Magento 2,因此工厂方法超出了范围,但您可以假设它们创建了该类的新实例(我会注意(。

我还使用 netsuite 的作曲家包来利用命名空间,而不是 Netsuite 的官方包,它是一个包含 1600 个类且没有命名空间的文件(认真地(。

/** @var NetsuiteClassesItemSearchAdvanced $searchRecord */
$searchRecord = $this->itemSearchAdvancedFactory->create();
/** @var NetsuiteClassesSearchRow $searchRow */
$searchRow = $this->itemSearchRowFactory->create();
/** @var NetsuiteClassesSearchRowBasic $searchRowBasic */
$searchRowBasic = $this->itemSearchRowBasicFactory->create();
/** @var NetsuiteClassesSearchRequest */
$request = $this->searchRequestFactory->create();
$searchRecord->savedSearchId = 190;
$request->searchRecord = $searchRecord;
/** @var NetsuiteNetsuiteService $netsuiteService */
// Loaded with authentication values.
$netsuiteService = $this->getNetsuiteService();
$netsuiteService->setSearchPreferences(false, 1000);
// Submit the request - returns successful response.
$searchResponse = $netsuiteService->search($request);

我的请求返回成功的响应 (:大拇指:(

问题是我想在整个响应中使用 4 个变量,但数组中有数百个索引未使用。我最担心的是 Netsuite 在响应期间查询这些,我的次要问题是返回多个 KB 的数据,我不会在响应中用于更大的请求。

我已经尝试过这个来取消设置参数,希望如果我取消声明它们,Netsuite 会在响应中忽略它们,但我没有运气。

protected function getSearchRecord(): ItemSearchAdvanced
{
$searchRecord = $this->itemSearchAdvancedFactory->create();
$searchRow = $this->itemSearchRowFactory->create();
$searchRowBasic = $this->itemSearchRowBasicFactory->create();
$i = 0;
$fields = $searchRowBasic::$paramtypesmap;
foreach ($fields as $name => $type) {
// use only the first 10 just to see if only these 10 will be used. 
// no such luck.
if ($i > 10) {
unset($searchRowBasic::$paramtypesmap[$name]);
unset($searchRowBasic->$name);
}
$i++;
}
$searchRow->basic = $searchRowBasic;
$searchRecord->columns = $searchRow;
return $searchRecord;
}

问题:

在发出请求之前,我知道要返回的字段。如何指定这些字段以仅返回我需要的数据,而不是所有可用数据?

以下是查看格式的响应var_dump。我截断了大量数据,如果有人需要更多,我可以轻松提供,但我认为目前提供了足够的信息。

class NetSuiteClassesSearchResponse#2452 (1) {
public $searchResult =>
class NetSuiteClassesSearchResult#2449 (8) {
public $status =>
class NetSuiteClassesStatus#2447 (2) {
public $statusDetail =>
NULL
public $isSuccess =>
bool(true)
}
public $totalRecords =>
int(1)
public $pageSize =>
int(1000)
public $totalPages =>
int(1)
public $pageIndex =>
int(1)
public $searchId =>
string(60) "<requst_id_with_personal_data>"
public $recordList =>
NULL
public $searchRowList =>
class NetSuiteClassesSearchRowList#2475 (1) {
public $searchRow =>
array(1) {
[0] =>
class NetSuiteClassesItemSearchRow#2476 (23) {
public $basic =>
class NetSuiteClassesItemSearchRowBasic#2477 (322) {
public $accBookRevRecForecastRule =>
NULL
public $accountingBook =>
NULL
public $accountingBookAmortization =>
NULL
public $accountingBookCreatePlansOn =>
NULL
public $accountingBookRevRecRule =>
NULL
public $accountingBookRevRecSchedule =>
NULL
public $allowedShippingMethod =>
NULL
public $alternateDemandSourceItem =>
NULL
public $assetAccount =>
NULL
public $atpLeadTime =>
NULL
(more elements)...
}
public $assemblyItemBillOfMaterialsJoin =>
NULL
public $binNumberJoin =>
NULL
public $binOnHandJoin =>
NULL
public $correlatedItemJoin =>
NULL
public $effectiveRevisionJoin =>
NULL
public $fileJoin =>
NULL
public $inventoryDetailJoin =>
NULL
public $inventoryLocationJoin =>
NULL
public $inventoryNumberJoin =>
NULL
(more elements)...
}
}
}
}
}

在搜索来自服务器的XML响应后,看起来Netsuite仅使用我保存的搜索中声明的列进行响应。初始化响应对象时,我收到的其他空值被初始化为默认值。