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)刷新頁面,看效果吧.


按照以上的思路,可以按照自己的需要來定製表單頁面,刪除默認的控件或者添加自己的控件,也可以將模板裏默認的控件替換爲自己的實現.
如,可以重新實現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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章