SharePoint 2013 App 開發 (1) - 什么是SharePoint App?


在SharePoint 2013中,引入了一種新的應用程序類型:SharePoint App。在這里,App這個詞並不是泛指應用程序,在SharePoint 2013中,它用來描述一種特定的SharePoint應用。那么,到底什么是SharePoint App呢?

歷史,以及手機App的興起

如果你曾經向SharePoint用戶講解過如何使用SharePoint,那么一定知道,要清晰明了的講清楚SharePoint里面的諸多概念,是一件多么麻煩的事情。一個SharePoint網站里面有列表、有文檔庫、有圖片庫…列表還分成聯系人、日歷、鏈接、任務…這些還不包括我們開發人員所定制出來的其他不同的功能組件。SharePoint網站中包含了太多的不同類型的“數據容器”和不同類型的功能組件,而用戶要搞清楚這些概念和它們的區別,是一件很麻煩的事情。為什么使用SharePoint不能就像我們使用智能手機一樣簡單呢?

在使用智能手機時,如果用戶需要某個功能,他只需要打開App商店,然后搜索到想要的App,安裝它,就可以在自己的手機上使用這個App。每一個App都可以非常容易的被安裝,每一個App的運行(理論上)都不會影響其他的App。如果用戶不再需要某個App了,只需要直接從手機上刪除它,而不用擔心刪除這個App會讓自己的手機出問題,或是導致其他App工作不正常。

移動設備軟件工程師在創建App時,總是將App做成一個具備獨立、完整功能,與其他App不具備(或幾乎不具備)依賴性的獨立的應用程序。開發完成后,只需要將App發布到對應平台的App商店(Apple App Store、Google Play、Windows Phone Store),就可以非常方便的將App分發到萬千用戶的設備上。在對App進行了更新之后,也只需要將更新后的App重新發布,用戶手里的設備就能自動提示用戶,將App更新到最新版本。

總結一下手機(和其他智能設備)上的App,它們幾個核心特點包括:

  • 高獨立性:獨立提供一個相對完整的功能
  • 高隔離性:App之間的數據相互隔離
  • 高穩定性:App不會影響設備(運行平台)本身的穩定性
  • 分發便利:App可以非常容易的通過App商店進行分發,用戶也可以非常容易的從App商店搜索並安裝App

(讓我們暫且把手機設備上的這種App運行與分發機制,稱之為App Model。)新型的App Model相對於傳統的應用程序模型,有着非常顯著的優勢。無論是從開發的角度,還是從最終用戶使用的角度,App Model都是一種更受歡迎的模式。它很大程度上避免了自定義應用程序復雜的部署和維護操作,簡化了開發過程、部署過程和使用過程。

手機App Model仍在方興未艾的發展着,並且在向更復雜的設備蔓延。下圖是筆者從自己安裝了Windows 8操作系統的筆記本上,打開Windows Store所看到的界面。通過Windows Store,用戶可以直接安裝Windows Store App到Windows 8操作系統中。

image

SharePoint網站中的所有功能內容都是App

說了半天手機上的App Model,那么它到底和SharePoint 2013 App有什么關系呢?簡單來說,SharePoint 2013接受並應用了類似手機設備上的那一套App Model模型,建立了一種新型的SharePoint App Model。對照一下手機App的幾個核心特點,SharePoint App Model同樣提供了類似的特性:

  • 高獨立性:每一個SharePoint App都提供了一個相對完整的功能。
  • 高隔離性:安裝一個SharePoint App時,它都自動被部署到一個新建的專門的SharePoint網站中(這個網站被稱為AppWeb)。
  • 高穩定性:SharePoint App不允許在SharePoint服務器上運行服務器端代碼(Server Code),所以它對SharePoint系統的影響被減少到最小。
  • 分發便利:SharePoint App可以被發布到Office Store上,SharePoint網站用戶可以直接從Office Store上,購買一個SharePoint App后(如果它不是免費的),將一個SharePoint App安裝到自己的SharePoint網站中。

