金蝶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开发工具一样添加控件,例如,添加一个文本控件,从右边控件栏中拖到页面即可。 注:对于脚本的更改可以无需反启用方案,对界面操作之后,如新增修改控件,需要反启用进行保存,在进行启用该方案,修改的内容才会更新。方案在未启用的时候,其中引用的单据是不能进行操作的

相关推荐
吴佳浩1 天前
Python入门指南(六) - 搭建你的第一个YOLO检测API
人工智能·后端·python
踏浪无痕1 天前
JobFlow已开源:面向业务中台的轻量级分布式调度引擎 — 支持动态分片与延时队列
后端·架构·开源
Pitayafruit1 天前
Spring AI 进阶之路05:集成 MCP 协议实现工具调用
spring boot·后端·llm
ss2731 天前
线程池:任务队列、工作线程与生命周期管理
java·后端
不像程序员的程序媛1 天前
Spring的cacheEvict
java·后端·spring
踏浪无痕1 天前
JobFlow 实战:无锁调度是怎么做到的
后端·面试·架构
shoubepatien1 天前
JAVA -- 11
java·后端·intellij-idea
喵个咪1 天前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:kratos-bootstrap 入门教程(类比 Spring Boot)
后端·微服务·go
uzong1 天前
从大厂毕业后,到小公司当管理,十年互联网老兵的思维习惯阶段复盘
后端
追逐时光者1 天前
一个 WPF 开源、免费的 SVG 图像查看控件
后端·.net