工作流脚本
前言
金蝶协同OA工作流。主要用于流程的发起审批的流程。这其中,有时候会需要在工作流中添加脚本:设置外部变量,然后通过脚本查询表中数据,然后将结果输出。
接下来呢,提供几个简单的demo例子进行参考。
取某个(本例是办理部门部长)审批节点的的审批决策项(0(不同意) 1(同意) ):
spr 就是设定的外部数组变量,通过脚本将需要的数据,赋值到spr中。
1 StringBuffer tStrSql2 = new StringBuffer(); 2 tStrSql2.append(" SELECT fhandleroption FROM T_BAS_MultiApprove where FASSIGNMENTID in ( select fassignid from T_WFR_Assigndetail where factdefname_l2='办理部门部长'and fbizobjid= '"+billID+"' )"); 3 com.kingdee.jdbc.rowset.IRowSet tStrSqlRs2= com.kingdee.eas.util.app.DbUtil.executeQuery(__bosContext,tStrSql2.toString()); 4 ArrayList al2 = new ArrayList(); 5 java . util . ArrayList list2 = new java . util . ArrayList ( ) ; 6 while ( tStrSqlRs2 . next ( ) ) { list2 . add ( tStrSqlRs2. getString ( "fhandleroption" ) . toString ( ) ) ; } 7 spr= new String [ list2 . size ( ) ] ; 8 for ( int i = 0 ; i < list2 . size ; i ++ ) {spr[ i ] = list2 . get ( i ) . toString ( ) ; }
取分录组织负责人:
1 1.定义一个内码型变量id,两个外部类型变量posarray、userarray。 2 2.在提交节点将单据id输到变量id. 3 3.提交节点的后置脚本放以下脚本 4 4.审批节点参与人设置为变量userarray 5 java . lang . StringBuffer sql1 = new java . lang . StringBuffer ( ) ; 6 sql1 . append ( "select distinct FCostCenterId from T_BC_BizAccountBillentry where FBillID ='"+id+"'") ; 7 com.kingdee.jdbc.rowset.IRowSet rst= com.kingdee.eas.util.app.DbUtil.executeQuery(__bosContext,sql1.toString()); 8 java . util . ArrayList list1 = new java . util . ArrayList ( ) ; 9 while ( rst . next ( ) ) { list1 . add ( rst . getString ( "FCostCenterId" ) . toString ( ) ) ; } 10 posarray = new String [ list1 . size ( ) ] ; 11 userarray = new String [ list1 . size ( ) ] ; 12 for ( int i = 0 ; i < list1 . size ; i ++ ) { posarray [ i ] = list1 . get ( i ) . toString ( ) ; 13 14 java . lang . StringBuffer sql2 = new java . lang . StringBuffer ( ) ; 15 sql2 . append ( "select FID from T_PM_USER where Fpersonid in(select Fpersonid from T_ORG_PositionMember where fpositionid in ( select FID from T_ORG_Position where FIsRespPosition = '1' and FAdminOrgUnitID = '" + posarray [ i ] + "'))" ) ; 16 com.kingdee.jdbc.rowset.IRowSet row= com.kingdee.eas.util.app.DbUtil.executeQuery(__bosContext,sql2.toString()); 17 while ( row . next ( ) ) { FYCDBM_FZR_ID= row . getString ( "FID" ) ; } 18 if ( null == FYCDBM_FZR_ID|| "" . equals ( FYCDBM_FZR_ID) ) 19 return null ; 20 userarray [ i ] = FYCDBM_FZR_ID ; } 21 return userarray;
反写单据:
1 以反写费用报销单的事由为例子 2 3 1.定义一个内码型变量billid 一个字符串变量fsy fsy在后置脚本随便赋值 4 2.在提交节点输出单据id到变量billid 5 3.在脚本节点或后置脚本放以下脚本。 6 7 8 StringBuffer tStrSql = new StringBuffer(); 9 tStrSql.append(" update T_BC_BizAccountBill set fcause ='"+fsy+"'"); 10 tStrSql.append(" where Fid = '"+billid+"' "); 11 com.kingdee.jdbc.rowset.IRowSet rowSet = com.kingdee.eas.util.app.DbUtil.execute(__bosContext,tStrSql.toString());
更新日期:
StringBuffer sb = new StringBuffer(); sb.append("select r.fname_l2 as name from T_HR_ResignBizBillEntry t left join T_HR_AffairActionReason r on t.faffairactreasonid = r.fid where fpersonid = '" + fpersonid + "'"); com.kingdee.jdbc.rowset.IRowSet res= com.kingdee.eas.util.app.DbUtil.executeQuery(__bosContext,sb.toString()); String operation = null; while(res.next()){ operation = res.getString("name"); } if(operation != null && "自辞".equals(operation)){ sb.setLength(0); Date current = new Date(); java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = sdf.format(current); sb.append("UPDATE T_HR_ResignBizBillEntry SET fbizdate = {ts'"+ date +"'} WHERE fpersonid = '" + fpersonid + "'"); com.kingdee.jdbc.rowset.IRowSet rowSet = com.kingdee.eas.util.app.DbUtil.execute(__bosContext,sb.toString()); }
常用表及表结构
T_WFR_Assign (工作流任务)
表结构:
T_BAS_DocumentInfo(流程信息)
表结构:
T_WFR_AssignDetail(处理过的工作流任务 (审批))
表结构:
T_BAS_MultiApprove(多级审批表)
表结构: