天天看點

WSS3SDK之:如何定制mobile頁面中的字段渲染

本節将對Windows SharePoint Services 3.0 的mobile裝置通路頁面中的字段渲染定制過程做一個概述。詳細的步驟請參考随後的演練。

前面的Mobile頁面渲染機制一節中我們說過,在頁面裡一個SPMobileListFieldSelector模闆選擇器控件的調用,會導緻從該控件開始的鍊式的調用。

基于目前的清單類型和字段(比如本例中的通知和标題),該對象決定了哪個RenderingTemplate會用于在mobile顯示頁面上渲染該字段。

該控件會尋找名為MobileCustomListField_ListTypeID_FieldType_Field的RenderingTemplate。

FieldType 是字段的資料類型。可以在SPFieldType枚舉值中任意取值;比如,Text或Number。他也可以是一個在fldtypes*.xml檔案中通過<Field Name="TypeName">元素定義的自定義字段類型。

Field 是字段的内部名稱,比如WorkPhone。如果該字段是作為清單的一部分在Schema.xml清單架構定義檔案中指定的,則其内部名稱可以在Field元素的Name屬性中找到。該檔案位于目錄: Local_Drive:/

Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/FEATURES/

Feature_Folder。如果字段是通過UI添加到清單中的;或者說是通過建立欄頁面,則 Field 是Microsoft.SharePoint.SPField.InternalName的屬性值,可以通過對象模型得到。

注意:

Field 是字段(欄)的内部名稱,不見得與字段的顯示名稱相同。對于使用者通過UI建立的字段來說,其内部名稱是系統根據使用者輸入的顯示名稱(在建立欄頁面的欄名稱 文本框中)生成的。如果該使用者在顯示名詞中包含空格或标點符号,那麼mobile模闆渲染機制将無法使用其生成的内部名稱,是以您将無法對這樣的字段進行 渲染的定制。

ListTypeID 可以是目前清單類型的ID号(如105),也可以是SPListTemplateType枚舉的一個值(如Contacts)。有兩種方式來定義一個清單類型ID:

  • 如果清單是作為網站類型的一部分來在Onet.xml站點定義檔案中指定的,則 ListTypeID 的值是Onet.xml中List元素的Type屬性值。該檔案位于這個目錄下: Local_Drive

    :/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/SITETEMPLATES/

    Site_Type

    /xml

  • 如果清單是通過UI添加到網站中的;也就是說,通過建立(清單)頁,則 ListTypeID 為當初用作新清單類型基礎的清單類型的ID。這取決于使用者在建立頁(create.aspx)上的點選,究竟是點選了哪個清單類型才進到建立頁的。

如果指定的RenderingTemplate元素的ID沒有找到,則他将使用ID為MobileDefaultListField的控件。

已有的RenderingTemplate

當WSS安裝好後,下列的兩個用于字段渲染的RenderingTemplates已經存在于MobileDefaultTemplates.ascx中。

  • MobileCustomListField_Contacts_Text_WorkPhone
  • MobileCustomListField_Contacts_Text_HomePhone
  • MobileCustomListField_Contacts_Text_CellPhone
  • MobileCustomListField_Contacts_Text_Email
  • MobileCustomListField_PictureLibrary_Computed_ImageSize
  • MobileCustomListField_Posts_DateTime_PublishedDate

您不應修改該

MobileDefaultTemplates.ascx

檔案。您可以建立一個新的RenderingTemplate元素(在您自己的.ascx檔案中),隻有使用與已存在的渲染控件相同的ID即可。但是,這麼做将會存在風險,可能會破壞其他部署在WSS中的依賴原來的RenderingTemplate對象的解決方案。

注意:

WSS 3.0自帶的渲染控件會在自定義控件前先載入,是以當存在相同ID的自定義控件時,該控件模闆的載入将覆寫原有的控件。如果有兩個或更多的自定義控件模闆 具有相同的ID,則檔案名字母順序排列在後面的将覆寫所有其他的。如果指定的檔案中包含兩個或更多的相同ID的渲染模闆,則他們都将不被載入。

同時,預設的RenderingTemplate 也就是ID為MobileDefaultListFiled對象也是定義在

MobileDefaultTemplates.ascx

檔案中。如果運作時沒有找到為目前清單類型或字段定義的渲染模闆,則會使用該模闆。如果您建立的 RenderingTemplate 對象使用該 ID 則上面提到的風險也是存在的。

定制mobile清單視圖或窗體中的部分内容

  1. 在 Microsoft Visual Studio, Notepad, 或任何文本編輯器中,建立一個使用者控件檔案(.ascx),放在路徑

    /Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/CONTROLTEMPLATES下。

  2. 在檔案中添加若幹page标記來注冊和引用相應的命名空間。
  3. 添加一個渲染控件到 .ascx 檔案,采用這樣格式的ID:MobileCustomListField_ListTypeID_FieldType_Field。

    其中的ListTypeID,FieldType,Field的取值詳見上文。

    在您的渲染模闆中可以直接聲明一些可渲染的控件,如Label控件。也可以定義通過繼承SPMobileBaseFieldControl類來定義一個渲染控件。

  4. 儲存該 .ascx 檔案并重新啟動IIS,使更改生效。

示例

下面的RenderingTemplate定義的例子展示了如何建立一個新的标題字段,用于通知清單的清單項。

< SharePoint:RenderingTemplate  RunAt ="Server"  ID ="MobileCustomListField_Announcements_Text_Title"   >

  < Template >

  < mobile:Label  Text ="Title field in Announcements List"  RunAt ="Server"   />

  </ Template >

</ SharePoint:RenderingTemplate >

繼續閱讀