zoukankan      html  css  js  c++  java
  • QuickFlowDesigner教程(4)如何用代码控制活动操作人

    某些流程场景下,工作流内部逻辑无法判断操作人,或是是判断逻辑太复杂,无法采用QuickFlowDesigner的规则引擎来表达,或者是下一步的操作人直接需要上一步指定,这种情况下,就需要通过UI代码控制工作流活动的操作人了。

    最近使用QF的几位朋友都遇到了这种场景,所以写这篇文章介绍一下。

    代码控制操作人,需要采用Names类型变量和MultiTask配合实现。

    1)添加Names类型变量

    Names类型变量实际上是个字符串集合,可以用来存储账号列表,如下图,点击WorkflowVariables编辑按钮,在弹出的工作流变量编辑窗口中,

    添加一个名称为NextAprovers,类型为Names的变量。

    注意:需要要点击一下Value属性旁边的编辑按钮,这样编辑器能自动进行变量的初始化。

    image

    2)添加MultiTask活动

    添加一个MultiTak活动,将其User属性绑定到NextApprovers变量

    注意:需要点击左边的按钮才会弹出绑定窗口,点击右边按钮会直接弹出值编辑窗口

    image

    3)编写UI代码

    如果在工作流启动的时候控制第一步的操作人,需要处理StartWorkflowButton按钮的Executing事件:

    protected void Page_Load(object sender, EventArgs e)
      {
          this.StartWorkflowButton1.Executing += new EventHandler<System.ComponentModel.CancelEventArgs>(StartWorkflowButton1_Executing);

      }

    void StartWorkflowButton1_Executing(object sender, System.ComponentModel.CancelEventArgs e)
       {
           QuickFlow.NameCollection nextUsers = new QuickFlow.NameCollection();
           nextUsers.Add("codeartserver\\administrator");
           nextUsers.Add("codeartserver\\appservice");

           QuickFlow.Core.WorkflowContext.Current.UpdateWorkflowVariable("NextApprovors", nextUsers);
       }

    如果在提交一个任务是控制下一个任务的操作人,需要处理ActionsButton的ActionExecuting事件:

    protected void ActionsButton1_ActionExecuting(object sender, QuickFlow.UI.Controls.ActionEventArgs e)
       {

           NameCollection nextUsers = new QuickFlow.NameCollection();
           nextUsers.AddRange( this.txtNextApprovor.Text.Split(','));

           QuickFlow.Core.WorkflowContext.Current.UpdateWorkflowVariable("NextApprovors", nextUsers);
       }

    其实,只要在工作流提交前更新工作流变量即可,在Page_Load中给工作流变量赋值也是可以的:

    protected void Page_Load(object sender, EventArgs e)
      {
          QuickFlow.NameCollection nextUsers = new QuickFlow.NameCollection();
          nextUsers.Add("codeartserver\\administrator");
          nextUsers.Add("codeartserver\\appservice");

          QuickFlow.Core.WorkflowContext.Current.UpdateWorkflowVariable("NextApprovors", nextUsers);
      }

    注:最新代码支持这个特性:http://quickflow.codeplex.com/releases/view/34627

    4)如果是用户指定操作人的情况下,可以直接采用MOSS内部的PeopleEditor控件,

    Aspx:

    <%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Import Namespace="Microsoft.SharePoint" %>
    <SharePoint:PeopleEditor id="PeopleEditor1" runat="server"
        SelectionSet="User"
        ValidatorEnabled="true"
        AllowEmpty = "false"
        MultiSelect = "true"
    />

    Code:

    protected void Page_Load(object sender, EventArgs e)
      {
          QuickFlow.NameCollection nextUsers = new QuickFlow.NameCollection();
          nextUsers.Add(PeopleEditor1.CommaSeparatedAccounts.Split(‘,))
          QuickFlow.Core.WorkflowContext.Current.UpdateWorkflowVariable("NextApprovors", nextUsers);
      }

     后记:

    代码控制操作人也可以利用动态角色和RuleDriven或者RoleTask来实现,见:

    http://www.cnblogs.com/jianyi0115/archive/2010/01/28/1658822.html 

  • 相关阅读:
    微服务-SpringCloud学习系列(二):注册中心Eureka
    Spring Security系列(一)简介
    程序人生(一)--习惯与性格
    JavaEE系列(一)--Filter技术
    JavaEE系列(一)--Servlet技术
    微服务-SpringCloud学习系列(一):认识微服务
    mongoDB安装
    php遍历目录下的文件
    mysql创建视图
    ssh 安全策略
  • 原文地址:https://www.cnblogs.com/jianyi0115/p/1645941.html
Copyright © 2011-2022 走看看