【发布时间】:2016-02-05 07:03:20
【问题描述】:
我正在使用 Netsuite 的 SuiteTalk Web 服务创建一个报告的 Java 应用程序。我定义了一个交易保存搜索,在其中我使用日期作为标准,并在结果中打印默认交易列以及部门外部 ID 和金额总和。我通过 UI 运行保存的搜索,得到了我期望的结果,但是,当我尝试在我的 java 代码中获取信息时,我不断得到空结果。我已经尝试了以下解决方案的 java 版本:
C# NetSuite WebServices: Get value from custom field in saved search (ItemSearchAdvanced)
但是,这些都对我不起作用。当我转到 Netsuite UI 上的 Lists->Search->Saved Searches 菜单时,当我在过滤器“General”和“Transaction”中设置时,我能够看到我保存的搜索。但是,我无法通过 API 检索它的信息。
这是我用来尝试获取保存的搜索数据的代码:
public void printReport() throws ExceededUsageLimitFault, UnexpectedErrorFault, InvalidSessionFault, ExceededRecordCountFault, RemoteException, UnsupportedEncodingException, SOAPException{
//METHOD 1: Transaction Search
TransactionSearchAdvanced sr = new TransactionSearchAdvanced();
//"customsearchreport" is the IF of my saved search
sr.setSavedSearchId("customsearchreport");
SearchResult res = _port.search(sr);
System.out.println(res.getTotalRecords());
//METHOD 2: Item search
ItemSearchAdvanced isa = new ItemSearchAdvanced();
isa.setSavedSearchId("customsearchreport");
SearchResult resp = _port.search(isa);
System.out.println(resp.getTotalRecords());
//METHOD 3: General saved search
GetSavedSearchRecord gssr= new GetSavedSearchRecord();
//I set the record type as "transaction" as I created a transaction saved search.
gssr.setSearchType(SearchRecordType.transaction);
GetSavedSearchResult gssre = _port.getSavedSearch(gssr);
System.out.println("Saved Search status: "+ gssre.getStatus().isIsSuccess());
RecordRefList srl = gssre.getRecordRefList();
RecordRef[] rr = srl.getRecordRef();
System.out.println("RecordRef[] size: " + rr.length);
for (int i = 0; i < rr.length; i++) {
RecordRef rref = rr[i];
System.out.println("External ID: " + rref.getExternalId());
System.out.println("Internal ID: "+ rref.getInternalId());
System.out.println("Name: "+ rref.getName());
}
}
使用方法 1 和 2,我无法获得结果(我打印“null”)。第三种方法打印了我 16 个保存的搜索,但是,没有一个打印的搜索与我创建的搜索相对应。当我通过 UI 检查保存的搜索列表时,我看到存在 21 个非私人保存的搜索,其中 4 个是我创建的。在打印的 16 份报告中,一份对应于私人保存的搜索。
所以,我不明白为什么我无法获得保存的搜索结果,以及是什么决定了是否可以通过任何方法访问报告。任何通过 API 获得我的 savedSearch 的帮助将不胜感激。另外,任何人都可以解释 Netsuite 如何通过任何“获取”方法确定哪些已保存的搜索出现?
谢谢!
【问题讨论】:
-
res.getStatus()返回什么? -
res.getStatus() 返回 true,因为搜索已成功执行。
-
这很奇怪,因为每当我得到
res.getStatus().isIsSuccess() == true时,res.getTotalRecords()总是返回一个有效的 Integer 对象(即使它是 0),而不是 null。 -
没错。当我尝试遍历记录时,我得到了空对象。很抱歉给您带来不便。
标签: java web-services search transactions netsuite