zoukankan      html  css  js  c++  java
  • QuickFlow教程(5): RuleDriven活动,角色提供程序自定义,邮件模板

    RuleDriven是QuickFlow中最复杂功能最强大的一个活动,一直没有给大家介绍,本篇文章就来讲解下RuleDriven活动的使用以及相关的角色提供程序自定义和邮件模板配置。

    RuleDriven跟GroupTask一样,都是用来给多个用户分配任务的,它们的区别是:

    1)用RuleDriven之前,必须定义流程级别的角色,然后设置RuleDriven引用某个角色

    2)RuleDriven可以设置多个Action,多个OutingRule(退出规则),只要任意一个OutingRule满足,活动即结束

    3)RuleDriven可以设置任务超时邮件,任务超时时间,任务超时后可以发送某个邮件。

    下面我们来看一个简单的示例:一个一步审批的流程,经理审批,可以选择批准和拒绝。

    Step1)定义流程级别的角色

    在网站中添加一个组,名称为ManagerGroup

    image

    打开QuickflowDesigner,点击根上的RoleDefinition属性,弹出流程角色定义窗口,添加一个类型为SPGroupRoleDefinition,名称为ManagerRole的角色,

    设置对应的GroupName为ManagerGroup,如下图:

    image

    备注:其中的DeptInherits表示部门继承,在部门继承情况下,即使组中有多个用户,任务分配时,只会分配给跟流程启动人部门(AD或UserProfile中的部门)相同的那个用户。

    用这个功能可以实现如下场景的需求:多部门情况下的“部门经理审批”,每个部门经理只审批本部门员工提交的申请。

    QuickFlow支持三种类型的角色定义:

    StaticUserRoleDefinition,静态用户角色,这种角色中的用户是固定的,直接将用户账号写到角色定义中

    SPGroupRoleDefinition, 用户组角色,角色用户对应到SharePoint的用户组

    CustomRoleDefinition,自定义用户角色,可以通过实现一个接口定义角色用户机制,在本文后面会讲述如何扩展角色用户机制

    image

    Step2)添加RuleDriven,关联角色

    拖拽一个RoleDriven活动,画线连接Start活动和ruleDriven活动,设置其RoleReference属性为ManagerRole.

    image

    然后拖拽两个label活动,名称分别为 同意,拒绝

    image

    备注:Lable活动没有任何功能,只是作为流程图上的一个显示元素,是一个虚拟的节点。

    Step3)编辑Action

    双击ruleDriven活动,弹出编辑窗口,切换到Actions标签,添加两个审批动作:同意,拒绝,然后单击 Generate OutRules按钮

    image

    备注:Generate OutRules 会自动按照Action生成对应的OutingRule

    Step4)编辑OutingRule

    切换到OutingRule标签,可以看到已经自动生成了两个OutingRule。分别设置同意,角色规则的Target为同意和拒绝活动

    image

    备注:我们要理解下OutingRule的语义,比如“同意”,默认生成的规则是“至少一个审批结果是同意的即结束活动”,然后转向Target指定的下一个活动。

    如果要表达所有人的审批结果都是“同意”,则可以用规则“所有人的审批结果都是同意才结束活动”,如下图:

    image

    EnaluateMode可以选择All,AtLeast, AtMost,当选择All时Count属性就没有意义了。

    Step5)编辑任务提醒邮件

    切换到NotificationMail标签,默认情况下RuleDriven始终会按照默认邮件模板的内容来发送提醒邮件,默认邮件模板的修改见下面的介绍。

    我们也可以选择不采用默认邮件模板,取消 Use Default Mail Template复选框,就可以在Subject和Body中输入内容了。如果要在邮件内容中嵌入工作流变量,可以用[%变量名%]的形式,如果要嵌入列表项字段,可以用[%list:字段名%]的形式。

    image image

    Step6)编辑超时提醒邮件

    首先切换到Properties标签,通过Duration属性指定任务超时时间

    如果为设置Duration值,则ruleDriven不考虑超时逻辑

    image

    然后切换到Duration Mail标签,即可编辑超时提醒邮件

    image

    备注:任务超时后,所有未处理的任务都会被自动删除,然后发送超时邮件给相应的操作人,这个超时机制是采用WF默认的Delay活动实现的,实际运行时

    时间会有超微的误差。

    Step7)完成编辑,发布流程

    关闭RuleDriven属性编辑窗口,可以看到ruleDriven自动生成了两条线连接下面两个活动。

    image

    用RuleDriven是不需要自己画线的,如果不小心把线删除了,可以用右键菜单中的 Generate Lines重新生成线.

    image

    QuickFlow如何自定义角色提供程序

    只要实现一个IRoleUserProvider即可。IRoleUserProvider的定义如下:

     /// <summary>
            /// 用户角色提供程序,提供工作流需要的角色和用户信息
            /// </summary>
            public interface IRoleUserProvider
            {
                /// <summary>
                /// 按照用户ID获取用户
                /// </summary>
                /// <param name="web"></param>
                /// <param name="userId"></param>
                /// <returns></returns>
                User GetUser(SPWeb web, int userId);
    
                User GetUser(SPWeb web, string account);
    
                /// <summary>
                /// 获取角色用户
                /// </summary>
                /// <param name="web"></param>
                /// <param name="roleName"></param>
                /// <returns></returns>
                IList<User> GetRoleUsers(SPWeb web, string roleName);
    
                /// <summary>
                /// 获取角色属于某部门的用户
                /// </summary>
                /// <param name="web"></param>
                /// <param name="roleName"></param>
                /// <param name="dept"></param>
                /// <returns></returns>
                IList<User> GetRoleUsers(SPWeb web, string roleName, string dept);
    
                /// <summary>
                /// 获取用户拥有的所有角色
                /// </summary>
                /// <param name="web"></param>
                /// <param name="userId"></param>
                /// <returns></returns>
                string[] GetUserRoles(SPWeb web, int userId);
    
          }
    

    将实现此接口的程序集部署到GAC中,然后打开C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\QuickFlow目录下的global.config文件,修改CustomRoleUserProvider为自定义的角色提供程序的全名即可。

    <GlobalConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
      <CustomRoleUserProvider>QuickFlow.Core.SPRoleUserProvider,QuickFlow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ec1e0fe6e1745628</CustomRoleUserProvider>
    
      <!--任务代理配置 -->
      <!--<TaskDelegationProvider>QuickFlow.Core.DefaultTaskDelegationProvider,QuickFlow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ec1e0fe6e1745628</TaskDelegationProvider>-->
    
      <!--if DelegationListSiteUrl is empty, system will use current site-->
      <!--<DelegationListSiteUrl>http://codeartserver:81/sites/s1</DelegationListSiteUrl>-->
      <DelegationListUrl>Lists/QuickFlowDelegation</DelegationListUrl>
    
      <!--是否对任务启用特殊权限-->
      <EnableSpecialPermissions>false</EnableSpecialPermissions>
      <!--具有任务管理权限的组-->
      <WorkflowAdminGroup>WorkflowAdmin</WorkflowAdminGroup>
    
      <EventReceivers>
        <Receiver Enabled="false" Name="Exception" Type="QuickFlow.EventBus.ExceptionEventReceiver,QuickFlow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ec1e0fe6e1745628" />
        <Receiver Enabled="true" Name="Tracing" Type="QuickFlow.EventBus.TracingEventReceiver,QuickFlow, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ec1e0fe6e1745628" />
      </EventReceivers>
    </GlobalConfiguration>
    

    如何修改默认邮件提醒模板

    在C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\LAYOUTS\QuickFlow目录下有两个xml文件,

    NotificationMailTemplate.config和DurationMailTemplate.config,修改这两个文件及可以控制默认提醒邮件的内容。

    <?xml version="1.0" encoding="utf-8"?>
    <MailTemplate xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Enabled>true</Enabled>
      <DefaultTemplate>true</DefaultTemplate>
      <Subject>Workflow task received</Subject>
      <Body>
        <![CDATA[
    Dear [%global:taskUser%]:<br/>
    
    You have a new workflow task. <br/>
        Item title:[%list:Title%] <br/>
        Item Created by:[%list:Author%] <br/>
        Created by:[%list:Author%] <br/>
    
      <a href="[%global:taskUrl%]">click here to edit the task</a> <br/>
      <a href="[%global:webUrl%]">click here to access the site</a> <br/>
    
        ]]>   
      </Body>
      <MailCategory>TaskNotification</MailCategory>
    </MailTemplate>
    

    _custom.config文件

    更新QuickFlow安装包时,NotificationMailTemplate.config和DurationMailTemplate.config会被覆盖成默认内容。为了避免这个问题。可以使用

    NotificationMailTemplate_custom.config和DurationMailTemplate_custom.config文件,复制默认的config文件,修改文件名,然后把自定义的邮件模板放到这两个文件中即可

     

    邮件模板支持如下标签

    标签 作用
    [%d:fieldName%] or
    [%list:fieldName%] or
    [%datafield:fieldName%]
    获取列表字段(DataField)值
    [%t:fieldName%] or
    [%task:fieldName%]
    获取任务字段(TaskField)
    [%v:variableName%] or
    [%variable:variableName%] or
    [%variable%]
    获取工作流变量
    [%ctx:taskUrl%] or [%global:taskUrl%] 获取任务编辑表单路径
    [%ctx:weburl%] 获取当前网站URL
    [%ctx:taskuser%] 获取任务用户名
    [%ctx:taskuseraccount%] 获取任务用户账号
    [%ctx:originator%] 获取流程发起人名称
    [%ctx:taskoutcome%] 获取任务输出(用于单任务活动)
    [%ctx:taskoutcomes%] 获取任务输出集合, “,”间隔 (用于多任务活动)
    [%ctx:taskactions%] 获取任务动作集合, “,”间隔
    [%ctx:tasktitle%] 获取任务标题
       
  • 相关阅读:
    1144 The Missing Number (20分)
    1145 Hashing
    1146 Topological Order (25分)
    1147 Heaps (30分)
    1148 Werewolf
    1149 Dangerous Goods Packaging (25分)
    TypeReference
    Supervisor安装与配置()二
    谷粒商城ES调用(十九)
    Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected
  • 原文地址:https://www.cnblogs.com/jianyi0115/p/1653722.html
Copyright © 2011-2022 走看看