如何在后台创建寻源变更单,并自动提交和审核

1. 如何在后台创建寻源变更单,并自动提交和审核
1.1 业务场景简介
寻源变更一般通过业务操作—>发起变更,或者 通过菜单“寻源变更”,新增变更单进行变更处理。但有时候需要后台创建变更单,并自动提交和审核,例如:在“结果公告”节点,如果发布的是流标公告,则自动生成一张项目终止/流标变更单,并自动提交和审核。
1、发布“流标公告”,并提交、审核:

2、自动创建“项目终止/流标变更单”,并自动提交和审核:

1.2 简要实现方案
步骤 | 开发内容 | 备注 |
1 | 后台创建变更单的入口插件,并注册 | 代码开发 |
2 | 后台创建变更单的表头插件,并注册 | 应用配置 |
3 | 后台创建变更单的组件插件,并注册 | 代码开发 |
1.3 详细开发步骤及示例代码
下面以发布“发布流标公告、项目终止/流标变更” 为例。
1.3.1 新增后台创建变更单的入口插件,并注册

插件最主要部分的是初始化变更单所需的数据,代码如下:
package kd.scm.src.opplugin.audithandle;
import java.util.HashMap; import java.util.Map;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.resource.ResManager; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.QueryServiceHelper; import kd.scm.common.constant.BillAssistConstant; import kd.scm.pds.common.constant.PdsMetadataConstant; import kd.scm.pds.common.constant.SrcCommonConstant; import kd.scm.pds.common.constant.SrcMetadataConstant; import kd.scm.pds.common.extplugin.ExtPluginContext; import kd.scm.pds.common.extplugin.IExtPluginHandler; import kd.scm.pds.common.util.PdsCommonUtils; import kd.scm.src.common.util.SrcBidChangeUtil;
/** * 发布流标公告后--自动进行项目流标处理 * * @author rd_fumin_huang * */ public class SrcAutoEndchangeHandler implements IExtPluginHandler { private static final long serialVersionUID = 1L;
@Override public void process(ExtPluginContext args) { // 是否需要变更 if (!isNeedChange(args)) { return; } // 创建变更上下文 ExtPluginContext context = createChangeContext(args);
// 获取已存在的未审核变更单 DynamicObject changeObj = SrcBidChangeUtil.getBidChangeBill(context); if (null == changeObj) { // 创建变更单 changeObj = SrcBidChangeUtil.createBidChangeBill(context); } // 执行 提交 PdsCommonUtils.doOperation(changeObj, BillAssistConstant.OP_SUBMIT); // 执行 审核 PdsCommonUtils.doOperation(changeObj, BillAssistConstant.OP_AUDIT); }
/** * 创建变更上下文 * * @param context * @return */ public ExtPluginContext createChangeContext(ExtPluginContext args) { ExtPluginContext context = new ExtPluginContext(); // 传入 寻源项目对象、id context.setProjectObj(args.getBillObj()); context.setProjectId(args.getProjectId());
// 初始化 valueMap(重要,二开需要修改) initValueMap(context);
// 返回 return context; }
/** * 初始化 valueMap(重要,二开需要修改) * * @param args * @param context */ public void initValueMap(ExtPluginContext context) { Map<String, Object> valueMap = new HashMap<>(8); // 传入 完整的其他参数 // 1 变更来源:1-寻源申请 2-项目立项 3-寻源项目 valueMap.put(SrcCommonConstant.CHANGESOURCE, SrcCommonConstant.CHANGESOURCE_PROJECT); // 2 寻源项目id valueMap.put(SrcCommonConstant.PROJECT, context.getProjectId()); // 3 变更类型id:项目终止/废标模板id (重要) long templateId = PdsCommonUtils.getBasedataIdByNumber(PdsMetadataConstant.PDS_TPLCONFIG, "SYS042"); //通过变更类型编码获取变更类型id valueMap.put(SrcCommonConstant.TEMPLATE, templateId); // 获取 变更类型对象 DynamicObject changeType = BusinessDataServiceHelper.loadSingle(templateId, PdsMetadataConstant.PDS_TPLCONFIG); // 用源单对象 暂存 变更类型对象 context.setSourceObj(changeType);
// 4 变更原因 valueMap.put(SrcCommonConstant.REMARK, ResManager.loadKDString("发布流标公告后自动终止项目。", "SrcAutoEndchangeHandler_0", "scm-src-opplugin")); // 5 业务类型:同主单据 valueMap.put(SrcCommonConstant.BIZTYPE, context.getProjectObj().getLong(SrcCommonConstant.BIZTYPE + '.' + SrcCommonConstant.ID)); // 6 采购组织:同主单据 valueMap.put(SrcCommonConstant.ORG, context.getProjectObj().getLong(SrcCommonConstant.ORG + '.' + SrcCommonConstant.ID)); // 7 变更发起当前节点id valueMap.put(SrcCommonConstant.CURRENTNODE, PdsCommonUtils.getNodeIdByEntityName(context.getProjectObj().getDataEntityType().getName()));
// 暂存到 context--ParamMap2 context.getParamMap2().put(SrcMetadataConstant.SRC_BIDCHANGE, valueMap); }
/** * 是否需要发起变更 * * @param context * @return */ public boolean isNeedChange(ExtPluginContext args) { // 来源单据id = 寻源项目id QFilter qfilter = new QFilter(SrcCommonConstant.SRCBILLID, QCP.equals, args.getProjectId()) |
如何在后台创建寻源变更单,并自动提交和审核
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



