SharePoint - 功能與元素



本章我們將探討SharePoint的功能和元素。功能在某種程度上是SharePoint中的元件模型。它們允許您定義功能的邏輯單元。

例如,您可能希望在網站內具有以下功能:

  • 建立一個具有特定模式的列表;

  • 顯示該列表資料的頁面;以及

  • 網站內某個位置的連結或選單選項,用於導航到該頁面。

您可以建立一個功能,該功能定義該功能的邏輯分組。各個功能部件由元素定義。

因此,將會有一個元素:

  • 建立列表並設定模式;

  • 將頁面置備到您的SharePoint網站;以及

  • 建立選單選項或連結。

功能定義單元,然後元素定義該單元內的各個功能部件。我們討論了三種類型的元素:

  • 列表例項,用於建立列表;

  • 模組,用於置備頁面;

  • 自定義操作,用於建立選單選項或連結。

但是,可以在SharePoint中建立許多其他型別的元素。關於功能,另一個需要理解的重要概念是啟用和停用。

例如,如果終端使用者希望將上述功能新增到其網站,他將啟用相應的建立列表、新增選單選項或連結以及將其頁面置備到其網站的功能。稍後,他可以停用該功能以刪除該功能。

需要注意的是,停用功能後,某些元素會自動刪除。例如,SharePoint會自動刪除由自定義操作定義的選單選項或連結。

其他元素不會自動刪除。因此,在我們的例子中,列表例項和頁面不會自動刪除。

因此,作為開發人員,您需要了解哪些元素會自動刪除,哪些元素不會自動刪除。如果要刪除不會自動刪除的元素,可以在功能接收器中編寫程式碼。

讓我們來看一下使用功能和元素的方法。我們將從終端使用者對功能的檢視開始。

步驟1 - 開啟您的SharePoint網站。

SharePoint Sites

步驟2 - 要轉到網站設定,您有兩個連結可以用來管理功能。

  • 第一個連結管理網站功能位於“網站操作”下,允許您管理網站範圍的功能。

  • 另一個連結網站集功能位於“網站集管理”下,允許您管理網站集範圍的功能。

Manage Site Features

步驟3 - 如果單擊這兩個連結中的任何一個,您將被帶到一個頁面,該頁面顯示當前活動和非活動的功能。對於每個功能,您都有一個選項來啟用或停用該功能。

Features of Site

讓我們透過建立一個新的SharePoint解決方案空專案來看一個簡單的例子。

步驟1 - 我們將其命名為FeaturesAndElements,然後單擊“確定”。

Features and Elements

步驟2 - 指定您要使用的網站,然後選擇作為場解決方案部署選項,然後單擊“完成”。

Deploy as a Farm Solution

我們要建立的第一件事是功能。在解決方案資源管理器中,您可以看到一個“功能”資料夾,該資料夾目前為空。

Features Folder

步驟3 - 右鍵單擊功能資料夾,然後選擇新增功能。它建立一個名為Feature1的功能,並開啟功能設計器。預設標題是專案標題加上功能標題。

Add Feature

步驟4 - 將功能從Feature1重新命名為Sample。

標題和說明是使用者在啟用和停用功能的頁面上看到的。

將標題設定為示例功能,說明設定為新增“聯絡人”列表和用於檢視列表的頁面。我們需要設定的另一件事是功能的範圍,即啟用範圍。

它可以是場、Web應用程式、網站集或網站。在本例中,我們將置備一個列表和一個頁面。由於兩者都位於SharePoint網站中,因此我們將在此處選擇Web。

Sample Feature

步驟5 - 讓我們開始在元素中新增功能。第一個元素將是列表,我們將建立一個聯絡人列表。右鍵單擊您的專案,然後選擇新增→新建項...

步驟6 - 在中間窗格中選擇列表,在名稱欄位中輸入聯絡人,然後單擊新增。

Select List

步驟7 - 您將看到列表建立嚮導。建立一個名為“聯絡人”的列表,該列表基於“聯絡人”列表。單擊“完成”以建立列表,或者至少建立最終將建立列表的元素。

SharePoint Customization Wizard

以下是列表設計器的螢幕截圖。(此處應插入截圖)

List Designer

步驟8 - 此設計器只是一個XML編輯器。開啟“聯絡人”下的Elements.xml檔案,並新增以下資料。(此處應插入XML程式碼)

<?xml version = "1.0" encoding = "utf-8"?>

