Как можно расширить объект Person на свежем воздухе?

Я пытался в течение дня или около того расширить модель человека с помощью дополнительных атрибутов и до сих пор не увенчался успехом. Я следовал этому старому уроку, но не смог заставить его работать. Изучение некоторых ответов на странице показало, что кто-то пробовал в 4.1 и не получил его на работу. Я тестирую против 4.2. Любое понимание будет оценено.

РЕДАКТИРОВАТЬ:

У меня есть следующий customContentModel.xml:

<model name="cm:contentModel" xmlns="http://www.alfresco.org/model/dictionary/1.0">
    <!-- Optional meta-data about the model -->
    <description>Professional Person Model</description>
    <author></author>
    <version>1.0</version>

    <!-- Imports are required to allow references to definitions in other models -->
    <imports>
        <!-- Import Alfresco Dictionary Definitions -->
        <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" />
        <!-- Import Alfresco Content Domain Model Definitions -->
        <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm" />

                <import uri="http://www.syn.fr/model/person/ext" prefix="ppm"/>
    </imports>

<types>
      <type name="cm:person">
         <title>Person</title>
         <parent>cm:authority</parent>
         <properties>
            <!-- The tokenisation set here is ignored - it is fixed for this type -->
            <!-- This is so you can not break person lookup -->
            <property name="cm:userName">
               <type>d:text</type>
               <mandatory>true</mandatory>
               <constraints>
                  <constraint ref="cm:userNameConstraint" />
               </constraints>
            </property>
            <property name="cm:homeFolder">
               <type>d:noderef</type>
               <mandatory>true</mandatory>
            </property>
            <property name="cm:firstName">
               <type>d:text</type>
               <mandatory>true</mandatory>
            </property>
            <property name="cm:lastName">
               <type>d:text</type>
               <mandatory>true</mandatory>
            </property>
            <property name="cm:middleName">
               <type>d:text</type>
            </property>
            <property name="cm:email">
               <type>d:text</type>
            </property>
            <property name="cm:organizationId">
               <type>d:text</type>
            </property>
            <property name="cm:homeFolderProvider">
               <type>d:text</type>
            </property>
            <property name="cm:defaultHomeFolderPath">
               <type>d:text</type>
            </property>
            <property name="cm:presenceProvider">
                <type>d:text</type>
            </property>
            <property name="cm:presenceUsername">
                <type>d:text</type>
            </property>
            <property name="cm:organization">
                <type>d:text</type>
            </property>
            <property name="cm:jobtitle">
                <type>d:text</type>
            </property>
            <property name="cm:location">
                <type>d:text</type>
            </property>
            <property name="cm:persondescription">
                <type>d:content</type>
            </property>
            <property name="cm:telephone">
                <type>d:text</type>
            </property>
            <property name="cm:mobile">
                <type>d:text</type>
            </property>
            <property name="cm:companyaddress1">
                <type>d:text</type>
            </property>
            <property name="cm:companyaddress2">
                <type>d:text</type>
            </property>
            <property name="cm:companyaddress3">
                <type>d:text</type>
            </property>
            <property name="cm:companypostcode">
                <type>d:text</type>
            </property>
            <property name="cm:companytelephone">
                <type>d:text</type>
            </property>
            <property name="cm:companyfax">
                <type>d:text</type>
            </property>
            <property name="cm:companyemail">
                <type>d:text</type>
            </property>
            <property name="cm:skype">
                <type>d:text</type>
            </property>
            <property name="cm:instantmsg">
                <type>d:text</type>
            </property>
            <property name="cm:userStatus">
               <type>d:text</type>
            </property>
            <property name="cm:userStatusTime">
               <type>d:datetime</type>
            </property>
            <property name="cm:googleusername">
               <type>d:text</type>
            </property>

            <property name="cm:emailFeedDisabled">
                <type>d:boolean</type>
            </property>

            <property name="cm:subscriptionsPrivate">
                <type>d:boolean</type>
            </property>

            <!-- system maintained / protected values -->

            <property name="cm:emailFeedId">
                <type>d:long</type>
                <protected>true</protected>
            </property>

            <property name="cm:sizeCurrent">
                <type>d:long</type>
                <protected>true</protected>
                <mandatory enforced="true">true</mandatory>
            </property>

            <property name="cm:sizeQuota">
                <type>d:long</type>
                <protected>true</protected>
            </property>

         </properties>

         <associations>
            <association name="cm:avatar">
               <source>
                  <role>cm:avatarOf</role>
                  <mandatory>false</mandatory>
                  <many>false</many>
               </source>
               <target>
                  <class>cm:content</class>
                  <role>cm:hasAvatar</role>
                  <mandatory>false</mandatory>
                  <many>false</many>
               </target>
            </association>
         </associations>
      </type>

      <mandatory-aspects>
     <aspect>ppm:attributes</aspect>
      </mandatory-aspects>
</types>     
</model>

Я получаю сообщение об ошибке, которое указывает на невозможность найти. Разумеется, все объекты пространства имен cm:* были бы загружены раньше расширяемых, и, следовательно, сама команда cm:author будет доступна?

2 ответа

Решение

Работал пример руководства для архитекторов ECMA. Я скачал пример кода и адаптировал его к моей ситуации.

Это действительно легко сделать, просто создайте свой собственный тип, который расширяет cm:person, и добавьте свои свойства.

<type name="ab:myperson">
         <title>Person</title>
         <parent>cm:person</parent>
         <properties>
            <!-- The tokenisation set here is ignored - it is fixed for this type -->
            <!-- This is so you can not break person lookup -->
            <property name="ab:customField">
               <type>d:text</type>
               <mandatory>true</mandatory>
            </property>..

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

Вам нужно создать собственное поведение, которое добавит ваши свойства, изменив тип cm:person на ab:myperson.

Лучшим решением было бы создать аспект вместо пользовательского типа и с поведением добавить свой аспект и установить свойства.

Отличный учебник по созданию пользовательских поведений

http://alfrescoblog.com/2014/06/02/alfresco-creating-custom-behavior-tutorial/

Это будет как расширить cm:person и работать с ним.

Другие вопросы по тегам