在 SharePoint 2013 上面實現一個 Timecard 應用的想法來自一個真實的需求,而實現的方案在我腦海裏面盤旋已經好久了,終於這幾天準備安排點兒時間將它實現出來。php
「 We started small, then grow up.」—Dont’know who.程序員
Timecard(打卡)應用的需求描述以下。數據結構
主要有 Time Window、Timecard、月度導出報告,這樣幾種。架構
這個分析的部分是不能掠過的。我知道架構師、程序員不是美工(UI 設計師),可是,無視表單設計的人最後都會遇到麻煩的。哪怕只是一張紙的設計,也要設計。app
分析下來須要注意幾個重點:網站
知足以上的要求之後,整個業務的實現也就差不太遠了。並且數據一旦到了 Timecard List 裏面,再怎麼撈出來、怎麼分析就相對好辦,由於導出 Timecard 和查看分析的功能權限相對集中,只要埋頭實現功能便可。spa
這是整個環節中最有趣兒的部分,咱們要一步步的慢慢來。設計
一向的,這個 Timecard 應用的基本思想仍然是基於 SharePoint 自身的功能,使其成爲 SharePoint 應用而不是其它的。若是 SharePoint 這個平臺不能使其更好,那麼,就不值得在 SharePoint 上面實現它。3d
一開始嘗試過 SharePoint 2013 的 App 來實現,但後來明白過來了,這根本不對路。App 是一個做者面對多個用戶獨立安裝部署的場景,而讓公司裏面員工都去安裝 Timecard App 太搞了;而若是將 App 安裝在一個固定位置,讓全部人去訪問,那又何須折騰用 App 吶?何況,放着 SharePoint 本身的 CRUD 功能不用實在是和本身過去不。因而,調轉船頭,設計瞭如今的這個混合方案。blog
我對 Site、Web、Web Site 的理解,就是從瞭解 SharePoint 開始被顛覆的。恨死那幫人了,起名字太隨意了。
Web 原本就是不少節點鏈接成的「蜘蛛網」,而 Site 則是這個網中的節點。可是,SharePoint 「幫」咱們給倒過來了。
SharePoint 的 Site 是指的一羣網站(Web)的集合,可是,Site 的全稱卻不叫作「Web Collection」,而叫作「Site Collection」;但它 Collect 的卻並非 Site,而是 Web。用郭德綱的話說:「你想去吧!」
---------- 下面開始說正事 ----------
Timecard 做爲一個單獨的應用,固然是須要有本身獨立的網站的。這時,咱們有 2 個選擇:1)創建一個新的網站集(Site Collection)或者 2)找一個現有的網站集創建一個新的子站點(Web)。兩種選擇各有利弊,具體分析起來考慮的因素就不少了。在咱們如今這個 Timecard 應用裏面,我決定採用子網站(Web)的形式。
考慮到管理員要不厭其煩的爲每一個小組創建他們本身的 Timecard List,仍是想點兒辦法減輕他/她的工做爲好。
專門按照 Timecard 數據結構的須要創建內容類型,而後,附加到每一個 List 上面去,無疑會輕鬆不少。
可是,咱們還能夠再進一步,在第一個 List 的基礎上,再保存它爲一個 List 模板,這樣,之後再創建其它的 Timecard List 的時候,連綁定內容類型的操做都免了,直接從 List 模板裏面選就能夠了。
能夠用 SharePoint 的 Alert 功能。
這個相對簡單,直接用 Lookup Column 就能夠了。
因爲每一個 Team 的 Timecard List 是獨立的,因此,沒法直接將全部的 Timecard 導出來或者作成報告。
這裏有 2 個選擇:1)使用 CQWP,將同屬 Timecard 內容類型的數據聚合到一個地方,或者 2)寫代碼(CSOM、Sandbox Solution 均可以考慮)。
首先介紹一下虛擬的團隊。
管理員 | Star Scream |
||
第一隊 | Long Haul 一隊隊長 |
Bonecrusher 一隊隊員 |
Hook 一隊隊員 |
第二隊 | Scrapper 二隊隊長 |
Scavenger 二隊隊員 |
Mixmaster 二隊隊員 |
沒什麼特別的,就是一個普通的子網站。推薦用 Blank Site 模板。
長成下面這個樣子:
這個列表的關鍵在於它的權限設置。
因爲上面這樣的權限設置,你們在填寫 Timecard 的時候,就只能看見管理員發佈的有效的 Time Window 了。這正是咱們須要的效果。
Timecard 列表和 Time Window 作了關聯,從而實現選擇由管理員發佈的時間窗口的功能。
Timecard 列表須要爲每個團隊都創建一個的。
上面這條記錄,說明填寫的人週六加了 4 個小時的班,而且這條記錄還在 Pending 狀態。
實際運做的時候,管理員建立好團隊的 Timecard 列表,而後將列表的 Full Control 給團隊經理,而後團隊經理進去安排每一個成員的權限。
而後,團隊經理須要爲每一個成員單獨建一個文件夾,只容許該成員填寫這個文件夾下面的 Timecard。
好比,Bonecrusher 的這個文件夾,就要修改其權限,只讓 Bonecrusher 本人能夠提交 Timecard、經理 Long Haul 能夠審批。
對其餘隊員也一樣設置。
固然,Timecard 列表的 Content Approval 也要開啓,這樣讓團隊經理能夠審覈一下。
好了,如今的 Timecard 已經能夠用起來了!
試試看這裏:
啊哈,好像能夠了耶!這麼簡單,那讓咱們炒掉那個 SharePoint 專家算了,這活兒看上去很容易啊!
嘿嘿,真滴嗎?:)
(大家用 IE 訪問的時候會發現個人博客界面錯亂嗎?若是有,請發消息或者評論讓我知道,謝謝!)