zoukankan      html  css  js  c++  java
  • 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







  • 相关阅读:
    EditPlus 4.3.2502 中文版已经发布(12月5日更新)
    EditPlus 4.3.2499 中文版已经发布(11月21日更新)
    为什么有负频率,什么是相位谱 —— 关于傅立叶变换的随笔
    对“善于提问,主动解决问题”的程序员的吐槽
    .NET事件监听机制的局限与扩展
    .NET陷阱之六:从枚举值持久化带来大量空间消耗谈起
    深入挖掘.NET序列化机制——实现更易用的序列化方案
    在VMWare中建立Hadoop虚拟集群的详细步骤(使用CentOS)
    微信分享
    如何导入ShareSDK的sample
  • 原文地址:https://www.cnblogs.com/jianyi0115/p/1043666.html
Copyright © 2011-2022 走看看