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

本节将对Windows SharePoint Services 3.0 的mobile设备访问页面中的字段渲染定制过程做一个概述。详细的步骤请参考随后的演练。

前面的Mobile页面渲染机制一节中我们说过,在页面里一个SPMobileListFieldSelector模板选择器控件的调用,会导致从该控件开始的链式的调用。

基于当前的列表类型和字段(比如本例中的通知和标题),该对象决定了哪个RenderingTemplate会用于在mobile显示页面上渲染该字段。

该控件会寻找名为MobileCustomListField_ListTypeID_FieldType_FieldRenderingTemplate

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添加到列表中的;或者说是通过创建栏页面,则 FieldMicrosoft.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
    其中的ListTypeIDFieldTypeField的取值详见上文。
    在您的渲染模板中可以直接声明一些可渲染的控件,如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>

 

posted @ 2008-07-22 18:53  Sunmoonfire  阅读(508)  评论(0编辑  收藏  举报