Alfresco Java 支持网络脚本查找 cmis:objectId

Alfresco Java backed web-script lookup by cmis:objectId

我正在为 Alfresco 社区版编写我的第一个 java 支持的网络脚本。我正在实施文档属性/预览服务,我采用了一个参数,该参数是相关文档的 cmis:objectId。我无法开始使用,因为我无法根据 cmis id 访问文档。

在 Web 脚本控制器中运行服务器端时,基于 cmis:objectId 获取文档(NodeRef?)的最佳方法是什么?我看到 Jeff Potts 关于如何实现 Web 脚本的很好的例子,但是 Java API 和 CMIS 概念的混合让我陷入困境。我应该只使用搜索服务并根据 cmis:objectId 属性 找到对象吗?任何指点表示赞赏。

好吧,答案有点难看,但希望这对某人有所帮助...

使用 'opaque' objectId 查找 NodeRef 的一个好方法应该 是使用 CMISServices,它是从 java 支持的网站的注册表中获取的脚本,即

docRef = registry.getCMISService().getLatestVersion(docIdStr, false);

不幸的是,Alfresco 代码中有一个错误(或者在我看来,诚然有点新手)。露天 CMISServicesImpl.getLatestVersion() 在幕后使用 getObject() 方法。该方法将 objectId String 作为参数,但在末尾去除版本信息(即 objectId 的“;1.0”部分),然后检查剩余字符串是否是有效的 NodeRef。这样做时,它会根据此模式(在 NodeRef.java 中)进行检查:

private static final Pattern nodeRefPattern = Pattern.compile(".+://.+/.+");

如果验证失败,您将收到 CMISInvalidArgumentException,并显示一条消息 xxxxx "is not an object ID"。

所以,长话短说,当我使用 objectId 的参数调用 Web 脚本时,如下所示:

29ea5a16-12a8-497d-aad3-f43969e8a672;1.0

我收到 CMIS 异常。但是,如果我使用如下所示的 objectId 参数调用该方法:

workspace://SpacesStore/29ea5a16-12a8-497d-aad3-f43969e8a672;1.0

... 然后,"CMIS" 查找成功,我得到了我想要的 NodeRef。当然,所有 CMIS 服务在幕后所做的就是从对象 ID 中剥离“;1.0”,将其视为 NodeRef 字符串,并使用它进行查找。
换句话说,你无法在 4.2 中以正确的方式进行操作。最好的办法是按照@Gagravarr 的说法调整您自己的 objectId 字符串以将其转换为 NodeRef。希望它已在 5.x.

中修复