日歷重疊?這是個什么功能呢?
先來張圖吧,
好看不,這花花綠綠的,每個日程都有自己的顏色。在2007的時候,要做成這個樣子要多麻煩啊!
這個效果就是日歷重疊的功勞。
這個篇文章主要介紹
1. 手動直接設置 日歷重疊
手動設置其實不必需要多說的,就是在網站直接設置日歷重疊。
2. 用程序添加日歷重疊功能
用程序添加的主要意圖是,我們在列表模板創建日歷列表時,自動為該列表指定一個重疊的日歷。
3. 重疊的日歷用彈窗形式打開
如果你現在已經設置過第一步了,那么你會發現重疊的日歷,是在新窗口打開的,而不是在當前頁面以彈窗形式打開的。
那么在這個步驟里,將會告訴你如何讓他在當前窗口,以彈窗形式打開。
進入正題。
一 手動直接設置 “日歷重疊”
1. 在日歷列表的Ribbon設置里有這樣一個選項
2. 點擊“日歷重疊”,這個畫面中,現在我已經添加了,3個日歷重疊的列表
3. 點擊“新建日歷”,
這個部分,可以設置日歷的基本信息,日歷可以有兩個來源,一個是sharepoint 一個是Exchange
文章中將主要介紹SharePoint列表,因為現在手頭沒有Exchange環境。
日歷名稱:這個是要顯示在日歷視圖中的 名稱,不是重疊日歷列表的名稱,這個名字可以隨便寫。
顏色:這個可以選擇要顯示這個日歷中的事件時,是什么顏色的,不過顏色就只有幾中可以選擇。
WebUrl:這個是重疊列表的所在網站地址。那么,這個”解決“我真不知道怎么形容他,也不知道是怎么翻譯的,
點擊以后,下面的列表和視圖,會加載這個網站中的日歷列表和對應列表的屬於日歷類型的視圖。
始終顯示:直接選擇就可以了,沒什么好說的。
到這里,這個日歷重疊的功能就可以宣告完成了,就是這么容易。
在這張圖中,可以看到,當你點擊你的日歷列表時,左側區域,會顯示出在這個視圖中,已經重疊的日歷名稱。和顏色。
這里點擊后,會直接到對應日歷的視圖頁面。
接下來,進行第二個
二 通過程序添加日歷重疊
1. 如果我們已經用vs 創建了一個 日歷列表定義。你會很驚奇的發現在他的視圖里 沒有日歷重疊的功能。
我就背這個問題,折磨的不輕啊 。后來想了想,可能是vs創建的列表定義,同時要符合foundation和server 所以沒有添加這個功能。
現在要說明的是這個功能只有在server版可用。但后來發現,用列表定義創建出來的列表和sharepoint網站自己創建的日歷列表張的不一樣。
所以后來干脆,用sharepoint 的日歷列表做了一個模板來用。
2. 首先我們需要部署日歷的列表模板,讓后單獨做一個按鈕 ,添加這個日歷列表。
接下來就是要在這個按鈕上添加一些程序,來完成添加日歷重疊。
SPListTemplateCollection listtempcol = oWeb.Site.GetCustomListTemplates(oWeb);
if (listtempcol.Count == 0)
return;
oWeb.Lists.Add(”列表標題“, "列表描述", listtempcol[”自定義列表名稱“]);
SPList oList = oWeb.Lists["已經創建好的列表標題"];
SPList ShareList = oWeb.Lists["日歷重疊的列表"]
SPView view = oList.DefaultView;
StringBuilder b = new StringBuilder();
b.AppendLine("<AggregationCalendars>");
b.AppendLine(GetAggregationCalendar(ShareList, oWeb.Url, "1"));
b.AppendLine("</AggregationCalendars>");
view.CalendarSettings = b.ToString();
view.Update();
/// <summary>
/// 添加日歷重疊的方法
/// </summary>
/// <param name="list"></param>
/// <param name="weburl"></param>
/// <param name="color"></param>
/// <returns></returns>
private string GetAggregationCalendar(SPList list, string weburl, string color)
{
SPView view = list.DefaultView;
String str = String.Format(
@" <AggregationCalendar Id=""{0}"" Type=""SharePoint"" Name=""{1}"" Description=""{1}"" Color=""{2}""
AlwaysShow=""True"" CalendarUrl=""{3}"">
<Settings WebUrl=""{4}"" ListId=""{5}"" ViewId=""{6}"" ListFormUrl=""{7}"" />
</AggregationCalendar>",
new string[] { Guid.NewGuid().ToString(), list.Title, color, list.DefaultViewUrl, weburl, list.ID.ToString(), view.ID.ToString(), list.DefaultDisplayFormUrl });
return str;
}
這樣你在打開這個列表時 就會有這個重疊列表了。
下面來介紹第三步
三 重疊的日歷用彈窗形式打開
1. 重疊日歷的event會在新窗口中打開。所以就想用jquery改一下超鏈接,讓他彈窗形式打開
2. 於是乎寫了這樣一段 js
function OpenWindow() { $(".ms-acal-color1").each(function () { $(this).children().children().click(function () { EditLink2(this, 'WPQ2'); return false; }); }) }
但 完全沒效果。
后來發現,因為js腳本已經加載結束了,但是沒有找到對應的超鏈接。
因為 日歷列表的數據是 ashx加載進來的,我js執行完的時候,它數據還沒進來,悲催啊。
然后,便有了下面的js腳本
function OpenShareScheduleInWindow() { window.setTimeout("OpenWindow()", 2000); } function OpenWindow() { $(".ms-acal-color1").each(function () { $(this).children().children().click(function () { EditLink2(this, 'WPQ2'); return false; }); }) } _spBodyOnLoadFunctionNames.push('OpenShareScheduleInWindow');
讓他停兩秒在執行。果然,效果就出來了。
有了”日歷重疊“這個功能以后,我們便可以將日歷列表做的很好看了。
完,有問題可以隨時聯系 yun_liang1028@163.com