这是对情况的简短描述:
我在私有Jar文件中声明一个新bean,以添加两个新的Aspects以匹配CMIS 1.1规范中的Secondary Type特性。
<?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>
以下是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:supplierId">
<type>d:text</type>
<mandatory>true</mandatory>
</property>
<property name="my:companyId">
<type>d:text</type>
<mandatory>true</mandatory>
</property>
<property name="my:orderId">
<type>d:text</type>
</property>
</properties>
</aspect>
</aspects>
</model>
以下是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:supplierId">
<type>d:text</type>
<mandatory>true</mandatory>
</property>
<property name="my:companyId">
<type>d:text</type>
<mandatory>true</mandatory>
</property>
</properties>
</aspect>
</aspects>
</model>
然后我将它构建为一个jar并在Alfresco下部署它,它成功启动并加载我的模型。
在我正在开发的应用程序中,我正在与我的露天实例进行通信,我创建了方面为my:model_1_DedicatedAspect
的文档和方面为my:model_2_DedicatedAspect
的文档。
我想使用此CMIS查询按方面my:companyId
my:model_1_DedicatedAspect
搜索文档:
private static ItemIterable<QueryResult> searchClaimsByCompanyId(Session session, String companyId) {
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:companyId = '" + companyId + "'";
ItemIterable<QueryResult> result = session.query(query, false);
return result;
}
问题是:结果包含使用方面my:model_1_DedicatedAspect
创建的文档但是使用方面my:model_2_DedicatedAspect
创建的文档。
经过深入测试后,我观察到当我使用my:model_1_DedicatedAspect
创建文档时,文档也与方面my:model_2_DedicatedAspect
相关联。
问题:我做错了吗?这是一个错误吗?还有更好的方法吗?
非常感谢您的回答, 最大
答案 0 :(得分:1)
我不确定为什么它没有在启动时出错。但在Alfresco,一个属性必须是独一无二的。所以 my:companyId 在不同方面使用了两次。
最佳做法是创建一个名为my:company的方面,其中包含 my:companyId 属性。
您可以定义没有属性的方面来检查或搜索它们。
顺便说一句,CMIS查询可以更轻松: SELECT * FROM my:model_1_DedicatedAspect
所以不需要额外的连接。
<强> ---------- ---------- UPDATE 强>
由于Alfresco的某个版本(我猜它是4.x),您不再需要向节点添加某个方面。如果您在案例 my:companyId 中添加aspects属性,那么它将确定自动添加哪个方面。所以Alfresco看到具有相同属性的2个方面并添加它们。
我还没有收到你的消息“为什么”你这样做?从内容模型的角度来看,这没有任何意义。 方面只是Alfresco为不同内容类型添加动态属性的方法。
在你的情况下,我会使用继承来包含所需的属性。