在现代企业中,会议室的高效管理对于提升工作效率至关重要。本文将介绍一家技术领先的公司如何利用微软的技术栈,包括SharePoint和Exchange,来实现一个会议室预订系统。该系统允许员工随时随地预订会议室,同时确保会议室的设备和空间满足他们的需求。
客户公司拥有基于Microsoft SharePoint 2010的内部门户,每天有1500名用户使用。公司还使用Microsoft Exchange,它提供了通过Room Mailbox预订公司不同资源的功能。每个会议室都有自己的电子邮件地址,员工可以用来预订它,其他人可以在日历上看到会议室的预订日期和时间。Outlook 2010还有一个名为Room Finder的功能。
尽管这些功能看似易于设置,但存在一些限制。首先,所有用户必须使用Outlook。其次,会议室的描述非常有限,不允许指定会议室配备了哪些设备(如投影仪、白板、电话会议设备等)。
因此,客户希望创建一个系统,让每位员工都能一目了然地看到哪些会议室可用以及包含哪些设备,而无需任何额外步骤。
创建解决方案的第一步是创建三个列表:部门、会议室和会议室预订。
部门列表包括不同城市的各个分支机构。会议室列表包含具有以下特征的房间:
最后是会议室预订列表,包含以下信息:
现在已经创建了这些列表,但是需要有人来填写它们,所以根据用户的角色进行了分组:
客户已经为门户应用了用户界面设计,因此设计师工作量不大:
1. 用户的主页:用户界面截图1。
2. 一个单独的链接会带到包含基本信息的房间列表。点击房间名称可以显示房间的详细信息。会议室设备一目了然截图2。
3. 在“搜索会议室”链接下有一个两周的日历。每个单元格显示日期、预订房间的人以及时间。日历截图3。
4. 可以点击一个“加号”来预订会议室:会议室预订截图4。
为了实现这一点,需要编写一个WCF服务,该服务返回json并与SharePoint一起工作。这个问题通过适当的web.config和文件夹ISAPI中的SVC来解决。有许多关于如何正确配置web.config以发送json的出版物,例如像这样:
http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide
然后开发了一些ASPX页面,将它们添加到模块中,并通过使用Knockout框架的JavaScript实现了WCF服务的所有逻辑。
主要挑战出现在Exchange中。实际上,所有所需的功能都是通过EWS Managed API实现的。但是,当在会议室列表中创建新房间时,需要自动创建邮箱。
发现邮箱只能通过powershell创建,从C#代码中调用命令不是问题。
可以向会议室列表添加事件接收器,并使用Runspace和WSManConnectionInfo在远程服务器上调用powershell命令。然而,这种方法不安全,因此决定编写另一个WCF服务并将其部署到Exchange服务器。该服务只有一个方法:
如上所述,所有工作逻辑都是通过WCF服务实现的,因此在服务中补充了从Exchange预订房间的方法是有意义的。调用服务方法在Exchange中创建房间预订。所有必要的信息都放在Microsoft.Exchange.Data.Appointment中,然后通过API在Exchange日历中创建会议。
决定通过定时作业解决反向同步问题(当员工通过Outlook在他的日历中预订房间时)。这个作业收集了Exchange中的所有信息,并创建了缺失的预订并删除了取消的会议。