项目上遇到一个需求,在我们已经开发好的"会议室预约"系统上,增加一个对时间控制,具体要求如下
只有北京会议,除管理员以外的人在预定会议室时,一次只能预约两小时,不能预约30以后的会议室。
经过考虑以觉得,只有通过sharepoint客户端脚本实现是最简单的,以下是实现方式
引入net的验证控件
<asp:customvalidator id="CustomValidator2" runat="server" ErrorMessage="不可预定三十天以后会议室!" ClientValidationFunction="valiatorEndTime"></asp:customvalidator>
<asp:customvalidator id="CustomValidator3" runat="server" ErrorMessage="该用户预定会议室的时间一次不得超过两小时间!" ClientValidationFunction="valiatorTime"></asp:customvalidator>
JS实现代码:
var falg=false; ExecuteOrDelayUntilScriptLoaded(getAllSiteGroups1, "sp.js"); //Get All The Site Groups in SharePoint Using ECMAScript var groupCollection; var id=0; function getAllSiteGroups1() { var clientContext = new SP.ClientContext(); this.groupCollection = clientContext.get_web().get_siteGroups(); clientContext.load(groupCollection); clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededgetAllSiteGroups), Function.createDelegate(this, this.onQueryFailedgetAllSiteGroups)); } function onQuerySucceededgetAllSiteGroups() { thisHREF = document.location.href; if(thisHREF.indexOf("SPMeetingRoomBooking")>0) { var groupName = 'Site Groups: '; var groupsEnumerator = this.groupCollection.getEnumerator(); while (groupsEnumerator.moveNext()) { var group = groupsEnumerator.get_current(); if(group.get_title()=="会议室管理员") { id=group.get_id(); } } getAllSiteGroups(); } else { falg= true; } } function onQueryFailedgetAllSiteGroups(sender, args) {} //Get All The Site Groups in SharePoint Using ECMAScript var groupCollection; function getAllSiteGroups() { var context = new SP.ClientContext(); var siteColl = context.get_site(); var web = siteColl.get_rootWeb(); var groupCollection = web.get_siteGroups(); // Get the Our Group's ID var _group = groupCollection.getById(id); // ID of the Group that we are checking var users = _group.get_users(); // Get all Users of the group context.load(_group); context.load(users); this._users = users; this._currentUser = web.get_currentUser(); // Get current user context.load(this._currentUser); context.executeQueryAsync(Function.createDelegate(this, this.CheckUserSucceededUserIsInGroup), Function.createDelegate(this, this.CheckUserfailedUserIsInGroup)); } //The below Checks if User is the member of the specified group function CheckUserSucceededUserIsInGroup() { //debugger; IsInThisGroupFlag = false; var userLoginName = this._currentUser.get_loginName(); if(userLoginName.split('\')[1]=="system") { falg= true; } else if (this._users.get_count() > 0) { var _usersEnum = this._users.getEnumerator(); while (_usersEnum.moveNext()) { var user = _usersEnum.get_current(); if (user.get_loginName() == userLoginName) { //debugger; falg= true; } else { falg=false; } } } } function CheckUserfailedUserIsInGroup() { falg=false; } function searchFieldEditorElement(tagName, identifier, title) { var len = identifier.length; var tags = document.getElementsByTagName(tagName); for (var i = 0; i < tags.length; i++) { var tempString = tags[i].id; if (tags[i].title == title) { return tags[i]; } } return null; } function valiatorTime(source,args) { var txtstartDate = searchFieldEditorElement("input", "DateTimeFieldDate", "开始时间"); var txtendDate = searchFieldEditorElement("input", "DateTimeFieldDate", "结束时间"); var startDateID = txtstartDate.id; var startDataHoursID=startDateID +"Hours"; var startDataMinutesID=startDateID +"Minutes"; var startDataValue=document.getElementById(startDateID ).value; var startDataHoursValue=document.getElementById(startDataHoursID).value; var startDataMinutesValue=document.getElementById(startDataMinutesID).value; var startTimestr=startDataValue+" "+startDataHoursValue+startDataMinutesValue+":00"; var startTime=new Date(startTimestr); var endDateID = txtendDate.id; var endDataHoursID=endDateID+"Hours"; var endDataMinutesID=endDateID+"Minutes"; var endDataValue=document.getElementById(endDateID ).value; var endDataHoursValue=document.getElementById(endDataHoursID).value; var endDataMinutesValue=document.getElementById(endDataMinutesID).value; var endTimestr=endDataValue+" "+endDataHoursValue+endDataMinutesValue+":00"; var endTime=new Date(endTimestr); var betTime=(endTime.getTime()-startTime.getTime())/(1000*60*60); if(betTime>2 && falg==false) { args.IsValid=false; } else { args.IsValid=true; } } function valiatorEndTime(source,args1) { var txtendDate = searchFieldEditorElement("input", "DateTimeFieldDate", "结束时间"); var endDateID = txtendDate.id; var endDataHoursID=endDateID+"Hours"; var endDataMinutesID=endDateID+"Minutes"; var endDataValue=document.getElementById(endDateID ).value; var endDataHoursValue=document.getElementById(endDataHoursID).value; var endDataMinutesValue=document.getElementById(endDataMinutesID).value; var endTimestr=endDataValue+" "+endDataHoursValue+endDataMinutesValue+":00"; var endTime=new Date(endTimestr); var betTime=(endTime.getTime()-new Date())/(1000*60*60*24); if(betTime>30 && falg==false) { args1.IsValid=false; } else { args1.IsValid=true; } } _spBodyOnLoadFunctionNames.push("valiatorField");