gpt4 book ai didi

database-design - 在 Alfresco 内容模型中创建一个方面

转载 作者:行者123 更新时间:2023-12-04 23:04:36 25 4
gpt4 key购买 nike

我目前开始使用 Alfresco CMS。我需要在我的内容模型中创建一个“方面”,它必须包含许多属性,如:

Aspect: 
property 1 : String
property 2 : int
property 3 : int
property 4 : long

此外,它必须包含另外两个属性,这些属性由以下属性组成:
Format: 
FormatProperty1: int
FormatProperty2: int
FormatProperty3: int

Metadata:
list1: List<String>
list2: List<String>
MetadataProperty 3: boolean

我还没有在 Alfresco 中创建简单的内容模型或方面。根据我之前在关系数据库中的知识,我认为上述结构是表之间的关联。如何在具有方面或更多方面的 Alfresco 内容模型中执行该操作?

最佳答案

让我尝试根据您的评论在@Alch3mi5t 的回答中添加一些额外信息。我在这里使用一个虚构的商业案例。

基本上,Alfresco 模型由 3 个部分组成:约束、类型和方面。另外,我将在混合中添加关联。

  • 类型

  • alfresco 中的每个节点(您可能会错误地将其视为“记录”)都有一个类型。所以这个类型有属性(“列”)。所以你有你的基本类型,假设它叫做 供应商 .它有两个 Prop ,名称和税号(字符串和整数)。
    您的类型定义如下所示:
    <type name="myCompany:vendor">
    <title>Vendor</type>
    <parent>cm:folder</parent>
    <properties>
    <property name="myCompany:vendorName">
    <title>Vendor name</title>
    <type>d:text</type>
    </property>
    <property name="myCompany:vendorTaxID">
    <title>Vendor Tax ID</title>
    <type>d:int</type>
    </property>
    </properties>
    </type>

    这是您的类型,与具有字符串和 int 类型的 vendorName 和 vendorTaxID 列的数据库表不同。
  • 约束

  • 假设您现在必须对税号添加一些约束 - 简单的正则表达式示例。
    所以你有一个这样定义的约束:
    <constraint name="myCompany:taxIdConstraint" type="REGEX">
    <parameter name="expression">
    <value>^ID[1-9](\-[1-9])*</value>
    </parameter>
    <parameter name="requiresMatch">
    <value>true</value>
    </parameter>
    </constraint>

    现在我们只需要修改我们的 taxId 属性:
    <property name="myCompany:vendorTaxID">
    <title>Vendor Tax ID</title>
    <type>d:int</type>
    <constraints>
    <constraint ref="myCompany:taxIdConstraint">
    </constraints>
    </property>

    因此,您现在对该属性设置了约束。
  • 看点
    现在您需要一个方面 - 在 Alfresco 中,这就像您想向该表添加一些额外的列一样。

  • 不 - 更好的类比,您需要原始表中的关系。因此,如果它为空,则为空。但或者,它会创建与您的记录与其他表的 1-1(通常)关系。

    这里的基线是你永远不会单独在方面表中添加任何东西——它只是作为基本类型的补充。一个示例方面:
    <aspect name="myCompany:myAspect">
    <title>Address aspect</title>
    <properties>
    <property name="myCompany:city">
    <title>City</title>
    <type>d:text</type>
    </property>
    </properties>
    </aspect>

    如果您将其添加到您的类型定义中(就在属性部分之后),您可以将其设为强制性方面:
    <mandatory-aspects>
    <aspect>myCompany:myAspect</aspect>
    </mandatory-aspects>

    现在,您可以将“记录”添加到您的基本“表”中,如果您将其添加为强制方面,那么每条记录将具有 3 个属性:姓名、税号和城市。如果不是强制性的,那么每条记录将有两个基列,但您可以添加第三个以选择几个。以编程方式或手动方式,都没有关系。
  • 协会
    现在我们还可以在混合中添加关联:这只是两个节点(或“记录”)之间的链接。
    因此,在类型中的属性部分之后,您可以添加关联部分。假设您想将(某些)供应商与其创建者(关键帐户)联系起来。

  • 您将其添加到您的类型中:
    <associations>
    <association name="myCompany:keyAccountManager">
    <source>
    <mandatory>false</mandatory>
    <many>true</many>
    </source>
    <target>
    <class>cm:person</class>
    <mandatory>false</mandatory>
    <many>true</many>
    </target>
    </association>
    </associations>

    你有它!您现在可以将 Vendor 表中的部分或全部 Vendor 连接到它们各自的 KAM(这样您就可以在 Vendor 发生某些事情时通过电子邮件发送 KAM,比方说)。基本上,供应商表和用户表之间的 1-n 连接。
    1-n 意味着您可以将一个供应商连接到多个人。您还可以将不同的供应商连接到一个人。 (许多参数)。

    您还可以以相同的方式向方面添加关联:
    <aspect name="myCompany:stateAspect">
    <properties>
    ...
    </properties>
    <associations>
    <association name="myCompany:myState">
    <source>
    <mandatory>true</mandatory>
    <many>true</many>
    </source>
    <target>
    <class>cm:folder</class>
    <mandatory>false</mandatory>
    <many>true</many>
    </target>
    </association>
    </associations>
    </aspect>

    现在您可以创建常规的露天文件夹(cm:文件夹类型)并以州名命名它们,并将每个城市连接到其中一个文件夹。 (不是最好的方法,但表明了我的观点。)
    所以这个关联是强制性的,这意味着如果你添加另一个方面(不是原来的),这不是强制性的,你必须创建一个关联。

    所以玩组合来做你需要的。
  • 型号

  • 所以现在你有了你的示例模型:
        <?xml version="1.0" encoding="UTF-8"?>
    <model name="myCompany:myContentModel" xmlns="http://www.alfresco.org/model/dictionary/1.0">
    <description>Custom Content Model</description>
    <author>Zlatko Đurić</author>
    <published>2013-03-22</published>
    <version>1.0</version>
    <imports>
    <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
    <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
    </imports>

    <namespaces>
    <namespace uri="myCompany.model" prefix="bv"/>
    </namespaces>

    <constraints>
    <constraint name="myCompany:taxIdConstraint" type="REGEX">
    <parameter name="expression">
    <value>^ID[1-9](\-[1-9])*</value>
    </parameter>
    <parameter name="requiresMatch">
    <value>true</value>
    </parameter>
    </constraint>
    </constraints>

    <types>
    <type name="myCompany:vendor">
    <title>Vendor</type>
    <parent>cm:folder</parent>
    <properties>
    <property name="myCompany:vendorName">
    <title>Vendor name</title>
    <type>d:text</type>
    </property>
    <property name="myCompany:vendorTaxID">
    <title>Vendor Tax ID</title>
    <type>d:int</type>
    <constraints>
    <constraint ref="myCompany:taxIdConstraint">
    </constraints>
    </property>
    </properties>
    <mandatory-aspects>
    <aspect>myCompany:myAspect</aspect>
    </mandatory-aspects>
    <associations>
    <association name="myCompany:keyAccountManager">
    <source>
    <mandatory>false</mandatory>
    <many>true</many>
    </source>
    <target>
    <class>cm:person</class>
    <mandatory>false</mandatory>
    <many>true</many>
    </target>
    </association>
    </associations>
    </type>
    </types>

    <aspects>
    <aspect name="myCompany:myAspect">
    <title>Address aspect</title>
    <properties>
    <property name="myCompany:city">
    <title>City</title>
    <type>d:text</type>
    </property>
    </properties>

    <associations>
    <association name="myCompany:myState">
    <source>
    <mandatory>true</mandatory>
    <many>true</many>
    </source>
    <target>
    <class>cm:folder</class>
    <mandatory>false</mandatory>
    <many>true</many>
    </target>
    </association>
    </associations>
    </aspect>
    </aspects>
    </model>

    There, I hope this helps you.

    关于database-design - 在 Alfresco 内容模型中创建一个方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15567171/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com