本文将介绍一种自定义的SharePoint日历控件,该控件以紧凑的Widget风格展示事件,并提供视图支持和Ajax支持。这种控件的设计目标是提高灵活性、效率和视觉吸引力。
受到CodeProject上的文章《Calendar Web Part for Sharepoint that Displays & Gives Details of Events from an Event List》的启发,构建了这个Web Part。它基于SharePoint日历事件在自定义日历Web控件中展示的想法,该控件继承自标准的ASP.NET Calendar Web控件。
EventCalendarListWebPart Web Part调用两个自定义Web控件EventCalendar和EventListing来渲染事件。EventCalendar是一个自定义Web控件,继承自System.Web.UI.WebControls.Calendar。有事件的日期以Selected样式呈现,鼠标悬停时显示一个包含当天事件列表的提示工具。该提示工具使用了Dynamic Web Coding的JavaScript Tooltips。当用户将鼠标悬停在事件标题上时,会显示一个显示事件开始和结束时间的提示工具。
在EventCalendar中,使用SPQuery从日历列表中检索事件,如下所示:
<Where>
<DateRangesOverlap>
<FieldRef Name="EventDate" />
<FieldRef Name="EndDate" />
<FieldRef Name="RecurrenceID" />
<Value Type="DateTime">
<Month />
</Value>
</DateRangesOverlap>
</Where>
上述查询检索当前日历视图中显示的所有日期的事件,不仅仅是当前或选定的月份。因此,它可能包括上个月的最后几天和/或下个月的头几天。当指定自定义日历视图时,将使用该视图的查询。这个自定义视图应该基于日历视图类型。在重写的OnDayRender事件中,控件将检查检索到的事件是否落在当天,并相应地渲染必要的子控件。
EventListing是一个自定义Web控件,以列表格式显示即将发生的事件。它使用SPQuery从日历列表中检索事件,如下所示:
<Where>
<DateRangesOverlap>
<FieldRef Name="EventDate" />
<FieldRef Name="EndDate" />
<FieldRef Name="RecurrenceID" />
<Value Type="DateTime">
<Now />
</Value>
</DateRangesOverlap>
</Where>
<OrderBy>
<FieldRef Name="EventDate" />
</OrderBy>
再次,当指定自定义列表视图时,将使用该视图的查询。这个自定义视图应该基于OOTB "Current Events"视图创建。
EventCalendarListWebPart作为EventCalendar和EventListing的包装器。它还在EventCalendar周围包装了一个UpdatePanel,以便点击上一个月或下一个月时不会导致整个页面刷新。该Web部件具有以下公共属性:
所有JavaScript文件都通过ScriptLink引用,所有CSS文件都通过CssRegistration引用。该Web部件具有以下默认属性值,反映了顶部预览屏幕截图中显示的相同外观和感觉:
Web Part还使用资源文件存储所有消息和属性UI字符串。它调用一个自定义类,该类继承自WebDescriptionAttribute、WebDisplayNameAttribute或CategoryAttribute,并从自己的资源管理器返回本地化的字符串。
样本Visual Studio 2013 Update 1解决方案包括构建和部署此Web Part所需的所有支持文件,不包括强名称密钥文件。它充分利用了内置的SharePoint集成。不再需要第三方工具或自定义预构建和后构建脚本来构建SharePoint解决方案文件。
如果是从以前的版本升级,请参考版本历史记录以获取任何特殊的升级说明。
打开SharePoint 2013 Management Shell,使用Add-SPSolution添加解决方案文件QuestechSystems.SharePoint.EventCalendarList.wsp,如下所示:
Add-SPSolution "C:\_deployment\QuestechSystems.SharePoint.EventCalendarList.wsp"
转到SharePoint 2013 Central Administration/System Settings/Manage farm solutions。将安装的解决方案部署到选定的Web应用程序。在部署解决方案的站点集合中,激活站点集合功能Questech Systems Event Calendar Listing Web Part。之后,Event Calendar Listing Web Part(列在Questech Systems下)应该可供添加到页面。