金蝶eas-dep反写上游单据

上游单据下推单据保存后,反写数据回去,当删除时,也反写上游数据

下推保存后操作的反写脚本

放在后置脚本

js 复制代码
var ctx = pluginCtx.getContext();
//保存方法的入参是ObjectValue
var model = methodCtx.getParamValue(0);
//所以获取主键需要通过getId
var id = model.getId();
//当前单据表
var currentTb = "tb_current";
//上游源单据表
var srcTb = "tb_src";
//来源单据表类型,通过字段FSOURCEBILLTYPEID查看
var bosType = "bostype...";
//需要反写的字段名
var fieldName = "";
//该字段更新的值
var fieldNameVal = "";
//获取数据库值
if(id != null){
    //根据FSOURCEBILLID获取上游单据id 
    var sql = "select FSOURCEBILLID,FSOURCEBILLTYPEID from " + currentTb + " where fid = '" + id + "'";
    var rs = com.kingdee.eas.util.app.DbUtil.executeQuery(ctx,sql);
    var editedId = null;
    while( rs != null && rs.next()){
        //来源单据为指定单据时,反写该单据
            var srcBosType = rs.getString("FSOURCEBILLTYPEID");
            if(srcBosType != null && srcBosType ==  bosType){
                var srcId =  rs.getString("FSOURCEBILLID");
                //如果源单据已经被更新过
                if(srcId != null && srcId != editedId){
                    //执行更新数据
                    var editSql = "UPDATE " + srcTb +" SET " +  fieldName + " = " + fieldNameVal + " WHERE  FID = '" + srcId + "'";
                    com.kingdee.eas.util.app.DbUtil.execute(ctx,editSql);
                    editedId = srcId;
                }
            }
                           
     }

}

删除操作

删除反写的脚本放在前置脚本

js 复制代码
//在删除的前置脚本里填写
var ctx = pluginCtx.getContext();
//删除方法的入参是 IObjectPK
var model = methodCtx.getParamValue(0);
//所以直接toString就可以
var id = model.toString();
//当前单据表
var currentTb = "";
//源单据表
var srcTb = "";
//源单据表类型
var bosType = "";
//需要更新的字段
var fieldName = "";
//更新的值
var fieldNameVal = 0;
 //获取数据库值
if(id != null){
     var sql = "select FSOURCEBILLID,FSOURCEBILLTYPEID from " + currentTb + " where fid = '" + id + "'";
     var rs = com.kingdee.eas.util.app.DbUtil.executeQuery(ctx,sql);
     var editedId = null;
     while( rs != null && rs.next()){
        //来源单据为指定单据时,反写该单据
            var srcBosType = rs.getString("FSOURCEBILLTYPEID");
            if(srcBosType != null && srcBosType == bosType ){
                var srcId =  rs.getString("FSOURCEBILLID");
                if(srcId != null && srcId != editedId){
                    //判断该源单据是否还存在其他下游单据(会存在可以多次生成下游单据的情况),如果存在,则不反写
                    var ifSql = "SELECT FID FROM " + currentTb + " WHERE FSOURCEBILLID = '"+srcId + "'";
                    var ifRs = com.kingdee.eas.util.app.DbUtil.executeQuery(ctx,ifSql);
                    //因为此时是前置脚本,还没有执行删除操作,所以应至少存在一条数据
                    if(ifRs.size() <= 1){
                        var editSql = "UPDATE " + srcTb +" SET " +  fieldName + " = " + fieldNameVal + " WHERE  FID = '" + srcId + "'";
                        com.kingdee.eas.util.app.DbUtil.execute(ctx,editSql);
                        editedId = srcId;
                    }
                    
                }
            }
                           
     }

}

简单的反写上游单据某个字段值时,可以通过dep的实体扩展点进行。也就是实体的扩展定义,上述脚本是基于实体扩展点的,脚本可以直接粘贴使用,填充脚本中定义的变量即可,查询的sql可以根据实际情况做出调整,思路都是通过当前单据id查询出上游源单据id,在通过源单据id进行更新操作

注意:如果是在编辑界面的扩展定义中编写的脚本

js 复制代码
com.kingdee.eas.util.app.DbUtil.executeQuery(ctx,sql);

该类DbUtil 不能在编辑界面的扩展点中使用,可以换成FMIsqlFacadeFactory

js 复制代码
var fMIsqlFacade =  com.kingdee.eas.fm.common.FMIsqlFacadeFactory.getRemoteInstance();
//查询方法
var rs = fMIsqlFacade.executeQuery(sql,null); 
//更新方法
var rs = fMIsqlFacade.executeSgl(sql); 

同样的,在编辑界面想要获取单据对象也需要不能通过methodCtx 来实现,需要换成pluginCtx.getDataObject()

js 复制代码
var data =  pluginCtx.getDataObject();
var id = date.getId();

补充:系统标准单据如何添加自定义的字段

打开动态扩展平台

如果需要的扩展方案未存在,需要引入

新增一个方案,其实就是一个目录

导入业务单元

在打开的页面选择需要调整的业务单元

导入完成后打开编辑页面,即可像bos开发工具一样添加控件,例如,添加一个文本控件,从右边控件栏中拖到页面即可。 注:对于脚本的更改可以无需反启用方案,对界面操作之后,如新增修改控件,需要反启用进行保存,在进行启用该方案,修改的内容才会更新。方案在未启用的时候,其中引用的单据是不能进行操作的

相关推荐
两码事27 分钟前
告别繁琐的飞书表格API调用,让飞书表格操作像操作Java对象一样简单!
java·后端
shark_chili1 小时前
面试官再问synchronized底层原理,这样回答让他眼前一亮!
后端
灵魂猎手1 小时前
2. MyBatis 参数处理机制:从 execute 方法到参数流转全解析
java·后端·源码
易元1 小时前
模式组合应用-桥接模式(一)
后端·设计模式
柑木1 小时前
隐私计算-SecretFlow/SCQL-SCQL的两种部署模式
后端·安全·数据分析
灵魂猎手1 小时前
1. Mybatis Mapper动态代理创建&实现
java·后端·源码
泉城老铁1 小时前
在秒杀场景中,如何通过动态调整线程池参数来应对流量突增
后端·架构
用户9194287745952 小时前
FastAPI (Python 3.11) Linux 实战搭建与云部署完全指南(经验)
后端
板板正2 小时前
Spring Boot 整合MongoDB
spring boot·后端·mongodb