<Elements xmlns = "http://schemas.microsoft.com/sharepoint/">
   <ListInstance Title = "Contacts" OnQuickLaunch = "TRUE" TemplateType = "105" 
      FeatureId = "00bfea71-7e6d-4186-9ba8-c047ac750105"
      Url = "Lists/Contacts" Description = "">
      <Data>
         <Rows>

            <Row>
               <Field Name = "ID">1</Field>
               <Field Name = "Last Name">Anders</Field>
               <Field Name = "First Name">Maria</Field>
               <Field Name = "Company">Alfreds Futerkiste</Field>
               <Field Name = "Business Phone">030-0074321</Field>
            </Row>

            <Row>
               <Field Name = "ID">2</Field>
               <Field Name = "Last Name">Hardy</Field>
               <Field Name = "First Name">Thomas</Field>
               <Field Name = "Company">Around the Horn</Field>
               <Field Name = "Business Phone">(171) 555-7788</Field>
            </Row>

            <Row>
               <Field Name = "ID">3</Field>
               <Field Name = "Last Name">Lebihan</Field>
               <Field Name = "First Name">Laurence</Field>
               <Field Name = "Company">Bon app'</Field>
               <Field Name = "Business Phone">91.24.45.40</Field>
            </Row>

            <Row>
               <Field Name = "ID">4</Field>
               <Field Name = "Last Name">Ashworth</Field>
               <Field Name = "First Name">Victoria</Field>
               <Field Name = "Company">B's Beverages</Field>
               <Field Name = "Business Phone">(171) 555-1212</Field>
            </Row>

            <Row>
               <Field Name = "ID">5</Field>
               <Field Name = "Last Name">Mendel</Field>
               <Field Name = "First Name">Roland</Field>
               <Field Name = "Company">Ernst Handel</Field>
               <Field Name = "Business Phone">7675-3425</Field>
            </Row>

         </Rows>
      </Data>
   </ListInstance>
</Elements>

請注意以下幾點:

  • ListInstance元素內,我們有一個名為Data的元素,其中包含一些行。

  • ListInstance將具有屬性Contacts,無論我們是否在快速啟動中顯示它。

  • 我們希望基於聯絡人模板的列表。這裡,TemplateType設定為105。這不是一個隨機數,而是一個有意義的數字。

  • SharePoint中可以使用的每種預設型別的列表(例如公告列表、任務列表、聯絡人列表等)都與一個數字相關聯。因此,如果將105更改為107,您將獲得不同型別的列表。

  • FeatureId是與聯絡人列表定義關聯的指南。

步驟9 - 現在我們想要一個顯示此列表資料的頁面。右鍵單擊您的專案,然後選擇新增→新建項...在中間窗格中選擇模組,在名稱欄位中輸入SitePage,然後單擊新增

Module

您將看到一個名為SitePage的節點,其中包含兩個檔案:Elements.xmlSample.txt檔案。我們不想置備此sample.txt檔案,但我們想置備一個SitePage。

步驟10 - 將文字檔案重新命名為Contacts.aspx,並替換以下程式碼:(此處應插入ASPX程式碼)

<%@ Assembly Name = "Microsoft.SharePoint, Version = 14.0.0.0, Culture = neutral,
   PublicKeyToken = 71e9bce111e9429c" %>

<%@ Page MasterPageFile = "~masterurl/default.master"
   meta:progid = "SharePoint.WebPartPage.Document" %>

<%@ Register TagPrefix = "SharePoint"
   Namespace = "Microsoft.SharePoint.WebControls"
   Assembly = "Microsoft.SharePoint, Version = 14.0.0.0, Culture = neutral,
   PublicKeyToken = 71e9bce111e9429c" %>

<asp:Content ID = "Content2" runat = "server" ContentPlaceHolderID = "PlaceHolderMain">
   <SharePoint:SPDataSource runat = "server"
      ID = "ContactsDataSource" DataSourceMode = "List"
      UseInternalName = "false">
      <SelectParameters>
         <asp:Parameter Name = "ListName" DefaultValue = "Contacts" />
      </SelectParameters>
   </SharePoint:SPDataSource>
   
   <SharePoint:SPGridView runat = "server"
      ID = "ContactsGridView" DataSourceID = "ContactsDataSource"
      AutoGenerateColumns = "false" RowStyle-BackColor = "#DDDDDD"
      AlternatingRowStyle-BackColor = "#EEEEEE">
      <Columns>
         <asp:BoundField HeaderText = "Company"
            HeaderStyle-HorizontalAlign = "Left" DataField = "Company" />
         <asp:BoundField HeaderText = "First Name"
            HeaderStyle-HorizontalAlign = "Left" DataField = "First Name" />
         <asp:BoundField HeaderText = "Last Name"
            HeaderStyle-HorizontalAlign = "Left" DataField = "Last Name" />
         <asp:BoundField HeaderText = "Phone"
            HeaderStyle-HorizontalAlign = "Left" DataField = "Business Phone" />
      </Columns>
   </SharePoint:SPGridView>
