首页 文章

Netsuite获取事务保存搜索Java

提问于
浏览
1

我正在java中创建一个使用Netsuite的SuiteTalk Web服务来创建报告的应用程序 . 我定义了一个事务保存搜索,我在其中使用日期作为标准,我在结果中打印默认的事务列加上部门外部ID和金额的总和 . 我通过UI运行保存的搜索,我得到了我期待的东西,但是,当我尝试在我的java代码中获取信息时,我一直得到null结果 . 我已经尝试了以下解决方案的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());
        }


    }

使用METHODS 1和2,我无法获得结果(我打印“null”) . 第三种方法打印出16个已保存的搜索,但是,没有打印的搜索对应于我创建的搜索 . 当我通过UI检查保存的搜索列表时,我发现有21个非私人保存的搜索,4个由我创建 . 从打印的16个报告中,一个对应于私人保存的搜索 .

所以,我不明白为什么我无法获得我保存的搜索结果以及是什么决定了报告是否可以通过任何方法访问 . 任何有助于获得我的已保存搜索的API的帮助将不胜感激 . 此外,任何人都可以解释Netsuite如何通过任何“获取”方法确定哪些保存的搜索出现?

谢谢!

2 回答

  • 2

    我解决了我正在使用的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);
    

相关问题