在之前版本的SharePoint中,用戶在一個SharePoint網站中看到的,是一些諸如列表、文檔庫之類的類型。從SharePoint 2013開始,對於最終用戶而言,他在一個網站中看到的任何功能組件和內容,都是一個一個的App。例如,通過“網站內容”鏈接查看一個網站中的所有內容,對於用戶而言,看到的全部都是App。

image

點擊“添加應用程序”按鈕,用戶就可以向網站中添加新的App。可以添加的App,包括SharePoint 2013內置的App,諸如文檔庫、任務、圖片庫等等(沒錯,現在文檔庫、任務也都是一個一個的能實現某個功能的App了)。

image

在頁面的左側,有一個“SharePoint應用商店”鏈接,點擊這個鏈接就可以直接頁面上展現出Office Store中的SharePoint App。網站管理員可以通過這個界面,直接購買並安裝一個SharePoint App到自己的網站中。注意看瀏覽器的地址欄,這時用戶並沒有離開自己的SharePoint網站,SharePoint網站會自動訪問到位於互聯網上的Office Store,並將SharePoint App的信息顯示出來。

image

可以看到,一個SharePoint App在使用上,非常類似於一個手機上的App。不需要專門IT人員,網站管理員就可以自己從Office Store上瀏覽、搜索和安裝一個SharePoint App。通過引入全新的SharePoint App Model,SharePoint 2013建立了一個新的應用平台,同時通過Office Store,也建立了一個新的生態圈。

SharePoint App和以前的SharePoint Solution有什么關系?

如果你曾經在SharePoint 2007或2010上開發過SharePoint Solution,那么看到這里,你冒出來的一個念頭很可能是:嗯,SharePoint App看上去很好的樣子,但是它和我之前創建的SharePoint Solution是什么關系?它們是同一個東西,只是改了一下名字嗎?我可以將一個SharePoint Solution Package(.wsp)直接當成一個SharePoint App,發布到Office Store上去嗎?

這個問題的簡單答案就是:一個SharePoint App不同於一個SharePoint Solution,你也不能把一個wsp解決方案包直接當成一個SharePoint App發布到Office Store上去。

為了更詳細的解釋這個問題,讓我們回過頭來看看,開發一個SharePoint Solution是怎樣的一個流程:

  • 在Visual Studio中創建一個新的SharePoint Solution項目
  • 向SharePoint Solution中添加各種不同的SharePoint Item,並將它們組織成一個或多個Feature
  • 整個SharePoint Solution被Visual Studio打包成一個Solution Package(wsp文件)
  • IT管理員將wsp文件復制到SharePoint服務器上,用PowerShell安裝它
  • IT管理員用PowerShell或管理中心將Solution部署到SharePoint Web應用程序中
  • 網站管理員通過網站集或網站功能管理,根據自己的需要,激活或停用某個通過Solution Package安裝的Feature
  • 用戶使用通過Solution Package(以及其所包含的Feature)所安裝的各種組件,例如Web部件、頁面、列表…
  • 如果Solution Package有更新,IT管理員使用PowerShell在服務器上對Package進行更新

在整個Solution Package的部署和管理過程中,都離不開IT管理人員的參與。IT管理人員通過PowerShell之類的專業工具,在服務器上實現對Package的各種管理。

接下來讓我們看看一個Solution Package是如何在SharePoint服務器上運行的:

  • Solution Package中包含的大部分自定義組件,都以.NET代碼的方式來實現,它們在服務器上的w3wp.exe進程中運行
  • 有些代碼可能運行在其他進程中,比如計時器作業會運行在owstimer.exe進程中
  • 沙盒解決方案中的代碼會運行在專門的沙盒進程中

