客户的申请内容在业务流程的作用下成为企业内容,在后续的公司操作上往往会被提及。在这种背景下,单纯内容管理或业务流程管理往往不会满足企业需求,往往需要结合而论。如果继而深入企业人事(人:组织管理;事:业务过程),除了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);
}
}