通过sharepoint 客户脚本,验证列表添加页面上的时间

     项目上遇到一个需求,在我们已经开发好的"会议室预约"系统上,增加一个对时间控制,具体要求如下

  只有北京会议,除管理员以外的人在预定会议室时,一次只能预约两小时,不能预约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");  
原文地址:https://www.cnblogs.com/jinhailang/p/3385868.html