WSS3.0开发--页面定制(1)--修改列表的表单页面

本篇 将讲述 如何 批量修改 WSS3.0 列表的新建、编辑 、查看页面(下面通称表单页面),在 这些 页面 上添加控件 ,删除控件 。

WSS很多系统控件都采用了模板 ,大家 reflect一下 Microsoft.SharePoint.dll中 一些类的代码,就可以发现这一点 ,如ListFormWebPart,有个TemplateName的属性。系统模板默认存放在
C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES目录中的
DefaultTemplates.ascx中 ,这是 一个用户控件 ,里面放了很多的模板控件(RenderingTemplate)。
 
表单页面的呈现是通过ListFormWebPart,这个webpart的采用的模板是ListForm,我们可以看它的实际内容:
< SharePoint:RenderingTemplate  ID ="ListForm"  runat ="server" >
    
< Template >
        
< SPAN  id ='part1' >   
            
< SharePoint:InformationBar  runat ="server" />
            
< wssuc:ToolBar  CssClass ="ms-formtoolbar"  id ="toolBarTbltop"  RightButtonSeparator ="&nbsp;"  runat ="server" >
                    
< Template_RightButtons >
                        
< SharePoint:NextPageButton  runat ="server" />
                        
< SharePoint:SaveButton  runat ="server" />
                        
< SharePoint:GoBackButton  runat ="server" />
                    
</ Template_RightButtons >
            
</ wssuc:ToolBar >
            
< SharePoint:FormToolBar  runat ="server" />
            
< TABLE  class ="ms-formtable"  style ="margin-top: 8px;"  border =0  cellpadding =0  cellspacing =0  width =100% >
            
< SharePoint:ChangeContentType  runat ="server" />
            
< SharePoint:FolderFormFields  runat ="server" />
            
< SharePoint:ListFieldIterator  runat ="server" />
            
< SharePoint:ApprovalStatus  runat ="server" />
            
< SharePoint:FormComponent  TemplateName ="AttachmentRows"  runat ="server" />
            
</ TABLE >
            
< table  cellpadding =0  cellspacing =0  width =100% >< tr >< td  class ="ms-formline" >< IMG  SRC ="/_layouts/images/blank.gif"  width =1  height =1  alt ="" ></ td ></ tr ></ table >
            
< TABLE  cellpadding =0  cellspacing =0  width =100%  style ="padding-top: 7px" >< tr >< td  width =100% >
            
< SharePoint:ItemHiddenVersion  runat ="server" />
            
< SharePoint:ParentInformationField  runat ="server" />
            
< SharePoint:InitContentType  runat ="server" />
            
< wssuc:ToolBar  CssClass ="ms-formtoolbar"  id ="toolBarTbl"  RightButtonSeparator ="&nbsp;"  runat ="server" >
                    
< Template_Buttons >
                        
< SharePoint:CreatedModifiedInfo  runat ="server" />
                    
</ Template_Buttons >
                    
< Template_RightButtons >
                        
< SharePoint:SaveButton  runat ="server" />
                        
< SharePoint:GoBackButton  runat ="server" />
                    
</ Template_RightButtons >
            
</ wssuc:ToolBar >
            
</ td ></ tr ></ TABLE >
        
</ SPAN >
        
< SharePoint:AttachmentUpload  runat ="server" />
    
</ Template >
</ SharePoint:RenderingTemplate >
这个模板就定义了列表表单的元素: SaveButton 是保存按钮, FormToolBar 是工具栏, ListFieldIterator 用来呈现字段.

OK,既然知道了这一点 ,那么通过 修改 RenderingTemplate的 内容 ,就可以达到 修改默认页面 的目的 。

