是否可以使用特定的 NodeRef 在露天创建节点?

Is it possible to create a node in alfresco with a specific NodeRef?

我目前正在使用 openCMIS 在 Alfresco 中创建一个节点。我想指定新制作的内容使用特定的 nodeRef id。例如:

工作空间://SpacesStore/6e619192-61c0-46fc-85c1-81badbb9b93e

目前我有这个 CMIS 代码:

Map<String, Object> properties = new HashMap<String, Object>();
properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
properties.put(PropertyIds.NAME, "TestFolder");
properties.put(PropertyIds.OBJECT_ID, "workspace://SpacesStore/6e619192-61c0-46fc-85c1-81badbb9b93e");
folder.createFolder(properties);

我希望新创建的文件夹 Names "TestFolder" 具有与指定的 OBJECT_ID 相匹配的 nodeRef。然而,Alfresco 仍然生成一个不同的唯一 nodeRef。

在 Alfresco 中创建内容时是否可以指定 nodeRef?

不,无法设置自己的节点引用。从理论上讲,这是您不应该关心的实现细节。

但是,您可能有正当理由(例如,从现有存储库导入数据?)。如果出于某种原因您需要保留此节点引用,请考虑将此节点引用存储为单独的元数据 属性.

您可能想提交一个单独的问题,更详细地解释您为什么要这样做。

我先声明 - 没有 public API 是有原因的!你真的不应该在正常使用中这样做......

如果你想创建一个有知名节点引用的节点,你应该创建一个 ACP 文件并将其 bootstrap 进去。这就是 Alfresco 创建一些知名节点的方式,例如 rendering_actions_space/app:company_home/app:dictionary/app:rendering_actions 与 noderef workspace://SpacesStore/rendering_actions_space 。请参阅 here in the Alfresco source code on github 了解如何操作

如果您真的真的需要创建一个具有特定 noderef 的节点,而您通常不需要,您可以将 ContentModel.PROP_NODE_UUID 属性 传递给 NodeService,作为一部分创建节点时的属性,如果可能,将用于设置新 noderef 的 ID 部分。不过,一般来说,您不应该这样做!

实际上,您可以编写 Java class 并在创建节点时提供节点属性。如果您将提供 node-uuid,将使用它创建节点,而 NodeRef 基本上由 storeref 和 node-uuid 组成。