DataService类的findAll方法只返回100个实体

时间:2014-04-07 10:34:45

标签: java intuit-partner-platform quickbooks-online

我们已成功将我们的v2 QBO迁移到v3,之后在我们的生产中我们遇到了一个客户的问题。他们在QBO帐户中拥有超过100个客户。他们想将它们复制到我们的应用程序中。我们实现了这样的导入:

    DataService service = getDataService(owner);  // obtain DataService via Access Keys
    List<com.intuit.ipp.data.Customer> customers = 
         service.findAll(new com.intuit.ipp.data.Customer()); 
    for (com.intuit.ipp.data.Customer customer : customers) {
        createCustomer(customer, owner);  // this is our internal method to create
    }

Class Library Reference中所述 - 方法findAll是

    Method to retrieve all records for the given entity.

但我们的客户正在从他的QBO v3帐户中获得前100个实体(客户&#39; s)。如果他执行相同的导入操作 - 他将再次获得相同的前100个实体。此方法不允许任何分页选项。

所以问题是,如何获得所有的实体?

2 个答案:

答案 0 :(得分:2)

您应该将查询端点与页面过滤器一起使用。

以下查询获取客户1 - 10:

String query = select($(customer)).skip(0).take(10).generate();

输出 - SELECT * FROM Customer STARTPOSITION 1 MAXRESULTS 10

以下查询获取客户21 - 25:

String query = select($(customer)).skip(20).take(10).generate();

参考 - https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits/0201_ipp_java_devkit_3.0/0011_query_filters#Pagination

最后

QueryResult queryResult = service.executeQuery(query);

由于

答案 1 :(得分:2)

要获取指定企业的所有客户,首先需要获得他们的计数,然后,如前面的答案所述,通过&#34;采取&#34;方法:

        Integer customersTotal = service.executeQuery(selectCount(_customer).generate()).getTotalCount();
        QueryResult queryResult = service.executeQuery(select($(_customer)).skip(0).take(customersTotal).generate());
        List<? extends IEntity> entities = queryResult.getEntities();
        for (IEntity entity : entities) {
            if (entity instanceof com.intuit.ipp.data.Customer) {
                createCustomer((com.intuit.ipp.data.Customer) entity, owner);
            }
        }