2016-11-04 66 views
0

我有一个小型的C#控制台应用程序,其唯一目的是从NetSuite中的“保存的搜索”(通过SuiteTalk)接收记录。我已经能够成功连接和接收来自NetSuite的保存搜索记录(搜索也可以通过Web界面正常运行),但是当我尝试通过我的应用程序访问“保存的搜索”的结果时,我无法查看他们,因为返回的搜索对象不包含在“recordList”属性的任何数据:NetSuite SuiteTalk TransactionSearchAdvanced:recordList等于null

//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)。这也是example API这样做的方式。

我已经在多个“保存的搜索”上运行了这个结果。我不明白如何在“totalRecords”中有多条记录,但“recordList”保持为空?是否有一些配置选项必须设置为允许我访问此属性。或者,也许这是一个安全问题,我设置的API用户应该具有完全访问权限,是否还有其他需要授予访问权限的内容?

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

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

更新1

我已经使用通过访问从“信息搜索结果”对象“searchRowList”对象中获取结果数据的替代方式还试图(通过@AdolfoGarza建议),但是它返回大部分是空场(null)类似于“recordList”属性我没有看到从这个方法中检索“保存的搜索”数据的方法。

回答

0

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

tranSearchRow.basic = tranSearchRowBasic; 

然后,像@AdolfoGarza reccomended,从“results.searchRowList”“基本”字段

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

至于“recordList”,它仍然是空的,不知道为什么,但因为我有我的数据,我不认为我会继续深入这一点。

+0

不幸的是,SuiteTalk不遗余力地让开发人员弄清楚如何检索和操纵结果集。我认为这个问题/答案有助于澄清一些问题(至少在我的情况下)。等式的另一部分是如何处理数据,我认为这[post](https://community.boomi.com/thread/2736)有助于澄清一些与此相关的问题。 –

1

尝试使用results.searchRowList.searchRow获得结果,即它如何在php中工作。

+0

是的,很好的建议,我其实有另一个例子API,它做到了这一点,但是当我采取这种方法,我得到了一些结果与“pageSize的”,但返回的结果(TransactionSearchRow/TransactionSearchRowBasic)一致的已经几乎全部设置为null(含总,entitiy,internalID和dateCreated会领域除外)的字段,我看不出有什么办法,我可以检索通过这种方法,在“保存搜索”查询生成的任何数据。症状看起来与第一个问题类似,查询得到结果,但由于某种原因,我无法检索它们。 –

+0

是使用高级获取更多信息。此外,即使提前,您也可能无法一次获得所需的全部数据。在Suitetalk中搜索很棘手,因此您可能需要调整搜索以获取所需的数据。您可能需要考虑编码Restlet或受保护的Suitelet以获取搜索结果,并利用具有更好和更快API的套件。 –

+0

你的“先进”的意思,我相信我已经在使用“高级搜索”(TransactionSearchAdvanced),但当然一切都返回仍然是零。至于查询,它通过NetSuite用户界面准确返回我正在查找的数据,但我无法通过API获取。 –

相关问题