SPS自帶了一些常用的WebPart,比如: 宣告 / 連結 / 文件庫等等,但是有很多時候這些自帶的WebPart並不能滿足我們的需求,所以我就需要來編寫符合需求的WebPart,在開篇中說了如何建立SPS2003開發環境,本篇總結一下如何開發一個簡單的SPS WebPart.

在正式開始之前,我們需要對SharePoint Object Model有所了解,這個可以去看SPS的SDK,裡面說的很詳細,只是這個SDK沒有出中文版,只有英文版,像我這類英文水平比較低下的只能靠著翻譯軟件痛苦的琢磨.

上個星期一些專案成員提出來:在網站首頁上,需要一個圖片的跑馬燈功能,可以展示一些活動圖片什麼的. 考慮到這個需求在往後的專案中一定會再次被提出,所以就寫了個WebPart,這樣以後再需要時,只需要在拖跩到網頁上就可以了. 本篇就以這個簡單的功能為示例,說一說SPS WebPart的開發(C#)與部屬.

一、
建立SPS WebPart工程

l          啟動VS.NET2005,新建工程中選擇SharePoint,然後選擇WebPart模版,這樣就建立了一個WbePart工程

l         
工程中已有Windows SharePoint Service引用,正像上篇所說,若開發端已安裝SPS,則這個引用直接可以添加,若沒有安裝則需要從已安裝的機器上Copy一個到開發端來引用

二、在需要跑馬燈的SPS網站新建一個圖片庫,我這裡命名為:MarqueePhoto

目的是用來存儲跑馬燈裡面的圖片,借助圖片庫的功能讓站點管理員維護更新跑馬燈圖片.

三、獲取網站對象 

首先要獲得當前的網站對象,然後才能獲取MarqueePhoto對象,通過MarqueePhoto對象最終獲得圖片,可以在Public class中加入: 
SPWeb web = SPControl.GetContextWeb(System.Web.HttpContext.Current);
這句是獲得當前網站的對象,當然獲取方式還有其他方法,比如OpenWeb(). 

四、獲取圖片庫對象並取得圖片集合

RenderWebPart加入如下代碼:
SPList list = web.Lists["MarqueePhoto"]; //獲取圖片庫對象
SPListItemCollection item = list.Items;   //獲取圖片集合 

五、輸出圖片庫裡所有圖片 

foreach (SPListItem listItem in item) 
 { 
        output.Write("<a href='" + listItem["ServerUrl"] + "' target='_blank'><img src='" + listItem["ServerUrl"] + "' style='width:" + Convert.ToInt16(MarqueeWidth) / 5 + "px;height:" + Convert.ToInt16(MarqueeWidth) / 5 + "px; border-color:#ffffff'/></a>"); 
 

六、讓輸出的圖片滾動起來

就是加入一段javascript的圖片連續滾動腳本,所以整個RenderWebPart中代碼就變成了如下: 
try{
   
SPList list = web.Lists["MarqueePhoto"];                  

         SPListItemCollection item = list.Items;
 
output.Write("<div id=demo style=overflow:hidden;width:100%;color:#ffffff><table align=left cellpadding=0 cellspace=0 border=0><tr> <td id=demo1 valign=top>"); 
foreach (SPListItem listItem in item){
   output.Write("<a href='" + listItem["ServerUrl"] + "' target='_blank'><img src='" + listItem["ServerUrl"] + "' style='width:" + Convert.ToInt16(MarqueeWidth) / 5 + "px;height:" + Convert.ToInt16(MarqueeWidth) / 5 + "px; border-color:#ffffff'/></a>"); 

       }
    output.Write("</td><td id=demo2 valign=top></td></tr></table></div><script>var speed=30;demo2.innerHTML=demo1.innerHTML;function Marquee(){ if(demo2.offsetWidth-demo.scrollLeft<=0){demo.scrollLeft-=demo1.offsetWidth}else{ demo.scrollLeft++}}var MyMar=setInterval(Marquee,speed);demo.onmouseover=function() {clearInterval(MyMar)};demo.onmouseout=function() {MyMar=setInterval(Marquee,speed)}</script>");
}catch
output.Write("錯誤:請檢查圖片庫名稱是否為-MarqueePhoto");

     }

最後記得要Dispose相關對象,以免出現內存溢出.到此為止,代碼段就寫完了,保存 / 編譯.接下來就是把已經寫好的WebPart部署到SPS網站上去 

部署方法有多種,比如手動部署,CAB部署等等,我覺得最簡單的是InstallAssemblies這個工具,只要選擇已編譯好的dll文件,按下按鈕就部署好了,然後該WebPart就可以在已經部署的SPS網站上拖跩使用了.當然WebPart開發的應用有很多,比如可以定製菜單,屬性等等,SPS 2003 SDK裡面都有,了解相關的方法和屬性就可以了. 

下篇會來總結一下,SPS 2003下WinForm的開發該如何進行.



posted on 2008-06-17 01:31  晃晃悠悠  阅读(515)  评论(0)    收藏  举报