SharePoint 2013 開發——概述

Justin-Liu發表於2015-05-27


部落格地址:http://blog.csdn.net/FoxDave

近來閱讀SharePoint 2013開發一書,帶著與大家一起分享其中的內容。

部署場景

本地部署(On-Premise Deployment)、O365部署(Office 365 Deployment)、託管部署(Hosted Deployment)和混合部署(Hybrid Deployment)。


包場景

完全信任的場解決方案(Full-Trust Farm Solution)、部分信任的沙盒解決方案(Partial-Trust Sandboxed Solution)和SharePoint應用(Apps for SharePoint)。


程式設計模型:

說這個之前,我們先來大致地回顧一下SharePoint開發的歷史,本人從2007版本開始接觸,之前的就不做陳述了。

SharePoint 2007主要的開發手段是Server API和WebService(ASMX),並沒有沙盒解決方案的概念,客戶端物件模型也並未明確提出。也就是說,你的自定義程式碼要麼執行在SharePoint的服務端,要麼通過內建的Web服務((%COMMONPROGRAMFILES%\Microsoft Shared\web server extensions\12\ISAPI,即_vti_bin這個URL路徑下)託管在你自己的服務層中進行操作。

SharePoint 2007的客戶端物件模型相當有限,在Core.js這個JS檔案中實現(據書記載,在Windows SharePoint Services 2003的時候是OWS.js),該檔案在SharePoint的大部分頁面中被引用,不修改的話則僅包含很有限的邏輯處理操作。例如,Core.js提供了ECB的生成邏輯如下:

function AddDocLibMenuItems(m, ctx) {
    if (typeof (Custom_AddDocLibMenuItems) != "undefined") {
        if (Custom_AddDocLibMenuItems(m, ctx)) return;
    }
    // build the rest of OOTB ECB menu items 
}

我們通過SharePoint Designer來插入Custom_AddDocLibMenuItems函式到SharePoint頁面上來實現我們自己的邏輯,或者是使用內容編輯Web部件(CEWP)來插入自定義的JS指令碼函式。這種方式能實現的東西很有限,而且靈活性很差,如果因為一些原因Core.js沒有被載入完,那麼我們的自定義擴充套件就不好用了。

在SharePoint 2010中,客戶端物件模型(CSOM)被極大地改善了,客戶端模型從根本上來說是叫做Client.svc的WCF服務,附帶三種不同的代理:Silverlight、JavaScript和.NET託管客戶端(C#或VB.NET)。下面的程式碼片段展示瞭如何應用客戶端物件模型(JS、sp.js)執行非同步查詢操作:

ExecuteOrDelayUntilScriptLoaded(GetTitle, "sp.js");
function GetTitle() {
    //Retrieve current client context
    context = SP.ClientContext.get_current();
    //Load the site
    site = context.get_web(); context.load(site);
    //Execute asynchronously with callbacks for successful or failed calls
    context.executeQueryAsync(onQuerySucceeded, onQueryFailed);
}

接下來,到了SharePoint 2013。它極大地豐富了開發的物件模型,如下圖。總體概括來說,有服務端物件模型(Server API)、客戶端物件模型(CSOM)和Web服務(REST\OData Endpoint)。

最耀眼的就是跨平臺的REST服務,但有一點,Server API無論何時都有其不可替代性,因為一些伺服器端的定製、TimerJob等的開發工作只能用完全信任的場解決方案來部署。我們可以根據實際情況來選擇合適的API進行開發工作,更多資訊。微軟方面推薦開發者遵循新的應用程式模型作為優先選擇方式來構建SharePoint 2013自定義的應用程式。"don't make any new sandboxed solutions"和"build new farm solutions only you absolutely have to"。

在SharePoint 2013中,_vti_bin/client.svc作為別名_api存在,即REST,更容易辨認,呼叫起來更方便,架構如下圖所示。


使用REST查詢資訊非常簡單,如查詢ID為1的聯絡人:

http://contoso.com/_api/web/lists/getByTitle('Contacts')/getItemByStringId('1')

又如,我們想刪除某個聯絡人,用如下的程式碼片段:

removeItem = function (id) {
    $.ajax(
        {
            url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/lists/getByTitle('Contacts')/getItemByStringId('" + id + "')",
            type: "DELETE",
            headers:
            {
                "accept": "application/json",
                "X-RequestDigest": $("#__REQUESTDIGEST").val(),
                "IF-MATCH": "*"
            },
            success: function (data) {
                readAll();
            },
            error: function (err) {
                alert(JSON.stringify(err));
            }
        }
        );
}

另一方面,之前在SharePoint 2010中只能用服務端物件模型實現的如使用者配置檔案、工作流、搜尋等方面的部分可以用客戶端物件模型CSOM實現了。

下一篇我們將介紹SharePoint全新的模式——SharePoint APP。

相關文章