Как можно расширить объект 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 и работать с ним.