0

如何使用 OpenCMIS 代码在露天中查找文档是否可版本化?

4

2 回答 2

2

以纯粹的 CMIS 方式,以下代码片段将实现目标:

// For how to get a Session see:
// http://chemistry.apache.org/java/opencmis-client-api.html#sessions
Session session = getSession();

CmisObject object = session.getObjectByPath("/path/to/object");
ObjectType type = object.getType();
Boolean isVersionable = type instanceOf DocumentType && ((DocumentType)type).isVersionable();

事实上,Alfresco 中cmis:document的节点总是被标记为可版本化的,而实际上 Alfresco 使用切面来标记一个节点以服从版本控制。这与标准 CMIS 域模型不兼容,其中版本性是从对象类型定义静态派生的。cm:versionable

我相信cm:versionableAlfresco 在向错过它的节点发出版本控制 CMIS 调用时会自动添加该方面,因此上述不兼容性不应导致任何实际问题。

另一个更具体的 Alfresco 解决方案需要您使用Alfresco OpenCMIS Extension

CmisObject object = session.getObjectByPath("/path/to/object");
Boolean isVersionable = object instanceof AlfrescoDocument && ((AlfrescoDocument)object).hasAspect("cm:versionable");
于 2013-03-06T12:08:20.540 回答
2

skuro 指出的方式有效。另一种方法是利用所有对象都知道它们允许的行为是什么这一事实。所以你可以这样问(在 OpenCMIS Workbench Groovy 控制台中运行它):

doc = session.getObjectByPath("/cmis-demo/temp.txt")
allowableActions = doc.getAllowableActions().getAllowableActions()
if (allowableActions.contains(Action.CAN_CHECK_OUT)) {
    print "Versionable!"
}

如果一个文档是不可版本控制的,无论出于何种原因,它都不会有 CAN_CHECK_OUT 允许的操作。

于 2013-03-07T00:06:22.133 回答