2009年2月18日星期三

活用DataFormWebpart小技巧 - 製作Archive列表

Sharepoint Designer是一個主要用來編輯網頁layout既工具(雖然個人認為其編輯介面相當不濟),同時間亦可以插入與Sharepoint相關的用具,如:webpart、sharepoint controls等等
其中一個常用的webpart是DataFormWebpart,多數是用作表列式的去列出List中的資料。今次會做一個簡單的例子,示範如何用DataFormWebpart去製作一個網頁封存(Archive)。

1) 首先打開Data Source Library去選擇想製作Archive的List。

2) 把整個List拖進網頁內,就會出現最簡單的列表,亦是我們最常用的表列功能。

3) 為了讓Archive中能夠以日期(月份+年份)去分類顯示,所以先在List中多加一個Field,叫做ArchiveDate,而ArchiveDate是一個跟據EventDate計算出來的數值,計算方法如圖所示一樣,這樣就會顯示出如Jan04的格式了。

4) 回到網頁內的DataFormWebpart,在Sort and Group中,以ArchiveDate來把資料分組,再以EventDate來作優先排序。

5) 你可以在原始碼中加入(),這樣就可以在每個分組上加上文章的總數。

6) 分組完成後,再在主題上加上連結。

7) 那便大功告成了!

Sharepoint2007 - 自製Sitemap Webpart

小弟最近需要一個sitemap,但在Sharepoint中default的可以調控的選項太少,不太方便,所以直接寫了一個簡單的webpart去把左面navigation清楚的顯示出來。

如何建立webpart在這個post中已經教了大家,所以直接落去code的部份,究竟如何讀取navigation中的項目。

using Microsoft.SharePoint.Navigation;

// get current site info
SPWeb spweb = SPContext.Current.Web;
string spsiteurl = spweb.Url;

// get navigation
SPNavigation nav = spweb.Navigation;
SPNavigationNodeCollection nodeColl = nav.QuickLaunch;
foreach (SPNavigationNode node in nodeColl )
{
output.Write(node .Title+" - "+node .Url);
}

這是最簡單去表列所有node既方法,但是我們還需要管理權限的問題,讓用戶只能去到他所能看到的項目。所以加入了這個function去檢查用家的權限
// function to check if a user has the permission to read this node
private bool canReadNode(SPUser user, SPNavigationNode node)
{
string audience = "";

if (node.Properties["Audience"].ToString().StartsWith(";"))
{
audience = node.Properties["Audience"].ToString().Replace(";;;;", "");
}
else
{
audience = "";
}

if (audience.Equals(""))
{ return true; }
else
{
string[] stringSeparators = new string[] { "," };
String[] groupList = audience.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);
foreach (String groupName in groupList)
{
if (bIsInGroup(user, groupName))
{
return true;
}
}
}
return false;
}
//function to check if an user is in a group
private bool bIsInGroup(SPUser user, string strname)
{
try
{
foreach (SPGroup group in user.Groups)
{
if (group.Name == strname)
return true;
}
}
catch (Exception exception)
{
WriteLogEvent(string.Format("An Error Occured | Exception Message:{0} StackTrace: {1}", exception.Message, exception.StackTrace));
}
return false;
}
其實SPNavigationNode還有其他的property如IsExternal與及Children等等,大家有興趣的可以繼續慢慢研究。

2009年2月16日星期一

Sharepoint 2007 - 自製Webpart上手之路

Webpart是Sharepoint中常用的小模組,功能就像Widgets沒有兩樣,可以用來顯示表單(List)的內容,或是做出不同的小工具快可以。

傳統的編製Webpart方法頗為煩複,由編寫程式、生成dll、插入GAC(global assembly cache)再修改web.config,單看最簡單的Helloworld教程,恐怕也得花你兩三個小時才能學懂。但現在只要用STSDEV (Simple Tools for SharePoint 2007 Development),一切就會變得簡單快捷。以下就來一個簡單使用教程

1) 首先,到http://www.codeplex.com/stsdev下載主程式(選Binary的就可以直接使用)。
2) 把下載回來的檔案解壓到你的磁碟


3) 打開你的Visual Studio,把STSDEV加入到External Tools中




4) 執行STSDEV,並建立新的webpart的project (如果之前沒有做過key file也可同時在此製作)


5) 打開剛創建了的project,會見到已經有兩個helloworld的webpart準備好了,你可以更改或著加增新的cs,如新增了新的cs file,也請更改一下feature.xml等config file。


6) 寫好了webpart的內容後,在上面點選DebugDeploy做第一次的Deploy,之後要更新的話,選DebugUpgrade就可以了。


7) 最後在你的site collection setting入面新增剛deploy的webpart便大功告成。你可以在webpart選擇畫面中揀選你的webpart了。

順帶一提,一個project是一整個feature,可以在site feature中activate整個feature,而且一個project中可以同時有多個webpart的。STSDEV提供的功能不止這麼簡單,大家試著玩玩吧!就可以發覺可以調教的東西多的事。如果看了以上的內容還未明白的話,還可以到它的網頁中看video。