Skip to content
關於 SharePoint REST API
📆2019-08-09 | 📂Microsoft

這是一段關於沒有伺服器權限的開發者於 SharePoint 進行網站開發的恐怖故事。


這段故事實在是太可怕了,伺服器權限在資訊單位手裡,而完全不懂 SharePoint 也不會 .NET 的我只有使用者權限帳號(黑人問號.jpg),看著一點幫助都沒有的 training kit 文件,我必須想辦法把它寫成一個入口網站...

我不得不放棄內建的其他 Web Part,因為我根本無法完全控制那些頑固的東西,它們讓整個頁面佈局看起來相當糟糕!!! 經過摸索研究最終想出了解決方法,我自製母版定義了導航列與頁腳,並利用內容編輯器這個 Web Part 在每個頁面「填入」我要的 HTML 內容,如此一來我便擁有整個頁面內容的控制權了,前端頁面佈局樣式就交給 Bootstrap 去搞定啦,而後端就只能依賴 SharePoint REST API 去處理 CRUD。

雖然很荒謬但我還是硬著頭皮上了,最後寫了個多功能的 SharePoint 企業內網 :

  • 公告
  • 行事曆(支援批次匯入事件)
  • 會議室預約
  • 工時追蹤填報(支援統計圖表)
  • 出勤狀況發佈(系統通知信)
  • 討論區
  • Chatbot(答覆公司系統與網站相關問題)

這任務至此告一段落了,紀錄一下 SharePoint REST API 如何使用 :

javascript
var api_create = "https://server/site/_api/web/lists('{ your_list_guid }')/items",
    api_read = "https://server/site/_api/web/lists('{ your_list_guid }')/items( { your_list_item_id } )",
    api_update = "https://server/site/_api/web/lists('{ your_list_guid }')/items( { your_list_item_id } )",
    api_delete = "https://server/_api/web/lists('{ your_list_guid }')/items( { your_list_item_id } )",
    data ={
        __metadata: { 'type': 'SP.Data.{ your_list_item_entity_type_fullname }' },
        { list_column_name } : { value }
    };
 
function sp_create(api_create){
    $.ajax({
        url: api_create,
        method: "POST",
        data: JSON.stringify(data),
        contentType: "application/json; odata=verbose",
        headers:{
            "Accept": "application/json; odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val()
        },
        success: function(res){
            let data = res.d; // the data you create
            // do something
        },
        error: function(error){
            console.log(JSON.stringify(error));
        }
    });
}
 
function sp_read(api_read){
    $.ajax({
        url: api_read,
        type: "GET",
        headers: {
            "accept":"application/json; odata=verbose"
        },
        success: function(res){
            let data = res.d; // the data you read
            // do something
        },
        error: function(error){
            console.log(JSON.stringify(error));
        }
    });
}
 
function sp_update(api_update){
    $.ajax({
        url: api_update,
        method: "POST",
        data: JSON.stringify(data),
        contentType: "application/json; odata=verbose",
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "IF-MATCH": "*",
            "X-Http-Method": "MERGE"
        },
        success: function(res){
            let data = res.d; // the data you update
            // do something
        },
        error: function(error){
            console.log(JSON.stringify(error));
        }
    });
}
 
function sp_delete(api_delete){
    $.ajax({
        url: api,
        method: 'DELETE',
        headers: {
            "Accept": "application/json;odata=verbose",
            "X-RequestDigest": $("#__REQUESTDIGEST").val(),
            "IF-MATCH": "*"
        },
        success: function(res){
            // do something
        },
        error: function(error){
            console.log(JSON.stringify(error));
        }
    });
}
 
/* filter & select & order(asc / desc)
"https://server/_api/web/lists('{ your_list_guid }')/items?$filter={ list_column_name } eq { keyword }&$select=ID,AuthorId,Created,...&$orderby={ list_column_name } desc"
*/

特別留意 SharePoint REST API 返回的資料筆數預設值是100筆,這在我寫的會議室預約功能所依賴的資料庫筆數超過100之後,因為使用者反應預約完成的會議卻沒有顯示在頁面上而發現。此問題只要在 API 裡頭加上一個 "TOP"參數並指定返回的資料筆數即可解決,例如「TOP=5000」,而 API 能返回的最大值為5000筆。如果需要返回更多筆資料,印象中看過網路上相關討論,但我用在查詢會議室預約這樣有時效性的資料,估計5000筆已經綽綽有餘了XDD

Last updated: