我编写了几个测试函数来说明一个问题(或者至少是一些我不理解的行为)。我只是在Alfresco 4.2上做一些基本的CMIS查询。但是根据我是使用session.query()还是session.queryObjects(),我得到了一些意想不到的结果。具体来说,queryObjects不返回自定义方面的属性。两者都返回关系/关联。是我做错了什么,还是这是一个bug?我使用的是openmis 0.10,和CMIS 1.1 URL。
private static Collection<Document> testCmisObjectQuery(Session session) {
List<Document> rv = new LinkedList<>();
OperationContext opCon = session.createOperationContext();
opCon.setLoadSecondaryTypeProperties(true);
opCon.setIncludeRelationships(IncludeRelationships.BOTH);
ItemIterable<CmisObject> cmisObjs =
session.queryObjects("D:af:insuringFormInstance", null, false, opCon);
for (CmisObject o : cmisObjs) {
Document d = (Document) o;
rv.add(d);
printDocProps(d);
}
return rv;
}
private static Collection<Document> testCmisQuery(Session session) {
List<Document> rv = new LinkedList<>();
String queryString = "SELECT cmis:objectId FROM af:insuringFormInstance";
OperationContext opCon = session.createOperationContext();
opCon.setIncludeRelationships(IncludeRelationships.SOURCE);
ItemIterable<QueryResult> results = session.query(queryString, false);
for (QueryResult qResult : results) {
String objectId = qResult.getPropertyValueByQueryName("cmis:objectId");
Document doc = (Document) session.getObject(session.createObjectId(objectId),opCon);
printDocProps(doc);
rv.add(doc);
}
return rv;
}
看起来,您缺少一个连接,如
select d.*, o.* from cmis:document as d join cm:ownable as o on d.cmis:objectId = o.cmis:objectId
查看https://wiki.alfresco.com/wiki/CMIS#Aspect_Query了解更多细节。
在Document d = (Document) o;
之前您可以使用o = session.getObject(o.getId());
来重新加载cmisObject。重新加载之后,可以检索aspect/secondaryTypes。
这对我很有效。我使用的是Chemistry 1.0.0, CMIS 1.1版本和浏览器绑定。
有一个类似的问题:会话。queryObjects不支持辅助类型