会签动态配置修改手册_第1页
会签动态配置修改手册_第2页
会签动态配置修改手册_第3页
会签动态配置修改手册_第4页
会签动态配置修改手册_第5页
已阅读5页,还剩2页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会签动态配置

修改手册

V1.0

2020年4月7日

序言

本手册主要叙述在原流程会签的基础上增加会签的动态配置规则,例如:一票否决、最

小票数、百分比等方式进行会签判决,决定会签的流向。

需要注意的是,已经生成的运行流程不支持此次会签动态修改,因为在流程部署生成流

程图时没有设置会签完成条件,所以不具备会签动态规则的功能。新流程按接下来的配置即

可使用动态配置规则。

一、手动会签

在原有流程图的基础上,给会签节点的配置信息的完成条件增加务件"${counterSignPass

==true),;然后点击“部署”发布新的运行流程即可,其余原有的流程配置不用修改,如下:

©MPx|d无IWEB|X0样X+-0X

4CGk)calx>rt/Xjfe-M/pc<xe$s£ditofAnodelefJrtml?modetd-Saaac1974<J9c4®c2ba358bl931292184☆0

EPR❺Cloud@OutMcW«bAppARedme

回QQQQHQ(3QGQ@QQ

,网关

,边用•件

>中间58度期

>中1句党出

》结束W4

»泳遇V部门经理会签

»用件±«(10)Counlenign丽

No

0MH»YS:0executtonMsiencn

:P.MBB03^0:NoMg

鱼含(―:MUMTUSO元・金■(»«M):9rtM

1:1>s»a:

$4<oumefSionPws--true)

•J八・.《!・—

然后部署流程,在“运行流程”中使用拷贝配置将旧流程的配置拷贝进新流程,由于会

签规则是新增数据,旧流程会签节点没有相关数据,需要手动配置相应的规则,如不配置则

是默认按原来的方式走(即程序控制)。

©然趣|ERP

运行流程H制

.口・以—E赅

1的VO99MQ

□m-E-

■n・件.Q■-en

IS'|[二__________•GMQN

■n脸一人■左殖QsOifi&itiiA

。二】主ent■性・找・■

Q-忖—■性电ana•«o«

□|an—|asa

Q.忖会计■.anana-■E*

■小USDr

□—anan«・»•百分比

西原有BSS有万代

□L0■♦苫

二、多级会签

2.1流程图会签节点配置

流程图中配置参考第一章节艮1可

主It(ID):jolntlySign名分:65

描述信在:Novalue跨步:Q

互斥任务:携行=听3&:0rxecutionK$t«n«r$

多实例美史:ParallelSB(妥实可):N)value

集合(多实的:SfuserUst)元衰变量(多实例):assignee

1完成条件(名实®«):

