二开案例.表达式.单据保存前校验文本字段的值必须是数字

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

二开案例.表达式.单据保存前校验文本字段的值必须是数字

【应用场景】

单据保存前校验文本字段的值必须是数字

【案例演示】

采购订单,明细信息单据体新增一个文本字段,单据保存前,校验该文本字段的值必须是数字(含小数)。

【实现步骤】

<1>BOSIDE扩展采购订单,新增文本字段1用于存储物料的重量,文本字段2用于存储物料的体积。


<2>保存操作新增校验规则,设置完毕后,保存元数据。

单据合法性校验:文本字段1必须是数字:

计算公式:

F_Jac_Text1='0' OR (F_Jac_Text1<>null AND F_Jac_Text1<> '' AND F_Jac_Text1<>' ' AND F_Jac_Text1.count('.')=0 AND F_Jac_Text1.isdigit()=False) OR (F_Jac_Text1<>null AND F_Jac_Text1<> '' AND F_Jac_Text1<>' ' AND F_Jac_Text1.count('.')=1 AND (F_Jac_Text1.split('.')[0].isdigit()=False OR F_Jac_Text1.split('.')[1].isdigit()=False)) OR (F_Jac_Text1<>null AND F_Jac_Text1<> '' AND F_Jac_Text1<>' ' AND F_Jac_Text1.count('.')>1)

单据合法性校验:文本字段2必须是体积:

计算公式:

(F_Jac_Text1<>null AND F_Jac_Text1<>'' AND F_Jac_Text1<>' ' AND F_Jac_Text1.count('*')<>2) OR (F_Jac_Text1<>null AND F_Jac_Text1<>'' AND F_Jac_Text1<>' ' AND F_Jac_Text1.count('*')=2 AND ((F_Jac_Text1.split('*')[0]='0' OR (F_Jac_Text1.split('*')[0]<>null AND F_Jac_Text1.split('*')[0]<> '' AND F_Jac_Text1.split('*')[0]<>' ' AND F_Jac_Text1.split('*')[0].count('.')=0 AND F_Jac_Text1.split('*')[0].isdigit()=False) OR (F_Jac_Text1.split('*')[0]<>null AND F_Jac_Text1.split('*')[0]<> '' AND F_Jac_Text1.split('*')[0]<>' ' AND F_Jac_Text1.split('*')[0].count('.')=1 AND (F_Jac_Text1.split('*')[0].split('.')[0].isdigit()=False OR F_Jac_Text1.split('*')[0].split('.')[1].isdigit()=False)) OR (F_Jac_Text1.split('*')[0]<>null AND F_Jac_Text1.split('*')[0]<> '' AND F_Jac_Text1.split('*')[0]<>' ' AND F_Jac_Text1.split('*')[0].count('.')>1)) OR (F_Jac_Text1.split('*')[1]='0' OR (F_Jac_Text1.split('*')[1]<>null AND F_Jac_Text1.split('*')[1]<> '' AND F_Jac_Text1.split('*')[1]<>' ' AND F_Jac_Text1.split('*')[1].count('.')=0 AND F_Jac_Text1.split('*')[1].isdigit()=False) OR (F_Jac_Text1.split('*')[1]<>null AND F_Jac_Text1.split('*')[1]<> '' AND F_Jac_Text1.split('*')[1]<>' ' AND F_Jac_Text1.split('*')[1].count('.')=1 AND (F_Jac_Text1.split('*')[1].split('.')[0].isdigit()=False OR F_Jac_Text1.split('*')[1].split('.')[1].isdigit()=False)) OR (F_Jac_Text1.split('*')[1]<>null AND F_Jac_Text1.split('*')[1]<> '' AND F_Jac_Text1.split('*')[1]<>' ' AND F_Jac_Text1.split('*')[1].count('.')>1)) OR (F_Jac_Text1.split('*')[2]='0' OR (F_Jac_Text1.split('*')[2]<>null AND F_Jac_Text1.split('*')[2]<> '' AND F_Jac_Text1.split('*')[2]<>' ' AND F_Jac_Text1.split('*')[2].count('.')=0 AND F_Jac_Text1.split('*')[2].isdigit()=False) OR (F_Jac_Text1.split('*')[2]<>null AND F_Jac_Text1.split('*')[2]<> '' AND F_Jac_Text1.split('*')[2]<>' ' AND F_Jac_Text1.split('*')[2].count('.')=1 AND (F_Jac_Text1.split('*')[2].split('.')[0].isdigit()=False OR F_Jac_Text1.split('*')[2].split('.')[1].isdigit()=False)) OR (F_Jac_Text1.split('*')[2]<>null AND F_Jac_Text1.split('*')[2]<> '' AND F_Jac_Text1.split('*')[2]<>' ' AND F_Jac_Text1.split('*')[2].count('.')>1))))

---------------------------------------------------------------------------------------------------------



【功能验证】

登录业务站点,打开采购订单编辑界面,文本1和文本2录入非法数据,点击保存菜单,此时保存操作因校验器拦截而被终止。

---------------------------------------------------------------------------------------------------------



【扩充知识】

<1>count():用于统计字符串里某个字符出现的次数。

<2>split():通过指定分隔符对字符串进行切片。

<3>isdigit():检测字符串是否只由数字组成。


本案例中,仅判断下文本是否是数字或小数,表达式就已经复杂冗余的没法看了,建议采用自定义表达式函数实现,C#下判断文本是否是数字要简练多了。

---------------------------------------------------------------------------------------------------------











【金蝶云星空BOS二次开发案例演示】https://vip.kingdee.com/article/94751030918525696

二开案例.表达式.单据保存前校验文本字段的值必须是数字

【应用场景】单据保存前校验文本字段的值必须是数字【案例演示】采购订单,明细信息单据体新增一个文本字段,单据保存前,校验该文本字段的...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息