最近我开始使用 Apache CMIS 并阅读官方文档和示例。我没有注意到任何关于分页查询结果的事情。
有一个示例显示如何列出文件夹项目,使用 operationContext 设置 maxItemsPerPage,但似乎可以在 getChilder 方法中使用 operationContext:
int maxItemsPerPage = 5;
int skipCount = 10;
CmisObject object = session.getObject(session.createObjectId(folderId));
Folder folder = (Folder) object;
OperationContext operationContext = session.createOperationContext();
operationContext.setMaxItemsPerPage(maxItemsPerPage);
ItemIterable<CmisObject> children = folder.getChildren(operationContext);
ItemIterable<CmisObject> page = children.skipTo(skipCount).getPage();
在列出 u 文件夹时,这是可以的。但我的案例是关于从自定义搜索查询中获取结果。基本方法是:
String myType = "my:documentType";
ObjectType type = session.getTypeDefinition(myType);
PropertyDefinition<?> objectIdPropDef = type.getPropertyDefinitions().get(PropertyIds.OBJECT_ID);
String objectIdQueryName = objectIdPropDef.getQueryName();
String queryString = "SELECT " + objectIdQueryName + " FROM " + type.getQueryName();
ItemIterable<QueryResult> results = session.query(queryString, false);
for (QueryResult qResult : results) {
String objectId = qResult.getPropertyValueByQueryName(objectIdQueryName);
Document doc = (Document) session.getObject(session.createObjectId(objectId));
}
这种方法将检索查询结果中的所有文档,但我想包括 startIndex 和限制。我们的想法是输入如下内容:
ItemIterable<QueryResult> results = session.query(queryString, false).skipTo(startIndex).getPage(limit);
我不确定这部分:getPage(limit)。这是正确的分页方法吗?另外我想检索项目总数,所以我可以知道如何在网格中设置最大项目,我的项目将显示在该网格中。有一种方法,但在文档中写了一些奇怪的东西,比如有时存储库无法知道最大项目。这就是那个方法:
results.getTotalNumItems();
我试过类似的东西:
SELECT COUNT(*)...
但这并没有成功:)
拜托,你能给我一些建议如何从查询结果中进行正确的分页吗?
提前致谢。