Netsuite - 使用php工具包获取自定义记录

时间:2013-04-04 04:14:48

标签: php record toolkit netsuite

我已经完成了一个项目,客户已经要求每个客户的自定义记录中的字段显示在他们的网站上。我们在登录时与Netsuite集成,并将数据保存在我们的数据库中,这样我们就不必继续访问Netsuite(非常慢)。

登录时,我们访问Netsuite以执行SearchMultiSelectCustomField并找到客户的公司,然后执行CustomRecordSearchBasic并使用其公司ID获取他们有权访问的项目列表。

我们循环遍历每个项目,然后遍历其自定义字段。其中一个字段的typeId为-10,这意味着我们使用ItemSearchBasic来获取此项目的记录和项目的自定义字段,从而保存此项目的internalId。

在此循环结束时,我们有一个公司链接到的项目ID数组。我们还有公司ID(custrecord_nn_item_customer)和项目ID(custrecord_nn_item_customer_list)。

我需要在自定义记录上执行get请求,以检查该客户是否已获得该项目的批准。

customrecord的ID是'customrecord_custitem',内部Id是'1'。 该记录有3个字段(尽管只有2个字段显示在客户的Netsuite Record页面上):

custrecord_lookup_item - 这是项目记录代码(上面的custrecord_nn_item_customer_list) custrecord_custitem_code是我需要的代码

我的问题(毕竟是)是否有人有任何例子,或者可以指出我如何能够访问附加到客户的自定义记录?我认为提供了所有必要的信息,但我以前从未使用过Netsuite或PHP工具包。

$this->depends('netsuite');
$this->netsuite->start();

// get the "customer" (aka company) that the user's contact record belongs to
$companySearch = $this->netsuite->complexObject('SearchMultiSelectCustomField')
    ->setFields(array(
        'searchValue' => new nsListOrRecordRef(array('internalId' => $companyId)),
        'internalId' => 'custrecord_nn_item_customer',
        'operator' => 'anyOf'
    ));

// Fetch items that the user's company has access to
$search = $this->netsuite->complexObject('CustomRecordSearchBasic')
    ->setFields(array(
        'recType' => new nsCustomRecordRef(array(
            'internalId' => 260,
            'type' => 'customRecord')
        ),
        'customFieldList' => array($companySearch)
    ));
    $response = $this->netsuite->client->search($search);



    // loop over the items
    foreach($this->netsuite->complexToSimple($response->recordList) as $record){
        //var_dump($record);
        $processor = null;
        $this_item = '';
        $this_person = '';
        // foreach custom field (all the fields we're interested in, common name etc. are custom)
        foreach($record['customFieldList']['customField'] as $customField){
            $processor = $customField['value'];
            $id = $processor['internalId'];
            $typeId = $processor['typeId'];

            if($customField['internalId']=='custrecord_nn_item_customer'){
                $this_person = $id;
            }elseif($customField['internalId']=='custrecord_nn_item_customer_list'){
                $this_item = $id;
            }

            // a typeId of -10 = an Inventory Item
            if($typeId == -10){


                // do an ItemSearchBasic to fetch the item with it's custom fields
                $itemSearch = $this->netsuite->complexObject('ItemSearchBasic')
                    ->setFields(array(
                        'internalId' => array(
                            'operator' => 'anyOf',
                            'searchValue' => array('type' => 'inventoryItem', 'internalId' => $id)
                        )
                    ));

                $itemSearch = $this->netsuite->client->search($itemSearch);

                // foreach custom item field
                if($v=@$this->netsuite->complexToSimple($itemSearch->recordList)){
                    foreach($v as $itemRecord){
                        //var_dump($itemRecord);
                        $item = array('id' => $itemRecord['internalId']);

                        $items[] = $item;
                    }
                }
            }
        }
    }

在foreach循环中,我需要获取公司ID的customrecord字段和项ID的当前迭代。

1 个答案:

答案 0 :(得分:1)

使用您需要的结果列设置已保存的搜索。不要担心客户过滤。

从您的代码中调用搜索,并动态过滤当前客户。

你的代码应该大约5到10行才能完成,并且应该非常快。