簡介
Microsoft Office SharePoint Server 2007 是一個服務器功能集成套件,它提供全面的內容管理和企業搜索、加速共享業務流程並便利跨界限信息共享以更好地瞭解業務,從而有助於提高組織的工作效率。
Office SharePoint Server 2007通過一個集成平臺而不是依靠分散的系統來支持整個企業內的所有 Intranet、Extranet和 Web 應用程序。
此外,該協作和內容管理服務器還爲 IT專業人員和開發人員提供了實現服務器管理、應用程序可擴展性和互操作性所需的平臺和工具。
當然,現在最新版本的SharePoint是2010,並且Visual Studio 2010中也集成了SharePoint的開發,所以學習如何使用SharePoint開發是很有必要的!
SharePoint 的主要應用領域:
簡單的介紹就到這裏,開始我們的SharePoint之旅。
安裝
安裝SharePoint可以說相當的簡單,但是前提是需要一些必要的條件:
1、安裝Microsoft Windows 2003。
2、安裝Microsoft SQL Server 2005。
3、安裝Microsoft Visual Studio 2005。
4、接着是最輕易忘記的一環:安裝Microsoft Windows Workflow Foundation 2.2以上的版本。
5、最後就是安裝Microsoft Office SharePoint Server 2007和Microsoft Office
SharePoint Designer 2007。
具體的安裝參照另外一篇文章:
http://blog.csdn.net/qq823011051/article/details/7578366
創建Web應用程序
接下來我們利用SharePoint創建第一個Web應用程序。配置完成後會自動跳轉到一個網頁:http://gao:14000/default.aspx
這裏是SharePoint的管理中心,很多操作會在這裏完成,以後我們會經常到這個頁面
點擊操作,選擇“服務器上的服務”
在“服務器上的服務”中我們可以更改多需要的服務項
點擊“應用程序管理”,選擇“創建或擴展Web應用程序”
在這裏我們就可以新建一個Web應用程序
對Web應用程序經行相應的配置
點擊確定後就可以耐心的等待,直到應用程序創建成功
小結:通過此文和大家一起了解了SharePoint的簡單介紹,安裝和配置,還有通過SharePoint創建Web應用程序的方法。
上文簡單介紹了有關SharePoint的安裝,配置等內容的介紹。此文我們繼續SharePoint之旅,通過SharePoint創建網站。
創建網站
來到熟悉的應用程序管理界面,在SharePoint網站管理中,我們就可以創建網站:
點擊“創建網站集”進入創建網站集的管理界面,SharePoint爲我們提供了很多網站類型的模板,如發佈網站,會議工作區....。
根據自己的需求,選擇合適的網站類型。
這裏我們以發佈門戶網站爲例,進行網站配置:
點擊“確定”,稍作等待。看待下面的界面,我們的網站就創建成功啦!
點擊上圖中的鏈接,就會訪問剛剛創建的發佈網:
從圖中我們也可以看出,我們可以對網站的訪問權限等進行相應的設置。
修改網站內容
(1)修改網站導航
點擊上圖的鏈接,我們就可以進行相應的管理:
添加完畢後,點擊確定,在首頁就可以看到添加後的效果。
(2)管理網站的內容和結構
進入網站內容和結構管理界面,在這裏我們可以對網站進行更多內容的修改:
這裏簡單舉個小例子,修改網站的徽標。點擊根節點就會彈出下拉框,點擊常規設置:
這裏我們就可以修改網站的徽標:
小結:通過SharePoint創建網站就簡單的介紹到這裏,通過SharePoint可以很容易的創建自己的門戶網站。並且對網站的參數進行修改,希望能對新手有幫助。
在前面的文章中,我們講解了很多基礎的內容,主要包括安裝配置、簡單的創建網站等。相對來說比較簡單。此文實現簡單的WebPart,繼續我們的SharePoint之旅。
WebPart
WebPart大家應該不會陌生,WebPart是ASP.NET 2.0中一個非常令人激動的特性。它爲創建動態的網頁接口提供了一系列的可用控件,使得用戶很容易地進行配置或者個性化頁面。並且,用戶可以象在桌面應用中一樣自由地顯示、隱藏或者移動WebPart組件。
如果想向SharePoint中添加WebPart,大體上分爲:創建WebPart,部署WebPart DLL,在SharePoint站點中添加WebPart等步驟。下面逐一說明。
創建WebPart
WebPart也是服務器控件的一種,也就是說創建WebPart和創建一般的服務器控件沒有什麼太大的區別,我們只需要創建一個類庫應用程序,在其中實現就可以了。
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI.WebControls.WebParts;//添加WebParts命名空間
namespace Brian_HelloWebPart
{
public class Hello : WebPart
{
private string _Text = "Say Hello To Everyone !";
[WebBrowsable(true), Personalizable(true)]
public string Text
{
get { return _Text; }
set { _Text = value; }
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
writer.Write(_Text);
}
}
}
然後我們需要設定下程序集的權限,在AssemblyInfo.cs中添加命名空間:System.Security,然後加上了[assembly: AllowPartiallyTrustedCallers()]這一行代碼。由於現在的程序集是部分信任程序集,所以在向SharePoint中添加的時候會有錯誤,所以這裏需要添加[assembly: AllowPartiallyTrustedCallers()]。
這樣,一個簡單的WebPart就完成了。
部署WebPart
右鍵我們工程---屬性---簽名:
選中爲程序集簽名---選擇強名稱密鑰文件:
添加密鑰的目的是爲了使我們的程序集變成強簽名的程序集。編譯我們的工程,生成DLL。
接下來將這個DLL放到SharePoint網站工程bin文件夾中。由於WebPart在頁面中運行時必須是一個安全的Control,所以我們必須在Web.config中把它註冊成爲安全的控件。在測試Web Parts之前在Web.config中添加入口點。找到項目文件,打開Web.config:
在Web.config中添加如下代碼:
<SafeControl Assembly="Brian_HelloWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c53a25ce64c488e1" Namespace="Brian_HelloWebPart" TypeName="Hello" Safe="True" />
可能會有人問上面的PublicKeyToken怎麼獲得,這裏簡單說一下:運行VS2005的命令提示符,執行下面的命令:
要注意需要進入dll文件所在的路徑。到此,我們的WebPart就部署完畢了!
在SharePoint站點中添加WebPart
進入我們上文創建的網站,進入網站設置:
點擊web控件,進入添加WebPart界面,點擊“新建”:
進入Web部件庫中我們就可以看到要添加的HelloWebPart,選中後點擊“導入庫”:
然後,網站控制---編輯網頁:
回到首頁,點擊頁面--添加Web部件--瀏覽:
選中Hello,點擊“添加”:
Ok,看到了吧,我們簡單的WebPart就添加成功啦!
使用WSS開發模板
這裏補充一點,我們可以使用開發模板來完成我們的開發,模板下載。安裝完模板後,再次運行VS2005,就會看到模板:
使用模板,我們可以更方便的實現我們的開發,比如模板會自動爲我們創建密鑰文件等,大家可以試試。
小結:至此,簡單的WebPart的實現就基本完成了,相信通過此文,大家可以很容易的掌握WebPart的基本開發。望對新手有幫助。
前面的文章中,我們編寫了一個非常簡單的WebPart,只是在網頁中輸出一段字符串。在實際的應用中沒有什麼作用。此文和大家分享如何開發高級的WebPart,爲控件添加事件,實現有複合控件的WebPart等,使我們的WebPart更佳實用。
如果大家有開發服務器控件的基礎,此文對你來說沒有什麼難度。想了解相關內容,參看我的《ASP.NET的服務器控件開發》系列。廢話不多說,直接進入今天的主題。
Demo 1
第一個例子也很簡單,點擊一個按鈕,顯示當前系統時間。如何創建WebPart就不細說了,不清楚的朋友可以參看《SharePoint 2007圖文開發教程(3)---實現簡單的WebPart》。
直接看代碼:
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
namespace GetNow
{
[Guid("0708695c-869c-4e8f-a6e9-cfcf148f404c")]
public class GetNow : System.Web.UI.WebControls.WebParts.WebPart, INamingContainer
{
private string _text;
private HtmlTableCell _tablecell = new HtmlTableCell();
private Label lb = new Label();
private Button btn = new Button();
[WebBrowsable(true), Personalizable(true)]
public string Text
{
get { return _text; }
set { _text = value; }
}
public GetNow()
{
this.btn.Click += new EventHandler(btn_Click);
this.ExportMode = WebPartExportMode.All;
}
/// <summary>
/// 重寫OnLoad
/// </summary>
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.Page.IsPostBack == true)
{
this.AddControls();
}
}
/// <summary>
/// 重寫CreateChildControls
/// </summary>
protected override void CreateChildControls()
{
this.Controls.Add(new LiteralControl("<table>" + "\n"));
this.Controls.Add(new LiteralControl(" <tr>" + "\n"));
this.Controls.Add(this._tablecell);
this.Controls.Add(new LiteralControl(" </tr>" + "\n"));
this.Controls.Add(new LiteralControl("</table>" + "\n"));
if (this.Page.IsPostBack == false)
{
this.AddControls();
}
}
/// <summary>
/// click處理函數
/// </summary>
void btn_Click(object sender, EventArgs e)
{
this._text = DateTime.Now.ToString();
this._tablecell.InnerHtml = "";
this.AddControls();
}
/// <summary>
/// 重寫Render
/// </summary>
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
}
private void AddControls()
{
this.lb.ID = this.ID + "Label";
this.lb.Text = this._text;
this._tablecell.Controls.Add(this.lb);
this._tablecell.Controls.Add(new LiteralControl("<br>"));
this.btn.ID = this.ID + "Button";
this.btn.Text = "獲取當前時間:";
this._tablecell.Controls.Add(this.btn);
}
}
}
按照上文的部署方法,將GetNow的WebPart添加到SharePoint網站中:測試一下,獲取時間成功!
Demo 2
第二個例子我們來實現WebPart的聯動控制,也就是說通過一個WebPart來控制另外一個WebPart。還是直接看代碼:
using System;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using System.Collections;
using System.Drawing;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using GetNow;
namespace SetColor
{
[Guid("803617a2-9dc9-4eb8-b05c-3e064bc16642")]
public class SetColor : System.Web.UI.WebControls.WebParts.WebPart, IPostBackEventHandler
{
private IList _colorlist = new ArrayList();
private HtmlTableCell _TableCell = new HtmlTableCell();
public SetColor()
{
this.GetItems();
this.ExportMode = WebPartExportMode.All;
}
private void GetItems()
{
this._colorlist.Add("紅色");
this._colorlist.Add("黃色");
this._colorlist.Add("藍色");
this._colorlist.Add("綠色");
this._colorlist.Add("紫色");
}
private void AddRows()
{
for (int i = 0; i < _colorlist.Count; i++)
{
this._TableCell.Controls.Add(new LiteralControl("<table>" + "\n"));
this._TableCell.Controls.Add(new LiteralControl(" <tr>" + "\n"));
this._TableCell.Controls.Add(new LiteralControl(" <td style=\"cursor:hand\" οnclick=\"" + this.Page.ClientScript.GetPostBackEventReference(this, this._colorlist[i].ToString()) + "\">" + this._colorlist[i].ToString() + "</td>" + "\n"));
this._TableCell.Controls.Add(new LiteralControl(" </tr>" + "\n"));
this._TableCell.Controls.Add(new LiteralControl("</table>" + "\n"));
}
}
protected override void CreateChildControls()
{
this.Controls.Add(new LiteralControl("<table>" + "\n"));
this.Controls.Add(new LiteralControl(" <tr>" + "\n"));
this.Controls.Add(this._TableCell);
this.Controls.Add(new LiteralControl(" </tr>" + "\n"));
this.Controls.Add(new LiteralControl("</table>" + "\n"));
if (this.Page.IsPostBack == false)
{
this.AddRows();
}
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.Page.IsPostBack == true)
{
this.AddRows();
}
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
}
public void RaisePostBackEvent(string eventArgument)
{
for (int i = 0; i < WebPartManager.WebParts.Count; i++)
{
if (WebPartManager.WebParts[i].Title == "GetNow")
{
GetNow.GetNow instance = (GetNow.GetNow)WebPartManager.WebParts[i];
switch (eventArgument)
{
case "紅色":
instance.BackColor = Color.Red;
break;
case "黃色":
instance.BackColor = Color.Yellow;
break;
case "藍色":
instance.BackColor = Color.Blue;
break;
case "綠色":
instance.BackColor = Color.Green;
break;
case "紫色":
instance.BackColor = Color.Purple;
break;
default:
break;
}
}
}
}
}
}
代碼不是很難,創建一個WebPart,向其中添加一個List,提供用戶幾種顏色的選擇情況,然後通過用戶選擇的情況改變我們上面GetNow這個WebPart的背景顏色。
按照前面的方法加到SharePoint網站中:
選擇紅色:
選擇紫色:
ok。我們想要的效果已經實現啦!
小結:上面只是自己拋磚引玉的小例子,希望對新手有幫助。對於WebPart的開發部分就介紹這些吧,望支持。有什麼不得當的地方還望大家指教。根據自己的業務需要,大家可以開發出更實用的WebPart。還有建議大家多看看服務器控件開發的文章,會有幫助!
前面兩篇文章介紹了有關WebPart的相關內容,此文繼續SharePoint之旅,體驗下Event Handler的相關內容。
Event Handler
Event Handler是SharePoint中與文檔庫或列表相關聯的事件處理程序,當我們對項目進行某些操作時,Event Handler就會截獲這個事件,然後相應的進行操作。功能上比較像數據庫中的觸發器。比如:刪除某個文件時向管理員發送一個郵件,添加一個列表時進行其他操作等等。
和2.0相比,WSS3.0對Event Handler提供了更強大的支持,如:列表,文檔庫,內容類型。並且支持同步和異步的操作等。
爲SharePoint提供一個Event Handler並不是很費力,主要包括:開啓Event Handler支持,編寫Event Handler程序,向SharePoint中部署Event Handler。接下來逐一說明一下。
開啓Event Handler支持
默認情況下是不開啓Event Handler支持的,需要我們手動開啓:進入應用程序管理---進入Web應用程序常規設置。
開啓事件處理程序:
這樣就完成了對Event Handler開啓的支持。
編寫Event Handler程序
SharePoint的Event Handler其實是一個類,這個類主要繼承WSS中的SPWebEventReceiver,SPEmailEventReceiver,SPListEventReceiver,SPItemEventReceiver,IListEventSink等類,並且重寫相應的方法來完成我們的需求。
這裏做個簡單的例子,當我們刪除一個Items時,向日志文件中添加一條記錄。
直接看代碼:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Microsoft.SharePoint;
namespace EventHandlerText
{
public class ItemLogEvent : SPItemEventReceiver
{
/// <summary>
/// 重寫ItemDeleting,向日志文件寫數據
/// </summary>
public override void ItemDeleting(SPItemEventProperties properties)
{
string path = @"c:\Log.txt";
string text = "刪除Item" + ":" + DateTime.Now.ToString();
StreamWriter writer = new StreamWriter(path);
writer.Write(text);
writer.Close();
}
}
}
是不是很簡單,接下來我們按照爲WebPart添加密鑰文件的方法,爲我們的Event Handler添加密鑰文件,添加的目的我在部署的時候再說。這樣,簡單的Event
Handler就完成了。
向SharePoint中部署Event Handler
和WebPart有所不同的是,Event Handler的dll需要放到GAC(Global Assembly Cache)中,而不能放在SharePoint網站的bin文件夾中,所以我們生成的dll必須進行強簽名,這也就是上面爲什麼添加密鑰文件的目的。
GAC的系統路徑爲:C:\WINDOWS\assembly,直接將生成的Event Handler dll拖入到這個路徑中即可。
先來看下SharePoint中的情況:
在我們先前創建的網站中,我創建了一個文檔庫的List,並且上傳了一個word文件,我們的Event Handler就是要添加到這裏。
接下來就是將這個Event Handler部署到SharePoint中。可以通過代碼的形式,也可以通過Feature的形式。這裏介紹下代碼的形式。
創建一個批處理程序(當然win程序也可以),添加如下代碼:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
namespace RegisterEvent
{
class Program
{
static void Main(string[] args)
{
try
{
SPSite site = new SPSite("http://gao:8000/sites/Brian_Publication/");//指定網站
SPWeb web = site.OpenWeb();
SPList list = web.Lists["文檔庫"];//指定List
list.EventReceivers.Add(SPEventReceiverType.ItemDeleting, "EventHandlerText, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9d965453379ac249", "EventHandlerText.ItemLogEvent");//添加Event Handler
Console.WriteLine("發佈完成");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}
}
}
}
代碼很容易,想必大家一看就能明白,找到工程生成的可執行文件,運行:
這樣就代表我們的Event Handler發佈成功啦!至此,Event Handler的部署工作也就完成啦!
最後我們來測試下,進入文檔庫,刪除那個“LINQ中文教程”word文件。到C:\下看下Log.txt:
OK,我們的Event Handler執行了,實現了我們想要的效果。
小結:有關Event Handler的內容就介紹到這裏,相信大家認真的看一邊就可以很輕鬆的掌握,當然有關Event Handler的內容還不止這些,需要在平時的應用中多多積累。
此文和大家分享如何在SharePoint中實現Search的功能。
SharePoint中爲我們提供了Search的功能,和Event Handler的實現比較類似,還是需要啓動支持,定製服務,運行服務幾部分內容,下面逐一說下。
啓動Search服務
我們進入SharePoint的管理中心,進入操作界面,選擇“服務器上的服務”:
進入到服務器上的服務界面後,就會看到當前SharePoint所啓動的服務:
可以看到默認情況下Office SharePoint Server搜索是停止狀態的,所以需要我們手動的開啓搜索服務,點擊“啓動”後,配置服務器上Office SharePoint Server 搜索服務設置:
點擊“開始”後,就可以開啓Office SharePoint Server搜索,這裏要注意的是,用戶名需要寫成:域名+用戶名的形式。否則啓動服務時就會出錯。開啓成功後會自動返回服務器上的服務界面:
可以看到,我們的Office SharePoint Server搜索開啓成功。
創建共享提供服務程序
從新回到應用程序管理界面,在Office SharePoint Server共享服務中,選擇“創建或配置此服務器的共享服務”:
進入後進行填寫:
點擊確定,稍作等待:
這樣,我們的共享服務提供程序就創建成功啦!
運行爬網
這一部分有點像蜘蛛的功能,在我們指定的站點內實現抓取資源,並放到數據庫中,爲了能看到明顯的效果,我提前在我前面創建的網站中上傳了一個Word文件:
然後就是對SharePoint中爬網的設置,進入管理中心,可以看到上面創建的共享服務程序:
點擊進入:
選擇“搜索設置”:
進入“內容源和爬網計劃”,這裏就可以指定我們要爬行的數據源:
這裏只有本地的SharePoint網站,點擊“開始所有爬網”,就可以進行數據的採集。數據採集的時候會稍微慢些,內存和CPU的使用量都不小,由於SharePoint是服務器端得產品,這點也難免。
OK,我們回到網站進行測試一下,在搜索框中輸入檢索內容:
簡單的查詢:
效果還不錯,至此,SharePoint中提供的Search服務我們就基本上完成啦~
小結:SharePoint爲我們提供了方便的數據檢索的服務,至於內部的實現手段這裏沒有做深究,但是從運行的結果上看,關鍵詞的索引,中文的分詞,高亮顯示等實現的都還是比較OK的,很值得學習,有機會定要好好研究下內部實現的方法!話說微軟現在有了Bing,在SharePoint中融入Bing的API也是不錯的選擇。
繼續我們的SharePoint之旅,體驗Workflow的應用,由於以前也很少弄WF,望有什麼問題WF的高手多多指教。
在SharePoint 2007圖文開發教程(1)---簡介,安裝,配置及創建Web應用程序中,我介紹了SharePoint所需要安裝的軟件,裏面提到了需要安裝Microsoft Windows Workflow Foundation 2.2以上的版本,目的也就是爲對WF的支持。
Workflow
工作流(Workflow)就是“業務過程的部分或整體在計算機應用環境下的自動化”,它主要解決的是“使在多個參與者之間按照某種預定義的規則傳遞文檔、信息或任務的過程自動進行,從而實現某個預期的業務目標,或者促使此目標的實現”。簡單地說,工作流就是一系列相互銜接、自動進行的業務活動或任務。一個工作流包括一組任務(或活動)及它們的相互順序關係,還包括流程及任務(或活動)的啓動和終止條件,以及對每個任務(或活動)的描述。
在SharePoint中實現Workflow
實現工作流可以有多種方式,SharePoint中爲我們提供了一些內置的Workflow,我們也可以利用SharePoint Desigener來實現定製的工作流,但是這兩種方法都會有一定的侷限性,往往在我們的開發中不能滿足我們的需求,但是我們還有第三種方法,那就是利用Vistual Studio開發工作流,然後添加到SharePoint中。
簡單的看下SharePoint中提供的Workflow模板,我們可以向文檔等中添加工作流模板:
接下來重點說說利用SharePoint Desigener創建工作流,借鑑了網上的一些例子,雖然不是很成熟,但是可以說明問題了:
首先做一些準備條件:
我在我的網站中創建一個“請假申請”的列表,並在設置中“創建欄”:
創建欄:
點擊確定,我們得準備工作就完成了。下面我們利用SharePoint Desigener創建工作流,打開網站:新建---工作流
下面就是對工作流的設置:
爲工作流起一個名字,然後將這個工作流添加到SharePoint中我們前面創建好的那個請假申請列表。這裏我選擇的是手動啓動工作流,當然也可以選擇自動開啓。
點擊下一步:
在這裏我們對條件和操作經行設置,也就是說對工作流程的描述,填寫完畢後點擊“完成”。
這裏設想的工作流程就是:如果有普通員工請假,給部門經理髮郵件,如果有部門經理請假,就向總經理髮郵件。點擊完成後就會將工作流添加到SharePoint中。
OK,這樣我們就成功的在SharePoint中添加了我們自己設計的一個工作流。
測試工作流
最後要做的就是測試下我們的工作流,回到SharePoint中的請假申請列表,新建一個項目:
由於創建工作流時是設置的手動開啓工作流,所以這裏需要我們自己開下,選擇下圖的“工作流”:
點擊開啓,這樣這個工作流就執行了。
於是乎我高高興興的跑到自己郵箱裏看有沒有發郵件,遺憾的是沒有!爲什麼呢?回來看了下工作流的最後執行狀態:
原來是由於SharePoint電子郵件設置不正確,在網上找了下解決方案:http://office.microsoft.com/zh-cn/sharepointdesigner/HA102379122052.aspx#44
這裏還包括了許多其他問題的解決方案,大家可以參考下。
小結:在SharePoint中實現Workflow就簡單說這麼多,如何利用Vistual Studio開發工作Workflow就不說了,水平有限,就不獻醜了,希望通過此文,能夠對學習SharePoint的朋友們有幫助。