2011年3月7日 星期一

以Aspect自訂Alfresco資料屬性

通常檔案的描述資料(Meta Data)有Name、Title、Description、Author、Created Date與Last Modified Date等,Alfresco除了上述Meta Data外,可以自訂各式的資料模型(Content Model)。缺少了自訂的資料模型,Alfresco只不過是一套檔案管理系統。要滿足各類應用程式的儲存需求,甚至成為應用系統的發展平台,自訂資料屬性是必備的基礎功能。Alfresco提供兩種自訂屬性的方法,一是創建一個新的內容種類(Content Type),於檔案存入時直接指定;另一種是新增Aspect(就是屬性集合的意思),再透過規則引擎將Aspect根據條件貼在檔案上。以下是新增Aspect的步驟:
  1. 將自訂資料模型設定檔掛入Alfresco的載入清單中
    Alfresco啟動時除內定的系統路徑外,還會搜尋延伸路徑內是否含有以-context.xml結尾的檔案。這個模式讓客製化時無需修改原廠預設值,只需將新增或修改的參數寫在延伸檔案內即可覆蓋。以包覆Tomcat6的Alfresco34d為例,其延伸路徑位於$TOMCAT_HOME/shared/classes/alfresco/extension目錄內。初次使用時,請將custom-model-context.xml.sample更名為custom-model-context.xml,以及將customModel.xml.sample更名為customModel.xml。之後以文字編輯器開啟custom-model-context.xml,確定alfresco/extension/customModel.xml是否在extension.dictionaryBootstrap載入的範圍內。(當然,自訂模型檔名不一定要叫customModel.xml)
  2. 編輯customModel.xml
    在內文最底下</model>標籤之上加入自訂屬性集標籤代碼<aspects></aspects>。Aspect加S表示可以加入多個屬性集。假設我們要收集的資料為費用請款憑證,需要輸入費用的發生部門、分類、營業稅額與請款總金額;在<aspects>與</aspects>標籤內輸入以下字串:
    <aspect name="custom:ExpenseDetails">
        <title>費用明細</title>
        <properties>
           <property name="custom:Department">
              <title>歸屬部門</title>
              <type>d:text</type>
              <protected>false</protected>
              <mandatory>true</mandatory>
              <multiple>false</multiple>
           </property>    
           <property name="custom:ExpenseType">
              <title>費用分類</title>
              <type>d:text</type>
              <protected>false</protected>
              <mandatory>true</mandatory>
              <multiple>false</multiple>
           </property>    
           <property name="custom:TaxAmount">
              <title>營業稅額</title>
              <type>d:int</type>
              <protected>false</protected>
              <mandatory>true</mandatory>
              <multiple>false</multiple>
          </property>    
          <property name="custom:TotAmount">
              <title>總金額</title>
              <type>d:int</type>
              <protected>false</protected>
              <mandatory>true</mandatory>
              <multiple>false</multiple>
          </property>    
       </properties>
    </aspect>
  3. 編輯web-client-config-custom.xml
    為避免修改出廠的使用者操作介面設定值,Alfresco的延伸路徑$TOMCAT_HOME/shared/classes/alfresco/extension內同樣存在一個供開發者客製畫面的檔案web-client-config-custom.xml。如果找不到的話,請將web-client-config-custom.xml.sample更名為web-client-config-custom.xml。以文字編輯器開啟該檔案,在最後一列</alfresco-config>標籤上面將新建的Aspect告知Alfresco,鍵入的文字如下:
    <config evaluator="string-compare" condition="Action Wizards">
         <aspects>
             <aspect name="custom:ExpenseDetails"/>
         </aspects>
    </config>
    <config evaluator="aspect-name" condition="custom:ExpenseDetails">
         <property-sheet>
             <separator name="SepExpense" display-label="費用明細項目" component-generator="HeaderSeparatorGenerator"/>
             <show-property name="custom:Department"/>
             <show-property name="custom:ExpenseType"/>
             <show-property name="custom:TaxAmount"/>
             <show-property name="custom:TotAmount"/>
         </property-sheet>
    </config>
    上述第一個config標籤是將Aspect加入Alfresco規則引擎的動作(Action)選項中,第二個config標籤是帶出該Aspect畫面時,哪些屬性要顯示出來(屬性不一定要全部顯示)。
  4. 建立檔案夾規則
    Aspect可透過規則引擎貼上內容檔案;當我們將費用憑證掃描成電子檔案(PDF或TIFF),存入Alfresco某一個檔案夾(在 Alfresco通稱為Space)時,可以有條件或無條件地建立一個規則(Rule),而規則的動作(Action)可以是將ExpenseDetails這個 Aspect指定給剛存入檔案。這個效果就是擴充了這個檔案的描述資料(Meta Data),這些Meta Data也可以併入Alfresco搜尋引擎(Lucene)的檢索範圍。
  5. 驗證效果
    1.進入費用憑證存放空間
    2.指定費用憑證圖檔
    3.指定檔案類型
    4.指定自訂的屬性資料

沒有留言: