私は完了するプロジェクトを渡され、クライアントは、各顧客に添付された 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 ループ内です。