${counter$ignPass==.SSM48:Q

4>西?田a-NoAi«ianm«nt本给・|尸•NsV4lu«

2.2业务代码中的流程配合修改:

首先在业务代码中获取会签规则,代码示例如下:

Map<String,String>param2=newHashMap<String/String>();

Stringprocess_definition_id=ring("process_definitionjd");

Stringtask_def_key=ring("task_def_key");

("process_definition_id",process_definition_id);

("task_def_key",task_def_key);

M叩〈String,Object>countersignRule=ersignRule(param2);〃会签规则

:wodc«p»ce-cmNc-•(pnngT©oi(wt»I

AWfdhSource(UfadorNaUg«f.ProjectRunWardowHelp

•3/4・o・d•・,・.、・,・,)・

1P-dcfnUm”:"F%•・d°u

>毋MmMi1prc)*cfpABn3157389〃含爱

90booleanalHign»tatus=false;

>盅com«ru<t^Mb4<f4o31243if(ta^kNM*.tqu«lf(*jointlySign*)M**Y*.«qu41s(proje<tApply.gftStr(Pr«je<tApply.I$_lMG£MT)))(

>£finmdtcMifoJ0417

>盅fc^cUM»Kh*<M>eJBJ2Nap<String9Stringparaa■n«wHashKapKString,String>();

"

>AC^dMwfo31261Stringprocess_instancc_id■resultJson.getString(•proccss-in*t«nc«_id);

>IrwtwoHcplan/•Stringprcviou5.t«sk_instancc_id=result)son.getString("p^evioui.task.instance.id");

>周p<mCo«wio«Z73UString•ddition«l_infonMtioG«re»ultIson.getString("additionel-inforoation");

97p>r^n.put(*proc«s$inst<nceid-pBce”,cstx«」d);

>盅pmWr«K«23il5-->

aw,」,・」

>度prcje<uW<yind<4tor98paraa.put('pr»viou«_task_instaf%ce.id/p2“ou_t"kct0'cd);

paraa.put("additional_inforaation",ddditional_infor«Ation);

>盅projecucctpuoce2^551

-?1O0List<Map<StringObject»list*WfUti1.counters\gnlnfo{pano<*);//

vA30073f

vcoMroMer焚33102NefKString,String》par««2=n«wHsshMapCStrinf,String>();

>P2ie«Ap/C8trMerj.163Stringprocess.definition.id■resultJson.tet5trint(wproce»$_de<inition_id**);

vaPrej»ctAppl|V^fCcrtrol*r.1B4Stringt“k_d“_k-y•r«tultIson.getString(Mtask^def_k«ya);

▼R曾咏NN

105parda2.put(proc0ss_dofinition_id/procoss_d«finition_id);

•cMe9ory5«*vk«lebparan2.put(*task_def_koy*,task_dcf_k«y);

aco(nmorAtt«ch$«rv»c

N»p<StringvObject>countersignRulc=WfUtil.counterst^nffuleCpar»vi2);//^£lRn

.»«v*ce

Q9«<ForkNede(Pfoj«c"(C011e<tio«4nil5.<sMdefRptHHst))(//

“gc^tApp^tylO110IntCOM•0;

-…1111IntprocesfiCount•0;

[..、wAppa-C|112for(FUpKString,Obj«ct>nap:list){//金优合二同总行金奖

113Objectprocces5_st«tus«nap.get("proccess.status");

(>k<>dM»Ch>n<je$Utu«

>0|dM2512511<1Ig

>.Mfvke12»5

>琮proje<UpprOM«l,:八

然后判断是否程序控制(原流程会签方式),不是则将此类参数传递到前端页面进行判

断(此时由于我们不知道当前处理人会如何审批)

if("PROGRAM".equalslgnoreCase((,,counterMode',).toString())){

if(cou==0){

allsignstatus=true;

)

("countersignRule",NString(countersignRule));

}else{

("processcount",processCount);〃己会签数量

("agreenum",processCount-cou);//会签同意数量

("nrOflnstances",());〃会签总数

("countersignafterdown","Y");〃会签结束后走向下一步

("countersignRule",NString(countersignRule));

)

109if(CollectionUtils.isMot£flpty(list)){//主

110intCOM«0;

111intproc«ssCcxint>0;

112for(MapKStringiObject>aap:list){//递代含妥丁弟Mtf是否曾佑鑫

113Objectproccoss_£tatu£•ajip.got(wproccoss_statusM);

114!-nvll)(

115proce$$Count

116)

if(proccess.status!-null&&^N^.equdlsOtring.votv«Cf(pro<cess_status))){//WUKI任何一个不♦同欠蜘含二

118coui;

119)

120}

121

122if("PROGRAM*.«qudltIgnor«Ca$»(countorsignRule.get("count«rMod«H).toString())){

123if(cou==0){

124allsignstatus■true;

1251

126(Mrams.put("countersifnRjle-,3SONUtil$.toJS(W5tr(n9(countersignRule));

U7}•!«•{

128countersignRule.put("prozesscount*,processCount);

"9countersignRu.put("agr?©nu«*,prosssCouct-cou);〃俵整BKH

130counter5ignRule.put("nrOFlnst«nce»">list.size());//n£9A

"Ipae»s.pvt(“c8nteriaafte"gn.jY・);这个拿救必须值.因为我们不注28当用处理人处建后会签是否给束

132params.put("countorsignRjlo",JSONUtil%.toJStWStri“(c<xjctQr与ignRul"));

133)

页面代码处理:

代码和图示如下:

function]counterSignResult【params,|process_statu三|至当前人的会签处理结果

if(*jointlySign'=='${taskName!!'){""'**

varelJsonObj=JSON.parse(params.elStringValue);

varallsignstatus-el?sonObj.allsignstatus;//三的合签林面几人的总答循杲

varcountersignRule=JSON.parse(params.countersignRule);荻取后台传递的会签规贝ij

程序控制

if('PROGRAM'==countersignRule.counterMode){使用原有代码,不做处理

if(allsignstatus){//前面几个会及旌部则

if(process_statu>=="N"){

elDsonObj.allsignstatus=false;

params.elStringValue=JSON.stringify(elJsonObj);

}else{

elJsonObj.allsignstatus=true;

params.elStringValue=3SON.stringify(elJsonObj);

//params.countersignafterdown='Y';

任何一个不通过,目接送回京起人

params.elStringValue=JSON.stringify(elJsonObj);

}else{已经会签处理的数星,力口1是加上了当前处理人

varprocesscount=countersignRule.processcount+1;

varnrOfInstances=三ountersiRnRule.nrOfInstances;会签总实例数

if(I'ONEVOTEREJECT”==countersignRule.counterMode){

一票否决if(process_status=="N"){会果判断

el^sonObj.allsignstatus=false;会签不通过

params.elStringValue=3SON.stringify(elDsonObj);

}el»e(

elJsonObj.allsignstatus=true;

params.elStainaValu。=JSON.stringifv(elJsonObj);

if(processcount!=nrOfInstances){已会签数曷不等于总实例数,

params.countersignafterdown=null;

说明会签未浩束,

此时该参数必须叠空

fr---------------1最/J要数

}elseif(」MIN_VOTE'I==countersignRule.counterMode){

varminVote=countersignRule.ruleData;会答为I.则中没罟的虢小通i寸堇数

varagreenum=countersignRule.agreenum;除去当前处理人的已同意数是

if(process_statu>=="Y"){

agreenum=agreenum+1j如果当刖人同e,已同意数星JJ口1

if(agreenum>=minVote){会笠结果判断,处理情况同上

elJsonObj.allsignstatus=七rue;

params.elStringValue=JSON.stringify(elJsonObj);

//params.countersignafterdown='Y';

}«lse(

elJsonObj.allsignstatus=false;

params.elStringValue=3SON.stringify(elJsonObj);

if(processcount!=nrOfInstances){

params.countersignafterdown=null;

}

).百分比

}elseif(|,PERCENT*|==countersignRule.counterMode){

varpercent=countersignRule.ruleData;会密娅则设•罟的通过百分比

varagreenum=countersignRule.agreenum;

if(process_statu>=="Y'*){

agreenum=agreenum+1;

},*,“、,计苴己同意的百分比是否大于等于

if(agreenum*100/nrOfInstances>=percent){

elJsonObj.allsignstatus=trua;iSS的百分比,进行结果处理

params.elStringValue=3SON.stringify(el3sonObj);

//params.countersignafterdown='Y';

elJsonObj.allsignstatus=falsa;

params.elStringValue=3SON.stringify(el3sonObj);

params.countersignafterdown=null;

M

returnparams;

)

functioncounterSignResult(params,process_status){

if('jointlySign'=='${taskName!}'){

varelJsonObj=(IngValue);

varallsignstatus=gnstatus;//当前会签前面几人的会签结果

varcountersignRule=(ersignRule);

if('PROGRAM'==erMode){

if(allsignstatus){//前面几个会签人全部通过

if(process_$tatus=="N"){

gnstatus=false;

ingValue=gify(elJsonObj);

}else{

gnstatus=true;

ingValue=gify(elJsonObj);

//ersignafterdown=Y;

)

}else{//任

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论