阅读此https://chemistry.apache.org/docs/cmis-samples/samples/samples/properties/index.html#retrieving-properties使用QueryObjects方法的类型,但不是。例如,我正在尝试从alfresco获得cm:author
,它返回null。这是我的代码:
OperationContext oc = OperationContextUtils.createMaximumOperationContext();
ItemIterable<CmisObject> results = session.queryObjects(task.getCmisType(), where, false, oc);
...
Object value = cmisObject.getPropertyValue("cm:author");
我错过了什么吗?
P.S:我使用的化学1.0.0,CMIS 1.1,绑定:浏览器
更新:
好吧,我发现了一些有趣的东西,为了检索cm:author
,我必须重新加载CMisObject才能使其起作用:
results = session.queryObjects("cmis:document", "IN_FOLDER('" + folder.getId() + "')", false, oc);
results.each { it ->
object = session.getObject(it.getId());
author = object.getPropertyValue("cm:author");
if(author != null) {
println object.getId() + " => " + author;
}
bug?
首先确保CM:作者就是您想要的。那不是在Alfresco中创建文档节点的人。这是任何人都可以设置为任何事物的可编辑属性,默认情况下它为null。
如果您想要的是创建文档节点的人的实际用户名,则应使用cmis:createby映射到Alfresco的CM:Creator属性。
假设CM:作者绝对是您想要的,关于如何获得它有两个选择。首先,您可以从对象中获得它。但是,为了从对象中获取它,您必须首先获取对象。您的查询返回QueryResult对象,而不是cmisObject。
因此,您应该做类似的事情:
ItemIterable<QueryResult> results = session.query(queryString, false);
for (QueryResult qResult : results) {
String objectId = "";
PropertyData<?> propData = qResult.getPropertyById("cmis:objectId");
if (propData != null) {
objectId = (String) propData.getFirstValue();
}
CmisObject obj = session.getObject(session.createObjectId(objectId));
// Dump the object here
System.out.println("Author: " + obj.getPropertyValue("cm:author");
}
您的第二个选项是从查询结果中获取属性值。您执行此操作的能力取决于您运行的查询。作者属性是在某个方面定义的,因此您必须进行加入才能将其恢复。查询可能看起来像:
queryString = "select content.cmis:name, content.cmis:objectId, author.cm:author from cmis:document content JOIN cm:author author ON content.cmis:objectId = author.cmis:objectId WHERE content.cmis:objectId is not null AND author.cm:author = 'Jeff'";
如果您使用该查询,则可以使用QueryResult抓住作者,例如:
System.out.println("Author: " + qResult.getPropertyValueByQueryName("author.cm:author"));
希望可以解释从查询结果获取值与从对象本身获取属性值之间的区别。