Recently, I have involved in NetSuite ERP implementation for a client. I have successfully integrated Magento and Netsuite with some automation, Order Import, blanket order import, Sample Order import, etc. This tutorial is about what I have learned through testing and evaluating the new ERP System. In NetSuite, I have created some search php scripts with SuiteTalk( Web Services). First, the goal is to find all the sales orders contain a specific item. Then I narrow it down to the sales orders not only contain the specific item but belong to a customer. There is not many tutorials online to fulfill this type of search query with PHP. So I created and presented it for you to evaluate it. This code is based on another NetSuite PHP API Client, “ryanwinchester/netsuite-php”. You can look it up in Github with that “Keywords”. All these scripts are working on Netsuite 2017_1 or above.
Search based on a specific item
setSearchPreferences(false, 20); $search = new TransactionSearch(); $basic = new TransactionSearchBasic(); $tsRow = new TransactionSearchRow(); $rowBasic = new TransactionSearchRowBasic(); $advanced = new TransactionSearchAdvanced(); //We are searching sales Order record $searchEnumMultiSelectField = new SearchEnumMultiSelectField(); setFields($searchEnumMultiSelectField, array('operator' => 'anyOf', 'searchValue' => '_salesOrder')); $basic->type = $searchEnumMultiSelectField; //We are searching sales order with a specific item (internalId is 5571) $searchValue = new RecordRef(); $searchValue->type = 'lotNumberedInventoryItem'; $searchValue->internalId = 5571; $searchMultiSelectField = new SearchMultiSelectField(); setFields($searchMultiSelectField, array('operator' => 'anyOf', 'searchValue' => $searchValue)); $basic->item = $searchMultiSelectField; $search->basic = $basic; $request = new SearchRequest(); $request->searchRecord = $search; $searchResponse = $service->search($request); if (!$searchResponse->searchResult->status->isSuccess) { var_dump($searchResponse->searchResult->status->statusDetail); echo "SEARCH ERROR\n"; } else { $result = $searchResponse->searchResult; $count = $result->totalRecords; $records = $result->recordList; foreach($records->record as $record){ var_dump($record->tranId); } echo "\n"; echo $count . " records were found.\n"; }
Search based on both specific item and customer
setSearchPreferences(false, 20); $search = new TransactionSearch(); $basic = new TransactionSearchBasic(); $tsRow = new TransactionSearchRow(); $rowBasic = new TransactionSearchRowBasic(); $advanced = new TransactionSearchAdvanced(); //We are searching sales Order record $searchEnumMultiSelectField = new SearchEnumMultiSelectField(); setFields($searchEnumMultiSelectField, array('operator' => 'anyOf', 'searchValue' => '_salesOrder')); $basic->type = $searchEnumMultiSelectField; //We are searching sales order with a specific item (internalId is 5571) $searchValue = new RecordRef(); $searchValue->type = 'lotNumberedInventoryItem'; $searchValue->internalId = 5571; $searchMultiSelectField = new SearchMultiSelectField(); setFields($searchMultiSelectField, array('operator' => 'anyOf', 'searchValue' => $searchValue)); $basic->item = $searchMultiSelectField; //We performed a search with a specific customer.(internalId = 2570) $searchValue = new RecordRef(); $searchValue->type = 'customer'; $searchValue->internalId = 2570; $searchMultiSelectField = new SearchMultiSelectField(); setFields($searchMultiSelectField, array('operator' => 'anyOf', 'searchValue' => $searchValue)); $basic->entity = $searchMultiSelectField; $search->basic = $basic; $request = new SearchRequest(); $request->searchRecord = $search; $searchResponse = $service->search($request); if (!$searchResponse->searchResult->status->isSuccess) { var_dump($searchResponse->searchResult->status->statusDetail); echo "SEARCH ERROR\n"; } else { $result = $searchResponse->searchResult; $count = $result->totalRecords; $records = $result->recordList; foreach($records->record as $record){ var_dump($record->tranId); } echo "\n"; echo $count . " records were found.\n"; }
The Search narrowed down further, with only 2 items returned
Search based on CustomList Field
setSearchPreferences(false, 20); $basic = new TransactionSearchBasic(); //Only search with _salesOrder type $searchEnumMultiSelectField = new SearchEnumMultiSelectField(); setFields($searchEnumMultiSelectField, array('operator' => 'anyOf', 'searchValue' => '_salesOrder')); $basic->type = $searchEnumMultiSelectField; //find all sales order total amount greater than 84000 //we created a custom field name 'custbody_stc_total_after_discount' //you need to change it accordingly $searchDoubleCustomField = new SearchDoubleCustomField(); setFields($searchDoubleCustomField, array('operator' => 'greaterThan', 'searchValue' => 84000)); $searchDoubleCustomField->scriptId = 'custbody_stc_total_after_discount'; $searchCustomFieldList = new SearchCustomFieldList(); $searchCustomFieldList->customField = $searchDoubleCustomField; $basic->customFieldList = $searchCustomFieldList; $request = new SearchRequest(); $request->searchRecord = $basic; $searchResponse = $service->search($request); if (!$searchResponse->searchResult->status->isSuccess) { var_dump($searchResponse->searchResult->status->statusDetail); echo "SEARCH ERROR\n"; } else { $result = $searchResponse->searchResult; $count = $result->totalRecords; $records = $result->recordList; foreach($records->record as $record) { var_dump($record->tranId); } echo "\n"; echo $count . " records were found.\n"; }