技术白皮书

新手入门

视频教程

表单流程特殊处理

 

1 特定要求的实现

1.1、 创建表单的特定程序:


在表单属性的“后台程序”中设定,该程序必须实现下面的接口

com.wuzhou.ExtFrame.interfaces.ExtInterface接口;

1.2、 单证编号规则:


单证流水号特殊规则,通过编写sql实现。

1.3、 工作节点的特定程序:

在节点属性的“页面处理程序”中设定,如:test.jsp,系统会调用该页面程序,同时传入基本的参数:docNo、taskId;

1.4、 页面脚本:

暂未使用;

 

2 实现特定数据的存储


在表单定义时,设定了“数据表名称、索引定义、关键字段名称”信息后,系统会根据定义创建数据库表,表的数据格式是“表单字段”定义的内容;

建立子表的索引及主键信息,在“参数信息”中定义,用“索引字段&主键字段”分隔,如:“docNo,goods&docNo,serialNo”

 

3 实现特定要求的任务调度

 

3.1 多人同时操作

就是在一个工作节点上需要多人同时(必须全部)作业,完成后才可以进入下一步工作,在定义该工作节点时,属性-多人同时作业选“是”;

 

3.2 汇聚后再执行

不同节点需要在某个节点等待后再走下一步,可以先到“与汇聚”节点,然后再到“下一步”; 这个“与汇聚”就是之前有“分支”的情况下,所有分支的任务必须都“提交”了,才到这个节点“等待汇聚”后,再往下面的节点流。

 

3.3 汇总处理

如果对单个任务进行“汇总处理”,可以在汇总处理到后续节点之间增加一个“自动过程”,过程名称=suspend(将全部同类本人处理的单个任务“挂起”,只留一个到后续节点);当后续节点退回本节点时,先到“自动过程”,过程名称=resume(将先前“挂起”的任务进行释放);

 

3.4 取消单证

定义一个自动过程,

 

3.5 自动导入对象信息

在流程审批完毕后,增加一个自动过程,可以把流程中的表单数据(流程定义里面的数据字段)的值保存到对应的对象中。

LoadObject:customer,goods,表示根据单证的信息内容,自动导入客户和商品信息;

 

3.6 根据SQL获得任务分配的指定人

在任务分配规则中,选择“特殊分配”,在分配程序中填写SQL,如: select UserId from sa_user where orgId=8

 

3.7 子流程结束时修改父流程参数值

在结束节点的“其他规则”中设置:setParent:字段名,字段名2…

 

3.8 调用自动后台过程

a) 实现工作流接口:com.wancheng.workflow.AutoTaskFactory private HashMap taskValue; private LogService log = new LogService(this.getClass()); public SendMessage() { }


  public void SetAttribute(HashMap value) {
    taskValue = value;
  }
  /**
   * 实现工作流引擎的com.wancheng.workflow.AutoTaskFactory接口
   * @return
   * @throws java.lang.Exception
   */
  public HashMap run() throws Exception{
    java.sql.Connection myCon = (java.sql.Connection)taskValue.get("dbConnection");
    SendMessageDAO dao = new SendMessageDAO();
    String docNo=(String)taskValue.get("docNo");
    String userId=(String)taskValue.get("_USERID");
    try {
        //业务逻辑语句
        } catch (Exception ex) {
      log.error(ex.getMessage());
      throw new Exception(ex.getMessage());
    }

   return taskValue;
  }
 

3.9 调用后台消息发送

a) 定义自动过程语法=message[:msgType[:msgContent:[startTime]]]

注意:[ ]为可选项,[ ]中的内容可以设置也可以不设置,设置时不要将“[ ]”(括号字符)设置入内容中。

b) msgType:

  • sms=短信
  • mail=邮件
  • live=内部消息
  • 多种方式以“”分隔,如:message:smsmail_live

c) msgContent:文字描述,内嵌“[单证元素]”被系统用单证的内容替换。

如:“message:sms_live:您的《单证审核》任务于[startDate]生效,请及时处理!”

d) startTime:convert(datetime,’[单证元素]’)-5

e) 在“其他规则”里设定,收件人的规则recipients:[role部门经理|user张三|org财务部|elementUSERLIST|lastUser],缺省为空的话,收件人=单证创建人;

lastUser表示上一步操作的应执行人;
 

3.10 调用取消全部相关单证任务

