致远OA实施中,使用groovy自定义函数实现客户需求(一)

致远表单函数自定义-groovy代码:阿拉伯数字转大写汉字 在致远表单设计中,为实现将阿拉伯数字转为大写汉字,通过参考大神的算法和致远表单设计方法,需要在控件中的计算方法用到函数自定义,将算法以groovy语言实现出来 阅读详情

在使用致远 OA 搭建表单时,各位同事可能会遇到一些标准公式无法实现的需求,比如跨明细表校验、提取文本字段中某种类型的数据(比如“费用化12138”需要将文本中的数字提取出来放在另一个文本或者数字控件上),亦或者需要判断这个文本是中文还是英文……诸如此类的需求。

有些朋友可能实现不了就止步于此,或者请求开发支援去了。

在小编刚接触这个系统时也只会使用标准公式,直到有一天项目上遇到了没办法配置的校验,有位前辈说其实致远开了个口子,也就是自定义函数,可以用脚本代码实现校验和计算,但很多实施不具备代码能力。碰巧小编大学学的软件工程,略懂 Java 和 Python,抱着琢磨琢磨的心态小试牛刀,从此打开新世界的大门。

不说废话,开始分享。后续小编遇到其他场景需要其他函数也会持续更新,记得关注。

    目录

    一、把文本中的数字拿出来,放到数字控件上

    二、去除网页复制的零宽非连接符

    三、判断这个文本输入的是中文还是英文

    四、明细表去重拼接自定义函数

    五、明细某个字段不能为空



    一、把文本中的数字拿出来,放到数字控件上

    需求是把文本控件中的数字提取出来,放到一个数字控件上,文本和数字都得在主表或者都在明细上(一个主表一个明细这个函数用不了)。

    效果:

    def str = param[0]
    if (str == null || str.toString().trim() == "") {
        return 0
    }
    def matcher = (str.toString() =~ /\d+/)
    def digits = ""
    while (matcher.find()) {
        digits += matcher.group()
    }
    if (digits == "") {
        return 0
    }
    return digits.toLong()

    原理就是取到文本类型参数,如果不为空则使用正则 =~ 匹配器,全局匹配连续数字 \d+,循环提取所有数字片段拼接。如果没有提取到数字返回0,否则把拼接后的数字字符串转长整型返回。这个函数因为返回值是整型类型,公式必须做在数字类型控件上。

    二、去除网页复制的零宽非连接符

    联行号等字段,客户可能去网页复制,网页数据可能存在零宽非连接符(它是一个看不见的格式控制字符,主要用于防止特定语言中的字符连写)比如网页复制招商银行某支行联行号:308100005344 ,实际数据是308100005344\u200c ,但表单上不显示。接口传输报文出错导致数据接收方校验报错。

    解决方式

    1.提示用户手动删除

    加个文本字段,用来替换掉原数据零宽非连接符,以其他方式展示,然后做校验,如果用户输入数据和这个函数结果不一致,提示用户修改。

    def bankNo = param[0]
    if (bankNo.contains("\u200c")) {
    /*将文本里的\200c替换为[ZWSP],后再配置校验去校验原数据和原数据全两个字段是否一致*/
        return bankNo.replaceAll(/\u200c/, "【ZWSP】")
    }
    return bankNo

    结果:

    2.直接用函数去除零宽非连接符和多余数据

    联行号全为数字格式,不存在其他字符,可以直接去除掉除了数字外的其他一切字符

    def bankNo = param[0]
    if (!bankNo) {
            return ""
        }
        String temp = bankNo.replaceAll(/\u200c/, "")
        String cleanNo = temp.replaceAll(/[^0-9]/, "")
    return cleanNo

    方式2的计算公式会修改用户填写数据,建议配合方式1使用,弱校验提示用户系统修改了数据。

    三、判断这个文本输入的是中文还是英文

    一张涉及国际公司使用的表单,需要判断某字段是中文还是英文,需求中中文和英文是不混用的,所以可以判断出来。小编在此基础上增加了混合判断和数字判断,可以参考下面返回值表格。

    def str = param[0]
    // 空值、空白直接返回0
    if (!str?.trim()) {
        return "empty" // 统一返回字符串,避免类型混乱
    }
    String text = str.toString()
    // 判断是否存在中文
    boolean hasChinese = (text =~ /[\u4e00-\u9fa5]/).find()
    // 判断是否存在英文字母
    boolean hasEnglish = (text =~ /[a-zA-Z]/).find()
    
    if (hasChinese && hasEnglish) {
        return "mix"
    } else if (hasChinese) {
        return "chinese"
    } else {
        return "english"
    }

     \u4e00 是 Unicode 编码,汉字或者字母介于一个范围之内,所以用正则判断输入的字符每个值是不是都在这个范围内,即可判断出是中文还是英文,或者是混合类型。

    测试用例:

    参数值返回
    (空)empty
    你好 worldmix
    今天天气很好chinese
    Hello SpringBootenglish
    123456english
    测试 123abcmix

    四、明细表去重拼接自定义函数

    需要在主表上展示明细行某一列出现了哪些数据,如果直接在主表加字段给公式等于明细,会出现重复数据,这个函数可以去重后输出。后续很多明细表校验都会用到这个函数。

    比如下面这个表,需要统计物料明细中出现哪些物料名称

    def data = param[0];
    String res = "";
    res=data.unique();
    return res.replace('[', '').replace(']', '').replace(', ', '、').trim();

    参数直接选明细字段就行,效果如下:

    这个需求有点扯淡,场景是和外部系统对接时候,明细表上某个文本字段双方约定都不能为空,咱们这边实施配置操作权限不能为空,实际业务使用中用户不知道这个字段该填啥,反手打了个空格上去,离谱的是校验就给跳过去了。。。开发老师一顿吵吵,做不了。本以为这类误操作基本不会出现,然鹅后续又出现好几单。无奈之下有了这个函数。

    这是一个组合函数,参数用到上一点的 明细表去重拼接自定义函数,原理是组合后的数据都是A、B、C、D 这样格式的文本,如果中间有一个空格,则输出是A、B、 、D 同样也是空格。只需要使用字符串的 trim()方法,去除空格后按、组成列表,再校验每一项是否为空即可

    def data = param[0]
    
    
    /* 2. 校验1:字符串以顿号开头/结尾(证明第一行或最后一行为空格) → 直接返回2(不通过)*/
    if (data.startsWith('、') || data.endsWith('、')) {
        return 2
    }
    // 3. 校验2:包含顿号的情况(说明不止一行)
    if (data.contains('、')) {
        // 按顿号分割成列表
    def list = data.split('、').toList()
    // 检查分割后的元素是否有空白/空值(trim后为空)
    def hasEmptyOrWhitespace = list.any { it.trim().isEmpty() }
    // 有空白/空值返回2,否则返回1
        return hasEmptyOrWhitespace ? 2 : 1
    } else {
    // 4. 校验3:无顿号的情况(一行数据) → 字符串trim后为空返回2,否则返回1
        return data.trim().isEmpty() ? 2 : 1
    }

    注意各类情况,开头为空,结尾为空等特殊情况。

    本次给大家分享五个函数,小编下班回家睡觉了。如果有解决不了得场景,记得关注并留言哦

      致远OA-Groovy脚本-自定义函数编写-增删改查示例 阅读详情

      相关推荐

      致远OA表单开发:用Groovy脚本实现明细表跨行取值与金额累计

      在企业管理软件和OA系统的表单开发中,处理明细表格数据是常见需求,尤其是涉及费用报销、预算编制等场景时,经常需要实现行间数据引用与动态计算,例如计算累计金额。这本质上是一个数据处理与业务逻辑自动化的问题。其技术原理在于,通过脚本语言(如Groovy)访问和操作表单的底层数据模型,实现跨行数据的精准定位与获取。这项技术的核心价值在于,能够突破标准表单公式只能进行单元格内或固定范围计算的限制,实现类似Excel中相对引用的动态计算能力,从而极大提升复杂业务表单的自动化水平和用户体验。在致远OA等平台中,通过编写

      weixin_34185512的博客 420

      致远小场景方案之简道云推送表单数据到致远OA

      集成平台不仅可主动拉取多个系统的数据,还可以接收其他系统推送的数据,并结合自身集成对接的优势,再推送给其他系统,真正实现多系统互联互通。集成平台是低代码开发集成设计工具,下载到本地的执行引擎是真正的集成中台,在集成平台设计完成后,下发设计好的流程到执行引擎,可以不用再与集成平台通信,实现多系统集成,当然前提条件是本地的执行引擎与多系统能够互通。欢迎各位咨询,寻找更多解决方案可能性!!!

      一本正经学技术 3521

      致远OA表单开发:用Groovy脚本实现明细行累计金额计算

      在协同办公(OA)系统的表单开发中,处理明细行数据的动态计算是常见的业务需求,例如费用报销、预算编制等场景下的梯级累计。其核心原理在于通过脚本语言操作表单数据模型,实现对特定行数据的访问与计算。这项技术的价值在于,它能够将复杂的业务逻辑在前端实时、直观地呈现,极大提升了数据处理的效率和用户体验,避免了依赖后端二次开发或繁琐的手工核算。具体到致远OA平台,其表单引擎支持通过Groovy脚本语言,利用内置的form对象获取明细表数据列表,并通过遍历、排序和条件判断,实现如“当前行累计金额等于本行金额加上一行累计

      weixin_34121282的博客 432

      致远OA表单自定义函数(计算N年后今天的日期 )

      需求背景 看到这个标题,可能好些人懵了,N年后的今天这么简单,还需要计算么? 的确,人脑算很简单,但是咱们的表单中…… 前日,有人跟大表哥来电,就说客户要根据档案的归档日期和保存年限,自动计算出档案的销毁日期。说白了,就是要计算出N年后同月同日那天的日期。貌似简单,可是在咱们表单中,目前还真没有找到快捷的方法计算出来,就因为公历中有闰年。 但是,问题难不倒咱,试试咯。结果,兜兜转转,还是能得到想要的结果。 根据现有的函数和计算方式,需要增加3个...

      致远OA的博客 3201

      别再手动查重了!用Groovy脚本搞定致远OA表单明细表间人员重复判断

      本文介绍了如何使用Groovy脚本在致远OA系统中实现表单明细表间人员重复判断的自动化查重。通过详细的脚本实现和逐行解析,帮助管理员和业务顾问高效解决手动查重耗时耗力的问题,提升工作效率。适用于培训管理、招聘管理等多种场景。

      weixin_30435261的博客 625

      致远OA表单动态权限控制:基于自定义函数的智能日期校验

      本文详细介绍了致远OA系统中基于自定义函数的智能日期校验方法,解决表单动态权限控制中的当月天数计算问题。通过Groovy脚本实现闰年判断和日期适配,提升考勤表等场景的数据准确性,避免手动维护的繁琐。方案具有强复用性和易维护性,适用于合同管理、项目计划等多个业务场景。

      weixin_42528780的博客 414

      【致远】Groovy函数自定义之取月份天数

      特别每年的2月份较为特殊,存在28天和29天两种情况。并注意参数设置中,所选择字段的先后顺序。想要快速提取工资月份对应的天数,不想手工录入。两个字段分别对应的是工资发放所在的年份、月份。分别是【工资年】、【工资月】两个字段,然后通过Groovy代码类型,在设计职员应出勤天数的时候,在表单上涉及两个字段,

      努力不懈的为广大客户提供优质的产品与真诚、贴心、专业的服务! 1127

      致远OA表单开发实战:用Groovy脚本搞定明细表间人员查重(附完整代码)

      本文详细介绍了在致远OA表单开发中,如何利用Groovy脚本实现跨明细表人员查重功能。通过实战案例和完整代码,帮助开发者高效解决培训管理系统中的重复录入问题,提升数据准确性。文章涵盖业务场景分析、核心算法设计、多场景适配及性能优化等关键内容,特别适合需要处理复杂表单校验的企业开发者。

      weixin_30520015的博客 626

      致远OA实施中,使用groovy自定义函数实现客户需求-时间校验

      本文针对致远表单绘制工具中时间计算功能的不足,通过自定义函数提供了两种实用解决方案:一是校验明细表中同一员工的日期时间段是否重叠,避免重复上报;二是精确计算两个日期时间之间的小时差,满足特殊业务规则。文章详细说明了参数类型识别、Groovy代码实现、函数调用方法及实际效果验证,为开发者提供了可直接复用的代码示例。在表单绘制工具中,对于时间的计算公式致远只提供了日期差和日期时间差,可以算出两个时间中间的差额。但对于时间,需要校验的场景和计算的情况很多,会存在系统校验无法满足的情况。

      ho_t_potato的博客 482

      致远OA表单开发小技巧:一个Groovy函数搞定明细表数据的‘分组统计’与‘字符串拼接’

      本文详细介绍了在致远OA表单开发中,如何利用Groovy脚本实现明细表数据的智能聚合,包括分组统计和字符串拼接功能。通过实战案例和代码解析,展示了如何高效处理大量数据,提升表单开发的自动化和灵活性,特别适用于人力资源排班等复杂业务场景。

      weixin_30437847的博客 863

      别再手动汇总了!用Groovy脚本实现致远OA表单明细表的智能分类拼接

      本文介绍了如何利用Groovy脚本在致远OA表单中实现明细表的智能分类拼接,提升办公效率。通过5个实战技巧,包括字符串处理、智能分类实现、高级健壮性处理和多场景应用,帮助用户告别手工统计,自动完成数据分类与汇总。特别适合需要频繁处理表单数据的行政和财务人员。

      weixin_30887919的博客 390

      致远OA实施中,使用groovy自定义函数实现客户需求-跨明细表校验

      本期分享了跨明细表校验,校验两个明细表中数据是否存在对应关系

      ho_t_potato的博客 310

      致远OA表单开发实战:用Groovy脚本实现明细表人员按班次自动汇总(附完整代码)

      本文详细介绍了在致远OA表单开发中,如何利用Groovy脚本实现明细表人员按班次自动汇总的实战方法。通过优化字符串处理和正则匹配逻辑,提升排班数据汇总的效率和准确性,适用于人力资源管理等场景,并附完整代码示例。

      weixin_30675247的博客 305

      致远OA表单自定义函数(取上一行金额)

      需求探讨 前期,在我开始分享自定义函数时,有同事就建议小编研究一下取重复表上一行金额的自定义函数。 解决办法:主表中控件取出明细表金额数组,然后利用当前行的行号计算出上一行的行号,最后查找数组中对应行号的值。 代码分享 主表 def st = param[0]; String res = ""; if(null != st) { for(t in st) { res += t.replace(',', '')+'、' ; } } ...

      致远OA的博客 2920

      别再手动统计了!致远OA表单这个Groovy自定义函数,5分钟搞定明细表分类汇总

      本文介绍了如何利用致远OA表单中的Groovy自定义函数快速实现明细表分类汇总,大幅提升数据处理效率。通过详细的代码示例和实战案例,展示了如何用几行脚本替代繁琐的手动操作,特别适合财务、项目管理等场景。

      weixin_30755393的博客 330

      别再手动算天数了!用Groovy脚本在致远OA表单里实现智能考勤天数控制

      本文介绍了如何在致远OA表单中使用Groovy脚本实现智能考勤天数控制,通过自定义函数自动计算当月天数,动态调整表单字段,解决手动处理带来的数据混乱和效率低下问题。适用于考勤管理、财务月度报表等多种场景,大幅提升工作效率。

      weixin_26934905的博客 213

      致远OA表单自定义函数(明细表字符串拼接换行显示 )

      需求背景 有时客户的需求比较难,有时客户的需求比较特殊,为了实现需求我们通常绞尽脑汁,服务好客户就是我们的宗旨。(例如:字符串如何换行显示?) 要实现这个需求不难,grovy中有转义符\n可实现换行。下面就直接拿上上期的案例来演示这个换行效果了。 代码分享 String tmp1 = param[0]; return tmp1.replace('[', '').replace(']', '').replace(', ', "\n").tr...

      致远OA的博客 2354

      Groovy学习资料

      自己总结的资料,通过这些资料已经开发出实际项目,已经上线

      下一篇: 致远OA实施中,使用groovy自定义函数实现客户需求-跨明细表校验
      安详。
      博客等级 码龄5年 29粉丝 3原创
      评论
      成就一亿技术人!
      拼手气红包6.0元
      还能输入1000个字符
       
       条评论被折叠 查看
      添加红包

      请填写红包祝福语或标题

      个

      红包个数最小为10个

      元

      红包金额最低5元

      当前余额3.43元 前往充值 >
      需支付:10.00元
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付元
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值