供应链单据二开新增单据体(单据体、子单据体)变更教程原创
3人赞赏了该文章
163次浏览
编辑于2024年07月29日 16:07:15
问题:
二开增加单据体和子单据体,变更过程,出现数据无法携带问题
例如采购合同中二开增加了物料明细下的子单据,生成的变更单没有携带子单据数据,也无法反写,此类问题可参考此教程
以下用采购合同为例,详述增加单据体的过程步骤
方案:
步骤一:
采购合同单据:
高级容器内插入子单据体,子单据体插入对应的元素据,我这里示例插入字段 测试、测试1
我这里只加了新增,删除按钮,需要其他按钮自行添加
父单据:物料明细
表名:自定义无要求
子单据体工具栏标识,工具栏按钮标识和一些字段标识要记录,一会新增插件要使用。
步骤二:
采购合同变更单单据(继承自采购合同单据):因继承采购合同单据,会携带下采购合同的新增子单据
在单据中新增字段变更方式(下拉列表),源单(长整型)
1、变更方式 (下拉值要和示例一致)
2、源单(隐藏字段)
步骤三
开发平台内找到单据:变更模型 (plat_changemodel)
预览列表,找到采购合同-》采购合同变更单 的变更模型
1、增加子单据体的字段映射(具体依据自己加的字段)
2、新增插件
此插件需要自己新增
增加了哪些按钮就需要配置哪些
//此插件需要自己新增 package kd.scmc.pm.formplugin; import java.util.HashMap; import java.util.Map; import static kd.mpscmm.msbd.changemodel.business.service.IXBillChangeService.*; /** * Author: rd_zhenge_wu * Desc: 请输入类功能描述 * Date: 2024/7/26 **/ public class TestPlugin { public Map<String, Map<String, String>> getXBillEntryAndOp() { Map<String, Map<String, String>> result = new HashMap<String, Map<String, String>>(); //注册测试子单据 Map<String, String> subvalue = new HashMap<String, String>(); subvalue.put(ENTRY_ENTITY, "subentryentity"); // 子单据体标识 subvalue.put(ENTRY_CHANGETYPE, "changetype1"); //变更方式标识 subvalue.put(ENTRY_BTN_TOOLBAR, "advcontoolbarap"); //工具栏标识 subvalue.put(ENTRY_BTN_ADD, "test_addrow"); //工具栏新增按钮标识 subvalue.put(ENTRY_BTN_DELETE, "test_delrow"); //工具栏删除按钮标识 //subvalue.put(ENTRY_BTN_MODIFY, "modifyrow_term"); // 工具栏撤回修改标识 subvalue.put(ENTRY_SRCID, "bigintfield"); //源单标识 result.put(subvalue.get(ENTRY_ENTITY), subvalue); return result; } }
下面这个是已经有的接口类,可直接引用,这里贴出来是为了说明引用出处和常量解释
package kd.mpscmm.msbd.changemodel.business.service; import java.util.Map; import kd.bos.dataentity.entity.DynamicObject; /** * 变更模型注册插件接口:是在变更过程中使用的插件,提供变更过程中所需要的各种内容 * 1、变更单单据体的的标识 * 2、变更单单据体的控制按钮 * 3、变更单单据体的必须属性:变更方式和源单行ID * 4、变更单生成前处理方法 * 5、变更单生成后处理方法 * 6、变更单生效前处理方法 * 7、变更单生效后处理方法 * @author ccc */ public interface IXBillChangeService { /** 变更单单据体注册实体 **/ public static final String ENTRY_ENTITY = "entity"; /** 变更单单据体注册【源单行ID】字段 **/ public static final String ENTRY_SRCID = "srcid"; /** 变更单单据体注册【变更类型】字段 **/ public static final String ENTRY_CHANGETYPE = "changetype"; /** 变更单单据体注册工具栏 **/ public static final String ENTRY_BTN_TOOLBAR = "entry_toolbar"; /** 变更单单据体注册新增按钮 **/ public static final String ENTRY_BTN_ADD = "btn_add"; /** 变更单单据体注册删行按钮 **/ public static final String ENTRY_BTN_DELETE = "btn_delete"; /** 变更单单据体注册修改按钮 **/ public static final String ENTRY_BTN_MODIFY = "btn_modify"; /** 获得变更单单据体的标识、工具栏、控制按钮 * 获得变更单单据体的字段:变更方式和源单行ID * 各个单据通过继承此插件,增加自己的特有的单据体及单据体的操作按钮 */ public Map<String, Map<String, String>> getXBillEntryAndOp(); /** * 变更单生成前处理方法 */ public default void beforeSrcBillChange(DynamicObject srcBill) {}; /** * 变更单生成后处理方法 */ public default void afterSrcBillChange(DynamicObject xBill) {}; /** * 变更单生效后处理方法 */ public default void beforeXBillBizValid(DynamicObject xBill) {}; /** * 变更单生效后处理方法 */ public default void afterXBillBizValid(DynamicObject xBill) {}; /** * 变更单提交前处理方法 */ public default void beforeXBillSubmit(DynamicObject xBill) {}; /** * 变更单提交后处理方法 */ public default void afterXBillSubmit(DynamicObject xBill) {}; /** * 变更单保存前处理方法 */ public default void beforeXBillSave(DynamicObject xBill) {}; /** * 变更单保存后处理方法 */ public default void afterXBillSave(DynamicObject xBill) {}; }
到此就算完成了,新增的插件重新部署,变更携带数据即可生效。
赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读