WSS頁面定製系列(4)--利用SmartForm和用戶控件定製表單頁面

   sharepoint表單定製已經連續寫了三篇文章:
WSS3.0開發--頁面定製(1)--修改列表的表單頁面
WSS頁面定製系列(1)--如何啓用表單頁面的編輯模式
WSS頁面定製系列(2)---定製單個列表的表單頁面
按照計劃,本篇應該講述使用用用戶控件定製表單了。

    用用戶控件定製表單的原理很簡單:
    用戶控件裏放置表單控件,然後採用QuickPart類似的機制來加載這個控件,並且設置表單控件的上下文信息。具體的實現機制以後講述。

    這裏爲簡化大家的工作,發佈一個寫好的WebPart--SmartFormWebPart,SmartForm整合了前面幾篇文章提到的模板定製方式和用戶控件定製方式。
在文章後面可以找到下載鏈接。

    爲什麼叫SmartForm呢? 這個名字含義是:你可以寫一個簡單的用戶控件,然後利用wss的功能,自動實現數據的增加,修改,查看,
簡單的表單用戶控件依靠wss實現了智能化~

SmartForm的使用介紹

    SmartForm 通過加載模板文件,使sharepoint的列表表單頁面可以按照我們的需要顯示成任意的樣子.
    表單保存後,可以轉向默認頁面或者是指定的頁面.

    SmartForm支持兩種模板文件:

    1)通過RenderingTemplate,這種方式定製後的表單可以放到任何地方,包括表單頁面,站點首頁。但是不能內嵌代碼。

    2)通過UserControl,這種方式定製的表單只能放到表單頁面(Dispform.aspx,EditForm.aspx,NewForm.aspx), 用戶控件內可以內嵌代碼,寫一些判斷邏輯。

使用方法:

1)將SmartForm.dll加入gac.

2)添加SafeControl
修改站點的web.config文件,在SafeControls節點下添加以下配置:
<SafeControl Assembly="SmartForm, Version=1.0.0.0, Culture=neutral, PublicKeyToken=aff738ac50c8cf48" Namespace="CodeArt.SharePoint.SmartForm" TypeName="*" Safe="True" />

3)將SmartFormWebPart添加到站點
網站操作菜單->網站設置->web部件->新建->選中CodeArt.SharePoint.SmartForm.SmartFormWebPart,導入.

4)現在你可以到需要修改的頁面,添加SmartFormWebPart了.

如果你發現表單頁面沒辦法修改,請參考這篇文章--WSS頁面定製系列(1)--如何啓用表單頁面的編輯模式

下面演示一下兩種模板文件的開發和配置.

RenderingTemplate的使用.

用一個現實中的需求: 客戶希望把某個調查直接放到頁面上,這樣,瀏覽用戶就不需要點擊鏈接轉到另一個頁面去填寫調查而直接就可以在首頁填寫.

1)新建一個調查列表,名稱爲"SmartForm調查",並添加一個調查問題:關於SmartForm的調查
鍵入兩個選項:
您需要SmartForm嗎?
您認爲SmartForm還有哪些需要改進的地方?

2)編寫RenderingTemplate
把以下內容保持到"12/TEMPLATE/CONTROLTEMPLATES/CodeArt_SurveyRenderingTemplate.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" %>
    
<SharePoint:RenderingTemplate ID="HomeSurveyForm" runat="server">
    
<Template>
        
<TABLE class="ms-formtable" style="margin-top: 8px;" border=0 cellpadding=0 cellspacing=0 width=100%>
        
<SharePoint:SurveyFieldIterator ID="SurveyFieldIterator1" runat="server"/>
        
</TABLE>
         
<div align="center">
         
<asp:Button runat="Server" ID="btnSave" Text="提交" CommandName="SaveItem" />
         
</div>
    
</Template>
</SharePoint:RenderingTemplate>

2)重啓IIS

3)在首頁添加SmartFormWebPart.


