即时库存锁库校验预计解锁日期为必录原创
金蝶云社区-邱育华
邱育华
7人赞赏了该文章 746次浏览 未经作者许可,禁止转载编辑于2021年11月24日 11:14:24

【客户需求】: 即时库存锁库里需要设置锁库天数、预计解锁日期、到期解锁起始日为必录字段,在BOS里设置了必录,保存时没有检查。保存按钮是一个空操作不能设置校验规则

image.png


image.png



【需求分析】:

1、选择锁库物料,加载解锁界面时,系统默认会填写"到期解锁起始日"为当前日期,锁库天数、预计解锁日期为空,填写"预计解锁日期",自动计算"锁库天数",BOS中针对"预计解锁日期"设置为必录

2、保存操作的点击事件为空,未配置任何服务和操作,相关的保存和校验逻辑都写在动态表单的插件中,无法干预

3、相关插件未对"预计解锁日期"是否录入做校验


【实现方案】:针对上面3点的分析,尝试以下扩展方案

1、方案1(方案不可行)、保存按钮点击事件挂载"空操作",在操作上添加字段必录的校验规则,测试发现可以校验字段是否必录,但是无法终止按钮事件的继续执行。

2、方案2(方案不可行)、使用Python插件,重写BarItemClick事件,在插件中校验字段是否必录,校验不通过设置e.Cancel = True或者抛出异常,依然无法终止按钮事件的继续执行。

3、方案3(方案可行)、使用Python插件,重写BarItemClick事件,新增点击按钮,隐藏原有的保存按钮,插件中校验字段是否必录,校验不通过则弹出提示信息,校验通过则触发原有"保存"按钮的执行事件。                                                                     

import clr 
clr.AddReference("System")
clr.AddReference("Kingdee.BOS")
clr.AddReference("Kingdee.BOS.Core")
clr.AddReference("Kingdee.BOS.DataEntity")
from System import *
from System import StringComparison
from Kingdee.BOS.Core.DynamicForm import *
from Kingdee.BOS.Core.Metadata.FieldElement import *
from Kingdee.BOS.Core.DynamicForm.PlugIn.Args import *
from Kingdee.BOS.Core.Metadata import *
from Kingdee.BOS.Orm.DataEntity import *
def BarItemClick(e):
    if e.BarItemKey.Equals("TBTEST", StringComparison.OrdinalIgnoreCase):
        subEntity = this.View.BillBusinessInfo.GetEntity("FEntity")
        subEntityList = this.View.Model.GetEntityDataObject(subEntity)
        flag = 0
        if subEntityList.Count > 0:
            for item in subEntityList:
                seq = Convert.ToInt32(item["Seq"])
                subMaterial = item["MaterialId"]
                releaseDate = item["ReleaseDate"] # 预计解锁时间
                if releaseDate is None:
                    errMes = "(第" + str(seq) + "行物料【" + str(subMaterial["Name"])  + "】的预计解锁时间不能为空\r\n"
                    this.View.ShowErrMessage(errMes)
                    flag = 1
                    
        if flag == 0:
            this.View.GetMainMenu().ItemClick("tbSave");
            this.View.SendDynamicFormAction(this.View);


            

【实现效果】

image.png


image.png


【参考】

在表单插件中触发主菜单按钮点击事件】  


图标赞 7
7人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0