我正在尝试使用NetSuite API搜索NetSuite供应商(可能存在或不存在于NetSuite中);但是,我对供应商的唯一信息是externalId。我的目标是使用给定的externalId查询供应商的NetSuite,如果供应商存在,则在后续的API调用中使用它。如果供应商不存在,我将创建它并使用我刚刚在后续API调用中创建的供应商 尽管我进行了搜索,但我还是找不到通过externalId搜索NetSuite记录的方法(我发现了很多方法可以通过Field搜索;但是我找不到通过属性搜索的方法,即externalId)。 任何帮助表示赞赏。
答案 0 :(得分:6)
经过进一步的研究和一点帮助后,我发现了如何通过externalId进行搜索。希望这对未来的人有用:
使用php: 创建一个新的GetRequest()对象和一个新的RecordRef()对象 将RecordRef的externalId设置为所需的外部ID 将RecordRef的类型设置为“vendor” 将GetRequest的baseRef设置为刚刚创建的RecordRef 使用NetSuite客户端执行get()方法,传递先前创建的GetRequest()对象。 get()方法将返回一个GetResponse(),其中包含有关搜索的信息(以及对象(如果存在))。
$getRequest = new \NetSuite\WebServices\GetRequest();
$recordRef = new \NetSuite\WebServices\RecordRef();
$recordRef->externalId = "theExternalIdGoesHere";
$recordRef->type = "vendor";
$getRequest->baseRef = $recordRef;
$response = $client->get($getRequest);
答案 1 :(得分:3)
使用Restlet
var vendorFilter = [];
vendorFilter.push(new nlobjSearchFilter('externalid',null,'is',dataIn.externalid);
var vendorList = nlapiSearchRecord('vendor',null,vendorFilter,null);
var record = (vendorList!=null) ? nlapiLoadRecord('vendor',vendorList[0].getId()) : nlapiCreateRecord('vendor');
// process your logic
答案 2 :(得分:1)
这是c#的代码段:(我使用了externalId数组,以防万一你需要多个)
SearchMultiSelectField field =
new SearchMultiSelectField
{
@operator = SearchMultiSelectFieldOperator.anyOf,
operatorSpecified = true
};
var itemList = new List<com.netsuite.webservices.RecordRef>();
foreach (var externalId in externalIds)
{
var recRef = new com.netsuite.webservices.RecordRef
{
externalId = externalId
};
itemList.Add(recRef);
}
field.searchValue = itemList.ToArray();
var basic = new TransactionSearchBasic {externalId = field};
NetSuiteService service; // Instantiate with netsuite creds
SearchResult results = service.search(selectSearch);
List<Record> transactions = new List<Record>();
if (results?.status?.isSuccess ?? false)
{
for (int i = 1; i <= results.totalPages; i++)
{
var recordList = results.recordList;
transactions.AddRange(recordList);
}
}
else if (results?.status != null)
{
this.log.Debug(GetStatusDetails(results.status));
}
else
{
this.log.Debug("Failed to recieve results");
}
return transactions;
答案 3 :(得分:0)
来自user5227543的restlet代码对我有用,除了我必须添加对vendorList.length&gt; 0的检查以及空检查:
var record =(vendorList!= null&amp;&amp; vendorList.length&gt; 0)? nlapiLoadRecord(&#39; vendor&#39;,vendorList [0] .getId()):nlapiCreateRecord(&#39; vendor&#39;);