a) 定义自动过程语法=return [:msgType]

b) msgType:

  • sms=短信
  • mail=邮件
  • live=内部消息
  • 多种方式以“”分隔,如:return:smsmail_live
 

3.11 任务调度时间控制:符合条件时触发任务调度

在任务定义中有“其他规则”可以定义,startTime:条件表达式,用“[单证元素]”表示系统将用单证元素的数据替换。如:convert(datetime,’[endDate]’)-15

注意:[字段名]外面要加“‘”。

可以定义发送消息的内容格式,如:msgContent:您需要处理的单证[单证元素]

 

3.12 单任务控制(发起、整个任务)

在单证“多任务规则”中进行选择

a) 1-可多建任务:不限制新建;

b) 0-单一新建任务:只能在没有新建任务时,创建任务;

c) 2-单一全任务:新建任务没有完成全部流程,不能新建;

 

3.13 子流程参数NoPass、PassFirst

(必须是第3个参数,才有效,2个参数为跳过第一步)

a) 调用子流程时,可以跳过子流程的第一步,如:storeIn:checkFlag=1:PassFirst

b) 调用子流程时,不跳过子流程第一步,如:storeIn或者storeIn:checkFlag=1:NoPass

 

3.14 调用自动过程可以附加参数

a) 自动过程必须实现com.wancheng.workflow.AutoTaskFactory接口

b) 自动过程需要写全路径,如:com.wuzhou.dCenter.storeInOut

c) 以“:”分隔开参数,多参数以“&”分隔,如:com.wuzhou.dCenter.storeInOut:INOUTFLAG=1&LASTSTATE=complete_0

d) 在com.wuzhou.dCenter.storeInOut的类程序中可以通过HashMap中获得参数值,如:String flg=(String)taskValue.get(“_INOUTFLAG”);

 

3.15 缺省附件条数

可以设置附件的必选记录,在“选项内容”里设置,如“’市场报告’,’安检报告’”;

 

3.16 GetOrgManager

获得操作员所在部门的主管;

 

3.17 GetDocUser

获得单证创建人;

 

3.18 GetObjUser(通用的调度)

语法GetObjUser:对象名称:页面字段名称

如:GetObjUser:customer:clientId

 

3.19 根据前缀取号码,保证唯一

目前系统是根据“单证名称”保证编号唯一的,所以不同单证设定的“前缀”相同,会导致编号重复;

 

3.20 自定义一个页面,然后调用流程创建任务

使用System.open(urlObject)打开;

<script LANGUAGE="JavaScript">
    
</script>

urlObject对象结构说明:

1) text:显示的标题

2) id:窗口id(界面方式打开的窗口id不会重复)

3) url:需要打开的页面地址;

4) type:打开方式

i. 0:项目(jsp、html、*.do等完整独立的html文档);

ii. 1:界面(ExtJs文档);

iii. 2:行为(类似界面,用弹出窗口显示或者没有窗口界面);

 

4 单证任务超时的处理



超时测试节点的“超时”属性:1(小时);

超时提醒条件参数:

否则到结束的条件:

进行短信提醒的设置:

短信提醒的参数设置,详见6.3.9

 

5 其他特定开发要求的说明

 

5.1 单证号码转换成条码

界面设计“图片”控件,属性-文件路径:
../barcode?data=<%=docNo%>;
 

5.2 站内信开关的打开

修改js/system/config.js里的参数,用“//”来注释掉;

System.config.add("EMS_ON",true);//EMS开关
 

5.3 JSP页面调用表单任务后的自动关闭

top.System.closeFrame();
 

5.4 页面获取多项选择的值

调用页面函数getSelectValue(选项字段名称),返回的值是多项选择,用“;”分隔。

 

5.5 Debug关闭。

修改js/system/config.js里的参数,用“//”来注释掉;
System.config.add("SYSTEM_DEBUG",true);//debug开关
System.config.add("SYSTEM_STATUS_HIDDEN",true);//状态信息区 隐藏开关
 

5.6 功能模块的站外调用(脱离后台)

修改WEB-INF/web.xml中相关行:



nonLogonFunctions
[logon][logout][ExtTaskActivity][prePageManager][ProcQuery][objInfo][EMSService][documentAction][Search]

然后在网站的url连接里输入:

http://192.168.0.181:8080/DealerMIS/Search.do?searchName=clearDoc