2016-02-05 39 views
1

我在java中製作一個應用程序,它使用Netsuite的SuiteTalk網絡服務來創建報告。我定義了一個事務保存搜索,在該搜索中我使用日期作爲條件,並在結果中打印默認事務列加上部門外部ID和金額總和。我通過UI運行保存的搜索,然後獲得我期待的內容,但是,當我嘗試在我的Java代碼中獲取信息時,我一直得到空結果。我曾嘗試以下解決方案的Java版本:Netsuite獲得交易已保存的搜索Java

C# NetSuite WebServices: Get value from custom field in saved search (ItemSearchAdvanced)

http://www.anyforum.in/question/web-service/netsuite/How-to-get-data-from-saved-search-through-webservice-request/345

然而,這都不是爲我工作。當我進入我的Netsuite用戶界面上的列表 - >搜索 - >保存的搜索菜單時,當我在過濾器「常規」和「交易」中設置時,我能夠看到我保存的搜索。但是,我無法通過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,我不能夠獲得的結果(我打印「空」)。第三種方法打印我保存的16個搜索,但是,沒有一個打印的搜索對應於我創建的搜索。當我通過用戶界面檢查保存的搜索列表時,我發現存在21個非私人保存的搜索,其中4個由我創建。從打印的16個報告中,一個對應於私人保存的搜索。

因此,我不明白爲什麼我無法獲取保存的搜索結果以及是否通過任何方法來確定報告是否可訪問。任何幫助獲得我savedSearch thuoough API將不勝感激。另外,任何人都可以解釋Netsuite如何確定哪些保存的搜索通過任何「get」方法出現?

謝謝!

+0

是什麼'res.getStatus()'返回? –

+0

res.getStatus()返回true,因爲搜索已成功執行。 –

+0

這很奇怪,因爲每當我得到'res.getStatus()。isIsSuccess()== true',那麼'res.getTotalRecords()'總是返回一個有效的Integer對象(即使它是0),而不是null。 –

回答

1

我解決了它。我使用的ID「customsearchreport」是一個UI ID。我不得不爲報告使用InternalID。此外,通過選中保存的搜索的「受衆羣體」部分中的「所有公司成員」複選框,我可以使用getSavedSearch()方法打印保存的搜索ID。

0

我解決了他們

第二腳本之前,我們必須增加的頁數限制是這樣的:

SearchPreferences sp = new SearchPreferences(); 
       sp.pageSize = 1000; 
       _service.searchPreferences = sp; 

       SubsidiarySearch subsidiarySrch = new SubsidiarySearch(); 
       SearchResult srchResult = _service.search(subsidiarySrch); 
相關問題