为步骤增加派工操作

 

    什么是派工:某项工作需要领导指定(或在一组人员中随机选出)若干人员去 完成,其中的一人是工作负责人,而其他人员则是辅助负责人完成相关工作。

    先看一个完整的派工设置实例(如下图):

    派工分类:

   派工候选人的定义

    无论是指定派工,还是随机派工,都需要定义派工在哪些人员中进行,即可以从哪些人员进行派工。系统允许使用表达式,可使用二次开发进行派工修改人的定义。

    当使用表达式来指定候选人时,表达式的结果是候选人的ID,如果需要指定多个候选人,那么表达式的结果应该是这样的一个字符串:把候选人的ID拼接成一个用逗号分隔的字符串如 "2,3,4,5" , 表达式中允许使用单元格名(如A1,B5)或别名来引用表单上的数据,值得注意的是请使用cstr,cint,clng ,cdbl ,cdate等函数对单元格的数据做强制类型转换后再做运算,如:请使用cint(A1)+5 ,而不要直接用A1+5。

    在表达式中可能使用系统提供的部门人员函数来指定候选人,详细参看函数帮助中的“部门信息函数”和“人员信息转换函数”。如下示例表示的是当前操作人员所在分单位中的管理一科中的所有人员参与本次派工:

allUserOfDepartment( relativeDepartmentId( groupCodeOfSomeone(currentUserId()), "管理一科"))

    如果使用表达式仍无法满足要求,那么WiseFlow 使用Rhino做为脚本引擎提供了强劲的二次开发能力。因此使用最后的绝招:使用脚本来指定候选人。

    可以定义一个函数 getExecutor(),返回候选人的ID(如果需要返回多个候选人,那么把他们的ID拼接成一个用逗号分隔的字符串如 "2,3,4,5")来指定本步骤的候选候选人。 下面是一段脚本示例:

   
 

function getExecutor()
{
  var ds=book.getDataSource('flow_gs_nbgzlxd').getDataStore();
  var tfbmid= ds.getString(0,"tfbmid");
  var sql="select distinct b.id , b.name ,b.showname from oa_group_master a ,"+
            "news_user b where a.user_id=b.id and a.group_id="+tfbmid ;
  out.println (sql);
  var tds= flow.createDataStore("", sql);
  tds.retrieve();
  if ( tds.getRowCount()>0)
  {
    var ret="";
    for( i=0;i< tds.GetRowCount();i++)
    {
       ret=ret+","+tds.getString(i,"id");
    }
    return ret;
  }
  
  return -1;

}

 

    由于表达式相对二次开发而言,要简单许多,所以,从方便日后的维护出发,尽量使用表达式做定义,少用二次开发。

    

    派工排除人员的定义

   系统还允许指定哪些人员不参与派工。定义方式与派工候选人的定义是相同的。值得注意的是这里定义的是不参与本派工的人员。比如科室的领导不参与派工。
    如下例:表示的是当前操作人员所在分单位中的“管理一科”的科长不参与派工。

masterLeaderIdOfDepartment( relativeDepartmentId( groupCodeOfSomeone(currentUserId()), "管理一科"))

 

    派工人员信息如何保存到表单中

    当执行派工操作后,系统需要将派工信息保存到表单中。每一个派工操作,系统保存如下4个信息:

  1. 主要负责人的ID
  2. 主要负责人的单点登录名
  3. 协助人员的ID列表(多个ID之间用逗号分隔)
  4. 协助人员的姓名列表(多个姓名之间用空格分隔)

它们分别对应的字段名为: hcfzrid , hcfzrssoname , hcrids ,hcrshownames .由于系统允许在一个工作中的多个步骤中执行派工操作,所以必须为这些字段指定一个后缀,用于区分。

    比如当定义字段后缀为“_1” 是,派工数据保存到的字段分别是hcfzrid_1 , hcfzrssoname_1 , hcrids_1 ,hcrshownames_1 。

    当然,如果一个工作流定义中仅一个步骤需要派工,那么可以不指定后缀名。

    自动创建字段

    当点击“自动创建字段” 后,系统将自动在表单的主表中加上上述的4个字段。当这些字段已经存在时,系统不会重复创建。因此需要做的工作是将这4个字段绑定显示到表单界面上。值得注意的是将“主要负责人的ID”绑定到界面上时,编辑方式请设置为“列表”“人员ID与实名”,如图:

 

 

 

 

 

 

    在表单中增加“派工”按钮

    派工操作是通过点击“派工”按钮来实际执行的,因此必须在表单中的合适位置摆放一个“派工”按钮。

 

    “派工”按钮出不来的原因

    有时在指定派工按钮放置的单元格后,在工作流转中,派工按钮并没有显示出来,可能的原因有:

  1. 定义的单元格名或别名不存在:比如定义把按钮放在别名为"paigong1"的单元格内,并在模板中并没有别名为“paigong1”的单元格存在

  2. 定义的别名不合法:比如定义单元格的别名为"pg1" ,注意,这个别名是有问题的,因为我们常用 a1,b1 , ab1 , ab12 来表示a列1行,b列1行,ab列12行。“pg1”被系统认为是pg列1行这个单元格。而通常的模板是不会有pg列的。所以别名最好至少是3个字母,或1到2个字母加上下划线再加上数字,例如:"pg_1"

  3. 当派工的人员信息无法填入到相关字段中时,清注意是不是字段对应的表不正确。因为系统仅将派工人员信息回填到主表上。常见的错误是表单上绑定的派工人员信息字段不是主表上的。也可能由于手工修改数据库配置文件(db.xml)时,将至少两个表的master属性设置成了true,解决办法是进入模板的数据库高级设置,重新设置模板的主表。