WSS开发中,不推荐去修改系统默认的文件,那样的话在系统升级的过程中我们的定制化可能会被"覆盖"掉.
幸运的是,WSS本身支持RenderingTemplate的定制.只要在CONTROLTEMPLATES下新建一个ascx文件,在里面添加模板即可,新添加的模板会覆盖默认模板中同样ID定义的模板.
假设我们要在表单页面上添加几条横线: <hr>,可以这样做:
1)在CONTROLTEMPLATES下新建一个文本文件,改名为CustomTemplates.ascx
2)用记事本打开CustomTemplates.ascx,添加以下代码:
<% @ Control Language = " C# "    AutoEventWireup = " false "   %>
<% @Assembly Name = " Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c "   %>
<% @Register TagPrefix = " SharePoint "  Assembly = " Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c "  namespace = " Microsoft.SharePoint.WebControls " %>
<% @Register TagPrefix = " SPHttpUtility "  Assembly = " Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c "  namespace = " Microsoft.SharePoint.Utilities " %>
<% @ Register TagPrefix = " wssuc "  TagName = " ToolBar "  src = " ~/_controltemplates/ToolBar.ascx "   %>
<% @ Register TagPrefix = " wssuc "  TagName = " ToolBarButton "  src = " ~/_controltemplates/ToolBarButton.ascx "   %>
3)接着从DefaultTemplates.ascx复制ID为ListForm的RenderingTemplate,粘贴到CustomTemplates.ascx,并添加<hr>:
< SharePoint:RenderingTemplate  ID ="ListForm"  runat ="server" >
    
< Template >
        
< SPAN  id ='part1' >   
< hr >
< hr >
< hr >
            
< SharePoint:InformationBar  runat ="server" />
            
< wssuc:ToolBar  CssClass ="ms-formtoolbar"  id ="toolBarTbltop"  RightButtonSeparator ="&nbsp;"  runat ="server" >
                    
< Template_RightButtons >
                        
< SharePoint:NextPageButton  runat ="server" />
                        
< SharePoint:SaveButton  runat ="server" />
                        
< SharePoint:GoBackButton  runat ="server" />
                    
</ Template_RightButtons >
            
</ wssuc:ToolBar >
            
< SharePoint:FormToolBar  runat ="server" />
            
< TABLE  class ="ms-formtable"  style ="margin-top: 8px;"  border =0  cellpadding =0  cellspacing =0  width =100% >
            
< SharePoint:ChangeContentType  runat ="server" />
            
< SharePoint:FolderFormFields  runat ="server" />
            
< SharePoint:ListFieldIterator  runat ="server" />
            
< SharePoint:ApprovalStatus  runat ="server" />
            
< SharePoint:FormComponent  TemplateName ="AttachmentRows"  runat ="server" />
            
</ TABLE >
            
< table  cellpadding =0  cellspacing =0  width =100% >< tr >< td  class ="ms-formline" >< IMG  SRC ="/_layouts/images/blank.gif"  width =1  height =1  alt ="" ></ td ></ tr ></ table >
            
< TABLE  cellpadding =0  cellspacing =0  width =100%  style ="padding-top: 7px" >< tr >< td  width =100% >
            
< SharePoint:ItemHiddenVersion  runat ="server" />
            
< SharePoint:ParentInformationField  runat ="server" />
            
< SharePoint:InitContentType  runat ="server" />
            
< wssuc:ToolBar  CssClass ="ms-formtoolbar"  id ="toolBarTbl"  RightButtonSeparator ="&nbsp;"  runat ="server" >
                    
< Template_Buttons >
                        
< SharePoint:CreatedModifiedInfo  runat ="server" />
                    
</ Template_Buttons >
                    
< Template_RightButtons >
                        
< SharePoint:SaveButton  runat ="server" />
                        
< SharePoint:GoBackButton  runat ="server" />
                    
</ Template_RightButtons >
            
</ wssuc:ToolBar >
            
</ td ></ tr ></ TABLE >
        
</ SPAN >
        
< SharePoint:AttachmentUpload  runat ="server" />
< hr >
    
</ Template >
</ SharePoint:RenderingTemplate >

4)重启IIS, 在运行中输入iisreset,确定.
5)刷新页面,看效果吧.
WSS3.0开发--页面定制(1)--修改列表的表单页面

按照以上的思路,可以按照自己的需要来定制表单页面,删除默认的控件或者添加自己的控件,也可以将模板里默认的控件替换为自己的实现.
如,可以重新实现 ListFieldIterator ,来控制表单字段的输出.
WSS本身没有字段级的权限控制,通过重新实现
ListFieldIterator,可以"优雅"的实现这个功能.

另:系统有些控件的特定就是模板套模板, ListFieldIterator也是通过模板实现的.有兴趣的朋友可以reflect它的代码看看.

More content ,you can search " How to: Override a Default Control Template " in WSS SDK.

mk:@MSITStore:C:\Program%20Files\2007%20Office%20System%20Developer%20Resources\Documentation\WSS3sdk.chm::/html/f42de35a-96c1-4a24-b381-cf012d91289a.htm







你可能感兴趣的:(开发)