Solution Package中的大部分組件,是以一種“侵入性”很強的方式,在SharePoint服務器上運行的。從本質上來說,SharePoint服務器被作為一個ASP.NET Web運行平台,而Package中的代碼,大部分都是以標准ASP.NET方式,以Page、Web Control的形式,運行在服務器的應用程序池中。無論是Application Page還是Site Page,都無非是一個標准的ASP.NET Page,而Web Part更是一種標准的ASP.NET Web Control。這種運行模式,對SharePoint服務器本身是一種相當大的沖擊,更是SharePoint系統穩定運行的大敵。隨着SharePoint系統在企業中的地位越來越高,企業也原來越不希望SharePoint系統出現任何的問題,而原本的SharePoint Solution模式,是很難達成這個目標的。無論是Solution的開發,還是它的部署和維護,都會不同程度的對SharePoint系統造成影響。少數對SharePoint系統穩定性和安全性非常高的企業,干脆禁止了在SharePoint服務器上運行任何自定義代碼,這在某種程度上,體現出了SharePoint Solution模式的困境。

正是為了迎接SharePoint Solution所面臨的這些問題,SharePoint App Model應運而生。通過借鑒和吸收手機App Model的特點,SharePoint App Model要解決的,正是上面所說的這些問題。SharePoint App帶來的好處包括:

  • 一個SharePoint App不會對SharePoint服務器產生嚴重的沖擊(因為SharePoint App不允許在SharePoint服務器上運行服務器端代碼)
  • SharePoint App之間有高隔離性(每個App都有自己獨立的AppWeb)
  • SharePoint App的部署不需要IT管理員的參與了(通過Office Store就可以輕松搞定)

所以,SharePoint App並不是將SharePoint Solution僅僅換了一個名字而已。它從架構,到開發方式,到部署分發方式,到運行方式,到所用到的核心開發技術,都和SharePoint Solution有顯著的區別。一個SharePoint Solution是不太可能經過簡單的修改(比如在xml清單文件里面加上幾個屬性),就直接被轉換成一個SharePoint App的。SharePoint Solution Package更不能直接被發布到Office Store上。

SharePoint App Model對於開發人員意味着?

在前面的段落中看到“SharePoint App不允許在SharePoint服務器上運行服務器端代碼”這句話的時候,會不會感到眼前一黑?別着急,而對於開發人員,SharePoint App實際打開了另外一面更大的門。SharePoint App對於開發人員意味着:

(1)開發人員可以使用任何自己想要的服務器端技術來開發App

沒錯,從此,開發人員不再被限制在ASP.NET上。如果願意的話,開發人員可以使用ASP.NET MVC、PHP、Java、Node.js…各種不同的服務器端技術,來創建App。

想想我們手機上的App。大部分手機上的App,實際上只是整個應用中最前端的、面對最終用戶的部分。在一個手機App的后面,可能隱藏着一個龐大的服務器場系統,為千萬個被安裝在手機終端上的App提供后端服務。當我們啟動手機上的一個App時,這個App會連接到互聯網上某個服務器系統上,獲取數據、更新數據。無論那個后端的服務器端系統是使用何種技術構建(.NET或Java或其他平台技術),對於手機設備而言,這個App“只是”一個標准的Windows Phone App或Android App或iOS App而已,手機設備不關心App的后端服務器端系統。App開發人員擁有100%的自由。實際上,對於一個熱門的App,開發團隊必然會基於一個統一的后端服務器系統,為不同的設備(Windows Phone、Android、iPhone),用不同的App開發技術,開發不同類型的App。

SharePoint App同樣如此。對於大多數SharePoint App而言,SharePoint網站並不關心這個App的后端服務器系統使用了何種技術平台,是使用的ASP.NET MVC還是ROR。對於SharePoint網站,這個App“只是”一個標准的SharePoint App而已。

(2)SharePoint App可以被host到不同地方

SharePoint App可以使用任何后端服務器端技術,它也可以被host到不同的地方。如果一個SharePoint App中的所有功能都通過SharePoint本身來實現和完成,那么可能它可以直接被host在SharePoint上(這種App被稱為SharePoint-hosted App)。

