• SharePoint Code Snippets


    1. ASP.NET路径中的“~”表示虚拟路径的根目录

    2. 字符串太长时可用反斜杠来进行换行;

     return "<div style='background-color: #e5e5e5;  100px;  display:inline-block;'> \
                <div style=' " + percentComplete.replace(/\s+/g, '') + "; background-color: #0094ff;'> \
                &nbsp;</div></div>&nbsp;" + percentComplete;

    3. 

    4. SharePoint REST API 设置List 权限;

    // Change placeholder values before you run this code.
        var siteUrl = 'https://gejiaqi.sharepoint.com';
        var listTitle = 'SAP Region Approvers';
        var groupName = 'Jacky_s Team Site Members';
        var targetRoleDefinitionName = 'Contribute';
        var groupId;
        var targetRoleDefinitionId;
        
        $(document).ready( function() {
            var getGroupId = getTargetGroupId();
            getGroupId.done(function(){
                var getRoleDefId=getTargetRoleDefinitionId();
                getRoleDefId.done(function(responseData){
                    targetRoleDefinitionId = responseData.d.Id;
                    var breakRoleDefInh = breakRoleInheritanceOfList();
                    breakRoleDefInh.done(function(){
                        var deleteRoles = deleteCurrentRoleForGroup();
                        deleteRoles.done(function(){
                            var setnewPermission = setNewPermissionsForGroup();
                            setnewPermission.done(function(){
                                successHandler();
                            });
                            setnewPermission.fail(errorHandler);
                        });
                        deleteRoles.fail(errorHandler);
                    });
                    breakRoleDefInh.fail(errorHandler);
                });
                getRoleDefId.fail(errorHandler);
            });
            getGroupId.fail(errorHandler);
        });
        
        // Get the ID of the target group.
        function getTargetGroupId() {
            var deferred=$.Deferred();
            $.ajax({
                url: siteUrl + '/_api/web/sitegroups/getbyname(\'' + groupName + '\')/id',
                type: 'GET',
                headers: { 'accept':'application/json;odata=verbose' },
                success: function(responseData) {
                    groupId = responseData.d.Id;
                    deferred.resolve();
                },
                error: function(error){
                    deferred.reject();
                }
           });
           
           return deferred.promise();
        }
        
        // Get the ID of the role definition that defines the permissions
        // you want to assign to the group.
        function getTargetRoleDefinitionId() {
            return $.ajax({
                url: siteUrl + '/_api/web/roledefinitions/getbyname(\''
                    + targetRoleDefinitionName + '\')/id',
                type: 'GET',
                headers: { 'accept':'application/json;odata=verbose' }
                   });
        }
        
        // Break role inheritance on the list.
        function breakRoleInheritanceOfList() {
            return $.ajax({
                url: siteUrl + '/_api/web/lists/getbytitle(\'' + listTitle
                    + '\')/breakroleinheritance(false)',
                type: 'POST',
                headers: { 'X-RequestDigest':$('#__REQUESTDIGEST').val() }
            });
        }
        
        // Remove the current role assignment for the group on the list.
        function deleteCurrentRoleForGroup() {
            return $.ajax({
                url: siteUrl + '/_api/web/lists/getbytitle(\'' + listTitle
                    + '\')/roleassignments/getbyprincipalid(' + groupId + ')',
                type: 'POST',
                headers: { 
                    'X-RequestDigest':$('#__REQUESTDIGEST').val(),
                    'X-HTTP-Method':'DELETE'
                }
             });
        }
        
        // Add the new role assignment for the group on the list.
        function setNewPermissionsForGroup() {
            return $.ajax({
                url: siteUrl + '/_api/web/lists/getbytitle(\'' + listTitle
                    + '\')/roleassignments/addroleassignment(principalid='
                    + groupId + ',roledefid=' + targetRoleDefinitionId + ')',
                type: 'POST',
                headers: { 'X-RequestDigest':$('#__REQUESTDIGEST').val() }
            });
        }
        
        function successHandler() {
            alert('Request succeeded.');
        } 
        
        function errorHandler(xhr, ajaxOptions, thrownError) {
            alert('Request failed: ' + xhr.status + '\n' + thrownError + '\n' + xhr.responseText);
        }
    View Code

    5. Calendar Solution (SharePoint 2010版):隐藏Recurrence,会议室冲突检测,限制最早提前3个月预定;
    Edit Form:

    <script type="text/javascript">
          $(document).ready(function(){
              //hide 'Approval Status' field
              $('input[title="Approval Status"]').closest("tr").hide();
              hideField("Recurrence");
          });
          
          function hideField(title)
        {
            $(".ms-formtable").find("h3 nobr").each(function () {                
                var text = $(this).text();
                if(text==title)
                {
                       $(this).parent().parent().parent().hide();
                }
            })    
        }
          
          //-----------------------------------------Check Meeting Room Conflict, add limitation of 3 months-------------------------------------
              var startDateTime="";
            var endDateTime="";
            var meetingRoom ="";
            
            //overwrite PreSaveItem function, it is an empty function defined by default
            function PreSaveItem(){
                var startDate=$("input[title='Start Time']").val();
                var startHour=$("input[title='Start Time']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateHours']").val();
                var startMinutes=$("input[title='Start Time']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateMinutes']").val();
                var endDate=$("input[title='End Time']").val();
                var endHour=$("input[title='End Time']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateHours']").val();
                var endMinutes=$("input[title='End Time']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateMinutes']").val();
    
                var isAllDayEvent = $("input[id$='AllDayEventField']").attr("checked");
                if(isAllDayEvent == "checked"){
                    startDateTime = startDate.replace(/\//g,"-")+"T00:00:00Z";
                    endDateTime = endDate.replace(/\//g,"-")+"T23:59:00Z";
                    
                    startHour="00:";
                    startMinutes="00";
                    endHour="23:";
                    endMinutes="59";
                }
                else{
                    startDateTime = startDate.replace(/\//g,"-")+"T"+startHour+startMinutes+":00Z";
                    endDateTime = endDate.replace(/\//g,"-")+"T"+endHour+endMinutes+":00Z";
                }
                
                meetingRoom = $("select[title='Meeting Room']").find("option:selected").text();
                
                //Check whether the seleted date is 3 months later
                var is3MonthsLater=false;
                var currentDate=new Date();
                var dateLimitation = addMonths(currentDate, 3);
                var selectedStartDate=new Date(startDate+ " "+ startHour+startMinutes);
                var selectedEndDate=new Date(endDate+ " " +endHour+endMinutes);
                
                if(dateLimitation.getTime()>selectedEndDate.getTime()){
                    isMeetingRoomAvailable();
                }
                else{
                    alert("You can book a meeting room at most 3 months in advance.\nPlease change the time slot.");
                }
    
                return false; //pause for the moment, because onQuerySucceeded is asynchronous
            }
            
            //Search for existing booking items based on parameters: meeting room, start time, end time;
            function isMeetingRoomAvailable(){
                var clientContext = SP.ClientContext.get_current();
                var oList = clientContext.get_web().get_lists().getByTitle('SEC会议室预定');
                    
                var camlQuery = new SP.CamlQuery();
                var queryXML= "<View><Query>" +
                                "<ViewFields>" +
                                    "<FieldRef Name='Title' />" +
                                      "<FieldRef Name='EventDate' />" +
                                      "<FieldRef Name='EndDate' />" +
                                      "<FieldRef Name='Meeting_x0020_Room' />" +
                                      "<FieldRef Name='ID'/>" +
                               "</ViewFields>" +
                               "<Where>" +
                                   "<And>" +
                                  "<And>" +
                                      "<Or>" +
                                          "<Or>" +
                                            "<Or>" +
                                                "<And>" +
                                                    "<Leq>" +
                                                        "<FieldRef Name='EventDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>" + startDateTime +"</Value>" +
                                                    "</Leq>" +
                                                    "<Gt>" +
                                                        "<FieldRef Name='EndDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                                    "</Gt>" +
                                                "</And>" +
                                                "<And>" +
                                                    "<Lt>" +
                                                        "<FieldRef Name='EventDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                    "</Lt>" +
                                                    "<Geq>" +
                                                        "<FieldRef Name='EndDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                    "</Geq>" +
                                                "</And>" +
                                            "</Or>" +
                                            "<And>" +
                                                "<Geq>" +
                                                   "<FieldRef Name='EventDate' />" +
                                                   "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                                "</Geq>" +
                                                "<Leq>" +
                                                   "<FieldRef Name='EndDate' />" +
                                                   "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                "</Leq>" +
                                            "</And>" +
                                        "</Or>" +
                                        "<And>" +
                                            "<Leq>" +
                                               "<FieldRef Name='EventDate' />" +
                                               "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                            "</Leq>" +
                                            "<Geq>" +
                                               "<FieldRef Name='EndDate' />" +
                                               "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                            "</Geq>" +
                                        "</And>" +
                                     "</Or>" +
                                     "<Eq>" +
                                        "<FieldRef Name='Meeting_x0020_Room' />" +
                                        "<Value Type='Lookup'>"+ meetingRoom +"</Value>" +
                                     "</Eq>" +
                                  "</And>" +
                                  "<Neq><FieldRef Name='Approval_x0020_Status'/><Value Type='Text'>Rejected</Value></Neq>" +
                                "</And>" +
                               "</Where>" +
                               "</Query></View>";
                camlQuery.set_viewXml(queryXML);
                this.collListItem = oList.getItems(camlQuery);
                    
                clientContext.load(collListItem);
                clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
            }
            
            function onQuerySucceeded(sender, args){
                var itemsCount=this.collListItem.get_count();
                if(itemsCount == 0){    
                    WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$m$g_ec1a1489_52a0_47c5_b701_fffcbb95806e$ctl00$toolBarTbl$RightRptControls$ctl00$ctl00$diidIOSaveItem", "", true, "", "", false, true));
                }
                else{
                    if(itemsCount == 1){
                        var queryStrs=getQueryStrings();
                        
                        if(queryStrs["ID"]==this.collListItem.get_item(0).get_id()){
                            WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$m$g_ec1a1489_52a0_47c5_b701_fffcbb95806e$ctl00$toolBarTbl$RightRptControls$ctl00$ctl00$diidIOSaveItem", "", true, "", "", false, true));
                        }
                        else{
                            alert("The selected meeting room is already booked for this time slot.\nPlease change meeting room or time slot.");
                        }
                    }
                    else{
                        alert("The selected meeting room is already booked for this time slot.\nPlease change meeting room or time slot.");
                    }
                }
            }
            
            function onQueryFailed(sender, args){
                alert('Request failed. ' + args.get_message() + '\nPlease contact IT for help.');
            }
            
            function getQueryStrings(){
                var vars = [], hash;
                var q = document.URL.split('?')[1];
                if(q != undefined){
                    q = q.split('&');
                    for(var i = 0; i < q.length; i++){
                        hash = q[i].split('=');
                        vars.push(hash[1]);
                        vars[hash[0]] = hash[1];
                    }
                }
                return vars;
            }
            
            //Add months to a date
            function addMonths(dateObj, num){
                var currentMonth = dateObj.getMonth() + dateObj.getFullYear() * 12;
                dateObj.setMonth(dateObj.getMonth() + num);
                var diff = dateObj.getMonth() + dateObj.getFullYear() * 12 - currentMonth;
            
                // If don't get the right number, set date to 
                // last day of previous month
                if (diff != num) {
                    dateObj.setDate(0);
                } 
                return dateObj;
            }
    
      </script>
    View Code

    New Form:

    <script src="/sites/fcn/Customer_Solution/SiteAssets/jquery-1.11.0.min.js" type="text/javascript"></script><script type="text/javascript">
    
    
            $(document).ready(function(){
                //Hide the 'Approval Status' field
                $('input[title="Approval Status"]').closest("tr").hide();
                hideField("Recurrence");
            });
            
            function hideField(title)
            {
                $(".ms-formtable").find("h3 nobr").each(function () {                
                    var text = $(this).text();
                    if(text==title)
                    {
                           $(this).parent().parent().parent().hide();
                    }
                })    
            }
            
            
            //----------------------------------------Check Conflicts, Add limitation of 3 months-----------------------------------------------------------
            
            var startDateTime="";
            var endDateTime="";
            var meetingRoom ="";
            
            function PreSaveItem(){
                var startDate=$("input[title='Start Time']").val();
                var startHour=$("input[title='Start Time']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateHours']").val();
                var startMinutes=$("input[title='Start Time']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateMinutes']").val();
                var endDate=$("input[title='End Time']").val();
                var endHour=$("input[title='End Time']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateHours']").val();
                var endMinutes=$("input[title='End Time']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateMinutes']").val();
    
                var isAllDayEvent = $("input[id$='AllDayEventField']").attr("checked");
                if(isAllDayEvent == "checked"){
                    startDateTime = startDate.replace(/\//g,"-")+"T00:00:00Z";
                    endDateTime = endDate.replace(/\//g,"-")+"T23:59:00Z";
                    
                    startHour="00:";
                    startMinutes="00";
                    endHour="23:";
                    endMinutes="59";
                }
                else{
                    startDateTime = startDate.replace(/\//g,"-")+"T"+startHour+startMinutes+":00Z";
                    endDateTime = endDate.replace(/\//g,"-")+"T"+endHour+endMinutes+":00Z";
                }
                
                meetingRoom = $("select[title='Meeting Room']").find("option:selected").text();
                
                //Check whether the seleted date is 3 months later
                var is3MonthsLater=false;
                var currentDate=new Date();
                var dateLimitation = addMonths(currentDate, 3);
                var selectedStartDate=new Date(startDate+ " "+ startHour+startMinutes);
                var selectedEndDate=new Date(endDate+ " " +endHour+endMinutes);
                
                if(dateLimitation.getTime()>selectedEndDate.getTime() && dateLimitation.getTime()>selectedEndDate.getTime()){
                    isMeetingRoomAvailable();
                }
                else{
                    alert("You can book a meeting room at most 3 months in advance.\nPlease change the time slot.");
                }
    
                return false; //pause for the moment
            }
            
            function isMeetingRoomAvailable(){
                var clientContext = SP.ClientContext.get_current();
                var oList = clientContext.get_web().get_lists().getByTitle('SEC会议室预定');
                    
                var camlQuery = new SP.CamlQuery();
                var queryXML= "<View><Query>" +
                                "<ViewFields>" +
                                    "<FieldRef Name='Title' />" +
                                      "<FieldRef Name='EventDate' />" +
                                      "<FieldRef Name='EndDate' />" +
                                      "<FieldRef Name='Meeting_x0020_Room' />" +
                                      "<FieldRef Name='ID'/>" +
                               "</ViewFields>" +
                               "<Where>" +
                                   "<And>" +
                                  "<And>" +
                                      "<Or>" +
                                          "<Or>" +
                                            "<Or>" +
                                                "<And>" +
                                                    "<Leq>" +
                                                        "<FieldRef Name='EventDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>" + startDateTime +"</Value>" +
                                                    "</Leq>" +
                                                    "<Gt>" +
                                                        "<FieldRef Name='EndDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                                    "</Gt>" +
                                                "</And>" +
                                                "<And>" +
                                                    "<Lt>" +
                                                        "<FieldRef Name='EventDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                    "</Lt>" +
                                                    "<Geq>" +
                                                        "<FieldRef Name='EndDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                    "</Geq>" +
                                                "</And>" +
                                            "</Or>" +
                                            "<And>" +
                                                "<Geq>" +
                                                   "<FieldRef Name='EventDate' />" +
                                                   "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                                "</Geq>" +
                                                "<Leq>" +
                                                   "<FieldRef Name='EndDate' />" +
                                                   "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                "</Leq>" +
                                            "</And>" +
                                        "</Or>" +
                                        "<And>" +
                                            "<Leq>" +
                                               "<FieldRef Name='EventDate' />" +
                                               "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                            "</Leq>" +
                                            "<Geq>" +
                                               "<FieldRef Name='EndDate' />" +
                                               "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                            "</Geq>" +
                                        "</And>" +
                                     "</Or>" +
                                     "<Eq>" +
                                        "<FieldRef Name='Meeting_x0020_Room' />" +
                                        "<Value Type='Lookup'>"+ meetingRoom +"</Value>" +
                                     "</Eq>" +
                                  "</And>" +
                                  "<Neq><FieldRef Name='Approval_x0020_Status'/><Value Type='Text'>Rejected</Value></Neq>" +
                                "</And>" +
                               "</Where>" +
                               "</Query></View>";
                camlQuery.set_viewXml(queryXML);
                this.collListItem = oList.getItems(camlQuery);
                    
                clientContext.load(collListItem);
                clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
            }
            
            function onQuerySucceeded(sender, args){
                var itemsCount=this.collListItem.get_count();
                if(itemsCount == 0){    
                    WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$m$g_8c59d4da_ca55_4bf8_a563_1cdcb25c7e06$ctl00$toolBarTbl$RightRptControls$ctl00$ctl00$diidIOSaveItem", "", true, "", "", false, true));
                }
                else{
                    alert("The selected meeting room is already booked for this time slot.\nPlease change meeting room or time slot.");
                }
            }
            
            function onQueryFailed(sender, args){
                alert('Request failed. ' + args.get_message() + '\nPlease contact IT for help.');
            }
            
            //Add months to a date
            function addMonths(dateObj, num){
                var currentMonth = dateObj.getMonth() + dateObj.getFullYear() * 12;
                dateObj.setMonth(dateObj.getMonth() + num);
                var diff = dateObj.getMonth() + dateObj.getFullYear() * 12 - currentMonth;
            
                // If don't get the right number, set date to 
                // last day of previous month
                if (diff != num) {
                    dateObj.setDate(0);
                } 
                return dateObj;
            }
    
        </script>
    View Code

    6. Calendar Solution (SharePoint 2013版):隐藏Recurrence,会议室冲突检测,限制最早提前3个月预定;

    New Form:

    <script src="jquery-1.11.1.min.js" type="text/javascript"></script>
          <script type="text/javascript">
              $(document).ready(function(){
                hideField("Recurrence");
            });
            
            function hideField(title)
            {
                $(".ms-formtable").find("h3 nobr").each(function () {                
                    var text = $(this).text();
                    if(text==title)
                    {
                        $(this).parent().parent().parent().hide();
                    }
                }) 
            }    
            
            //----------------------------------------Check Conflicts, Add limitation of 3 months-----------------------------------------------------------
            
            var startDateTime="";
            var endDateTime="";
            var meetingRoom ="";
            
            function PreSaveItem(){
                var isAllDayEvent = $("input[id$='AllDayEventField']").attr("checked");
                
                var startDate=$("input[title='Start Time Required Field']").val();
                var endDate=$("input[title='End Time Required Field']").val();
    
                //Check whether the seleted date is 3 months later
                var is3MonthsLater=false;
                var currentDate=new Date();
                var dateLimitation = addMonths(currentDate, 3);
                
                //get Date obj of selected start date and end date
                var selectedStartDateObj=new Date(startDate);
                var selectedEndDateObj=new Date(endDate);
                
                //get utc date string from Date object
                var utcStartDate= getUTCDate(selectedStartDateObj);
                var utcEndDate= getUTCDate(selectedEndDateObj);
                
                if(isAllDayEvent == "checked"){
                    startDateTime = utcStartDate.replace(/\//g,"-")+"T00:00:00Z";
                    endDateTime = utcEndDate.replace(/\//g,"-")+"T23:59:00Z";
                    
                    startHour="00:";
                    startMinutes="00";
                    endHour="23:";
                    endMinutes="59";
                }
                else{
                    var startHour=$("input[title='Start Time Required Field']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateHours']").val();
                    var startMinutes=$("input[title='Start Time Required Field']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateMinutes']").val();
                    
                    var endHour=$("input[title='End Time Required Field']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateHours']").val();
                    var endMinutes=$("input[title='End Time Required Field']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateMinutes']").val();
                
                    startDateTime = utcStartDate.replace(/\//g,"-")+"T"+startHour+startMinutes+":00Z";
                    endDateTime = utcEndDate.replace(/\//g,"-")+"T"+endHour+endMinutes+":00Z";
                }
                meetingRoom = $("select[title='Meeting Room Required Field']").find("option:selected").text();
                
                if(dateLimitation.getTime()>selectedStartDateObj.getTime() && dateLimitation.getTime()>selectedEndDateObj.getTime()){
                    isMeetingRoomAvailable();
                }
                else{
                    alert("You can book a meeting room at most 3 months in advance.\nPlease change the time slot.");
                }
    
                return false; //pause for the moment
            }
            
            //pass date object and return string in format of 'YYYY-M-D'
            function getUTCDate(date){
                var year=date.getFullYear();
                var month=date.getMonth()+1;
                var day=date.getDate();
                return year+"-"+month+"-"+day;
            }
            
            function isMeetingRoomAvailable(){
                var clientContext = SP.ClientContext.get_current();
                var oList = clientContext.get_web().get_lists().getByTitle('Meeting Room Reservation');
                    
                var camlQuery = new SP.CamlQuery();
                var queryXML= "<View><Query>" +
                                "<ViewFields>" +
                                    "<FieldRef Name='Title' />" +
                                      "<FieldRef Name='EventDate' />" +
                                      "<FieldRef Name='EndDate' />" +
                                      "<FieldRef Name='Meeting_x0020_Room' />" +
                                      "<FieldRef Name='ID'/>" +
                               "</ViewFields>" +
                               "<Where>" +
                                  "<And>" +
                                      "<Or>" +
                                          "<Or>" +
                                            "<Or>" +
                                                "<And>" +
                                                    "<Leq>" +
                                                        "<FieldRef Name='EventDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>" + startDateTime +"</Value>" +
                                                    "</Leq>" +
                                                    "<Gt>" +
                                                        "<FieldRef Name='EndDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                                    "</Gt>" +
                                                "</And>" +
                                                "<And>" +
                                                    "<Lt>" +
                                                        "<FieldRef Name='EventDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                    "</Lt>" +
                                                    "<Geq>" +
                                                        "<FieldRef Name='EndDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                    "</Geq>" +
                                                "</And>" +
                                            "</Or>" +
                                            "<And>" +
                                                "<Geq>" +
                                                   "<FieldRef Name='EventDate' />" +
                                                   "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                                "</Geq>" +
                                                "<Leq>" +
                                                   "<FieldRef Name='EndDate' />" +
                                                   "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                "</Leq>" +
                                            "</And>" +
                                        "</Or>" +
                                        "<And>" +
                                            "<Leq>" +
                                               "<FieldRef Name='EventDate' />" +
                                               "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                            "</Leq>" +
                                            "<Geq>" +
                                               "<FieldRef Name='EndDate' />" +
                                               "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                            "</Geq>" +
                                        "</And>" +
                                     "</Or>" +
                                     "<Eq>" +
                                        "<FieldRef Name='Meeting_x0020_Room' />" +
                                        "<Value Type='Lookup'>"+ meetingRoom +"</Value>" +
                                     "</Eq>" +
                                  "</And>" +
                               "</Where>" +
                               "</Query></View>";
                camlQuery.set_viewXml(queryXML);
                this.collListItem = oList.getItems(camlQuery);
                    
                clientContext.load(collListItem);
                clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
            }
            
            function onQuerySucceeded(sender, args){
                var itemsCount=this.collListItem.get_count();
                if(itemsCount == 0){    
                    WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ctl40$g_0ac0a4d5_5678_461f_bc36_1d8b7263adae$ctl00$toolBarTbl$RightRptControls$ctl00$ctl00$diidIOSaveItem", "", true, "", "", false, true));
                }
                else{
                    alert("The selected meeting room is already booked for this time slot.\nPlease change meeting room or time slot.");
                }
            }
            
            function onQueryFailed(sender, args){
                alert('Request failed. ' + args.get_message() + '\nPlease contact IT for help.');
            }
            
            //Add months to a date
            function addMonths(dateObj, num){
                var currentMonth = dateObj.getMonth() + dateObj.getFullYear() * 12;
                dateObj.setMonth(dateObj.getMonth() + num);
                var diff = dateObj.getMonth() + dateObj.getFullYear() * 12 - currentMonth;
            
                // If don't get the right number, set date to 
                // last day of previous month
                if (diff != num) {
                    dateObj.setDate(0);
                } 
                return dateObj;
            }
    
        </script>
    View Code

    Edit Form:

    <script src="jquery-1.11.1.min.js" type="text/javascript"></script>
          <script type="text/javascript">    
              
            $(document).ready(function(){
                hideField("Recurrence");
            });
            
            function hideField(title)
            {
                $(".ms-formtable").find("h3 nobr").each(function () {                
                    var text = $(this).text();
                    if(text==title)
                    {
                        $(this).parent().parent().parent().hide();
                    }
                }) 
            }
        
            //----------------------------------------Check Conflicts, Add limitation of 3 months-----------------------------------------------------------
            
            var startDateTime="";
            var endDateTime="";
            var meetingRoom ="";
            
            function PreSaveItem(){
                var isAllDayEvent = $("input[id$='AllDayEventField']").attr("checked");
                
                var startDate=$("input[title='Start Time Required Field']").val();
                var endDate=$("input[title='End Time Required Field']").val();
    
                //Check whether the seleted date is 3 months later
                var is3MonthsLater=false;
                var currentDate=new Date();
                var dateLimitation = addMonths(currentDate, 3);
                
                //get Date obj of selected start date and end date
                var selectedStartDateObj=new Date(startDate);
                var selectedEndDateObj=new Date(endDate);
                
                //get utc date string from Date object
                var utcStartDate= getUTCDate(selectedStartDateObj);
                var utcEndDate= getUTCDate(selectedEndDateObj);
                
                if(isAllDayEvent == "checked"){
                    startDateTime = utcStartDate.replace(/\//g,"-")+"T00:00:00Z";
                    endDateTime = utcEndDate.replace(/\//g,"-")+"T23:59:00Z";
                    
                    startHour="00:";
                    startMinutes="00";
                    endHour="23:";
                    endMinutes="59";
                }
                else{
                    var startHour=$("input[title='Start Time Required Field']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateHours']").val();
                    var startMinutes=$("input[title='Start Time Required Field']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateMinutes']").val();
                    
                    var endHour=$("input[title='End Time Required Field']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateHours']").val();
                    var endMinutes=$("input[title='End Time Required Field']").closest("tr").find("select[id$='DateTimeField_DateTimeFieldDateMinutes']").val();
                
                    startDateTime = utcStartDate.replace(/\//g,"-")+"T"+startHour+startMinutes+":00Z";
                    endDateTime = utcEndDate.replace(/\//g,"-")+"T"+endHour+endMinutes+":00Z";
                }
                meetingRoom = $("select[title='Meeting Room Required Field']").find("option:selected").text();
                
                if(dateLimitation.getTime()>selectedStartDateObj.getTime() && dateLimitation.getTime()>selectedEndDateObj.getTime()){
                    isMeetingRoomAvailable();
                }
                else{
                    alert("You can book a meeting room at most 3 months in advance.\nPlease change the time slot.");
                }
    
                return false; //pause for the moment, because onQuerySucceeded is asynchronous
            }
            
            function getUTCDate(date){
                var year=date.getFullYear();
                var month=date.getMonth()+1;
                var day=date.getDate();
                return year+"-"+month+"-"+day;
            }
            
            function isMeetingRoomAvailable(){
                var clientContext = SP.ClientContext.get_current();
                var oList = clientContext.get_web().get_lists().getByTitle('Meeting Room Reservation');
                    
                var camlQuery = new SP.CamlQuery();
                var queryXML= "<View><Query>" +
                                "<ViewFields>" +
                                    "<FieldRef Name='Title' />" +
                                      "<FieldRef Name='EventDate' />" +
                                      "<FieldRef Name='EndDate' />" +
                                      "<FieldRef Name='Meeting_x0020_Room' />" +
                                      "<FieldRef Name='ID'/>" +
                               "</ViewFields>" +
                               "<Where>" +
                                  "<And>" +
                                      "<Or>" +
                                          "<Or>" +
                                            "<Or>" +
                                                "<And>" +
                                                    "<Leq>" +
                                                        "<FieldRef Name='EventDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>" + startDateTime +"</Value>" +
                                                    "</Leq>" +
                                                    "<Gt>" +
                                                        "<FieldRef Name='EndDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                                    "</Gt>" +
                                                "</And>" +
                                                "<And>" +
                                                    "<Lt>" +
                                                        "<FieldRef Name='EventDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                    "</Lt>" +
                                                    "<Geq>" +
                                                        "<FieldRef Name='EndDate' />" +
                                                        "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                    "</Geq>" +
                                                "</And>" +
                                            "</Or>" +
                                            "<And>" +
                                                "<Geq>" +
                                                   "<FieldRef Name='EventDate' />" +
                                                   "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                                "</Geq>" +
                                                "<Leq>" +
                                                   "<FieldRef Name='EndDate' />" +
                                                   "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                                "</Leq>" +
                                            "</And>" +
                                        "</Or>" +
                                        "<And>" +
                                            "<Leq>" +
                                               "<FieldRef Name='EventDate' />" +
                                               "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ startDateTime +"</Value>" +
                                            "</Leq>" +
                                            "<Geq>" +
                                               "<FieldRef Name='EndDate' />" +
                                               "<Value Type='DateTime' IncludeTimeValue='TRUE'>"+ endDateTime +"</Value>" +
                                            "</Geq>" +
                                        "</And>" +
                                     "</Or>" +
                                     "<Eq>" +
                                        "<FieldRef Name='Meeting_x0020_Room' />" +
                                        "<Value Type='Lookup'>"+ meetingRoom +"</Value>" +
                                     "</Eq>" +
                                  "</And>" +
                               "</Where>" +
                               "</Query></View>";
                camlQuery.set_viewXml(queryXML);
                this.collListItem = oList.getItems(camlQuery);
                    
                clientContext.load(collListItem);
                clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
            }
            
            function onQuerySucceeded(sender, args){
                var itemsCount=this.collListItem.get_count();
                if(itemsCount == 0){    
                    WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ctl40$g_e34ff01e_9d1c_4a02_9b7e_5ea0dc169f43$ctl00$toolBarTbl$RightRptControls$ctl00$ctl00$diidIOSaveItem", "", true, "", "", false, true));
                }
                else{
                    if(itemsCount == 1){
                        var queryStrs=getQueryStrings();
                        
                        if(queryStrs["ID"]==this.collListItem.get_item(0).get_id()){
                            WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ctl40$g_e34ff01e_9d1c_4a02_9b7e_5ea0dc169f43$ctl00$toolBarTbl$RightRptControls$ctl00$ctl00$diidIOSaveItem", "", true, "", "", false, true));
                        }
                        else{
                            alert("The selected meeting room is already booked for this time slot.\nPlease change meeting room or time slot.");
                        }
                    }
                    else{
                        alert("The selected meeting room is already booked for this time slot.\nPlease change meeting room or time slot.");
                    }
                }
            }
            
            function onQueryFailed(sender, args){
                alert('Request failed. ' + args.get_message() + '\nPlease contact IT for help.');
            }
            
            //Add months to a date
            function addMonths(dateObj, num){
                var currentMonth = dateObj.getMonth() + dateObj.getFullYear() * 12;
                dateObj.setMonth(dateObj.getMonth() + num);
                var diff = dateObj.getMonth() + dateObj.getFullYear() * 12 - currentMonth;
            
                // If don't get the right number, set date to 
                // last day of previous month
                if (diff != num) {
                    dateObj.setDate(0);
                } 
                return dateObj;
            }
            
            function getQueryStrings(){
                var vars = [], hash;
                var q = document.URL.split('?')[1];
                if(q != undefined){
                    q = q.split('&');
                    for(var i = 0; i < q.length; i++){
                        hash = q[i].split('=');
                        vars.push(hash[1]);
                        vars[hash[0]] = hash[1];
                    }
                }
                return vars;
            }
    
        </script>
    View Code

    7. jQuery遍历页面上的item链接<a>标签并使其在 SPModalDialog 中打开,

    //User Defined Function to Open Dialog Framework
                    function openDialog(strPageURL) 
                    {
                      var dialogOptions = SP.UI.$create_DialogOptions();
                      dialogOptions.url = strPageURL;// URL of the Page
                      //dialogOptions.width = 750; // Width of the Dialog
                      //dialogOptions.height = 500; // Height of the Dialog
                      
                      SP.UI.ModalDialog.showModalDialog(dialogOptions); // Open the Dialog
                      return false; //don't refresh page
                    }
                    
                    $(document).ready(function(){
                        $("#toolsDiv a").each(function(){
                            if($(this).attr("href").toLowerCase().indexOf("/_layouts/listform.aspx?")>=0){
                                $(this).click(function(){
                                    return openDialog($(this).attr("href"));
                                });
                            }
                        });
                    });

    7. Survey中实现Radio button 与 Textbox关联的示例:选中yes后,textbox必填,否则Next按钮不能点击

    /*----------------------Make textbox mandatory when select yes in Q2-------------------------------*/
                  function checkComment()
                {
                    var isEmpty=true;
                    $("textarea").each(function(){
                        if($.trim($(this).text()).length!=0){
                            isEmpty=false;
                        }
                    });
                    return isEmpty;
                }
                
                function checkQ2RadioButtons()
                {
                    var isYesSelected = false;
                    var titleAttr = $(":radio[name='ctl00$m$g_f84c1a24_be7c_4140_a098_ff1e7b13cec1$ctl00$ctl02$ctl01$ctl00$ctl00$ctl04$ctl00$RadioButtons']:checked").parent().attr("title");
                    if(titleAttr == "Yes" )
                    {
                        isYesSelected = true;
                    }
                    return isYesSelected;
                }
                
                $(function(){
                    //make comments required when select yes in Q2
                      $("td[class='ms-formlabel']:contains('If yes, please specify.')").css("border-top", "0px"); //hide the line between two questions
                      
                      //add change event for Q2 radio buttons
                    $(":radio[name='ctl00$m$g_f84c1a24_be7c_4140_a098_ff1e7b13cec1$ctl00$ctl02$ctl01$ctl00$ctl00$ctl04$ctl00$RadioButtons']").on("change", function(){
                              var isCommentEmpty = checkComment();
                              
                              var responseValue = $(this).parent().attr("title");
                              
                              if (responseValue == "Yes")
                              {
                                  if(isCommentEmpty)
                                  {
                                      $("input[id$='ctl00_diidIONextPage']").each(function(){
                                          $(this).attr("disabled", "disabled");
                                      });
                                  }
                              }
                              else
                              {
                                    $("input[id$='ctl00_diidIONextPage']").each(function(){
                                      $(this).removeAttr("disabled");
                                  });
                              }
                    });    
                    
                    $("textarea").change(function(){
                        var isEmpty=checkComment();
                        if(isEmpty && checkQ2RadioButtons()){
                            $("input[id$='ctl00_diidIONextPage']").each(function(){
                                $(this).attr("disabled", "disabled");
                            });
                        }
                        else
                        {
                            $("input[id$='ctl00_diidIONextPage']").each(function(){
                                $(this).removeAttr("disabled");
                            });
                        }
                    });
                });
    View Code

    8. 简单地将表单以modal dialog形式展示:

    <a style='border: 0' href="#" onclick='SP.UI.ModalDialog.ShowPopupDialog("http://XXX/_layouts/FormServer.aspx?XsnLocation=http://XXX/XXXLibrary/Forms/template.xsn&SaveLocation=XXX&ClientInstalled=false&Source=XXX&DefaultItemOpen=1"); return false;'><img src='XXX/SiteAssets/FontAwesome.png' alt='' title='' /></a>

    即把打开后的表单地址直接拷贝粘贴到ShowPopupDialog()方法的参数中;

    9. 简单地以Modal Dialog形式展现一个弹出窗口的方法:

    //User Defined Function to Open Dialog Framework
    function openDialog(strPageURL) 
    {
        var dialogOptions = SP.UI.$create_DialogOptions();
        dialogOptions.url = strPageURL;// URL of the Page                  
        SP.UI.ModalDialog.showModalDialog(dialogOptions); // Open the Dialog
         return false;
    }

    10. 在SharePoint 2013中,可以在 Provider-Host的 Add-in中使用 cross-domain library来读取host web或者 add-in web中的内容:

    (1) Get the host web title using the cross-domain library (JSOM)

    var hostweburl;
    var appweburl;
    
    // Load the required SharePoint libraries
    $(document).ready(function () {
        //Get the URI decoded URLs.
        hostweburl =
            decodeURIComponent(
                getQueryStringParameter("SPHostUrl")
        );
        appweburl =
            decodeURIComponent(
                getQueryStringParameter("SPAppWebUrl")
        );
    
        // resources are in URLs in the form:
        // web_url/_layouts/15/resource
        var scriptbase = hostweburl + "/_layouts/15/";
    
        // Load the js files and continue to the successHandler
        $.getScript(scriptbase + "SP.Runtime.js",
            function () {
                $.getScript(scriptbase + "SP.js",
                    function () { $.getScript(scriptbase + "SP.RequestExecutor.js", execCrossDomainRequest); }
                    );
            }
            );
    });
    
    // Function to prepare and issue the request to get
    //  SharePoint data
    function execCrossDomainRequest() {
        // context: The ClientContext object provides access to
        //      the web and lists objects.
        // factory: Initialize the factory object with the
        //      app web URL.
        var context;
        var factory;
        var hostSite;
    
        context = new SP.ClientContext(appweburl);
        factory = new SP.ProxyWebRequestExecutorFactory(appweburl);
        context.set_webRequestExecutorFactory(factory);
        hostSite = new SP.AppContextSite(context, hostweburl);
    
        this.web = hostSite.get_web();
        context.load(this.web);
    
        //Execute the query with all the previous 
        //  options and parameters
        context.executeQueryAsync(
            Function.createDelegate(this, successHandler), 
            Function.createDelegate(this, errorHandler)
        );
    
        // Function to handle the success event.
        // Prints the host web's title to the page.
        function successHandler() {
            document.getElementById("HostwebTitle").innerHTML =
                "<b>" + this.web.get_title() + "</b>";
        }
    
        // Function to handle the error event.
        // Prints the error message to the page.
        function errorHandler(data, errorCode, errorMessage) {
            document.getElementById("HostwebTitle").innerText =
                "Could not complete cross-domain call: " + errorMessage;
        }
    }
    
    // Function to retrieve a query string value.
    // For production purposes you may want to use
    //  a library to handle the query string.
    function getQueryStringParameter(paramToRetrieve) {
        var params =
            document.URL.split("?")[1].split("&");
        var strParams = "";
        for (var i = 0; i < params.length; i = i + 1) {
            var singleParam = params[i].split("=");
            if (singleParam[0] == paramToRetrieve)
                return singleParam[1];
        }
    }
    View Code

    (2) Get the host web title using the cross-domain library (REST)

    var hostweburl;
    var appweburl;
    
    // Load the required SharePoint libraries
    $(document).ready(function () {
        //Get the URI decoded URLs.
        hostweburl =
            decodeURIComponent(
                getQueryStringParameter("SPHostUrl")
        );
        appweburl =
            decodeURIComponent(
                getQueryStringParameter("SPAppWebUrl")
        );
    
        // resources are in URLs in the form:
        // web_url/_layouts/15/resource
        var scriptbase = hostweburl + "/_layouts/15/";
    
        // Load the js file and continue to the 
        //   success event handler
        $.getScript(scriptbase + "SP.RequestExecutor.js", execCrossDomainRequest);
    });
    
    // Function to prepare and issue the request to get
    //  SharePoint data
    function execCrossDomainRequest() {
        var executor;
    
        // Initialize the RequestExecutor with the app web URL.
        executor = new SP.RequestExecutor(appweburl);
    
        // Issue the call against the host web.
        // To get the title using REST we can hit the endpoint:
        //      app_web_url/_api/SP.AppContextSite(@target)/web/title?@target='siteUrl'
        // The response formats the data in the JSON format.
        // The functions successHandler and errorHandler attend the
        //      success and error events respectively.
        executor.executeAsync(
            {
                url:
                    appweburl +
                    "/_api/SP.AppContextSite(@target)/web/title?@target='" +
                    hostweburl + "'",
                method: "GET",
                headers: { "Accept": "application/json; odata=verbose" },
                success: successHandler,
                error: errorHandler
            }
        );
    }
    
    // Function to handle the success event.
    // Prints the host web's title to the page.
    function successHandler(data) {
        var jsonObject = JSON.parse(data.body);
    
        document.getElementById("HostwebTitle").innerHTML =
            "<b>" + jsonObject.d.Title + "</b>";
    }
    
    // Function to handle the error event.
    // Prints the error message to the page.
    function errorHandler(data, errorCode, errorMessage) {
        document.getElementById("HostwebTitle").innerText =
            "Could not complete cross-domain call: " + errorMessage;
    }
    
    // Function to retrieve a query string value.
    // For production purposes you may want to use
    //  a library to handle the query string.
    function getQueryStringParameter(paramToRetrieve) {
        var params =
            document.URL.split("?")[1].split("&");
        var strParams = "";
        for (var i = 0; i < params.length; i = i + 1) {
            var singleParam = params[i].split("=");
            if (singleParam[0] == paramToRetrieve)
                return singleParam[1];
        }
    }
    View Code

    (3) Get list items from add-in web by using the cross-domain library (REST)

    var hostweburl;
    var appweburl;
    
    // Load the required SharePoint libraries
    $(document).ready(function () {
        //Get the URI decoded URLs.
        hostweburl =
            decodeURIComponent(
                getQueryStringParameter("SPHostUrl")
        );
        appweburl =
            decodeURIComponent(
                getQueryStringParameter("SPAppWebUrl")
        );
    
        // resources are in URLs in the form:
        // web_url/_layouts/15/resource
        var scriptbase = hostweburl + "/_layouts/15/";
    
        // Load the js files and continue to the successHandler
        $.getScript(scriptbase + "SP.RequestExecutor.js", execCrossDomainRequest);
    });
    
    // Function to prepare and issue the request to get
    //  SharePoint data
    function execCrossDomainRequest() {
        // executor: The RequestExecutor object
        // Initialize the RequestExecutor with the app web URL.
        var executor = new SP.RequestExecutor(appweburl);
    
        // Issue the call against the app web.
        // To get the title using REST we can hit the endpoint:
        //      appweburl/_api/web/lists/getbytitle('listname')/items
        // The response formats the data in the JSON format.
        // The functions successHandler and errorHandler attend the
        //      sucess and error events respectively.
        executor.executeAsync(
            {
                url:
                    appweburl +
                    "/_api/web/lists/getbytitle('Announcements')/items",
                method: "GET",
                headers: { "Accept": "application/json; odata=verbose" },
                success: successHandler,
                error: errorHandler
            }
        );
    }
    
    // Function to handle the success event.
    // Prints the data to the page.
    function successHandler(data) {
        var jsonObject = JSON.parse(data.body);
        var announcementsHTML = "";
    
        var results = jsonObject.d.results;
        for (var i = 0; i < results.length; i++) {
            announcementsHTML = announcementsHTML +
                "<p><h1>" + results[i].Title +
                "</h1>" + results[i].Body +
                "</p><hr>";
        }
    
        document.getElementById("renderAnnouncements").innerHTML =
            announcementsHTML;
    }
    
    // Function to handle the error event.
    // Prints the error message to the page.
    function errorHandler(data, errorCode, errorMessage) {
        document.getElementById("renderAnnouncements").innerText =
            "Could not complete cross-domain call: " + errorMessage;
    }
    
    // Function to retrieve a query string value.
    // For production purposes you may want to use
    //  a library to handle the query string.
    function getQueryStringParameter(paramToRetrieve) {
        var params =
            document.URL.split("?")[1].split("&");
        var strParams = "";
        for (var i = 0; i < params.length; i = i + 1) {
            var singleParam = params[i].split("=");
            if (singleParam[0] == paramToRetrieve)
                return singleParam[1];
        }
    }
    View Code

    (4) Get list items from add-in web by using the cross-domain library (JSOM)

    // The allAnnouncements variable is used by more than one 
    //  function to retrieve and process the results.
    var allAnnouncements;
    var hostweburl;
    var appweburl;
    
    // Load the required SharePoint libraries
    $(document).ready(function () {
        //Get the URI decoded URLs.
        hostweburl =
            decodeURIComponent(
                getQueryStringParameter("SPHostUrl")
        );
        appweburl =
            decodeURIComponent(
                getQueryStringParameter("SPAppWebUrl")
        );
    
        // resources are in URLs in the form:
        // web_url/_layouts/15/resource
        var scriptbase = hostweburl + "/_layouts/15/";
    
        // Load the js files and continue to the successHandler
        $.getScript(scriptbase + "SP.Runtime.js",
            function () {
                $.getScript(scriptbase + "SP.js",
                    function () { $.getScript(scriptbase + "SP.RequestExecutor.js", execCrossDomainRequest); }
                    );
            }
            );
    });
    
    // Function to prepare and issue the request to get
    //  SharePoint data
    function execCrossDomainRequest() {
        // context: The ClientContext object provides access to
        //      the web and lists objects.
        // factory: Initialize the factory object with the
        //      app web URL.
        var context = new SP.ClientContext(appweburl);
        var factory =
            new SP.ProxyWebRequestExecutorFactory(
                appweburl
            );
        context.set_webRequestExecutorFactory(factory);
    
        //Get the web and list objects
        //  and prepare the query
        var web = context.get_web();
        var list = web.get_lists().getByTitle("Announcements");
        var camlString =
            "<View><ViewFields>" +
                "<FieldRef Name='Title' />" +
                "<FieldRef Name='Body' />" +
            "</ViewFields></View>";
    
        var camlQuery = new SP.CamlQuery();
        camlQuery.set_viewXml(camlString);
        allAnnouncements = list.getItems(camlQuery);
    
        context.load(allAnnouncements, "Include(Title, Body)");
    
        //Execute the query with all the previous 
        //  options and parameters
        context.executeQueryAsync(
            successHandler, errorHandler
        );
    }
    
    // Function to handle the success event.
    // Prints the data to the page.
    function successHandler(data, req) {
        var announcementsHTML = "";
        var enumerator = allAnnouncements.getEnumerator();
    
        while (enumerator.moveNext()) {
            var announcement = enumerator.get_current();
            announcementsHTML = announcementsHTML +
                "<p><h1>" + announcement.get_item("Title") +
                "</h1>" + announcement.get_item("Body") +
                "</p><hr>";
        }
    
        document.getElementById("renderAnnouncements").innerHTML =
            announcementsHTML;
    }
    
    // Function to handle the error event.
    // Prints the error message to the page.
    function errorHandler(data, error, errorMessage) {
        document.getElementById("renderAnnouncements").innerText =
            "Could not complete cross-domain call: " +
            errorMessage;
    }
    
    // Function to retrieve a query string value.
    // For production purposes you may want to use
    //  a library to handle the query string.
    function getQueryStringParameter(paramToRetrieve) {
        var params =
            document.URL.split("?")[1].split("&");
        var strParams = "";
        for (var i = 0; i < params.length; i = i + 1) {
            var singleParam = params[i].split("=");
            if (singleParam[0] == paramToRetrieve)
                return singleParam[1];
        }
    }
    View Code

    Note: 在使用REST方式读取Host Web 和 Add-in Web内容时,只有一点区别:executor.executeAsync()方法的 url 参数不同;

    //读取Host Web中的内容:
    url: appweburl + "/_api/SP.AppContextSite(@target)/web/title?@target='" + hostweburl + "'",
    
    //读取Add-in Web中的内容
    url: appweburl + "/_api/web/lists/getbytitle('Announcements')/items",

     在使用JSOM方式读取Host Web 和 Add-in Web内容时,也只有一点区别:是否需要获取 Host Web 对象;

    //读取Host Web中的内容:
    var appContext = new SP.ClientContext(appweburl);
    var factory = new SP.ProxyWebRequestExecutorFactory(appweburl);
    appContext.set_webRequestExecutorFactory(factory);
    var hostSite = new SP.AppContextSite(appContext, hostweburl);
    var web = hostSite.get_web();
    //读取Add-in Web中的内容 var appContext = new SP.ClientContext(appweburl); var factory = new SP.ProxyWebRequestExecutorFactory(appweburl); appContext.set_webRequestExecutorFactory(factory);
    var web = context.get_web();

    11. jQuery调用 Custom REST Service 的例子(GET),参考此文章

    <script src="/XXX/SiteAssets/jquery-1.11.1.min.js"></script> 
    
    <h2>SharePoint 2013: Consume a custom WCF REST service hosted in SharePoint 2013.</h2>
    <h3>This is a quick sample to demonstrate calling a custom SharePoint-hosted WCF REST service from a
        Script Editor Web Part using simple HTML, JavaScript and JQuery.
    </h3>
    
    <div>
        <br />
        <p id="message">Loading presidents...</p>
    </div>
    
    <div id="resultsPanel"></div>
    
    <script type="text/javascript">
        $(document).ready(function () {
            getPresidentsData();
        });
      
    function getPresidentsData() {
        var serviceUri = _spPageContextInfo.webAbsoluteUrl +
            "/_vti_bin/CustomRESTService.svc/getallpresidents";
        $.ajax({
            type: "GET",
            contentType: "application/json;charset=utf-8",
            url: serviceUri,
            dataType: "json",
            success:
                function (response) {
                    $('#resultsPanel').html("");
                    showPresidentsList(response.GetAllPresidentsResult);
                    $('#message').html("<a href=" + serviceUri + ">" + serviceUri + "</a>");
                },
            error:
                function (err) {
                    alert(err);
                }
        });
    }
    
    function showPresidentsList(presidentsData) {
        $.each($(presidentsData), function (index, item) {
            $('#resultsPanel').append(item.Id + ' - ');
            $('#resultsPanel').append(item.FirstName + ' ');
            $('#resultsPanel').append(item["LastName"] + ' (');
            $('#resultsPanel').append(item["EmailAddress"] + ')');
            $('#resultsPanel').append('<br><br>');
        });
    }
    </script>
    View Code

    返回的数据格式为:

    效果为:

    12. SharePoint 2010中,使用 Client OM 从列表中获取数据并显示在Status Bar中:

    ExecuteOrDelayUntilScriptLoaded(displayNotification, "sp.js");
                    
                    var lastUpdatedItemsInfo = '';
                    
                    function displayNotification(){
                        getLastUpdatedItems();
                    }
    
                    function getLastUpdatedItems() {
                        var ctx = SP.ClientContext.get_current();
                        var web = ctx.get_web();
                        var oList= web.get_lists().getByTitle('Last Updated Items');
                        var camlQuery = new SP.CamlQuery();
                        camlQuery.set_viewXml('<View><RowLimit>10</RowLimit><Query><OrderBy><FieldRef Name="ID" Ascending="FALSE"/></OrderBy></Query></View>'); //如果需要查询数据,只需要在<Query></Query>标签中添加<Where></Where>标签就可以
                        var collListItem = oList.getItems(camlQuery);    
                        ctx.load(collListItem);
                        var mySuccessCallBack = Function.createCallback(onQueryLastUpdateItemsSucceeded, collListItem);                
                        ctx.executeQueryAsync(Function.createDelegate(this, mySuccessCallBack), Function.createDelegate(this, this.onQueryLastUpdatedItemsFailed));
                    }
                    
                    function onQueryLastUpdateItemsSucceeded(sender, args, collListItem) {
                        var listItemEnumerator = collListItem.getEnumerator(); 
                        while (listItemEnumerator.moveNext()) {
                            var oListItem = listItemEnumerator.get_current();
                            lastUpdatedItemsInfo += ' <span class="customStatus" onClick="openDialog(\''+oListItem.get_item('Link')+'\')">'+oListItem.get_item('Title')+'</span>,';
                        }
                        lastUpdatedItemsInfo = lastUpdatedItemsInfo.toString();
                        if(lastUpdatedItemsInfo.length>0)
                        {
                            lastUpdatedItemsInfo =lastUpdatedItemsInfo.slice(0,-1);
                            var statusId = SP.UI.Status.addStatus("Last Updated:",lastUpdatedItemsInfo);
                            SP.UI.Status.setStatusPriColor(statusId, "cobalt");
                        }
                    }
                    
                    function onQueryLastUpdatedItemsFailed(sender, args) {
                        lastUpdatedItemsInfo = '';
                    }              
    
                    function openDialog(strPageURL) 
                    {
                      var dialogOptions = SP.UI.$create_DialogOptions();
                      dialogOptions.url = strPageURL;// URL of the Page
                      
                      SP.UI.ModalDialog.showModalDialog(dialogOptions); // Open the Dialog
                      return false;
                    }

    13. 

  • 相关阅读:
    Kafka设计解析(二):Kafka High Availability (上)
    使用Storm实现实时大数据分析
    Kafka消息的可靠性测试--针对直播业务的方案选择
    天机镜—优土大数据平台应用级别监控神器
    Kafka文件存储机制那些事
    Hbase框架原理及相关的知识点理解、Hbase访问MapReduce、Hbase访问Java API、Hbase shell及Hbase性能优化总结
    《BI那点儿事—数据的艺术》目录索引
    面试中的排序算法总结
    HBase二级索引与Join
    Hbase 学习(九) 华为二级索引(原理)
  • 原文地址:https://www.cnblogs.com/qijiage/p/1670556.html
Copyright © 2020-2023  润新知