关于DEP如何实现字段必录以及常见场景原创
金蝶云社区-Hadwin
Hadwin
8人赞赏了该文章 1,678次浏览 未经作者许可,禁止转载编辑于2020年06月10日 19:58:49

业务场景:某些字段需要必录,但是标准产品已无法实现满足,需要变通处理。下面以几个示例作为演示:

示例一:表头分录字段必录已F7和文本字段为例

image.png

实现思路:编辑界面--扩展定义--保存前置脚本校验即可,若提交也需要提交也加必录

image.png

实现效果:

image.png

参考脚本:

var address = pluginCtx.getKDTextField("txtaddress").getStringValue();

if(address == null){

com.kingdee.eas.util.client.MsgBox.showInfo("交货地址不能为空");

      com.kingdee.eas.util.SysUtil.abort();

}


var rowCount = pluginCtx.getKDTable("kdtEntrys").getRowCount();

for(var i=0;i<rowCount;i++){

    var materialCode = pluginCtx.getKDTable("kdtEntrys").getRow(i).getCell("materialCode").getValue();

    if(materialCode == null ){

       com.kingdee.eas.util.client.MsgBox.showInfo("物料编码不能为空");

        com.kingdee.eas.util.SysUtil.abort();

    }

}

示例二:在某些组织下实现字段必录(原理和上面一致将必录组织写死即可,还是已交货地址为例当为环球机械集团实现必录)

image.png

测试效果:

image.png

示例代码:

//获取当前财务组织

var company = pluginCtx.getUIContext().get("sysContext").getCurrentFIUnit().toString();

var address = pluginCtx.getKDTextField("txtaddress").getStringValue();

if( company.equals("环球机械集团")){

if(address == null){

com.kingdee.eas.util.client.MsgBox.showInfo("请填写交货地址");

           com.kingdee.eas.util.SysUtil.abort();

}

}

示例三:实现互斥,如下图有两个选择框,只能任选其一,不能为空,两个也不能同时存在

image.png

分析:该问题可以有以下两种思路处理:

方案一:分别为两个字段加上监听,调用控件setSelectd()方法,设置true或false处理,缺点是当二者都为空时无法处理,还要在保存前置脚本加个非空校验

方案二:直接使用保存脚本,校验不能为空,也不能全选,即可解决

image.png

实现效果:

image.png

参考示例:

var select1 = pluginCtx.getKDCheckBox("chktest1").isSelected();

var select2 = pluginCtx.getKDCheckBox("chktest2").isSelected();

if(select1 ==false && select2 == false){

  com.kingdee.eas.util.client.MsgBox.showInfo("二者任选其一,否则保存失效");

        com.kingdee.eas.util.SysUtil.abort();

}else{

if(select1 == true && select2 == true){

  com.kingdee.eas.util.client.MsgBox.showInfo("二者只能选其一否则保存失效");

      com.kingdee.eas.util.SysUtil.abort();

 }

}

总结:必录需求很多,但原理只需调用对应的方法,进行校验即可。方法一般由控件业务提供,DEP只是调用方,示例二调用了获取组织的方法,示例三调用了控件的isSelected()方法,总之根据对应场景编写对应脚本即可。


赞 8