1

私は完了するプロジェクトを渡され、クライアントは、各顧客に添付された customrecord のフィールドを Web サイトに表示するよう求めてきました。ログイン時に Netsuite と統合し、データをデータベースに保存しているため、Netsuite にアクセスし続ける必要はありません (非常に遅い)。

ログイン時に、Netsuite にアクセスして SearchMultiSelectCustomField を実行し、顧客の会社を見つけます。次に、CustomRecordSearchBasic を実行し、会社 ID を使用して、顧客がアクセスできるアイテムのリストを取得します。

これらの各項目をループしてから、カスタム フィールドをループします。フィールドの 1 つは -10 の typeId を持ちます。これは、ItemSearchBasic を実行してこのアイテムのレコードとアイテムのカスタム フィールドを取得し、このアイテムの internalId を保存することを意味します。

このループの最後に、会社がリンクされているアイテム ID の配列があります。会社 ID (custrecord_nn_item_customer) とアイテム ID (custrecord_nn_item_customer_list) もあります。

その顧客がそのアイテムに対して承認されているかどうかを確認するために、カスタム レコードに対して get 要求を実行する必要があります。

customrecord の ID は「customrecord_custitem」で、内部 ID は「1」です。レコードには 3 つのフィールドがあります (ただし、顧客の Netsuite レコード ページには 2 つしか表示されません)。

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;
                    }
                }
            }
        }
    }

会社 ID の customrecord フィールドとアイテム ID の現在の反復を取得する必要があるのは、foreach ループ内です。

4

1 に答える 1

1

必要な結果列を含む保存済み検索を設定します。顧客によるフィルタリングについて心配する必要はありません。

コードから検索を呼び出し、現在の顧客を動的にフィルタリングします。

これを行うには、コードの長さを 5 ~ 10 行程度にする必要があり、非常に高速である必要があります。

于 2013-07-07T22:56:39.803 に答える