在 SharePoint 2013 上面实现一个 Timecard 应用的想法来自一个真实的需求,而实现的方案在我脑海里面盘旋已经很久了,终于这几天准备安排点儿时间将它实现出来。

“ We started small, then grow up.”—Dont’know who.

需求

Timecard(打卡)应用的需求描述如下。

角色

  1. 管理员(Admin),控制可以填写的时间窗口(Time Window)。
  2. 团队(Team),是被要求打卡的组织内部可管理的群体。比如,部门是一个团队,项目组也是一个团队,如何设置团队,取决于管理需要。
  3. 团队成员(Team Member),填写 Timecard 的人。只能编辑自己的 Timecard。
  4. 团队经理(Team Manager),负责审核团队成员的 Timecard。

业务流程

  1. 团队经理发申请给管理员,让管理员给建立团队的专用 Timecard List。
  2. 团队经理在自己的 Timecard List 中加入团队成员,给他们适当的权限。(这说是业务流程,其实已经开始做技术方案设计了)
  3. 管理员定期放出可填的 Time Window,比如,“2014 W26”就是 2014 年第 26 周。并且可以指定这个窗口的起止日期,这是因为,跨月或者跨年的 Timecard 有时要将一个完整的日历周打散分配以便各种财务结算。邮件通知发到每个人。
  4. 团队成员到自己所属团队的 Timecard List 中填写 Timecard。如果一个人属于多个团队,那么他要在多个地方填写多次。如果他足够聪明,他会把这些不同团队 Timecard List 的链接组织起来、收藏好。
  5. 团队经理上来,刷已经提交但是还没有审核过的 Timecard,然后审核通过或者拒绝。
  6. 月底管理员收 Timecard,导出来月度数据供 … 之用 :)

数据与表单

主要有 Time Window、Timecard、月度导出报告,这样几种。

这个分析的部分是不能掠过的。我知道架构师、程序员不是美工(UI 设计师),但是,无视表单设计的人最后都会遇到麻烦的。哪怕只是一张纸的设计,也要设计。

需求分析

分析下来需要注意几个重点:

  1. 管理员有查看所有 Timecard 的权限,因为要出报告的。
  2. 每个团队的权限必须让团队经理自己管理,谁也帮不了他/她。
  3. Time Window 的可见性由管理员控制,也就意味着 Timecard 的填写有开始和截止日期。

满足以上的要求以后,整个业务的实现也就差不太远了。而且数据一旦到了 Timecard List 里面,再怎么捞出来、怎么分析就相对好办,因为导出 Timecard 和查看分析的功能权限相对集中,只要埋头实现功能即可。

应用设计

这是整个环节中最有趣儿的部分,我们要一步步的慢慢来。

一贯的,这个 Timecard 应用的基本思想仍然是基于 SharePoint 自身的功能,使其成为 SharePoint 应用而不是其它的。如果 SharePoint 这个平台不能使其更好,那么,就不值得在 SharePoint 上面实现它。

一开始尝试过 SharePoint 2013 的 App 来实现,但后来明白过来了,这根本不对路。App 是一个作者面对多个用户独立安装部署的场景,而让公司里面员工都去安装 Timecard App 太搞了;而如果将 App 安装在一个固定位置,让所有人去访问,那又何必折腾用 App 呐?况且,放着 SharePoint 自己的 CRUD 功能不用实在是和自己过去不。于是,调转船头,设计了现在的这个混合方案。

用新 Site,还是新 Web?

我对 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)的形式。

内容类型与 List 模板

考虑到管理员要不厌其烦的为每个小组建立他们自己的 Timecard List,还是想点儿办法减轻他/她的工作为好。

专门按照 Timecard 数据结构的需要建立内容类型,然后,附加到每个 List 上面去,无疑会轻松很多。

但是,我们还可以再进一步,在第一个 List 的基础上,再保存它为一个 List 模板,这样,以后再建立其它的 Timecard List 的时候,连绑定内容类型的操作都免了,直接从 List 模板里面选就可以了。

新 Time Window 的通知

可以用 SharePoint 的 Alert 功能。

Time Window 与 Timecard List(s) 的关联

这个相对简单,直接用 Lookup Column 就可以了。

导出的报告

由于每个 Team 的 Timecard List 是独立的,所以,无法直接将所有的 Timecard 导出来或者做成报告。

这里有 2 个选择:1)使用 CQWP,将同属 Timecard 内容类型的数据聚合到一个地方,或者 2)写代码(CSOM、Sandbox Solution 都可以考虑)。

应用实现

首先介绍一下虚拟的团队。

管理员  
Star Scream
   
第一队
Long Haul
一队队长

Bonecrusher
一队队员

Hook
一队队员
第二队
Scrapper
二队队长

Scavenger
二队队员

Mixmaster
二队队员

Timecard 网站

没什么特别的,就是一个普通的子网站。推荐用 Blank Site 模板。

Time Window 列表

长成下面这个样子:

这个列表的关键在于它的权限设置。

  1. 这是一个默认所有人都可以访问的列表:
  2. 过期的时间窗口,则断开权限继承,所有人将不再可以访问,除了管理员:

由于上面这样的权限设置,大家在填写 Timecard 的时候,就只能看见管理员发布的有效的 Time Window 了。这正是我们需要的效果。

Timecard 列表

Timecard 列表和 Time Window 做了关联,从而实现选择由管理员发布的时间窗口的功能。

Timecard 列表需要为每一个团队都建立一个的。

上面这条记录,说明填写的人周六加了 4 个小时的班,并且这条记录还在 Pending 状态。

