寻源二开指南--寻源项目变更移动审批--如何获取变更单的组件信息
1. 移动审批—获取变更单组件信息
1.1 业务场景简介
寻源项目变更,因为变更类型很多,每种变更类型的信息都不一样,无法通过一个大而全的大表单实现,只能通过组件化实现。在移动审批时,如何获取组件信息,需要进行特殊处理。目前有2种方式:一、组件以报表附件的形式展示,二、将组件作为一个普通单据,配置工作流和移动审批。
1.2 简要实现方案
步骤 | 开发内容 | 备注 |
1 | 组件以报表附件的形式展示 | |
2 | 将组件作为普通单据,配置工作流和移动审批 |
1.3 详细实现方案
下面以标准产品的“寻源项目时间变更” 为例。
1.3.1 组件以报表附件的形式展示
1、对“寻源项目时间变更”元数据 配置打印模板,按普通单据配置即可:
2、启用扩展插件—创建组件附件(默认启用),如果不需要可以禁用。
3、寻源项目变更单提交时,自动根据组件的打印模板,创建组件的附件
这里也可以将“变更摘要”设置为必录,要求变更人员录入此信息,便于移动审批时概览。
4、移动审批时,可以查看和下载组的相关附件
1.3.2 组件作为普通单据,配置工作流和移动审批
以下2-7步骤,标准产品的变更单将在【 V5.0.0025 】 预置好,无需二开配置。
1、将寻源变更单的 撤销按钮、审核按钮 设置为不可见,避免 重复撤销 和 重复审核。 (非必需)
2、在 组件单元数据上增加必要的字段:
1)寻源项目F7:需要配置字段 fprojectid
2)单据状态:必须,注意设置元数据的单据状态字段,以及单据状态的下拉值。
3)寻源项目变更单F7:非必须,主要用于在移动界面携带表头信息。
可以增加其他二开字段。
3、寻源项目变更增加两个操作:撤销( unsubmit2 )、审核( audit2 ),寻源变更不支持反审核,不需要配置,下同。
注意操作代码需加上 2, 避免与原来的操作代码冲突。
4、对 撤销、审核 配置操作状态
5、对 撤销、审核 配置服务插件(插件都一样),一般不需要二开
package kd.scm.pds.opplugin;
import java.util.List;
import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.ExtendedDataEntity; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.PreparePropertysEventArgs; import kd.bos.entity.plugin.args.BeforeOperationArgs; import kd.bos.entity.plugin.args.BeginOperationTransactionArgs; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.scm.common.constant.BillAssistConstant; import kd.scm.common.enums.BillStatusEnum; import kd.scm.pds.common.constant.SrcCommonConstant; import kd.scm.pds.common.constant.SrcMetadataConstant; import kd.scm.pds.common.util.PdsCommonUtils;
/** * 变更单组件--移动审批--操作插件 * * @author rd_fumin_huang * */ public class PdsChgCompMobileOpTpl extends AbstractOperationServicePlugIn { @Override public void onPreparePropertys(PreparePropertysEventArgs e) { super.onPreparePropertys(e); e.getFieldKeys().add(SrcCommonConstant.ID); e.getFieldKeys().add(SrcCommonConstant.PARENTID); e.getFieldKeys().add(SrcCommonConstant.BILLSTATUS); }
@Override public void beforeExecuteOperationTransaction(BeforeOperationArgs evt) { String key = evt.getOperationKey(); switch (key) { // 撤销2 case BillAssistConstant.OP_UNSUBMIT + '2': // 审核2 case BillAssistConstant.OP_AUDIT + '2': // 已提交才允许审核 List<ExtendedDataEntity> dataEntity = evt.getValidExtDataEntities(); for (ExtendedDataEntity extDataEntity : dataEntity) { DynamicObject billObj = extDataEntity.getDataEntity(); String billStatus = billObj.getString(SrcCommonConstant.BILLSTATUS); // 已提交才允许审核 if (!BillStatusEnum.SUBMIT.getVal().equals(billStatus)) { evt.setCancel(true); evt.setCancelMessage("已提交的单据才允许进行此操作。"); } } break; default: break; } }
@Override public void beginOperationTransaction(BeginOperationTransactionArgs args) { super.beginOperationTransaction(args); DynamicObject[] compObjs = args.getDataEntities(); for (DynamicObject compObj : compObjs) { // 父单据id long parentId = PdsCommonUtils.object2Long(compObj.getString(SrcCommonConstant.PARENTID)); DynamicObject billObj = BusinessDataServiceHelper.loadSingle(parentId, SrcMetadataConstant.SRC_BIDCHANGE); String billStatus = billObj.getString(SrcCommonConstant.BILLSTATUS); String operationKey = args.getOperationKey(); switch (operationKey) { // 撤销2 case BillAssistConstant.OP_UNSUBMIT + '2': // 已提交才允许撤销 if (BillStatusEnum.SUBMIT.getVal().equals(billStatus)) { // 调用变更单的撤销操作 PdsCommonUtils.doOperation(billObj, BillAssistConstant.OP_UNSUBMIT); } break; // 审核2 case BillAssistConstant.OP_AUDIT + '2': // 已提交才允许审核 if (BillStatusEnum.SUBMIT.getVal().equals(billStatus)) { // 调用变更单的审核操作 PdsCommonUtils.doOperation(billObj, BillAssistConstant.OP_AUDIT); } break;
default: break; } } } } |
6、寻源项目变更 配置单据编辑插件,用于设置默认值, 二开可以重写此插件
package kd.scm.pds.formplugin.edit;
import kd.bos.bill.AbstractBillPlugIn; import kd.bos.form.events.BeforeDoOperationEventArgs; import kd.bos.form.operate.AbstractOperate; import kd.scm.pds.common.constant.SrcOperationConstant;
/** * 变更单组件--默认值处理--编辑插件 * * @author rd_fumin_huang * */ public class PdsChgCompSetDefaultValueTpl extends AbstractBillPlugIn {
@Override public void beforeDoOperation(BeforeDoOperationEventArgs args) { String operateKey = ((AbstractOperate) args.getSource()).getOperateKey(); switch (operateKey) { case SrcOperationConstant.SAVE: // 保存 case SrcOperationConstant.SUBMIT: // 提交 // 从父单据获取数据,更新组件的相关信息 updateDataFromParent(); break; default: break; } }
/** * 从父单据获取数据,更新组件的相关信息(二开可以重写) */ public void updateDataFromParent() { // 记录寻源项目变更单id,用于在移动审批展示变更单和寻源项目的相关信息 this.getModel().setValue("bidchange", this.getView().getParentView().getModel().getDataEntity().getPkValue()); } } |
7、组件可以通过工作流或移动审批,进行正常的 撤销、审核,寻源变更单同步处理。
8、变更单组件开发移动审批、配置工作流,同普通单据。变更单表头、寻源项目等相关信息,可以通过“寻源项目变更F7”字段获取。
1.4 参考开发工作量(人/天)
步骤 | 开发内容 | 估计开发人天 |
1 | 配置组件套打模板 | 0.5 /每个组件 |
2 | 配置组件的移动审批 | 0.5~1.0 / 每个组件 |
合计:约0.5~1.0开发人天 / 每个组件。
寻源二开指南--寻源项目变更移动审批--如何获取变更单的组件信息
本文2024-09-22 23:57:38发表“云星瀚知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-xinghan-136374.html