2017-07-18 56 views
1

我有剩餘的端點用於在工作時從內部網絡訪問SharePoint共享日曆。它看起來像這樣: https://teamsites {COMPANY}的.com /網站/ {SITE_URI}/_ AP​​I /網頁/列表/ getbytitle({TITLE-OF-日曆})/項目使用REST API從SharePoint日曆中檢索事件

當我做授權的GET請求。上面的url,它給了我日曆中4個事件的列表,但日期是隨機的。我需要指定什麼端點才能檢索當月的所有事件?

另外,我猜測我每次請求只得到4個事件的原因是由於某些分頁事件,我沒有處理...如果你知道如何檢索一個請求中的所有事件,這將是一個獎金。

在此先感謝!

回答

1

對於當前月的事件可能通過以下CAML查詢來檢索:

<Where> 
    <DateRangesOverlap> 
     <FieldRef Name='EventDate' /> 
     <FieldRef Name='EndDate' /> 
     <Value Type='DateTime'> 
      <Month /> 
     </Value> 
    </DateRangesOverlap> 
</Where> 

對於這個問題GetItems method可以利用如下面所示:

var query = ` 
<Where> 
    <DateRangesOverlap> 
     <FieldRef Name='EventDate' /> 
     <FieldRef Name='EndDate' /> 
     <Value Type='DateTime'> 
      <Month /> 
     </Value> 
    </DateRangesOverlap> 
</Where>` 


getListItems(_spPageContextInfo.webAbsoluteUrl,'TeamCalendar',query) 
.done(function(data){ 
    var items = data.d.results; 
    for(var i = 0; i < items.length;i++) { 
     console.log(items[i].Title); 
    }  
}) 
.fail(function(error){ 
    console.log(JSON.stringify(error)); 
}); 

其中

function getListItems(webUrl,listTitle, queryText) 
{ 
    var viewXml = '<View><Query>' + queryText + '</Query></View>'; 
    var url = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/getitems"; 
    var queryPayload = { 
       'query' : { 
         '__metadata': { 'type': 'SP.CamlQuery' }, 
         'ViewXml' : viewXml 
       } 
    }; 
    return $.ajax({ 
      url: url, 
      method: "POST", 
      data: JSON.stringify(queryPayload), 
      headers: { 
       "X-RequestDigest": $("#__REQUESTDIGEST").val(), 
       "Accept": "application/json; odata=verbose", 
       "content-type": "application/json; odata=verbose" 
      } 
    }); 
} 

但有一個限制使用此方法,REST和CSOM/JSOM API都不支持而不支持支持擴展循環事件(這意味着只有單個事件項目纔會返回以發生重複事件)。請參閱這些要求的更多詳細信息:

對於場景遺留的SharePoint Web服務就派上用場了,特別是Lists Web Service

下面的例子演示瞭如何檢索了當月的所有活動和擴大重複事件(SPServices library在這裏使用):

$().SPServices({ 
    operation: "GetListItems", 
    async: false, 
    listName: "TeamCal", 
    CAMLViewFields: "<ViewFields>" + 
      "<FieldRef Name='Title' />" + 
      "<FieldRef Name='EventDate' />" + 
      "<FieldRef Name='EndDate' />" + 
      "<FieldRef Name='Location' />" + 
      "<FieldRef Name='Description' />" + 
      "<FieldRef Name='fRecurrence' />" + 
      "<FieldRef Name='RecurrenceData' />" + 
      "<FieldRef Name='fAllDayEvent' />" + 
     "</ViewFields>", 
    CAMLQuery: "<Query>" + 
      "<Where>" + 
       "<DateRangesOverlap>" + 
        "<FieldRef Name='EventDate' />" + 
        "<FieldRef Name='EndDate' />" + 
        "<FieldRef Name='RecurrenceID' />" + 
        "<Value Type='DateTime'>" + 
         "<Month />" + 
        "</Value>" + 
       "</DateRangesOverlap>" + 
      "</Where>" + 
      "<OrderBy>" + 
       "<FieldRef Name='EventDate' />" + 
      "</OrderBy>" + 
     "</Query>", 
    CAMLQueryOptions: "<QueryOptions>" + 
      "<RecurrencePatternXMLVersion>v3</RecurrencePatternXMLVersion>" + 
      "<ExpandRecurrence>TRUE</ExpandRecurrence>" + 
     "</QueryOptions>", 
    completefunc: function (xData, Status) { 
     $(xData.responseXML).SPFilterNode("z:row").each(function() { 

      var $node = $(this); 
      var eventTitle = $node.attr("ows_Title"); 
      console.log(eventTitle); 

     }); 
    } 
}) 
+1

感謝您的詳細答覆!我能夠查看您發送的api鏈接以及您的詳細示例,以在我的代碼中創建解決方案。似乎可能的重複事件問題在我的使用案例中不是問題。 –

相關問題