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 "";
    }
}

posted @ 2024-08-30 09:56  挪威森林618  阅读(44)  评论(0)    收藏  举报