4)在SmartFormWebPart的雜項屬性面板,設置以下屬性:
列表名稱爲:    SmartForm調查
呈現模板ID爲:    HomeSurveyForm
提交後重定向Url爲:    /
提交後顯示信息爲:    感謝您填寫此調查!


5)保存,刷新頁面,可以看到效果了.

用戶控件的使用.

假設我們要修改通知列表,使它的字段重新排列

1)開發用戶控件

用戶控件沒有特殊的要求,注意一下幾點:
  • 用FormField來呈現某個字段,
  • 用ListFieldIterator來呈現所有的字段.
  • 如果要實現保存功能,必須有一個按鈕控件,可以是Button,ImageButton,LinkButton,控件的CommandName必須爲SaveItem
將以下內容保存爲CodeArt_NoticeControlTemplate.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" 
%>
通知主題:
<SharePoint:FormField  ID="FormField1" runat="server" FieldName="Title" />
通知內容:                    
<SharePoint:FormField ID="FormField2" runat="server" FieldName="Body" />
<hr />
<div>              
 
<asp:Button runat="server" ID="saveButton" CommandName="SaveItem" Text=" 保存 "></asp:Button>
  
<input type="button" value=" 返回 " onclick="history.back()" />                 
</div>

2)到某個通知列表的新建頁面(NewForm.aspx),進入設計模式.

3)添加SmartFormWebPart,並設置它的屬性:

模板控件路徑爲:~/_CONTROLTEMPLATES/CodeArt_NoticeControlTemplate.ascx
控件模式選擇:New

此時,列表名稱屬性不需要指定,控件自動獲取當前列表。

4)保存,可以看效果了.


5)如果要修改查看,編輯頁面,請按照同樣的步驟操作,不同的是,在查看頁面,控件模式需要選擇Display,在編輯頁面,控件模式選擇Edit

6)用戶控件裏面可以嵌入代碼,甚至,使用code-behind也是可以的.
假設,我們要校驗通知主題中不能包含一些髒字,並且,要控制那個保存按鈕在查看頁面不顯示,可以這麼寫:
<%@ 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" 
%>
    
<script runat="server">        
        protected override 
void OnLoad(EventArgs e)
        
{
            base.OnLoad(e);
            
if (Microsoft.SharePoint.SPContext.Current.FormContext.FormMode == SPControlMode.Display)
                
this.saveButton.Visible = false;
        }
    
        protected override bool OnBubbleEvent(object source, EventArgs args)
        
{
            string title 
= "" + FormField1.Value;
            
if (title.IndexOf("fuck", StringComparison.OrdinalIgnoreCase) != -1)
            
{
                
throw new Microsoft.SharePoint.SPException("您輸入的主題不合法,不能包含[fuck]");
                
return true;
            }
            
            
return base.OnBubbleEvent(source, args);
        }
   
    
    
</script>
通知主題:
<SharePoint:FormField  ID="FormField1" runat="server" FieldName="Title" />
通知內容:                    
<SharePoint:FormField ID="FormField2" runat="server" FieldName="Body" />
<hr />
<div>              
 
<asp:Button runat="server" ID="saveButton" CommandName="SaveItem" Text=" 保存 "></asp:Button> 
  
<input type="button" value=" 返回 " onclick="history.back()" />                 
</div>


用用戶控件來定製列表表單,你可以做任意操作,做什麼只受限於你的思維~

備註:
SmartForm實現的兩種方式的模板,用戶控件模板優先級大於RenderingTemplate,即,如果同時指定了"呈現模板ID"和"模板控件路徑",則"模板控件路徑"起作用.

下載試用 : http://files.cnblogs.com/jianyi0115/SmartFormWebPart.zip

 

壓縮包中包括dll和兩個示例模板文件,可以單擊裏面的deploy.cmd文件實現自動註冊GAC和copy模板文件,但是SafeControl仍然需要手工修改。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章