NetSuite SuiteTalk TransactionSearchAdvanced: recordList equ

本文关键字:recordList equ TransactionSearchAdvanced SuiteTalk NetSuite | 更新日期: 2023-09-27 18:16:35

我有一个小的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#的,也没有处理我遇到的问题。这些因素使得很难确定前面提到的行为发生的原因,甚至很难发现从源"Saved Search"检索结果数据的任何替代方法。

有人对这种行为有什么见解吗?这是从SuiteTalk检索结果的正确方法吗?是否有任何来自API或Web端的配置需要更改?

更新1

我也尝试过使用从"SearchResult"对象(由@AdolfoGarza建议)访问"searchRowList"对象获取结果数据的替代方法,但是它返回的大多是空字段(null)类似于"recordList"属性,我没有看到从这个方法中检索"Saved Search"数据的方法。

NetSuite SuiteTalk TransactionSearchAdvanced: recordList equ

尝试使用results. searchrowlist . searchrow获取结果,这就是它在php中的工作方式。

我可以通过删除代码中的这一行来解决这个问题:

tranSearchRow.basic = tranSearchRowBasic;

然后像@AdolfoGarza建议的那样,从"results. searchrowlist"中的"basic"字段检索结果

出于某种原因,我使用的模板API正在设置一个"TransactionSearchAdvanced"引用空白的"TransactionSearchBasic"记录,不知道为什么,但这导致"searchchrowlist"的结果为空。删除后,我现在得到非空值在适当的字段。

至于"recordList",它仍然是空的,不知道为什么,但因为我有我的数据,我不认为我会继续深入研究这个