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

2023-12-01

我目前开始使用 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 个部分组成:约束、类型和方面。另外,我会在其中添加关联。

  • Type

露天中的每个节点(您可能错误地将其视为“记录”)都有一个类型。所以这个类型有属性(“列”)。所以你有了你的基本类型,假设它被称为Vendor。它有两个属性,名称和税号(字符串和整数)。 您的类型定义如下所示:

<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 类型的供应商名称和供应商税号列的数据库表不同。

  • 约束

假设您现在必须对税号添加一些约束 - 简单的正则表达式示例。 所以你有一个这样定义的约束:

<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>

现在我们只需要修改你的tax Id属性:

<property name="myCompany:vendorTaxID">
  <title>Vendor Tax ID</title>
  <type>d:int</type>
  <constraints>
    <constraint ref="myCompany:taxIdConstraint">
  </constraints>
</property>

因此,您现在对该属性施加了约束。

  • Aspect现在您想要一个方面 - 在 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>

你有它!现在,您可以将供应商表中的部分或全部供应商连接到其各自的 KAM(这样,当供应商出现问题时,您可以向 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:文件夹类型)并以州名称命名它们,并将每个城市连接到其中一个文件夹。 (不是最好的方法,但表明了我的观点。) 所以这个关联是强制性的,这意味着如果您添加其他方面(不是原始的),这不是强制性的,您必须创建一个关联。

因此,请使用各种组合来完成您需要的操作。

  • Model

现在您有了示例模型:

    <?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.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Alfresco 内容模型中创建一个方面 的相关文章

随机推荐

  • Google 图表:自定义刻度

    我想在 Google 图表的水平轴上设置自己的刻度 我包括了 hAxis ticks 根据文档 在我下面的尝试中 但它拒绝工作 因为刻度仍然不是整数 即使我指定它们是整数 我究竟做错了什么
  • 是否可以在未计算的上下文中从 STD 形成指向不可寻址函数的指针?

    如中所述命名空间 std 6 让 F 表示标准库函数 除非 F 被指定为可寻址函数 否则如果 C 程序显式或隐式尝试形成指向 F 的指针 则其行为是未指定的 可能是格式错误的 这对于以下程序意味着 include
  • 字符 Å Ö 没有显示在我的 DDL 中,我如何告诉 Restclient 使用特定的字符集?

    在我开始之前 这里是一个问题 应该是这样的 Bj rn Nilsson 相反 它显示奇怪的特殊字符 所有包含字符 和 的值都变成这样 我用 XML 格式的 API 中的值填充我的 DDL 其中包含所有值 并且我们还使用 Linq2Rest
  • 如何显示带有动态创建的姓名首字母的头像图标

    我有一个要求 通过传递名称 它应该返回头像 图标 其中包含该名称中包含的单词的第一个字母 例如 如果我通过 John Abraham 它应该返回一个带有 JA 的图标 我需要在 SAPUI5 控件中使用该图标 我对此没有任何想法 如何实施
  • Java 一行 if 不适用于打印[重复]

    这个问题在这里已经有答案了 如果你写这样的东西 boolean condition String out condition true false System out println out 有用 但如果你写 condition Syst
  • 正则表达式将所有字符都放在第一个空格的右侧?

    我正在尝试创建一个正则表达式 该表达式将匹配字符串中第一个空格之后 但不包括 的所有字符 输入文本 foo bar bacon 期望的比赛 bar bacon 到目前为止我发现的最接近的是 s 然而 这与 bar bacon 之外的第一个空
  • Eclipse 插件更新错误日志在哪里?

    当我尝试更新一个 Eclipse 插件时 它显示以下错误 但我在 Eclipse 文件夹下没有找到任何内容 日志路径在哪里 an error has occurred see the error log for details Thx 该日
  • NSURLCredentialStorage 和客户端证书认证

    从我在 MPMoviewPlayerController 的文档中看到的 NSURLCredentialStorage 可以设置为 NSURLConnection 身份验证挑战的替代方案 这对于从 URL 加载资源但抽象 NSURLConn
  • iOS:如何获取两个坐标之间的路线路径

    在我的项目中 我必须借助纬度和经度找出两个位置之间的路线路径 我正在使用以下代码 void viewDidLoad super viewDidLoad Do any additional setup after loading the vi
  • .net MVC:如何仅向授权用户提供静态文件

    我的网站中有静态文件 例如 http myurl com Content a html http myurl com Content b html etc 我想在访问时验证用户的身份验证 身份验证应通过数据库数据进行检查 我的框架 ASP
  • Swift 多关卡场景

    我正在尝试开发一个新的游戏项目 其中将包含多个级别 我正在读这个问题 Sprite Kit 定义多个场景的变量 关于使用尽可能少的重复代码来完成多个场景的最佳方法 答案当然是子类化 假设我创建了 baseScene 它是 SKScene 的
  • 如何监听来自 Kafka 的正确 ACK 消息

    我正在做一个POC使用 Spring Boot 和 Kafka 进行事务性项目 我有以下疑问 设想 一个微服务MSPUB1接收来自客户的请求 该请求发布有关主题的消息TRANSACTION TOPIC1在 Kafka 上 但微服务可以并行接
  • Twig Excel 捆绑包自动调整大小

    如何在 Twig Excel Bundle 中设置自动调整大小 https twigexcelbundle readthedocs io en latest 您可以设置默认值autoSize片材的属性true via columnDimen
  • Java 中的垃圾回收与递归函数

    我知道在常规循环的每次迭代中 对象都会变得无法访问并标记为垃圾回收 那么递归调用呢 就像是 public void doWork Object a new Object some work with a this sleep 60000 d
  • 如何计算SQL中两个日期之间的“星期二”数?

    我想弄清楚如何计算 TSQL 中两个日期之间的 星期二 数量 Tuesday 可以是任何值 谢谢 t clausen dk 救了我几天 要获取每天的实例数 declare from datetime 3 1 2013 declare to
  • 带秒数的时间选择器

    我正在使用 Xamarin Forms 在我的应用程序中的某个位置 我需要用户能够以 HH mm ss 格式输入时间 所以 基本上我需要一个像这样的控件 通过使用自定义 iOS 渲染 我已经能够从 TimePicker 中删除 AM PM
  • 如何识别 GridView 中已编辑的行?

    我的客户希望 GridView 仅显示 TextBoxes 和 DropDownListBoxes 内的字段 他希望在更改单元格中的值后只需单击 更新 按钮即可灵活地更新记录 他希望当前编辑的 GridViewRow 具有某种不同的颜色 以
  • Mongo相当于SQL的SELECT DISTINCT?

    根据标题 PHP Mongo 相当于 SQL 中的类似内容 SELECT DISTINCT field FROM table WHERE someCondition 1 我读过看过这张桌子但我不知道如何映射db users distinct
  • Javascript,使用下划线(或不使用)转换对象

    我正在准备一个要发送的对象 它最初看起来像这样 var myObj state Saved true Committed false Published false discipline Marketing true 并且需要通过查看内部对
  • 在 Alfresco 内容模型中创建一个方面

    我目前开始使用 Alfresco CMS 我需要在我的内容模型中创建一个 方面 它必须包含许多属性 如下所示 Aspect property 1 String property 2 int property 3 int property 4