业务上的附件和FileNet流程中的VWAttachment

        多数涉及流程的业务会伴随着附件内容。公司业务通过流程逐步完成:业务流程中每个结点处理人大多会对发起人(申请人)的需求进行查看分析等,最终经历一系列审核确认完成公司业务。申请人除了有简单的描述之外,还会包括详细的内容——称之为附件,这就是ECM产品内容的一种类型。

       客户的申请内容在业务流程的作用下成为企业内容,在后续的公司操作上往往会被提及。在这种背景下,单纯内容管理或业务流程管理往往不会满足企业需求,往往需要结合而论。如果继而深入企业人事(人:组织管理;事:业务过程),除了ECM和BPM外,往往还会牵涉到ERP和OA等。此处留个话头,仅从FileNet等流程引擎的流程和附件关系的设计和操作上简单描述。

       对于FileNet而言,企业内容和业务流程涉及的是CE和PE。在项目中,流程设计中根据业务需要多数会带有附件。而FileNet所流程设计器中可以对attachments进行设计,流程的附件属性作为VWAttachment类出现。在设计过程中,其同DataField属性一样,可以在不同结点进行选择,这样会将这些属性做为流程结点真实可用的属性。

       一个流程中可以包含一个或多个VWAttachment,每个VWAttachment可以是一个附件也可以是一个附件数组。VWAttachment类并不是CE的Document等,它保存的是CE中某些Document的Id和Version等,有了这些条件就可以在流程处理过程中精确定位附件内容了。

       在流程处理中,除了附件的内容外,附件的某些属性(往往多于VWAttachment所能承载的信息)往往需要直接显示在表单上。此时我们可以在流程设计之初将这些需要显示的内容设计为流程DataField。总之,业务流程进行中可以通过很多方式来提升流程处理能力,其中将业务附件指定到流程VWAttachment中、将一些需要展示在表单的CE内容存于流程的DataField中等等都是很有效的方法。

       获取流程附件、增加\减少流程附件类似于操作数组,由于其不存在去除指定位置的方法,故而采用传统的遍历方式来获取全部附件,在将需要增加的附件或减少的附件添加到该附件数组中,随后再重新将该附件数组设置回流程Attachments中,下面代码展示减少流程附件过程。

 

VWAttachment[] vwAttachments = null;
int rights;	
//获取需求附件
vwAttachments = (VWAttachment[])vwStepElement.getParameterValue(“ATTACHMENTPARAMETERNAME”);
//获取对该附件的权限
Rights= vwStepElement.getParameter(“ATTACHMENTPARAMETERNAME”).getMode();
//流程附件中是否存在待删除document
			Boolean isExit = false;
			for(int i = 0 ; i < vwAttachments.length ; i++){
				if(docId.equals(vwAttachments[i].getId())){
					isExit = true;	//存在
					break;
				}
			}
			//如果流程附件中存在待删除document,则判断是否具备写权限,具备则进行删除
			if(isExit){
				//如果存在写权限,并且待删除附件在流程附件中,则删除流程中此附件
				if(rights == 2 || rights == 3){	//具备写权限
					if(vwAttachments.length >1){	//如果流程附件个数大于1,则设置删除后的附件组
						/**
						 * 获取新的附件组
						 */
						VWAttachment[] vwAtts = new VWAttachment[vwAttachments.length - 1];
						VWAttachment vwAtt;
						int count = 0;
						for(int i = 0 ; i < vwAttachments.length ; i++){
							if(!docId.equals(vwAttachments[i].getId())){
								vwAtts[count] = vwAttachments[i];
								count++;
							}
						}
						/**
						 * 设置附件组
						 */
						vwStepElement.doLock(true);
						//设置需求附件
							vwStepElement.setParameterValue(“ATTACHMENTPARAMETERNAME”, vwAtts, true);
						vwStepElement.doSave(true);
					}

				}


你可能感兴趣的:(引擎,产品)