本文介绍了在业务场景中处理字段必录需求的几种变通方法。通过编辑界面扩展定义和保存前置脚本校验,实现字段的必录校验。示例包括表头分录字段必录、特定组织下字段必录以及实现字段互斥选择。总结指出,必录需求的处理原理在于调用相应方法进行校验,根据具体场景编写脚本即可。
业务场景:某些字段需要必录,但是标准产品已无法实现满足,需要变通处理。下面以几个示例作为演示:
示例一:表头分录字段必录已F7和文本字段为例
实现思路:编辑界面--扩展定义--保存前置脚本校验即可,若提交也需要提交也加必录
实现效果:
参考脚本:
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();
}
}
示例二:在某些组织下实现字段必录(原理和上面一致将必录组织写死即可,还是已交货地址为例当为环球机械集团实现必录)
测试效果:
示例代码:
//获取当前财务组织
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();
}
}
示例三:实现互斥,如下图有两个选择框,只能任选其一,不能为空,两个也不能同时存在
分析:该问题可以有以下两种思路处理:
方案一:分别为两个字段加上监听,调用控件setSelectd()方法,设置true或false处理,缺点是当二者都为空时无法处理,还要在保存前置脚本加个非空校验
方案二:直接使用保存脚本,校验不能为空,也不能全选,即可解决
实现效果:
参考示例:
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()方法,总之根据对应场景编写对应脚本即可。
推荐阅读