我们有这个问题:
昨天,我们在Alfresco中有一个自定义的xmlModel,它具有自定义类型、带有属性的内容扩展和一些强制性方面。
<type name="custom:myType">
<title>Object</title>
<parent>cm:content</parent>
<properties>
<property name="custom:myProperty">
<type>d:text</type>
</property>
</properties>
<mandatory-aspects>
<aspect>custom:myAspect1</aspect>
</mandatory-aspects>
</type>
现在我们迫切需要将自定义的我的财产转移到一个新的方面,比如:
<aspect name="custom:myAspect2">
<title>new aspect</title>
<properties>
<property name="custom:myProperty">
<type>d:text</type>
<mandatory enforced='true'>true</mandatory>
</property>
</properties>
</aspect>
现在的类型是:
<type name="custom:myType">
<title>Object</title>
<parent>cm:content</parent>
<mandatory-aspects>
<aspect>custom:myAspect1</aspect>
<aspect>custom:myAspect2</aspect>
</mandatory-aspects>
在完整的重建索引之后,Lucene似乎没有考虑这些更改。所以在Alfresco中,在新文档上一切都很好,在旧文档上,用旧模型上传,现在重新索引,我们仍然有属性,但缺少方面。这是正常行为吗?或某些问题/错误。所有这些都是由于我们需要对方面进行CMIS查询造成的,但我们在对Alfresco中不属于方面的类型的本机属性进行查询时遇到了一些问题。似乎只能提取方面的属性,而不能提取内容类型的属性。这是真的吗?感谢
谢谢。
关于问题的第一部分,您可能需要运行一个脚本来将方面添加到旧对象中。实际上,我很惊讶repo能够启动,因为那些旧对象应该抱怨它们的类型需要一个尚未添加到对象中的强制方面。
如果我正在进行您所做的更改,我会首先将方面声明为空方面,然后运行脚本将方面添加到所有有意义的节点,然后更新模型以将属性从类型移动到方面并重新启动。
关于CMIS和查询的第二个问题,您应该能够通过CMIS查询定义为类型一部分的属性,而不会出现任何问题。问题是当您的属性移动到方面时。然后你的查询必须进行这样的连接:
queryString = "select d.*, w.* from cmis:document as d join sc:webable as w on d.cmis:objectId = w.cmis:objectId where w.sc:isActive = True";
在本例中,sc:webable是一个方面,sc:isActive属性是在该方面上定义的。
因此,如果您说在查询方面定义的属性时遇到问题,那么(由于联接要求)这将比在查询类型上定义的属性中遇到问题更有意义。
此外,请注意,向对象添加方面和从对象中删除方面、询问对象是否具有方面以及设置或更新在方面上定义的属性都需要使用扩展,因为CMIS 1.0不支持方面。OpenCMIS有一个扩展,cmislib有另一个扩展。