我有一个小型 C# 控制台应用程序,其唯一目的是从 NetSuite 中的“已保存搜索”接收记录(通过 SuiteTalk)。我已经能够成功地连接并从 NetSuite 接收记录以用于我的已保存搜索(搜索也可以通过 Web 界面正常运行),但是当我尝试通过我的应用程序访问“已保存搜索”的结果时,我无法查看它们,因为返回的搜索对象不包含“recordList”属性中的任何数据:
//Connect
var dataCenterAwareNetSuiteService = new DataCenterAwareNetSuiteService("XXXXXX");
dataCenterAwareNetSuiteService.Timeout = 1000 * 60 * 60 * 2;
//Adds Credentials etc...
dataCenterAwareNetSuiteService.tokenPassport = createTokenPassport();
//Setup Preferences
var prefs = new Preferences();
prefs.warningAsErrorSpecified = true;
prefs.warningAsError = false;
dataCenterAwareNetSuiteService.preferences = prefs;
var searchPrefs = new SearchPreferences();
dataCenterAwareNetSuiteService.searchPreferences = searchPrefs;
dataCenterAwareNetSuiteService.searchPreferences.pageSize = 5;
dataCenterAwareNetSuiteService.searchPreferences.pageSizeSpecified = true;
dataCenterAwareNetSuiteService.searchPreferences.bodyFieldsOnly = false;
dataCenterAwareNetSuiteService.searchPreferences.returnSearchColumns = false;
//Search
var tranSearchAdv = new TransactionSearchAdvanced();
var tranSearchRow = new TransactionSearchRow();
var tranSearchRowBasic = new TransactionSearchRowBasic();
tranSearchAdv.savedSearchId = "XXXX";
tranSearchRowBasic.internalId =
new SearchColumnSelectField[] { new SearchColumnSelectField() };
tranSearchRowBasic.tranId =
new SearchColumnStringField[] { new SearchColumnStringField() };
tranSearchRowBasic.dateCreated =
new SearchColumnDateField[] { new SearchColumnDateField() };
tranSearchRowBasic.total =
new SearchColumnDoubleField[] { new SearchColumnDoubleField() };
tranSearchRowBasic.entity =
new SearchColumnSelectField[] { new SearchColumnSelectField() };
tranSearchRow.basic = tranSearchRowBasic;
tranSearchAdv.columns = tranSearchRow;
//No errors,
//this works correctly and returns the "Saved Search" with the correct "totalRecords"
//but results.recordList == null while results.totalRecords = 10000000+
var results = dataCenterAwareNetSuiteService.search(tranSearchAdv);
在我看来,“recordList”对象是从搜索结果中检索数据的主要方式(相关 Java 示例,此处的另一个)。这也是示例 API执行此操作的方式。
我已经在多个“保存的搜索”上运行了这个,结果相同。我不明白您如何在“totalRecords”中有多个记录,而“recordList”仍然为空?是否必须设置一些配置选项才能允许我访问此属性。或者也许这是一个安全问题,我设置的 API 用户应该有完全访问权限,还有什么需要被授予访问权限的吗?
NetSuite SuiteTalk没有很好的文档记录,大多数在线示例都不是 C# 语言,也没有处理我遇到的问题。这些因素使得很难确定为什么会发生前面提到的行为,甚至很难发现从源“保存的搜索”中检索结果数据的任何替代方法。
有人对这种行为有任何见解吗?这是从 SuiteTalk 检索结果的正确方法吗?API 或 Web 端是否有任何配置需要更改?
更新 1
我还尝试使用通过从“SearchResult”对象访问“searchRowList”对象来获取结果数据的替代方法(由@AdolfoGarza 建议)但是它返回的大部分是空字段(null),类似于我所做的“recordList”属性看不到从此方法中检索“已保存的搜索”数据的方法。