在 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. python性能检测工具整理

    python 运行后出现core dump产生core.**文件,可通过gdb来调试 Using GDB with a core dump having found build/python/core ...

  2. Xamarin.Android下获取与解析JSON

    一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选择添加引用,引用System.Json.dll 二.同步请求 既然是跨平台,我们自然不能按照java下的 ...

  3. Vue.js——60分钟快速入门

    Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们 ...

  4. 像黑客一样使用 Linux 命令行

    前言 之前在博客园看到一篇介绍 IntelliJ IDEA 配置的文章,它里面用的是 gif 动态图片进行展示,我觉得很不错.所以在我今天以及以后的博文中,我也会尽量使用 gif 动图进行展示.制作 ...

  5. OAuth认证原理及HTTP下的密码安全传输

    很多人都会问这样一个问题,我们在登录的时候,密码会不会泄露?随便进一个网站,登录时抓包分析,可以看到自己的密码都是明文传输的,在如此复杂的web环境下,我们没有百分的把握保证信息在传输过程中不被截获, ...

  6. TODO:一不顺眼就换字体Go之应用篇

    TODO:一不顺眼就换字体Go之应用篇 字体,文字的外在形式特征.就是文字的风格,是文字的外衣.好的字体让人看得舒服,让人更有看.写的欲望哦.2016-11-16 GO官方博客发布了同名Go字体,并没 ...

  7. ASP.NET MVC系列:Model

    1. Model任务 Model负责通过数据库.AD(Active Directory).Web Service及其他方式获取数据,以及将用户输入的数据保存到数据库.AD.Web Service等中. ...

  8. 《JavaScript 源码分析》之 maxlength.js

    /* @author: Terry @params: feedback - the selector for the element that gives the user feedback. Not ...

  9. Log4net入门(控制台篇)

    Log4net是Apache公司的log4j™的.NET版本,用于帮助.NET开发人员将日志信息输出到各种不同的输出源(Appender),常见的输出源包括控制台.日志文件和数据库等.本篇主要讨论如何 ...

  10. Vertica 业务用户指定资源池加载数据

    之前在"Vertica 安装,建库,新建测试用户并授予权限,建表,入库"这篇文章也简单介绍过入库部分的内容. 但之前测试用例若用于生产环境有明显的局限性: 1.是用dbadmin管 ...