今天继续分享在致远oa中,使用自定义函数实现客户的需求,这期着重于分享明细表之间的对应关系校验。
上期说过,很多明细表校验都会用到明细表去重拼接自定义函数来统计明细数据,作为参数做校验使用,大家可以打开上期文章回顾一下。具体代码就不放这了。

直接上案例:
明细表一:
根据名称汇总后得到明细表二:

两个明细表分别在主表上做去重拼接:

明细表二中的数据是否存在于明细表一
很多小伙伴在实施过程中可能会遇到这种场景:“ 我可以填写第一个明细表内容,你帮我汇总到明细表二中,产生对应关系。但是,如果我发现某行数据有误或者领导打回了,你得让我能去删除某条数据而不是重做表单。”
那如果我两个明细表都让你可以删除数据,万一只在明细一里删了,明细二里忘记删了咋整!那数据就对应不上了啊!
于是有了这个函数。我们先来分析两个明细表汇总后的结果
物料明细拼接(明细表一):A、B、C
汇总明细拼接(明细表二):A、B、C
这俩都是文本字段,如果要校验两个明细数据是否一一对应,就必须得轮询遍历明细表二中的每一项是否在明细表一中存在。
(为什么不能直接明细表一拼接 == 明细表二拼接呢?在这个例子中当然可以这么做,但如果你的用户业务比较发散,用户手动调整明细行顺序,比如明细表二调整了二三行顺序,拼接后数据就成了A、C、B,那这直接算就会出现不相等的问题。)
def baojianpinjie = param[0]; //参数一
def baoJian = param[1]; //参数二
if (baoJian == '、' && baojianpinjie=='') {
return 1;
}
def baojianpinjieArray = baojianpinjie.split("、");
def baoJianArray = baoJian.split("、");
boolean allExist = true;
def notFoundList = [];
for (def baojianpinjieItem : baojianpinjieArray) {
boolean found = false;
for (def baoJianItem : baoJianArray) {
if (baoJianItem.trim().equals(baojianpinjieItem.trim())) {
found = true;
break;
}
}
if (!found) {
notFoundList.add(baojianpinjieItem.trim());
allExist = false;
}
}
if (allExist) {
return 1;
} else {
return notFoundList.join("、");
}
原理是将两个字符串按顿号拆分成两个列表,再用双重for循环遍历两个列表中的数据。如果匹配不到,将这个匹配不到的元素加到一个新定义的字符串上。如果都匹配上则返回1,否则返回这个新字符串。然后就能做校验了:如果结果不为1,则将结果输出提示。
输出结果:
校验的是参数一都存在于参数 二 ,如果都存在,则返回1,如果有不存在的数据,则逗号拼接后返回。例如:
明细表一:

明细表二

则结果为:


其中一定要注意参数的顺序,参数顺序是(明细表一拼接,明细表二拼接)则校验的是明细表二多于明细表一的数据,反之交换参数顺序(明细表二拼接,明细表一拼接)则校验明细表一多余明细表二的数据。
这个功能一般是两个明细表相互校验, 如果要反向校验明细表一数据是否存在明细表二,只需要把代码复制一遍,改一下参数顺序即可。注意一定要捋清楚是校验的哪个明细表存在于哪个明细表,小编当时捋这个脑子都捋乱了。
这期就分享这一个代码,就我自己看来应该还算比较实用的功能。手上还有好几个函数等待分享,觉得有帮助就多多点赞关注嗷。大家如果有解决不了的问题也可以联系我哦!!

啰嗦一句,作为一个没接触致远底层的实施,小编现在也没搞明白致远自定义函数为什么不能重载,每次做相同的脚本代码,参数换了都得重新取名重新审核。有没有致远内部的研发老师或者了解的老师,看到这里能给解答一下😀😀😀
625



被折叠的 条评论
为什么被折叠?



