【问题标题】:Netsuite get Transaction Saved Search JavaNetsuite 获取事务保存的搜索 Java
【发布时间】: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)

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

但是,这些都对我不起作用。当我转到 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


【解决方案1】:

我解决了。我使用的 ID“customsearchreport”是一个 UI ID。我不得不为我的报告使用 InternalID。此外,我还可以通过在已保存搜索的“受众”部分中选中“所有公司成员”复选框,使用 getSavedSearch() 方法打印已保存的搜索 ID。

【讨论】:

    【解决方案2】:

    我解决了它们

    在第二个脚本之前,我们必须像这样增加页数限制:

    SearchPreferences sp = new SearchPreferences();
    sp.pageSize = 1000;
    _service.searchPreferences = sp;
    SubsidiarySearch subsidiarySrch = new SubsidiarySearch();
    SearchResult srchResult = _service.search(subsidiarySrch);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多