Можно ли наследовать свойства cm:folder для его содержимого в alfresco?

У меня есть следующее в моем 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?


person BlueStar    schedule 13.10.2016    source источник
comment
Будьте осторожны, документ CMIS может не иметь ни одного, одного основного или нескольких родителей: docs .alfresco.com/5.1/references/API-JS-ScriptNode.html   -  person kinjelom    schedule 13.10.2016
comment
В Alfresco у объектов должен быть хотя бы один родитель. У них не может быть нулевых родителей, поскольку Alfresco не поддерживает удаление файлов. Возможность документа иметь несколько родителей на самом деле присуща базовому репозиторию — вы можете воспользоваться этим, даже если не используете CMIS.   -  person Jeff Potts    schedule 14.10.2016


Ответы (2)


Похоже, что вы хотите сделать, чтобы документ наследовал значение свойства от одноименного свойства в родительской папке документа.

Один из способов сделать это — написать правило для папки на JavaScript, которое считывает свойство и устанавливает его для документа. Вы можете настроить правило, чтобы оно выполнялось при создании или обновлении документа.

Вот краткий пример, который делает это с готовым свойством cm:title:

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

Вы можете поместить этот сценарий в файл с именем «inherit-title.js» в разделе «Словарь данных/сценарии», а затем настроить правило для выполнения сценария. Каждый раз, когда в этой папке создается новый объект, он получает текущий заголовок.

Вы можете изменить это для работы с вашей моделью контента.

Обратите внимание, что если вы не настроите правило для работы с обновлениями, значение дочернего элемента никогда не будет обновлено. Поэтому, если заголовок изменится в папке, он не изменится в ее дочерних элементах. И если дочерний элемент изменен, он не будет извлекать последнее значение из родителя. Вы можете добиться этого с помощью некоторых настроек правил и скриптов, но помните о стоимости производительности.

Если вы хотите сделать это более универсальным, т. е. не устанавливая это как правила для отдельных папок, вы можете написать поведение для этого (учебник).

person Jeff Potts    schedule 13.10.2016
comment
Спасибо, Джефф. Я новичок в Alfresco. Я понимаю, что триггером для этого правила будет создание или обновление контента пользователем. Как мне сделать так, чтобы это произошло с контентом, который уже есть в системе? - person BlueStar; 15.10.2016
comment
Любое правило может быть запущено на разовой основе. Просто откройте конфигурацию правила для этой папки и скажите, чтобы она работала. Однако, если вам нужно делать это часто, вам может быть лучше написать веб-скрипт. Логика та же, просто ее проще вызывать специальным образом из HTTP-клиента, такого как curl, или из вашего браузера. - person Jeff Potts; 16.10.2016

Если вы ссылаетесь на определения модели контента alfresco contentModel.xml

вы обнаружите, что cm:folder имеет дочернюю ассоциацию cm:contains по умолчанию для типа sys:base. Таким образом, вы можете добавить узел типа, расширяющего sys:base.

Каждый документ, добавляемый в вашу папку abc:Policy, становится дочерним. И аспект применяется к родителю, т. е. abc:Policy. Таким образом, abc:dated является свойством abc:Policy а не документа.

Одна вещь, которую вы можете сделать, это определить еще один тип, который расширяет cm:content и добавить is как дочернюю ассоциацию к вашему abc:Policy, также примените к нему аспект, тогда вы можете получить abc:dated как свойство вашего документа

person Sachin Mesare    schedule 13.10.2016