自定义表达式函数

由于表达式内的函数在前后端都可能执行,所以同一个表达式需要前后端同时定义

后端表达式自定义

package pro.shushi.pamirs.demo.core.fun;

import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import pro.shushi.pamirs.meta.annotation.Fun;
import pro.shushi.pamirs.meta.annotation.Function;
import pro.shushi.pamirs.meta.common.constants.NamespaceConstants;

import java.util.Date;
import java.util.List;

import static pro.shushi.pamirs.meta.enmu.FunctionCategoryEnum.TEXT;
import static pro.shushi.pamirs.meta.enmu.FunctionCategoryEnum.TIME;
import static pro.shushi.pamirs.meta.enmu.FunctionLanguageEnum.JAVA;
import static pro.shushi.pamirs.meta.enmu.FunctionOpenEnum.LOCAL;
import static pro.shushi.pamirs.meta.enmu.FunctionSceneEnum.EXPRESSION;

/**
 * 自定义函数
 */
@Fun(NamespaceConstants.expression)
public class DemoCustomFunctions {

    @Function.Advanced(
            displayName = "逗号分隔字符串数组", language = JAVA,
            builtin = true, category = TEXT
    )
    @Function.fun("MY_COMMA")
    @Function(name = "MY_COMMA", scene = {EXPRESSION}, openLevel = LOCAL,
            summary = "函数示例: MY_COMMA(list)\n函数说明: 将字符串数组转为逗号分隔的字符串"
    )
    public String myComma(List<String> list) {
        return StringUtils.join(list, ",");
    }

    @Function.Advanced(
            displayName = "根据出生算年龄", language = JAVA,
            builtin = true, category = TIME
    )
    @Function.fun("CALC_AGE")
    @Function(name = "CALC_AGE", scene = {EXPRESSION}, openLevel = LOCAL,
            summary = "函数示例: CALC_AGE(birthDate)\n函数说明: 根据出生算年龄"
    )
    public Integer calcAge(Date birthDate) {
        if (birthDate == null) {
            return 0;
        }
        return new DateTime().getYear() - new DateTime(birthDate).getYear();
    }
}

前端表达式定义

定义后导入到main.ts里,导入@kunlun/dependencies的代码之后

import { Expression } from '@kunlun/dependencies';
import dayjs from 'dayjs';

Expression.getInstance().registerFunction('MY_COMMA', ['array'], (list: string[]) => {
  return (list || [])
    .map((value) => {
      return `'${value}'`;
    })
    .join(',');
});

Expression.getInstance().registerFunction('CALC_AGE', ['string'], (birthDate: string) => {
  if (birthDate == null) {
    return 0;
  }
  return Math.ceil(dayjs().year() - dayjs(birthDate, 'YYYY-MM-DD HH:mm:ss').year());
});
界面设计器拖入年龄的非存储字段,属性面板的计算公式的函数中选择自定义的函数

注意:不能在时间类型字段的计算公式使用该函数,因为计算后的结果为数字类型,与原字段不一致

自定义表达式函数

表格页可以看到根据发布时间计算的年龄,与预期一致

自定义表达式函数

Oinone社区 作者:nation原创文章,如若转载,请注明出处:https://doc.oinone.top/install/frontendinstall/14564.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
nation的头像nation数式员工
上一篇 2024年7月10日 上午11:00
下一篇 2024年7月11日 下午4:29

相关推荐

  • 如何配置文件存储地址为相对路径

    介绍 大部分情况下,文件存储的配置都会配置uploadUrl和downloadUrl的值,这样图片和文件类型的业务字段会存储带域名的全路径文件地址,但是有些场景需要用户在专有内网的时候访问内网的文件存储地址,用户在公网的时候通过公网访问(一般情况下这个公网ip内部最后还是会转发到内网)文件存储地址,这个时候就要求存在数据库字段里的不能是全路径的地址,只能是想…

    2024年6月21日
    69100
  • 东方通Web和Tomcat部署Oinone项目

    场景描述 在国产化和信创体系下,可能会要求使用东方通Web服务器(TongWeb)或者Tomcat等应用服务器部署项目;本文介绍使用TongWeb或者Tomcat部署Oinone项目时的方法。 你需要了解 了解Tomcat容器,TongWeb的操作基本和Tomcat类似; 项目打包成成war包和Jar的区别; Springboot项目打成war包 详细步骤参…

    2024年5月18日
    61500
  • Oinone离线部署设计器JAR包

    概述 Oinone平台为合作伙伴提供了多种部署方式,这篇文章将介绍如何在私有云环境部署Oinone平台JAR包。 本文以5.2.6版本为例进行介绍。 部署环境要求 包含全部中间件及设计器服务的环境要求 CPU:8 vCPU 内存(RAM):16G以上 硬盘(HDD/SSD):60G以上 仅设计器服务的环境要求 CPU:8 vCPU 内存(RAM):8G以上 …

    2024年11月1日
    16400
  • 【PostgreSQL】后端部署使用PostgreSQL数据库

    PostgreSQL数据库配置 驱动配置 Maven配置(14.3版本可用) <postgresql.version>42.6.0</postgresql.version> <dependency> <groupId>org.postgresql</groupId> <artifactId&g…

    2023年11月1日
    42500
  • 后端初始化工程启动

    在拿到Oinone初始化的后端工程体验时,配置修改点

    2023年11月3日
    73300

发表回复

登录后才能评论