SharePoint Managed Metadata 使用總結


前言

本文完全原創,轉載請說明出處,希望對大家有用。

  在SharePoint開發中,通常我們會將數據存儲在列表,文檔庫或者直接存到數據庫。但涉及到數據的層級結構時,用列表等存儲實現並不是一件簡單的事情,這時候就可以使用SharePoint的另外一種存儲數據的方式:托管元數據。

  托管元數據為SharePoint提供了統一的術語庫,企業用戶可以將各種日常使用的術語存放在托管元數據。托管元數據的另外一個重要特點是樹型結構,比較典型的應用時企業的組織架構,將企業組織架構按照層級結構存放到托管元數據中,通過遍歷元數據樹輸出企業組織信息。

 本文着重對開發過程中對托管元數據的操作進行總結,如何配置Managed Metadata Service(托管元數據服務)請查看官方文檔,本文不做描述。

閱讀目錄

正文

  認識托管元數據存儲結構

在使用Managed Metadata前,我們先看一下數據的存儲結構,在Managed Metadata中,結構類型分為Term Store(容器)、Group、Term set和Term。

它們的關系可以用下圖表示:

Managed Metadata Service

  • Term Store
    • Group
      • Term Set
        • Term

Group節點只能創建Term Set節點,Term Set節點只能創建Term節點,Term節點可以繼續創建Term子節點。

 

這就是Managed Metadata得數據存儲結構,接下來看下如何管理元數據。

路徑:Site Settings->Term store management

Term store management是SharePoint自帶的托管元數據管理頁面,打開Term store management

如圖:

我們可以看到在當前的網站集中,有一個Managed Metadata Service(Term Store),在此節點下有5個子節點。

在虛線上方的是自定義的Group(Portal等),展開Portal Group后,如圖:

可以看到在Portal節點下是Department等Term Set節點,再下一層就是Term節點,如在部門(Department)節點下存儲各個部門,以及各部門下的子部門。

這是SharePoint server 2010自帶的管理界面,這里我們為了說明元數據存儲結構簡單介紹一下,接下來是我們開發過程中真正使用元數據的方法。

  托管元數據操作
  讀數據
using (SPSite site = new SPSite(SiteUrl))
  {
      TaxonomySession taxonomySession = new TaxonomySession(site);
      TermStore termStore = taxonomySession.DefaultSiteCollectionTermStore;
      Group group = termStore.Groups[termgroup];
      TermSet termSet = group.TermSets[termSet_Department];
  }

代碼解釋:

  TaxonomySession:獲取當前網站集下的 TermStore上下文環境

  TermStore->Group->TermSet:根據層級結構取得最終的termset

  DefaultSiteCollectionTermStore:默認的TermStore,可以使用taxonomySession.TermStore[""]修改為指定的TermStore

  獲取TermSet后,就可以通過其Terms屬性獲取此節點下的所有Terms。

 修改term數據

在讀取termset以后,下一步嘗試修改term,加入以下代碼:

    Term term= termSet.Terms["IT"];
    term.Name = "MIT";
    termStore.CommitAll();    

代碼解釋:

  獲取名為“IT”的Term

  現在將Name修改為MIT

  提交所有更改

 注意修改元數據需要有相應的權限,同時需要注意的是修改后由於TimerJob的原因,可能會有一些延遲。

  讀取父節點、子節點
          if (!term.IsRoot)
              {
                 Term parent = term.Parent;
              }
           TermCollection child_terms = term.Terms;

代碼解釋:

  term.IsRoot:判斷是否為根節點

  term.Parent:如果非根節點,則找到上級節點

  term.Terms:找到此節點下的所有下級節點

  復制、合並、移動節點

  復制:

    Term term= termSet.Terms["MIT"];
    term.Copy(true);
    termStore.CommitAll(); 

Term.Copy方法會將此節點復制一份名稱"Copy of MIT"為保存到當前的TermSet中,參數指定為true則復制會包括子節點。同樣TermSet也可以復制,不需要指定參數,方法會自動將其中的子節點也復制,子節點是作為原節點的復用(Reuse)節點存在,復用節點可以通過Source屬性訪問原節點。

  合並:

    Term term = termSet.Terms["MIT"];
    Term term4Merge=termSet.Terms["HR"];
    term.Merge(term4Merge);
    termStore.CommitAll();

Merge方法只能針對同樣是Source Term的2個節點,也就是說之前復制后的復用節點是不能合並的。上述代碼會將term合並到term4Merge。

  移動:

    Term term = termSet.Terms["HR"];
    Term term4Move=termSet.Terms["Account"];
    term.Move(term4Move);
    termStore.CommitAll();

Move方法應該是最常用到的方法。

Term和Term Set都可以移動,Term可以移動到其他在此Term Store的Term節點或Term Set下,Term Set可以移動到此Term Store的Group節點下。

Move方法可以讓用戶更加自由的移動節點,假設有這樣一個需求,用戶需要維護企業組織架構,如上述事例中:HR部門需要移動到Account部門下。使用Move方法,可以方便的將HR部門的所有其他組織一起移動到Account部門節點下,免去了重復添加的過程。甚至可以在頁面中以拖拽的方式實現,為用戶呈現更加直觀友好的頁面。

 

  TaxonomyHiddenList

在SharePoint站點中,有一個隱藏的TaxonomyHiddenList,可以通過/Lists/TaxonomyHiddenList/AllItems.aspx訪問。TaxonomyHiddenList的item對應TaxonomyFieldType字段的值,TaxonomyFieldType字段被賦值后,就會對應的在TaxonomyHiddenList產生一條記錄,用來記錄TaxonomyField的詳細信息,所以TaxonomyFieldType字段也是LookUp字段類型。

 

  自定義TaxonomyFieldType字段

在SharePoint界面中新建TaxonomyFieldType字段無其他需要注意的,主要看下在SharePoint項目中新建TaxonomyFieldType字段。

以下是TaxonomyFieldType字段的定義:

  <Field ID="{47539D90-EB9B-45A5-8591-68077530FD92}" Name="Field_TaxonomyDemo" StaticName="Field_TaxonomyDemo" DisplayName="TaxonomyDemo" Required="FALSE" Group="Custom group" Type="TaxonomyFieldType">
        <Customization>
          <ArrayOfProperty>
            <Property>
              <Name>TextField</Name>
              <Value xmlns:q6="http://www.w3.org/2001/XMLSchema" p4:type="q6:string" xmlns:p4="http://www.w3.org/2001/XMLSchema-instance">{78FF1668-CDDB-4645-8BED-FC2179944F5F}</Value>
            </Property>
          </ArrayOfProperty>
        </Customization>
   </Field>
   <Field ID="{78FF1668-CDDB-4645-8BED-FC2179944F5F}" Name="Field_TaxonomyDemoTaxHTField0" Type="Note" DisplayName="TaxonomyDemoTaxHTField0" StaticName="Field_TaxonomyDemoTaxHTField0" ShowInViewForms="FALSE" Required="FALSE" Hidden="TRUE" CanToggleHidden="TRUE"/>

Field_TaxonomyDemo字段這個字段是TaxonomyFieldType類型,需要注意的是在此字段中,需要引用下面的Field_TaxonomyDemoTaxHTField0字段作為其TextField屬性字段。

總結

作為數據管理的一種方法,個人認為SharePoint Managed Metadata好處多多,在實際應用中也有很多方便之處。

SharePoint Managed Metadata的總結大概就是這些了,希望對讀者有所幫助,有任何疑問請及時與我討論。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM