4

現在、AlfrescoCMSの使用を開始しています。コンテンツモデルに「アスペクト」を作成する必要があります。これには、次のようないくつかのプロパティが含まれている必要があります。

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

さらに、次のようないくつかのプロパティのいずれかで構成される2つのプロパティが含まれている必要があります。

Format: 
   FormatProperty1: int
   FormatProperty2: int
   FormatProperty3: int

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

Alfrescoでは、単純なコンテンツモデルもアスペクトもまだ作成していません。リレーショナルデータベースに関する私の以前の知識に基づいて、私は上記の構造をテーブル間の関連付けとして認識しています。アスペクト以上のAlfrescoコンテンツモデルでそれを実行するにはどうすればよいですか?

4

2 に答える 2

6

あなたのコメントに基づいて、@ Alch3mi5tの回答に追加情報を追加してみましょう。ここでは、架空のビジネス ケースを使用しています。

基本的に、Alfresco モデルは、制約、タイプ、およびアスペクトの 3 つのセクションで構成されます。さらに、ミックスに関連付けを追加します。

  • タイプ

alfresco の各ノード (誤って「レコード」と考えるかもしれません) にはタイプがあります。したがって、この型にはプロパティ (「列」) があります。これで基本型ができました。それがVendorと呼ばれているとしましょう。Name と Tax ID (string と int) の 2 つの props があります。タイプ定義は次のようになります。

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

string 型と int 型の vendorName 列と vendorTaxID 列を持つ db テーブルと同じように、型があります。

  • 制約

単純な正規表現の例である、税 ID に何らかの制約を追加する必要があるとしましょう。したがって、次のように定義された制約があります。

<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 では、テーブルにいくつかの列を追加したい場合と同じです。

いいえ - より良いアナロジー、元のテーブルからの関係が必要です。したがって、null の場合は null です。ただし、代わりに、レコードと他のテーブルとの 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 つの小道具があります。必須でない場合、各レコードには 2 つのベース列がありますが、3 番目の列を追加して少数を選択できます。プログラムまたは手動は関係ありません。

  • アソシエーション ミックスにアソシエーションを追加することもできます。これは、2 つのノード (または「レコード」) 間のリンクのみです。したがって、型のプロパティセクションの後に、関連付けセクションを追加できます。(一部の) ベンダーをその作成者 (キー アカウント) に接続するとします。

これをタイプに追加します:

<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 に電子メールを送信できます)。基本的に、Vendors テーブルと Users テーブル間の 1-n 接続です。1-n は、1 つのベンダーを多くの人に接続できることを意味します。異なるベンダーを 1 人に接続することもできます。(多くのパラメータ)。

同じ方法で、アスペクトに関連付けを追加することもできます。

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

これで、通常の alfresco フォルダー (cm:folder タイプ) を作成し、州にちなんで名前を付けて、各都市をそれらのフォルダーの 1 つに接続することができます。(最善の方法ではありませんが、私の要点を示しています。)したがって、この関連付けは必須です。つまり、必須ではないこの他の側面(元のものではない)を追加する場合は、関連付けを作成する必要があります。

したがって、必要なことを行うために組み合わせを試してください。

  • モデル

これで、サンプル モデルができました。

    <?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.
于 2013-03-22T14:05:45.313 に答える