</asp:Content>

<asp:Content ID = "PageTitle" ContentPlaceHolderID = "PlaceHolderPageTitle"
   runat = "server">
   Contacts
</asp:Content>

<asp:Content ID = "PageTitleInTitleArea"
   ContentPlaceHolderID = "PlaceHolderPageTitleInTitleArea" runat = "server" >
   Contacts
</asp:Content>

SitePage具有一個SP.DataSource檔案,我們將使用它來使聯絡人列表資料成為可以在頁面中繫結的內容。SP.GridView將顯示聯絡人資訊。

那是我們的SitePage,現在讓我們看看功能。

Site Page

請注意,在功能中的項中,聯絡人列表例項和模組已作為元素在我們的SitePage上置備。

Visual Studio理解,元素本身什麼也做不了。元素需要成為功能的一部分。因此,當您新增元素時,需要將其新增到功能中。

步驟11 - 轉到您的專案並右鍵單擊,然後選擇新增→新建項...

在這裡,我們要新增一個CustomAction,所以在中間窗格中選擇空元素,將其命名為Action,然後單擊新增。

CustomAction

如果您回到您的功能,您會看到該元素現在已新增到功能中,如下面的螢幕截圖所示。(此處應插入截圖)

Added Features

步驟12 - 返回Elements.xml(在Action下),並替換以下程式碼:(此處應插入XML程式碼)

<?xml version = "1.0" encoding = "utf-8"?>

<Elements xmlns = "http://schemas.microsoft.com/sharepoint/">
   <CustomAction
      Id = "SiteActionsToolbar"
      GroupId = "SiteActions"
      Location = "Microsoft.SharePoint.StandardMenu"
      Sequence = "100"
      Title = "Contacts"
      Description = "A page showing some sample data">
      <UrlAction Url = "~site/SitePages/Contacts.aspx"/>
   </CustomAction>
</Elements>

現在,如果要新增連結或選單選項,則需要定義要新增的位置,它是Location和GroupId的組合,它們定義了這些位置。此值的組合表示應將選單選項新增到SiteActions選單。

還有許多其他值的組合,這些組合會在SharePoint網站中的其他位置新增連結或選單。這是您需要研究才能找出在要在SharePoint中的某個位置新增選單選項時所需的正確值組合。

步驟13 - 雙擊功能,您將看到功能設計器。功能設計器是功能清單(一個XML文件)的精美編輯器。

Feature

要點:

  • 功能定義元素的邏輯分組。在這裡,我們的功能指的是我們剛剛建立的三個元素清單。

  • 啟用功能後,SharePoint將檢視各個元素清單,並將列表、頁面和連結新增到我們的SharePoint網站。

  • 使用Visual Studio部署時,它會自動啟用專案中的任何功能。由於我們想了解啟用功能的過程,我們將告訴Visual Studio不要這樣做。

步驟14 - 轉到專案屬性,方法是轉到SharePoint選項卡。將部署配置更改為不啟用

No Activation

讓我們測試一下。

步驟15 - 在解決方案資源管理器中右鍵單擊您的專案,然後選擇部署。它將打包專案中的所有內容並將其部署到SharePoint開發場。

Deploy

成功部署後,您將在輸出視窗中看到它。

步驟16 - 轉到SharePoint網站並重新整理它。轉到網站設定→網站操作

Site Actions

步驟17 - 選擇管理網站功能,因為您的自定義功能是Web範圍的,您將看到您的示例功能。您可以看到此功能尚未啟用,因此讓我們繼續啟用它。

Web Scoped

您將在左側窗格中看到“聯絡人”列表。

Contact List in Left Pane

步驟18 - 單擊“聯絡人”,將顯示列表中的資料。

Contact Tab

步驟19 - 轉到網站操作選單。有一個選項可以導航到“聯絡人”頁面。那是我們的CustomAction。

Site Actions Menu

步驟20 - 如果單擊“聯絡人”,您將看到您的SitePage,顯示來自“聯絡人”列表的資料。

Data From Contacts List
廣告