NetSuite SuiteTalk TransactionSearchAdvanced:recordList 等于 null

NetSuite SuiteTalk TransactionSearchAdvanced: recordList equals null

我有一个小型 C# 控制台应用程序,其唯一目的是从 NetSuite(通过 SuiteTalk)中的 "Saved Search" 接收记录。我已经能够成功连接并从 NetSuite 接收记录以用于我的已保存搜索(搜索 运行 也可以通过 Web 界面进行搜索),但是当我尝试访问 "Saved Search" 的结果时我的应用程序,我无法查看它们,因为返回的搜索对象不包含 "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" 对象是从搜索结果中检索数据的主要方式(Related Java Example, Another Here). This is also the way the example API 做到了。

我 运行 在多个 "Saved Search's" 上使用了这个,结果相同。我不明白你怎么可以在 "totalRecords" 中有多个记录,而 "recordList" 仍然为空?是否必须设置一些配置选项以允许我访问此 属性。或者可能是出于安全考虑,我设置的 API 用户应该具有完全访问权限,是否还有其他需要授予访问权限的内容?

NetSuite SuiteTalk not well documented, and most of the examples online are not in C#, and not dealing 解决了我遇到的问题。这些因素使得很难确定为什么会发生前面提到的行为,甚至很难发现任何替代方法来从源中检索结果数据 "Saved Search".

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

更新 1

我也尝试过使用另一种方法来获取结果数据,方法是从 "SearchResult" 对象访问 "searchRowList" 对象(由@AdolfoGarza 建议)但是它 returns 大部分是空的fields(null) 类似于 "recordList" 属性 我没有看到从这个方法中检索 "Saved Search" 数据的方法。

尝试使用 results.searchRowList.searchRow 获取结果,这就是它在 php.

中的工作原理

我能够通过删除代码中的这一行来解决问题:

tranSearchRow.basic = tranSearchRowBasic;

然后像@AdolfoGarza 推荐的那样,从 "results.searchRowList"

中的 "basic" 字段检索结果

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

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