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

Java DataService类的findAll方法只返回100个实体,java,intuit-partner-platform,quickbooks-online,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 = serv

我们已经成功地将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
    }
但我们的客户仅从其QBO v3帐户中获得前100个实体客户。如果他做同样的导入操作,他将再次得到同样的前100个实体。此方法不允许任何分页选项


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

您应该使用带有页面过滤器的查询端点

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

String query = select($(customer)).skip(0).take(10).generate();
输出-从客户开始位置1 MAXRESULTS 10中选择*

以下查询得到客户21-25:

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

最后

QueryResult queryResult = service.executeQuery(query);

谢谢

您应该使用带有页面过滤器的查询端点

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

String query = select($(customer)).skip(0).take(10).generate();
输出-从客户开始位置1 MAXRESULTS 10中选择*

以下查询得到客户21-25:

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

最后

QueryResult queryResult = service.executeQuery(query);

感谢

要获取指定业务的所有客户,首先需要获取他们的数量,然后,如前面的回答所述,通过take方法获取客户:

        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);
            }
        }

要获取指定业务的所有客户,首先需要获取他们的数量,然后,如前一个答案所述,通过take方法获取客户:

        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);
            }
        }

玛纳斯,你看到问题了吗?我们不需要分页。我们需要得到所有的实体?API中提供的方法不这样做。那么我们必须使用查询API了?你参考了文档了吗?如果没有,请参阅-。在V3中没有什么比GetAll端点更好的了。GetAll只是QueryEndpointQuery-select*fromCustomer之上的一个包装器。默认情况下,它返回100个对象。感谢来自引用的查询提供了以下错误代码:4001,错误消息:无效查询,错误详细信息:QueryValidationError:找不到实体客户的属性状态,即使我删除了Status where子句-出现无效查询错误。我们组合了参考中所示的查询:com.intuit.ipp.data.Customer _Customer=generatequaly.createQueryEntitycom.intuit.ipp.data.Customer.class;QueryResult QueryResult=service.executeQueryselect$\u customer.where$\u customer.getStatus.eqEntityStatusEnum.SYNCHRONIZED.generate;select$\u customer.take150.generate-生成以下查询:select tring.*FROM customer MAXRESULTS 150-这会给出一个错误QueryValidationError:找不到实体客户的属性字符串。您的查询中的“字符串。*”是什么?Manas,您看到问题了吗?我们不需要分页。我们需要得到所有的实体?API中提供的方法不这样做。那么我们必须使用查询API了?你参考了文档了吗?如果没有,请参阅-。在V3中没有什么比GetAll端点更好的了。GetAll只是QueryEndpointQuery-select*fromCustomer之上的一个包装器。默认情况下,它返回100个对象。感谢来自引用的查询提供了以下错误代码:4001,错误消息:无效查询,错误详细信息:QueryValidationError:找不到实体客户的属性状态,即使我删除了Status where子句-出现无效查询错误。我们组合了参考中所示的查询:com.intuit.ipp.data.Customer _Customer=generatequaly.createQueryEntitycom.intuit.ipp.data.Customer.class;QueryResult QueryResult=service.executeQueryselect$\u customer.where$\u customer.getStatus.eqEntityStatusEnum.SYNCHRONIZED.generate;select$\u customer.take150.generate-生成以下查询:select tring.*FROM customer MAXRESULTS 150-这会给出一个错误QueryValidationError:找不到实体客户的属性字符串。查询中的“tring.*”是什么?