cancel
Showing results for 
Search instead for 
Did you mean: 

Multi aspect with same properties name

mtyc
Champ in-the-making
Champ in-the-making
Hello everyone,

Here it is a short description of the situation:

I am declaring a new bean in a private Jar file to add two new Aspects to match Secondary Type feature from CMIS 1.1 specification.

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
    <!– Registration of new models –>   
    <bean id="myExtension" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
        <property name="models">
            <list>
                <value>alfresco/extension/my-extension-model_1.xml</value>
                <value>alfresco/extension/my-extension-model_2.xml</value>
            </list>
        </property>
    </bean>
</beans>


Here is the code of
my-extension-model_1.xml
:

<?xml version="1.0" encoding="UTF-8"?>

<!– Definition of new Model –>

<!– The important part here is the name - Note: the use of the my: namespace
   which is defined further on in the document –>
<model name="my:model_1" xmlns="http://www.alfresco.org/model/dictionary/1.0">

   <!– Optional meta-data about the model –>
   <description>Model 1</description>
   <author>mtyc</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" />
   </imports>

   <!– Introduction of new namespaces defined by this model –>
   <!– NOTE: The following namespace my.new.model should be changed to reflect
      your own namespace –>
   <namespaces>
      <namespace uri="http://www.mycompany.com/model/content/1.0" prefix="my" />
   </namespaces>

   <aspects>
      <aspect name="my:model_1_DedicatedAspect">
         <title>My model 1 aspect</title>
         <properties>
            <property name="my:property_1">
               <type>d:text</type>
               <mandatory>true</mandatory>
            </property>
            <property name="my:property_2">
               <type>d:text</type>
               <mandatory>true</mandatory>
            </property>
            <property name="my:property_3">
                <type>d:text</type>
            </property>
         </properties>
      </aspect>
   </aspects>
</model>               


Here is the code of
my-extension-model_2.xml
:

<?xml version="1.0" encoding="UTF-8"?>

<!– Definition of new Model –>

<!– The important part here is the name - Note: the use of the my: namespace
   which is defined further on in the document –>
<model name="my:model_2" xmlns="http://www.alfresco.org/model/dictionary/1.0">

   <!– Optional meta-data about the model –>
   <description>Model 2</description>
   <author>mtyc</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" />
   </imports>

   <!– Introduction of new namespaces defined by this model –>
   <!– NOTE: The following namespace my.new.model should be changed to reflect
      your own namespace –>
   <namespaces>
      <namespace uri="http://www.mycompany.com/model/content/1.0" prefix="my" />
   </namespaces>

   <aspects>
      <aspect name="my:model_2_DedicatedAspect">
         <title>My model 2 aspect</title>
         <properties>
            <property name="my:property_1">
               <type>d:text</type>
               <mandatory>true</mandatory>
            </property>
            <property name="my:property_2">
               <type>d:text</type>
               <mandatory>true</mandatory>
            </property>
         </properties>
      </aspect>
   </aspects>
</model>               


I then build it as a jar and deploy it under Alfresco, which starts successfully and load my models.

In the application I am developing, which is communicating with my alfresco instance, I create documents with aspect
my:model_1_DedicatedAspect
and documents with aspect
my:model_2_DedicatedAspect
.

I want to search documents by
my:companyId
belonging to aspect
my:model_1_DedicatedAspect
using this CMIS query:

private static ItemIterable<QueryResult> search(Session session, String property_1) {
   String query = "SELECT d.*, t.* FROM cmis:document as d JOIN my:model_1_DedicatedAspect as t ON d.cmis:objectId = t.cmis:objectId where t.my:property_1 = '" + property_1+ "'";
   ItemIterable<QueryResult> result = session.query(query, false);
   return result;
}


The problem is: Result contains documents created with aspect
my:model_1_DedicatedAspect
<strong>BUT ALSO</strong> documents created with aspect
my:model_2_DedicatedAspect
.

After deeper tests, I observed that when I create a document using
my:model_1_DedicatedAspect
, document is also associated with aspect
my:model_2_DedicatedAspect
.

Questions: Is there something I am doing wrong ? Is this a bug ? Is there a better way ?

Thanks a lot for your answers,
Maximilien
1 REPLY 1

g_rathod
Star Contributor
Star Contributor
Have you tried changing namespace or prefix ?