设为首页 收藏本站
查看: 1394|回复: 0

[经验分享] SharePoint 状态机工作流解决方案(三);内置缺省流程逻辑的 SharePoint 状态机

[复制链接]
发表于 2015-9-24 10:39:30 | 显示全部楼层 |阅读模式
  在前文中我们提到,SharePoint 的任务封装机制决定了它的状态机应用存在两个问题,一个是多人审批时,需要为每个审批人都添加一个EventDrivenActivity;另一个是审批人数在设计期就必须确定。
  这两个问题有没有办法解决呢?幸亏 WF 提供了流程动态修改的功能,我们可以从 StateActivity 继承一个自己的 State 活动,在状态执行前根据审批人的数量,在状态中动态添加 CreateTask、EventDrivenActivity 和 OnTaskChanged 活动。

自定义 State 活动的 Execute 方法的代码逻辑。

DSC0000.jpg

  
采用自定义 State 活动实现的状态机工作流的设计期流程图

  注意 审批_Initialization 是为了设计期展现流程逻辑而增加的,运行时会被删除,重新生成运行时的 审批_Initialization。
DSC0001.jpg
  为了方便业务的开发我们在自定义 State 活动中增加了很多属性:
  AssignedToType:从哪获取审批人,可以是直接的用户,列表字段或 SharePoint 用户组。
AssignedToValue:与 AssignedToType 对应的审批人的值,可以是分号分隔的多个用户名,可以是保存用户的列表字段名,也可以是 SharePoint 用户组名。
ActionStates:允许用户执行的操作,和用户执行该操作时跳转到的状态;是一个 ActionState 的集合。

   DSC0002.jpg
Action:
用户的操作
RequireAll:需要所有的用户都执行此操作,用于会签。
TargetStateName:当用户执行此操作时,跳转到的状态。
  ActionField:和任务进行交互的字段,生成任务时,将用户允许的操作传入到此字段;任务改变时,从此字段获取用户进行的操作。
SequenceApprove:顺序审批,当有多个审批人时,可以逐个进行审批。
  
自定义 State 活动运行时动态生成的状态机工作流

DSC0003.jpg
审批_Initialization 中的流程
DSC0004.jpg
审批_EventDriven_1 中的流程

DSC0005.jpg

  
解决方案的价值

这个解决方案,能够满足 SharePoint 工作流应用大部分的需求,因为它基本能够实现我们用 WF 实施过的近百个复杂的业务流程;现在也已经在一个项目中应用了近 10 个流程,较好地解决了用户复杂的业务需求;工作流的开发非常简单,只需要在 Visual Studio 中绘制流程图即可,客户的 IT 部人员经过我们培训后,就可以自行开发业务流程。
  WF 提供了流程设计器的 Hosting 功能,我们在此基础上,开发过一个 WF 流程设计器,如果将其改进支持 SharePoint,那么流程设计就可以脱离 Visual Studio,从而实现一个相对独立的解决方案。
  这个解决方案对任何一个实施商的价值都是有限的,每个实施商一年都只能做几个项目。
  它对微软的价值最高,如果能够实现 SharePoint 工作流的完善的解决方案,将较大地推进 SharePoint 的应用。

  
WF 和 SharePoint 工作流的取舍

  WF 是个工作流引擎,技术难度很高,直接应用在项目中是非常困难的;至少要先封装为一个工作流平台,虽然这个的难度更高,但在平台上的应用开发将会很简单。
  很多人认为 WF 困难在状态机上,实际上 WF 的难点是在它的事件驱动机制,如果你能做一个事件驱动的顺序流,那么做一个事件驱动的状态机的难度是一样的。
  SharePoint 的工作流封装了 WF 的事件驱动机制,在 SharePoint 工作流上进行开发,你只需要了解 WF 和 SharePoint 的 Activity 怎么用。
所以我们建议在 SharePoint 工作流上进行应用的开发。
  
在本文中我们给出了 内置缺省逻辑的 SharePoint 状态机解决方案,在这个方案中,流程逻辑可配置的,但不能自定义;可以有三个地方写业务逻辑,进入状态前、CreateTask 的 Methodnvoking 事件和 OnTaskChanged 的 Invoked 事件;在下一篇文章中,我们将提出 自定义业务逻辑的 SharePoint 状态机工作流解决方案,以满足更复杂的业务流程需求。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118105-1-1.html 上篇帖子: 利用开源SharePoint Permission Extension插件对SharePoint 的列表进行权限控制! 下篇帖子: SharePoint 2013备份方法整理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表