對於一個更復雜的SharePoint App,它很可能要通過專門的后端服務器應用來實現。除了SharePoint-hosted App之外,將App host到其他環境中的方式,被稱為Cloud-hosted。Cloud-hosted又分為兩種情況:

  • Provider-hosted:找一個專門的環境來host,比如某台專門Windows Server上的IIS,或Linux Server上的Apache,或Windows Azure/Amazon的雲服務。這種由App開發商來提供的某個環境,都被統一稱為Provider-hosted。
  • Auto-hosted:App自動使用Windows Azure來作為host,當SharePoint安裝App時,能自動將App中包含的Web網站給發布到Windows Azure上。這種host模式只適用於Office 365上的SharePoint網站,並且你同樣需要購買Windows Azure訂閱。

當然,一個SharePoint App也完全可以某些部分host到SharePoint里面(SharePoint-hosted),另外部分則host到另外某個環境中(Cloud-hosted),這種混搭的方式,被稱為Hybrid-hosted。

(3)SharePoint App開發人員不再需要對SharePoint技術體系有太深的了解

還記得在為SharePoint 2007/2010開發Solution的歲月里,無數的開發人員為了深入了解SharePoint平台本身,耗費了無數的青春和歲月。在開發SharePoint Solution時,對SharePoint系統的深入了解是不可或缺的。一個熟練的ASP.NET開發工程師要成為SharePoint工程師,還需要經過大量的學習和實踐,才能掌握SharePoint中無數的“秘密”。但在開發SharePoint App時,開發人員所需要對SharePoint的了解程度,被大大降低了。這對於開發團隊,無疑是一件美好的事情。

(4)JavaScript將是SharePoint App的骨干支撐技術

JavaScript早已經成為了現如今Web開發中最重要、最核心的技術之一,隨着我們從SharePoint服務器端代碼中解脫出來,JavaScript的作用被凸顯了出來。在SharePoint App中與SharePoint系統的交互,幾乎都是通過JavaScript來完成。微軟極大地豐富了SharePoint的JavaScript Client Object Model(JSOM),讓我們可以通過JavaScript做更多的事情。另外,SharePoint 2013的REST接口也可以讓我們從JavaScript中更方便的獲取SharePoint網站中的數據。

那么,到底要如何開發一個SharePoint App呢?用一句話回答:仍然是使用Visual Studio。下圖是Visual Studio 2012中的SharePoint App項目模版。

image

本系列文章的目標,就是想你講述SharePoint App的開發,所以在這里我們就先暫時打住了,具體的開發步驟、開發方法,在后面的系列文章中將相繼講述。

SharePoint App是用來取代SharePoint Solution的嗎?

我知道你在想什么。上面說了這么多SharePoint App的好處,那是不是意味着,SharePoint Solution開發模式就要死了,以后所有人都將使用新的SharePoint App Model了?

如果在開發之前的評估階段,你發現你要實現的需求,既可以通過SharePoint Solution實現,也可以通過SharePoint App實現,那么我會建議你使用SharePoint App Model來開發。但是(!),在很多時候,事情都不會這么簡單。SharePoint App Model由於其自身的特點,它有很多事情是做不了的,或者說是不適合做的。比如,SharePoint App中的Feature的范圍,總是Web(網站)級別,而不能是Site、Web Application和Farm級別。從筆者個人的觀點,如果你是需要基於SharePoint系統,對它進行比較深層次的擴展,那么很可能SharePoint App就不是你的菜了。(這就好像如果你要對Android原生系統做一個深層次的擴展和定制,那么一個標准的Android App是不太可能滿足你的要求的,相反,你可能需要做一個定制ROM,就像MIUI ROM做的那樣。)

所以,SharePoint App並不是一項用來完全取代SharePoint Solution的技術體系,在某些方面,它無法取代SharePoint Solution的作用。開發團隊需要根據自己的需求,慎重的做出選擇。

企業能不能自己建立一個內部的“SharePoint App Store”呢?

完全可以。如果SharePoint App是為特定的企業系統所創建的,那么是沒有必要將App發布到Office Store上的。另外,企業內部網絡可能根本不允許連接到互聯網,那就根本沒法通過Office Store向SharePoint網站安裝App。

在企業內部部署的SharePoint系統中,可以通過創建App Catalog(應用程序目錄),來進行App的分發。

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM