4

当我在 alfresce 跟踪代码时,我发现以下代码node-header.get.html.ftl

<#if item.workingCopy??>
    <#if item.workingCopy.isWorkingCopy??>
        <#assign lockUser = node.properties["cm:workingCopyOwner"]>
    <#else>
        <#assign lockUser = node.properties["cm:lockOwner"]>
    </#if>
......
<#elseif>

我的理解是

当用户单击“脱机编辑”时,将创建文档的工作副本,并且 workingCopyOwner 与 lockOwner 相同。

如果是这样,为什么我们需要这样写?难道我的理解错了???

4

3 回答 3

3

属性 cm:workingCopyOwner 属于方面 cm:workingCopy,而 cm:lockOwner 属于 cm:lockable。

当您单击“脱机编辑”时,将创建节点副本并将方面 cm:workingCopy, cm:workingCopyOwner 设置为您的用户。原始节点被分配了方面 cm:lockable 并且这个节点获得了属性 cm:lockOwner。所以是的,这两个属性获得了相同的用户,但它们分配在不同的节点上。

/埃里克

于 2013-01-11T09:52:19.817 回答
3

除了@billerby 已经解释的内容之外,主要区别在于节点可以在没有被签出的情况下被锁定(例如,通过显式锁定调用),而不会发生文档被签出但未锁定的情况。

因此,cm:workingCopycm:lockable捕获文档的两个不同的(尽管以某种方式相关)生命周期阶段,并且在签出文档时使用各自的属性来声明锁所有权只是保持一致。

于 2013-01-11T12:10:10.323 回答
2

在 Alfresco 中,与大多数 CMS 一样,您可以签出文档。当您这样做时,原始文档将被锁定并创建一个工作副本供您安全编辑。

因此,在内容存储中实际上存在 2 个文档,包括原始文档和工作副本。

cm:workingCopyOwner属性仅在工作副本节点上可用,而该cm:lockOwner属性仅在原始文档节点上可用。它们都拥有相同的功能信息(锁定用户),但在不同的节点上。

因此,在您上面的代码中,它通过测试来测试它是哪种节点(原始或工作副本)node.workingCopy??node.workingCopy.isWorkingCopy然后相应地分配正确的属性以提供给锁定用户。

于 2013-01-11T09:52:04.170 回答