【问题标题】:Netsuite PHP Toolkit - Limit returned fields in Saved SearchNetsuite PHP Toolkit - 限制已保存搜索中的返回字段
【发布时间】:2019-09-04 21:18:54
【问题描述】:

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

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

我还使用composer package for netsuite 来利用命名空间,而不是 Netsuite 的官方包,它是一个包含 1600 个类且没有命名空间的文件(说真的)。

/** @var Netsuite\Classes\ItemSearchAdvanced $searchRecord */
$searchRecord = $this->itemSearchAdvancedFactory->create();
/** @var Netsuite\Classes\SearchRow $searchRow */
$searchRow = $this->itemSearchRowFactory->create();
/** @var Netsuite\Classes\SearchRowBasic $searchRowBasic */
$searchRowBasic = $this->itemSearchRowBasicFactory->create();

/** @var Netsuite\Classes\SearchRequest */
$request = $this->searchRequestFactory->create();
$searchRecord->savedSearchId = 190;
$request->searchRecord = $searchRecord;

/** @var Netsuite\NetsuiteService $netsuiteService */
// Loaded with authentication values.
$netsuiteService = $this->getNetsuiteService();
$netsuiteService->setSearchPreferences(false, 1000);

// Submit the request - returns successful response.
$searchResponse = $netsuiteService->search($request);

我的请求返回一个成功的响应 (:thumbsup:)

问题是我想在整个响应中使用 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 NetSuite\Classes\SearchResponse#2452 (1) {
    public $searchResult =>
    class NetSuite\Classes\SearchResult#2449 (8) {
        public $status =>
        class NetSuite\Classes\Status#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 NetSuite\Classes\SearchRowList#2475 (1) {
        public $searchRow =>
        array(1) {
            [0] =>
            class NetSuite\Classes\ItemSearchRow#2476 (23) {
            public $basic =>
            class NetSuite\Classes\ItemSearchRowBasic#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)...
            }
        }
        }
    }
}

【问题讨论】:

    标签: php netsuite


    【解决方案1】:

    从服务器搜索 XML 响应后,Netsuite 似乎只响应了我保存的搜索中声明的列,如我所愿。我收到的其他空值在响应对象初始化时被初始化为默认值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多