【问题标题】:Is it possible to inherit cm:folder properties to its content in alfresco?是否可以在露天将 cm:folder 属性继承到其内容?
【发布时间】:2016-10-13 03:19:41
【问题描述】:

我的 model.xml 中有以下内容

<type name="abc:Policy">
          <title>abc Policy</title>
          <parent>cm:folder</parent>
          <archive>true</archive>

          <mandatory-aspects>
              <aspect>abc:policyProperties</aspect>
          </mandatory-aspects>
</type>

abc:policyProperties 有以下内容。

  <aspect name="abc:policytProperties">
        <title>abc Policy Properties</title>
        <properties>
            <property name="abc:dated">
                <title>Dated</title>
                <type>d:date</type>
            </property>
        </properties>
  </aspect>

用户可以将文档上传到 abc:Policy 文件夹。但目前模型中没有对该文档的引用。如何使该文件夹中的任何文档都可以继承 abc:dated 并将其显示在 Alfresco-share 的属性中?

【问题讨论】:

  • 小心,CMIS 文档可以没有,一个主或多个父:docs.alfresco.com/5.1/references/API-JS-ScriptNode.html
  • 在 Alfresco 中,对象必须至少有一个父对象。他们不能有零父母,因为 Alfresco 不支持取消归档。文档拥有多个父级的能力实际上是底层存储库中固有的——即使您不使用 CMIS,您也可以利用这一点。

标签: alfresco alfresco-share


【解决方案1】:

听起来您想要做的是让文档从文档的父文件夹上的同名属性继承属性值。

执行此操作的一种方法是在 JavaScript 中编写一个文件夹规则,该规则读取属性并将其设置在文档上。您可以将规则配置为在文档创建或更新时执行此操作。

这是一个使用开箱即用的 cm:title 属性执行此操作的快速示例:

var title = document.parent.properties['cm:title'];
if (title != undefined) {
    document.properties['cm:title'] = title;
    document.save();
}

您可以将该脚本放在数据字典/脚本下名为“inherit-title.js”的文件中,然后配置您的规则以执行该脚本。每当在该文件夹中创建新对象时,它都会获得当前标题。

您可以修改它以使用您的内容模型。

请注意,除非您将规则配置为处理更新,否则子项上的值将永远不会更新。因此,如果文件夹中的标题发生更改,则其子项中的标题不会更改。如果一个孩子被改变,它不会从父母那里获得最新的价值。您可以通过一些规则配置和脚本调整来实现这一点,但请注意性能成本。

如果您想让这种情况更普遍地发生,即不将其设置为单个文件夹的规则,您可以编写一个行为来执行此操作 (tutorial)。

【讨论】:

  • 谢谢杰夫。我是 Alfresco 的新手。我了解此规则的触发因素是用户创建或更新内容。我如何让系统中已有的内容发生这种情况?
  • 任何规则都可以临时运行。只需打开该文件夹的规则配置并告诉它运行。但是,如果您需要做很多事情,最好编写一个 Web 脚本。逻辑是一样的,只是更容易从 HTTP 客户端(如 curl 或浏览器)以临时方式调用。
【解决方案2】:

如果您参考露天内容模型定义contentModel.xml

您会发现,cm:folder 具有默认的子关联 cm:contains 类型为 sys:base。因此,您可以添加扩展 sys:base 类型的节点。

添加到您的文件夹 abc:Policy 的每个文档都作为一个孩子保存。并且方面应用于父级,即 abc:Policy。所以 abc:datedabc:Policy 而不是文档的属性。

您可以做的一件事是,再定义一个类型,扩展 cm:content 并将 is 作为子关联添加到您的 abc:Policy 并将方面应用到它,然后您可以获得abc:dated 作为文档的属性

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 2013-11-22
    • 2016-11-13
    • 2018-09-09
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2010-11-10
    相关资源
    最近更新 更多