NetSuite SuiteTalk TransactionSearchAdvanced:recordList等于null

时间:2016-11-04 21:29:49

标签: c# .net soap netsuite suitetalk

我有一个小型C#控制台应用程序,其唯一目的是从NetSuite中的“已保存搜索”(通过SuiteTalk)接收记录。我已经能够成功连接并从NetSuite接收我保存的搜索记录(搜索也通过网络界面正常运行),但是当我尝试通过我的应用程序访问“保存的搜索”的结果时,我无法查看它们是因为返回的搜索对象不包含“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 ExampleAnother Here)中检索数据的主要方式。这也是example API执行此操作的方式。

我已在多个“已保存的搜索”上运行此操作并获得相同的结果。我不明白你怎么能在“totalRecords”中有多个记录,但“recordList”仍然是空的?是否有一些配置选项必须设置为允许我访问此属性。或者这可能是一个安全问题,我设置的API用户应该具有完全访问权限,还有其他需要被授予访问权限的东西吗?

NetSuite SuiteTalk是not well documented,大多数在线示例都不在C#中,not dealing包含我遇到的问题。这些因素使得很难确定前面提到的行为发生的原因,甚至发现从源“保存的搜索”中检索结果数据的任何替代方法。

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

更新1

我也试过通过从“SearchResult”对象访问“searchRowList”对象来获取结果数据的替代方法(由@AdolfoGarza建议)但是它返回大多数空字段(null),类似于“recordList”属性我没有看到从这种方法中检索“已保存的搜索”数据的方法。

2 个答案:

答案 0 :(得分:1)

尝试使用results.searchRowList.searchRow获取结果,这就是它在php中的工作原理。

答案 1 :(得分:0)

我能够通过在代码中删除此行来解决此问题:

tranSearchRow.basic = tranSearchRowBasic;

然后像@AdolfoGarza那样推荐,检索"基本"的结果。 " results.searchRowList"

中的字段

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

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