实际运作的时候,管理员创建好团队的 Timecard 列表,然后将列表的 Full Control 给团队经理,然后团队经理进去安排每个成员的权限。

然后,团队经理需要为每个成员单独建一个文件夹,只允许该成员填写这个文件夹下面的 Timecard。

比如,Bonecrusher 的这个文件夹,就要修改其权限,只让 Bonecrusher 本人可以提交 Timecard、经理 Long Haul 可以审批。

对其他队员也同样设置。

当然,Timecard 列表的 Content Approval 也要开启,这样让团队经理可以审核一下。

好了,现在的 Timecard 已经可以用起来了!

试试看这里:

啊哈,好像可以了耶!这么简单,那让我们炒掉那个 SharePoint 专家算了,这活儿看上去很容易啊!

嘿嘿,真滴吗?:)

(你们用 IE 访问的时候会发现我的博客界面错乱吗?如果有,请发消息或者评论让我知道,谢谢!)

实现一个基于 SharePoint 2013 的 Timecard 应用(上)的更多相关文章

  1. 实现一个基于 SharePoint 2013 的 Timecard 应用(中)

    门户视图 随着 Timecard 列表的增多,如何查找和管理这许多的 Timecard 也就成了问题.尤其对于团队经理而言,他除了自己填写的 Timecard,还要审核团队成员的 Timecard 任 ...

  2. 实现一个基于 SharePoint 2013 的 Timecard 应用(下)

    现在,基于 Timecard 数据来一点儿数据分析. 应用需求 对于 Timecard,分析下面 2 个方面: 对于单个项目,分析其中每个成员的工时占比,以此了解工作量分配,为组间人员调度提供参考. ...

  3. 转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  4. 专题十一:实现一个基于FTP协议的程序——文件上传下载器

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  5. 基于SharePoint 2013的论坛解决方案[开源]

    前言 这是自己在空闲时间里,为了提高对SharePoint的认识和熟悉技术,做的一个Demo.可能不尽完善,但是基本功能都已经有了,欢迎大家评论和提意见.自己也会在把源代码放到Github上进行开源, ...

  6. 实现一个基于FTP协议的程序——文件上传下载器(十三)

    此为一个系列,后续会把内容补上...

  7. SharePoint 2013 开发——工作流架构

    博客地址:http://blog.csdn.net/FoxDave SharePoint 2013的工作流较之前有了不同,第一次真正地作为独立的服务的概念推出了.这意味着SharePoint工作流不再 ...

  8. SharePoint 2013 Nintex Workflow 工作流帮助(一)

    博客地址 http://blog.csdn.net/foxdave 接下来一段时间的内容中,我们基于SharePoint 2013来了解一下Nintex Workflow的具体内容. 之前的几篇由于之 ...

  9. 优化移动设备上SharePoint 2013网站

    优化移动设备上SharePoint 2013网站 本文由SPFarmer翻译自Waldek Mastykarz的文章 移动市场在持续的增长.在不远的将来,使用移动设备浏览站点将会超过电脑.为了保证用户 ...

随机推荐

  1. 一键部署mono 免费空间支持ASP.NET MVC 再也不担心伙食费换空间了

    一直以来 部署mono 都是很头疼的事情 因为是我在是不熟悉非win环境,今天偶然发现这个项目,挺好的,分享下 https://github.com/wshearn/openshift-communi ...

  2. 异步与并行~List<T>是线程安全的吗?

    返回目录 题目有点意思,大家都知道Dictionary<K,V>不是线程安全的类型,而List<T>是线程安全的吗?在今天之前大叔没有去测试过,而就在今天也是一个VIP问我,说 ...

  3. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  4. Java笔记——Java8特性之Lambda、方法引用和Streams

    Java8已经推出了好一段时间了,而掌握Java8的新特性也是必要的,如果要进行Spring开发,那么可以发现Spring的官网已经全部使用Java8来编写示例代码了,所以,不学就看不懂. 这里涉及三 ...

  5. CSS实现水平|垂直居中漫谈

    利用CSS进行元素的水平居中,比较简单,手到擒来:行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可.而撸起垂直居中, ...

  6. 计算机人物系列-Mauchly,Eckert,Goldstine

    关键词:莫尔学院(Moore School),阿伯丁试验场(Aberdeen Proving Ground), 雷明顿兰德公司(Remington Rand Corporation), IBM院士(I ...

  7. PHP_02之使用补充

    JSON字符串在项目中的应用: ①PHP服务器给客户端JS发送JSON响应数据:  PHP:   $arr=[...];   echo json_encode($arr);  JS:   var ob ...

  8. 工作笔记--哪些bug应由研发发现?

      标准: 研发应发现: 主功能流程无法正常使用,以及联调时主功能流程是否正常 功能缺失 打包时数据库表非最新.程序文件非最新: 文件导出时有明显错误(如无法导出.导出后格式明显不对.批量导入出错) ...

  9. 用Hibernate和Struts2+jsp实现分页查询、修改删除

    1.首先用get的方法传递一个页数过去 2.通过Struts2跳转到Action 3.通过request接受主页面index传过的页数,此时页数是1, 然后调用service层的方法获取DAO层分页查 ...

  10. MongoDB高级查询详细

    前言 前几篇,老玩家绕道即可,新手晚上闲着也是蛋疼,不如把命令敲一边,这样你就会对MongoDB有一定的掌握啦.如果没有安装MongoDB去看我的上一篇博客  MongoDB下载安装与简单增删改查 前 ...