xwork相关知识点
使用xworks,但是数据不存在xwork的表,那么使用table,勾选的行数据的oid会是bean,需要做下面处理

在表单嵌入table,创建文档到table中完成页面创建之后不能刷新表,后台报ContextObject为空,手动刷新页面之后表中数据可以刷新出来

定义流程def文件需要在workflowTemplateDef.conf注册,不需要xconfmanager -p

xworks里的流程表单,也是可以不用创建Bean,直接用jca的table或者属性面板都可以的

xworks流程表单报workitem_details_attributes_group_input is null错误,是因为流程模板里任务的模板格式选择了原生,模板名称选择了通用模板,应该用ootb的jsp和default


xworks流程的附件处理类
AddFileAttachmentFormProcessorDelegate
xworks流程的附件显示builder
AttachmentGroupTableBuilder
xworks流程如果流程PBO是文档,那么附件列表只能获取当前文档版本对应的附件,如果PBO升版,就看不到之前版本的附件,在AttachmentGroupTableBuilder做如下修改
public Object buildComponentData(ComponentConfig config, ComponentParams params) throws Exception {
LOGGER.debug("AttachmentGroupTableBuilder buildComponentData begin>>>>>>>>>>");
WorkItem workitem = (WorkItem)params.getContextObject();
//处理流程对象是文档的情况
Persistable pbo = WorkflowUtils.getPrimaryBusinessObject(workitem); // 获得流程PBO
if (pbo instanceof WTDocument) {
LOGGER.debug("pbo is WTDocument>>>>>>>>>>");
WTDocument doc = (WTDocument) pbo;
return DocUtil.getSecondContent(doc);
}
String attachmentGroupId = (String)params.getParameter("groupId");
return this.attachmentGroupService.getAttachments(workitem, attachmentGroupId);
}
xworks下实现立即驳回功能,重写ootb的NmWorkItemCommandExecutor接口
package com.ptc.xworks.xmlobject.workflow;
import cn.hutool.core.util.StrUtil;
import com.ptc.core.components.forms.FormResult;
import com.ptc.netmarkets.util.beans.NmCommandBean;
import com.ptc.netmarkets.work.NmWorkItemCommands;
import org.apache.logging.log4j.Logger;
import wt.fc.Persistable;
import wt.fc.ReferenceFactory;
import wt.log4j.LogR;
import wt.util.WTException;
import wt.workflow.engine.WfEngineHelper;
import wt.workflow.work.WfAssignedActivity;
import wt.workflow.work.WorkItem;
import java.util.Enumeration;
import java.util.Vector;
public interface NmWorkItemCommandExecutor {
static final Logger LOGGER = LogR.getLogger(NmWorkItemCommandExecutor.class.getName());
default FormResult save(NmCommandBean clientData) throws WTException {
return NmWorkItemCommands.save(clientData);
}
default FormResult complete(NmCommandBean clientData) throws WTException {
FormResult result = NmWorkItemCommands.complete(clientData);
String oid = clientData.getTextParameter("oid");
ReferenceFactory refFactory = new ReferenceFactory();
Persistable persistable = refFactory.getReference(oid).getObject();
WorkItem workItem = (WorkItem) persistable;
WfAssignedActivity activity = ((WfAssignedActivity)workItem.getSource().getObject());
LOGGER.debug("ReviewProcessExtractFormProcessorDelegate activityName:" + activity.getName());
if ("评审成员审批".equals(activity.getName())) {
String route = getRouteValue(clientData);
if (StrUtil.isNotEmpty(route)) {
LOGGER.debug("ReviewProcessExtractFormProcessorDelegate route:" + route);
if ("驳回".equals(route)) {
Vector<String> vec = new Vector<>();
vec.add(route);
WfEngineHelper.service.complete(activity, vec);
}
}
}
return result;
}
private String getRouteValue(NmCommandBean nmcommandbean) {
Enumeration enumeration = nmcommandbean.getRequest().getParameterNames();
do {
if (!enumeration.hasMoreElements()) {
break;
}
String nextValue = (String) enumeration.nextElement();
String key = NmCommandBean.convert(nextValue);
if (key.indexOf("WfUserEvent") >= 0 && key.lastIndexOf("old") == -1) {
return nmcommandbean.getTextParameter(nextValue);
}
} while (true);
return "";
}
}

浙公网安备 33010602011771号