4.1.12 函数之内置函数与表达式

本文意在列全所有内置函数与表达式,方便大家查阅。

一、内置函数

内置函数是系统预先定义好的函数,并且提供表达式调用支持。

通用函数

数学函数

表达式 名称 说明
ABS 绝对值 函数场景: 表达式函数示例: ABS(number)函数说明: 获取number的绝对值
FLOOR 向下取整 函数场景: 表达式函数示例: FLOOR(number)函数说明: 对number向下取整
CEIL 向上取整 函数场景: 表达式函数示例: CEIL(number)函数说明: 对number向上取整
ROUND 四舍五入 函数场景: 表达式函数示例: ROUND(number)函数说明: 对number四舍五入
MOD 取余 函数场景: 表达式函数示例: MOD(A,B)函数说明: A对B取余
SQRT 平方根 函数场景: 表达式函数示例: SQRT(number) 函数说明: 对number平方根
SIN 正弦 函数场景: 表达式函数示例: SIN(number)函数说明: 对number取正弦
COS 余弦 函数场景: 表达式函数示例: COS(number)函数说明: 对number取余弦
PI 圆周率 函数场景: 表达式函数示例: PI() 函数说明: 圆周率
ADD 相加 函数场景: 表达式函数示例: ADD(A,B)函数说明: A与B相加
SUBTRACT 相减 函数场景: 表达式函数示例: SUBTRACT(A,B)函数说明: A与B相减
MULTIPLY 乘积 函数场景: 表达式函数示例: MULTIPLY(A,B)函数说明: A与B相乘
DIVIDE 相除 函数场景: 表达式函数示例: DIVIDE(A,B)函数说明: A与B相除
MAX 取最大值 函数场景: 表达式函数示例: MAX(collection) 函数说明: 返回集合中的最大值,参数collection为集合或数组
MIN 取最小值 函数场景: 表达式函数示例: MIN(collection) 函数说明: 返回集合中的最小值,参数collection为集合或数组
SUM 求和 函数场景: 表达式函数示例: SUM(collection)函数说明: 返回对集合的求和,参数collection为集合或数组
AVG 取平均值 函数场景: 表达式函数示例: AVG(collection)函数说明: 返回集合的平均值,参数collection为集合或数组
COUNT 计数 函数场景: 表达式函数示例: COUNT(collection)函数说明: 返回集合的总数,参数collection为集合或数组
UPPER_MONEY 大写金额 函数场景: 表达式函数示例: UPPER_MONEY(number)函数说明: 返回金额的大写,参数number为数值或数值类型的字符串

表4-1-12-1 数学函数

文本函数

表达式 名称 说明
TRIM 空字符串过滤 函数场景: 表达式函数示例: TRIM(text)函数说明: 去掉文本字符串text中的首尾空格,文本为空时,返回空字符串
IS_BLANK 是否为空字符串 函数场景: 表达式函数示例: IS_BLANK(text)函数说明: 判断文本字符串text是否为空
STARTS_WITH 是否以指定字符串开始 函数场景: 表达式函数示例: STARTS_WITH(text,start)函数说明: 判断文本字符串text是否以文本字符串start开始,文本为空时,按照空字符串处理
ENDS_WITH 是否以指定字符串结束 函数场景: 表达式函数示例: ENDS_WITH(text,start)函数说明: 判断文本字符串text是否以文本字符串end结束,文本为空时,按照空字符串处理
CONTAINS 包含 函数场景: 表达式函数示例: CONTAINS(text,subtext)函数说明: 判断文本字符串text是否包含文本字符串subtext,文本text为空时,按照空字符串处理
LOWER 小写 函数场景: 表达式函数示例: LOWER(text)函数说明: 小写文本字符串text,文本为空时,按照空字符串处理
UPPER 大写 函数场景: 表达式函数示例: UPPER(text)函数说明: 大写文本字符串text,文本为空时,按照空字符串处理
REPLACE 替换字符串 函数场景: 表达式函数示例: REPLACE(text,oldtext,newtext)函数说明: 使用文本字符串newtext替换文本字符串text中的文本字符串oldtext
LEN 获取字符串长度 函数场景: 表达式函数示例: LEN(text)函数说明: 获取文本字符串text的长度,文本为空时,按照空字符串处理
JOIN 连接字符串 函数场景: 表达式函数示例: JOIN(text,join)函数说明: 将文本字符串text连接文本字符串join,文本为空时,按照空字符串处理
PARSE 反序列化JSON字符串 函数场景: 表达式函数示例: PARSE(text)函数说明: 将JSON文本字符串text反序列化为集合或者map
JSON 序列化为JSON字符串 函数场景: 表达式函数示例: JSON(object)函数说明: 将记录object序列化为JSON字符串

表4-1-12-2 文本函数

正则函数

表达式 名称 说明
MATCHES 正则匹配 函数场景: 表达式函数示例: MATCHES(text,regex)函数说明: 校验字符串是否满足正则匹配,例如regex为[a-zA-Z][a-zA-Z0-9]*$,来校验text是否匹配
CHECK_PHONE 手机号校验 函数场景: 表达式函数示例: CHECK_PHONE(text)函数说明: 校验手机号是否正确
CHECK_EMAIL 邮箱校验 函数场景: 表达式函数示例: CHECK_EMAIL(text)函数说明:?校验邮箱是否正确
CHECK_USER_NAME 用户名校验 函数场景: 表达式函数示例: CHECK_USER_NAME(text)函数说明:?校验用户名是否正确
CHECK_PWD 密码强弱校验 函数场景: 表达式函数示例: CHECK_PWD(text)函数说明: 判断密码是否满足强弱校验
CHECK_INTEGER 整数校验 函数场景: 表达式函数示例: CHECK_INTEGER(text)函数说明:?校验是否为整数
CHECK_ID_CARD 身份证校验 函数场景: 表达式函数示例: CHECK_ID_CARD(text)函数说明:?校验身份证是否正确
CHECK_URL 合法URL校验 函数场景: 表达式函数示例: CHECK_URL(text)函数说明:?校验URL是否正确
CHECK_CHINESE 中文校验 函数场景: 表达式函数示例: CHECK_CHINESE(text)函数说明:?校验是否为中文文本
CHECK_NUMBER 纯数字校验 函数场景: 表达式函数示例: CHECK_NUMBER(text)函数说明:?校验是否为纯数字
CHECK_TWO_DIG 验证是否两位小数 函数场景: 表达式函数示例: CHECK_TWO_DIG(text)函数说明:?校验是否两位小数
CHECK_IP IP地址校验 函数场景: 表达式函数示例: CHECK_IP(text)函数说明:?校验IP地址是否正确
CHECK_CONTAINS_CHINESE 包含中文校验 函数场景: 表达式函数示例: CHECK_CONTAINS_CHINESE(text)函数说明:?校验是否包含中文
CHECK_SIZE_MAX 只能输入n个字符 函数场景: 表达式函数示例: CHECK_SIZE_MAX(text,n)函数说明:?只能输入n个字符
CHECK_SIZE_MIN 至少输入n个字符 函数场景: 表达式函数示例: CHECK_SIZE_MIN(text,n)函数说明:?至少输入n个字符
CHECK_SIZE 输入m-n个字符 函数场景: 表达式函数示例: CHECK_SIZE(text,m,n)函数说明:?输入m-n个字符
CHECK_CODE 只能由英文、数字、下划线组成 函数场景: 表达式函数示例: CHECK_CODE(text)函数说明:?只能由英文、数字、下划线组成
CHECK_ENG_NUM 只能包含英文和数字 函数场景: 表达式函数示例: CHECK_ENG_NUM(text)函数说明:?只能包含英文和数字

表4-1-12-3 正则函数

时间函数

表达式 名称 说明
NOW 返回当前时间 函数场景: 表达式函数示例: NOW()函数说明: 返回当前时间
NOW_STR 返回当前时间字符串 函数场景: 表达式函数示例: NOW_STR()函数说明: 返回当前时间字符串,精确到时分秒,格式为yyyy-MM-dd hh:mm:ss
TODAY_STR 返回今天的日期字符串 函数场景: 表达式函数示例: TODAY_STR()函数说明: 返回今天的日期字符串,精确到天,格式为yyyy-MM-dd
ADD_DAY 加减指定天数 函数场景: 表达式函数示例: ADD_DAY(date,days)函数说明: 将指定日期加/减指定天数,date为指定日期,days为指定天数,当为负数时在date上减去此天数
ADD_MONTH 加减指定月数 函数场景: 表达式函数示例: ADD_MONTH(date,months)函数说明: 将指定日期加/减指定月数,date为指定日期,months为指定月数,当为负数时在此date上减去此月数
ADD_YEAR 加减指定年数 函数场景: 表达式函数示例: ADD_YEAR(date,years)函数说明: 将指定日期加/减指定年数,date为指定日期,years为指定年数,当为负数时在此date上减去此年数
TO_DATE 转换为时间 函数示例: TO_DATE(date,pattern)函数说明: 将date字符串按格式转换为时间
ADD_WORK_DAY 工作日加减天数(跳过周末) 函数示例: ADD_WORK_DAY(date,days) 函数说明: 将指定工作日加/减指定天数(跳过周末),date为指定日期,days为指定天数,当为负数时在date上减去此天数

表4-1-12-4 时间函数

集合函数

表达式 名称 说明
LIST_GET 获取集合(或数组)中的元素 函数场景: 表达式函数示例: LIST_GET(list,index)函数说明: 获取集合list中索引为数字index的元素
LIST_IS_EMPTY 判断集合(或数组)是否为空 函数场景: 表达式函数示例: LIST_IS_EMPTY(list)函数说明: 传入一个对象集合,判断是否为空
LIST_CONTAINS 判断集合(或数组)是否包含元素 函数场景: 表达式函数示例: LIST_CONTAINS(list,item)函数说明: 判断集合list是否包含元素item
LIST_ADD 将元素添加到集合(或数组) 函数场景: 表达式函数示例: LIST_ADD(list,item)函数说明: 将元素item添加到集合list
LIST_ADD_BY_INDEX 将元素添加到集合(或数组)的指定位置 函数场景: 表达式函数示例: LIST_ADD_BY_INDEX(list,index,item)函数说明: 将元素item添加到集合list的索引index处
LIST_REMOVE 移除集合(或数组)中的元素 函数场景: 表达式函数示例: LIST_REMOVE(list,item)函数说明: 从集合list中移除元素item
LIST_COUNT 获取集合(或数组)元素数量 函数场景: 表达式函数示例: LIST_COUNT(list)函数说明: 传入一个对象集合,获取集合元素数量
LIST_IDS 获取集合(或数组)中的所有id 函数场景: 表达式函数示例: LIST_IDS(list)函数说明: 传入一个对象集合,获取集合中的所有id组成的列表
LIST_FIELD_VALUES 将对象集合(或数组)转化为属性集合 函数场景: 表达式函数示例: LIST_FIELD_VALUES(list,model,field)函数说明: 传入一个对象集合,该对象的模型和属性字段,返回属性值集合
LIST_FIELD_EQUALS 判断对象集合(或数组)中属性值匹配情况 函数场景: 表达式函数示例: LIST_FIELD_EQUALS(list,model,field,value)函数说明: 判断对象集合(或数组)中属性值匹配情况,返回布尔集合
LIST_FIELD_NOT_EQUALS 判断对象集合(或数组)中属性值不匹配情况 函数场景: 表达式函数示例: LIST_FIELD_NOT_EQUALS(list,model,field,value)函数说明: 判断对象集合(或数组)中属性值不匹配情况,返回布尔集合
LIST_FIELD_IN 判断对象集合(或数组)中属性值是否在指定集合(或数组)中 函数场景: 表达式函数示例: LIST_FIELD_IN(list,model,field,list)函数说明: 判断对象集合(或数组)中属性值是否在指定集合(或数组)中,返回布尔集合
LIST_FIELD_NOT_IN 判断对象集合(或数组)中属性值是否不在指定集合(或数组)中 函数场景: 表达式函数示例: LIST_FIELD_NOT_IN(list,model,field,list)函数说明: 判断对象集合(或数组)中属性值是否不在指定集合(或数组)中,返回布尔集合
LIST_AND 将一个布尔集合进行逻辑与运算 函数场景: 表达式函数示例: LIST_AND(list)函数说明: 将一个布尔集合进行逻辑与运算,返回布尔值
LIST_OR 将一个布尔集合进行逻辑或运算 函数场景: 表达式函数示例: LIST_OR(list)函数说明: 将一个布尔集合进行逻辑或运算,返回布尔值
STRING_LIST_TO_NUMBER_LIST 将一个字符集合转换为数值集合 函数场景: 表达式函数示例: STRING_LIST_TO_NUMBER_LIST(list)函数说明: 将一个字符集合转换为数值集合,如果转换成功,返回一个数值集合;转换失败,返回集合本身
COMMA 将集合里面的值用逗号拼接 函数场景: 表达式函数示例: COMMA(list)函数说明: 将集合里面的值用逗号拼接「集合里面的值只能是Number或者String类型」,返回一个字符串
CONCAT 将集合里面的值用指定的符号拼接 函数场景: 表达式函数示例: CONCAT(list, split)函数说明: 将集合里面的值用split拼接「集合里面的值只能是Number或者String类型」,返回一个字符串

表4-1-12-5 集合函数

键值对函数

表达式 名称 说明
MAP_GET 从键值对中获取指定键的值 函数场景: 表达式函数示例: MAP_GET(map,key)函数说明: 从键值对中获取键为key的值
MAP_IS_EMPTY 判断键值对是否为空 函数场景: 表达式函数示例: MAP_IS_EMPTY(map)函数说明: 判断键值对map是否为空
MAP_PUT 向键值对中添加键值 函数场景: 表达式函数示例: MAP_PUT(map,key,value)函数说明: 将键为key的值为value添加到键值对map中
MAP_REMOVE 移除键值对中的元素 函数场景: 表达式函数示例: MAP_REMOVE(map,key)函数说明: 从键值对map中移除键key
MAP_COUNT 获取键值数量 函数场景: 表达式函数示例: MAP_COUNT(map)函数说明: 获取键值对map的键值数量

表4-1-12-6 键值对函数

上下文函数

表达式 名称 说明
CURRENT_UID 获取当前用户id 函数场景: 表达式函数示例: CURRENT_UID()函数说明: 获取当前用户id
CURRENT_USER_NAME 获取当前用户名 函数场景: 表达式函数示例: CURRENT_USER_NAME()函数说明: 获取当前用户的用户名
CURRENT_USER 获取当前用户 函数场景: 表达式函数示例: CURRENT_USER()函数说明: 获取当前用户
CURRENT_ROLE_IDS 获取当前用户的角色id列表 函数场景: 表达式函数示例: CURRENT_ROLE_IDS()函数说明: 获取当前用户的角色id列表
CURRENT_ROLES 获取当前用户的角色列表 函数场景: 表达式函数示例: CURRENT_ROLES()函数说明: 获取当前用户的角色列表
CURRENT_PARTNER_ID 获取当前用户的合作伙伴id 函数场景: 表达式函数示例: CURRENT_PARTNER_ID()函数说明: 获取当前用户的合作伙伴id
CURRENT_PARTNER 获取当前用户的合作伙伴 函数场景: 表达式函数示例: CURRENT_PARTNER()函数说明: 获取当前用户的合作伙伴

表4-1-12-7 上下文函数

对象函数

表达式 名称 说明
IS_NULL 判断是否为空 函数场景: 表达式函数示例: IS_NULL(文本或控件)函数说明: 判断对象是否为空,为空则返回true,不为空则返回false,可用于判断具体值或者控件
EQUALS 判断是否相等 函数场景: 表达式函数示例: EQUALS(A,B)函数说明: 判断A和B是否相等
FIELD_GET 获取对象属性值 函数场景: 表达式函数示例: GET(obj,dotExpression)函数说明: 从对象中根据点表达式获取属性值

表4-1-12-8 对象函数

逻辑函数

表达式 名称 说明
IF 条件表达式 函数场景: 表达式函数示例: IF(A,B,C)函数说明: 如果F满足条件A,则返回B,否则返回C,支持多层嵌套IF函数
AND 逻辑与 函数场景: 表达式函数示例: AND(A,B)函数说明: 返回 条件A 逻辑与 条件B 的值
OR 逻辑或 函数场景: 表达式函数示例: OR(A,B)函数说明: 返回 条件A 逻辑或 条件B 的值
NOT 逻辑非 函数场景: 表达式函数示例: NOT(A)函数说明: 返回 逻辑非 条件A 的值

表4-1-12-9 逻辑函数

特定场景函数

商业函数

表达式 名称 说明
CURRENT_CORP_ID 获取当前用户的公司id 函数场景: 商业公司函数示例: CURRENT_CORP_ID()函数说明: 获取当前用户的公司id
CURRENT_CORP 获取当前用户的公司 函数场景: 商业公司函数示例: CURRENT_CORP()函数说明: 获取当前用户的公司
CURRENT_SHOP_ID 获取当前用户的店铺id 函数场景: 商业店铺函数示例: CURRENT_SHOP_ID()函数说明: 获取当前用户的店铺id
CURRENT_SHOP 获取当前用户的店铺 函数场景: 商业店铺函数示例: CURRENT_SHOP()函数说明: 获取当前用户的店铺

表4-1-12-10 商业函数

逻辑DSL函数

表达式 名称 说明
FOR_INDEX 获取循环的index 函数场景: 逻辑DSL函数示例: FOR_INDEX(context)函数说明: 获取循环的index

4-1-12-11 逻辑DSL函数

二、表达式

表达式,是由数字、算符、函数、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。约束变量在表达式中已被指定数值,而自由变量则可以在表达式之外另行指定数值。

表达式可以使用运算符(+、-、*、/、&&、||、!、==、!=)、点表达式(例如:模型A.字段C.关联模型字段A)和内置函数。表达式格式如:IF(ISNULL(模型A.字段x),模型A.字段y.关联模型字段z,模型A.字段m)

表达式中模型字段的前端展现使用展示名称displayName,表达式原始内容使用技术名称name。

点表达式

点表达式是表达式的子集,由变量名与点组成。点前的变量与点后的变量为从属关系,点后的变量从属于点前的变量。可以使用点表达式获取由全表达式确定的最后一个点后变量的值。

正则表达式

对应内置函数 说明 正则表达式
CHECK_PHONE 手机号校验 ^(1[3-9])\d{9}$
CHECK_EMAIL 邮箱校验 ^[a-z0-9A-Z]+[-
CHECK_USER_NAME 用户名校验 非空校验
CHECK_PWD 密码强弱校验(强密码校验) ^(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9~!@&%#_(.)]{8,16}$
CHECK_INTEGER 整数校验 ^-{0,1}[1-9]\d*$
CHECK_ID_CARD 身份证校验 ^\d{15}$)
CHECK_URL 合法URL校验 ^(?:(?:https?)://)(?:(?:1\d{2}
CHECK_CHINESE 中文校验 ^[\u4e00-\u9fa5]{0,}$
CHECK_NUMBER 纯数字校验 ^[0-9]*$
CHECK_TWO_DIG 验证是否两位小数 ^[0-9]+(.[0-9]{2})?$
CHECK_IP IP地址校验 ^((2[0-4]\d
CHECK_CONTAINS_CHINESE 包含中文校验 ^.?[\u4e00-\u9fa5]{0,}.?$
CHECK_SIZE 只能输入n个字符 ^.{n}$
CHECK_SIZE_MIN 至少输入n个字符 ^.{n,}$
CHECK_SIZE_MAX 最多输入n个字符 ^.{0,n}$
CHECK_SIZE_RANGE 输入m-n个字符 ^.{m,n}$
CHECK_CODE 只能由英文、数字、下划线组成 ^[a-z0-9A-Z_]*$
CHECK_ENG_NUM 只能包含英文和数字 ^[a-z0-9A-Z]*$

表4-1-12-12 正则表达式

内置变量

在表达式中可以使用点表达式来获取内置变量的属性及子属性的属性。例如,使用activeRecord来获取当前记录。activeRecord.id来获取当前选中行记录的id。

数据变量

变量 名称 说明
activeRecord 当前选中值 选中单行记录跳转视图初始化时,值为单条当前选中记录;选中多行记录跳转视图初始化时,值为当前选中记录列表;整表单校验时,值为当前表单提交记录;单字段校验时,值为当前字段值。作为动作筛选条件时,值为动作模型定义数据。

表4-1-12-13 数据变量

上下文变量

变量 名称 说明
module 模块 使用示例: context.module示例说明:请求上下文中的模块
tenant 租户 使用示例: context.tenant示例说明:请求上下文中的租户
lang 语言 使用示例: context.lang示例说明:请求上下文中的语言
country 国家 使用示例: context.country示例说明:请求上下文中的国家
env 环境 使用示例: context.env示例说明:请求上下文中的环境
extend 扩展信息 使用示例: context.extend.扩展变量名示例说明:请求上下文中的扩展信息

表4-1-12-14 上下文变量

内置函数

内置函数章节介绍的内置函数可以在表达式中使用。例如,使用ABS(activeValue.amount)来获取当前选中记录金额的绝对值。

Oinone社区 作者:史, 昂原创文章,如若转载,请注明出处:https://doc.oinone.top/oio4/9287.html

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

(0)
史, 昂的头像史, 昂数式管理员
上一篇 2024年5月23日
下一篇 2024年5月23日

相关推荐

  • 翻译

    翻译应用是管理翻译规则的应用,以模型为基础、维护字段的翻译值,支持导入、导出 1. 操作步骤 Step1:导出所有翻译项; Step2:线下翻译; Step3:导入翻译项; Step4:刷新远程资源; Step5:页面右上角可切换语言,查看翻译效果。 2. 新增翻译 翻译是具体到模型字段,其中需要区分出是否字典; 源语言、目标语言,是在资源中维护的语言,可在资源中维护需要翻译的语言; 翻译项则是模型字段,默认翻译项为激活状态,关闭后维护的翻译项无效。 3. 导出、导入 不勾选导出:导出所有需要翻译的翻译项,包括模块、字段,源术语、翻译值等,其中如果已经翻译过的内容,会体现在翻译值中; 勾选导出:导出勾选模型的翻译项。 导入:导入翻译项,平台会根据模型拆分为多条数据。 4. 刷新远程资源 导入翻译项后,点击“刷新远程资源”按钮。 5. 查看翻译内容 页面右上角切换语言,查看翻译效果。

    2024年6月20日
    94100
  • 4.1.9 函数之元位指令

    元位指令系统是通过给请求上下文的指令位字段作按位与标记来对函数处理下发对应指令的系统。 一、元位指令介绍 元位指令系统是通过给请求上下文的指令位字段作按位与标记来对函数处理下发对应指令的系统。 元位指令系统分为请求上下文指令和数据指令两种。 数据指令 数据指令基本都是系统内核指令。业务开发时用不到这里就不介绍了。前20位都是系统内核预留 请求上下文指令 请求上下文指令:使用session上下文中非持久化META_BIT属性设置指令。 位 指令 指令名 前端默认值 后端默认值 描述 20 builtAction 内建动作 否 否 是否是平台内置定义的服务器动作对应操作:PamirsSession.directive().disableBuiltAction(); PamirsSession.directive().enableBuiltAction(); 21 unlock 失效乐观锁 否 否 系统对带有乐观锁模型默认使用乐观锁对应操作:PamirsSession.directive().enableOptimisticLocker(); PamirsSession.directive().disableOptimisticLocker(); 22 check 数据校验 是 否 系统后端操作默认不进行数据校验,标记后生效数据校验对应操作:PamirsSession.directive().enableCheck(); PamirsSession.directive().disableCheck(); 23 defaultValue 默认值计算 是 否 是否自动填充默认值对应操作:PamirsSession.directive().enableDefaultValue(); PamirsSession.directive().disableDefaultValue(); 24 extPoint 执行扩展点 是 否 前端请求默认执行扩展点,可以标记忽略扩展点。后端编程式调用数据管理器默认不执行扩展点对应操作:PamirsSession.directive().enableExtPoint(); PamirsSession.directive().disableExtPoint(); 25 hook 拦截 是 否 是否进行函数调用拦截对应操作:PamirsSession.directive().enableHook(); PamirsSession.directive().disableHook(); 26 authenticate 鉴权 是 否 系统默认进行权限校验与过滤,标记后使用权限校验对应操作:PamirsSession.directive().sudo(); PamirsSession.directive().disableSudo(); 27 ormColumn ORM字段别名 否 否 系统指令,请勿设置 28 usePkStrategy 使用PK策略 是 否 使用PK是否空作为采用新增还是更新的持久化策略对应操作:PamirsSession.directive().enableUsePkStrategy(); PamirsSession.directive().disableUsePkStrategy(); 29 fromClient 是否客户端调用 是 否 是否客户端(前端)调用对应操作:PamirsSession.directive().enableFromClient(); PamirsSession.directive().disableFromClient(); 30 sync 同步执行函数 否 否 异步执行函数强制使用同步方式执行(仅对Spring Bean有效) 31 ignoreFunManagement 忽略函数管理 否 否 忽略函数管理器处理,防止Spring调用重复拦截对应操作:PamirsSession.directive().enableIgnoreFunManagement(); PamirsSession.directive().disableIgnoreFunManagement(); 表4-1-9-1 请求上下文指令 二、使用指令 普通模式 PamirsSession.directive().disableOptimisticLocker(); try{ 更新逻辑 } finally { PamirsSession.directive().enableOptimisticLocker(); } 图4-1-9-1 普通模式代码示意 批量设置模式 Models.directive().run(() -> {此处添加逻辑}, SystemDirectiveEnum.AUTHENTICATE) 图4-1-9-2 批量设置模式代码示意 三、使用举例 我们在4.1.5【模型之持久层配置】一文中提到过失效乐观锁,我们在这里就尝试下吧。 Step1 修改PetItemInventroyAction 手动失效乐观锁 package pro.shushi.pamirs.demo.core.action; import org.springframework.stereotype.Component; import pro.shushi.pamirs.demo.api.model.PetItemInventroy; import pro.shushi.pamirs.meta.annotation.Function; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.api.session.PamirsSession; import pro.shushi.pamirs.meta.constant.FunctionConstants; import pro.shushi.pamirs.meta.enmu.FunctionOpenEnum; import pro.shushi.pamirs.meta.enmu.FunctionTypeEnum; import java.util.ArrayList; import java.util.List; @Model.model(PetItemInventroy.MODEL_MODEL) @Component public class PetItemInventroyAction { @Function.Advanced(type= FunctionTypeEnum.UPDATE) @Function.fun(FunctionConstants.update) @Function(openLevel = {FunctionOpenEnum.API}) public PetItemInventroy update(PetItemInventroy data){ List<PetItemInventroy> inventroys = new ArrayList<>(); inventroys.add(data); PamirsSession.directive().disableOptimisticLocker(); try{ //批量更新会,自动抛错 int i = data.updateBatch(inventroys); //单记录更新,不自动抛售需要自行判断 // int i = data.updateById();…

    2024年5月23日
    78900
  • 4.1.4 模块之元数据详解

    介绍Module相关元数据,以及对应代码注解方式。大家还是可以通读下,以备不时之需 如您还不了解Module的定义,可以先看下2.3【oinone独特之源,元数据与设计原则】一文对Module的描述,本节主要带大家了解Module元数据构成,能让小伙伴非常清楚oinone从哪些维度来描述Module, 一、元数据说明 ModuleDefinition 元素数据构成 含义 对应注解 备注 displayName 显示名称 @Module( displayName=””, name=””, version=””, category=””, summary=””, dependencies={“”,””}, exclusions={“”,””}, priority=1L ) name 技术名称 latestVersion 安装版本 category 分类编码 summary 描述摘要 moduleDependencies 依赖模块编码列表 moduleExclusions 互斥模块编码列表 priority 排序 module 模块编码 @Module.module(“”) dsKey 逻辑数据源名 @Module.Ds(“”) excludeHooks 排除拦截器列表 @Module.Hook(excludes={“”,””}) website 站点 @Module.Advanced( website=”http://www.oinone.top”, author=”oinone”, description=”oinone”, application=false, demo=false, web=false, toBuy=false, selfBuilt=true, license=SoftwareLicenseEnum.PEEL1, maintainer=”oinone”, contributors=”oinone”, url=”http://git.com” ) author module的作者 description 描述 application 是否应用 demo 是否演示应用 web 是否web应用 toBuy 是否需要跳转到website去购买 selfBuilt 自建应用 license 许可证 默认PEEL1 可选范围: GPL2 GPL2ORLATER GPL3 GPL3ORLATER AGPL3 LGPL3 ORTHEROSI PEEL1 PPL1 ORTHERPROPRIETARY maintainer 维护者 contributors 贡献者列表 url 代码库的地址 boot 是否自动安装的引导启动项 @Boot 加上该注解代表: 启动时会自动安装,不管yml文件的modules是否配置 moduleClazz 模块定义所在类 只有用代码编写的模块才有 packagePrefix 包路径,用于扫描该模块下的其他元数据 dependentPackagePrefix 依赖模块列对应的扫描路径 state 状态 系统自动计算,无需配置 metaSource 元数据来源 publishCount 发布总次数 platformVersion 最新平台版本 本地与中心平台的版本对应。做远程更新时会用到 publishedVersion 最新发布版本 表4-1-4-1 ModuleDefinition UeModule 是对ModuleDefinition的继承,并扩展了跟前端交互相关的元数据 元素数据构成 含义 对应注解 备注 homePage Model 跳转模型编码 @UxHomepage(@UxRoute() 对应一个ViewAction,如果UxRoute只配置了模型,则默认到该模型的列表页 homePage Name 视图动作或者链接动作名称 logo 图标 @UxAppLogo(logo=””) 表4-1-4-2 UeModule 二、元数据,代码注解方式 Module Module ├── displayName 显示名称 ├── name 技术名称 ├── version 安装版本 ├── category 分类编码 ├── summary 描述摘要 ├── dependencies 依赖模块编码列表 ├── exclusions 互斥模块编码列表 ├── priority 排序 ├── module 模块编码 │ └── value ├── Ds 逻辑数据源名 │ └── value ├── Hook 排除拦截器列表…

    Oinone 7天入门到精通 2024年5月23日
    1.2K00
  • 高级组件

    本篇主要结合业务场景介绍高级组件的使用方法。 级联选择/树选择 级联选择与树选择是同一类业务场景、不同的交互体验,在这里我们一起说明。 业务场景 行业分类、产品类目/分类等自关联场景,案例以行业分类说明。 操作步骤 Step1:搭建模型 搭建行业模型,在行业模型中创建多对一字段“上级行业”,指多个子行业对应一个上级行业。如下图: Step2:界面设计 创建行业的表格视图,绑定菜单,并且在此视图中增加“跳转动作 – 新增行业”; 创建新增行业表单,将“上级行业”拖进画布中,组件切换为“级联选择”,属性面板配置“选项字段、搜索字段、透出字段”,平台低代码为每个模型自动生成了名称、编码字段,如果不使用平台提供的名称、自建名称时,需要配置这三个字段; 为“上级行业”设置联动关系,自关联默认选择行业、标题定义为行业名称、自关联的字段为上级行业。 配置后发布表格、表单视图,即可获得级联选择效果。 表单视图中将“上级行业”切换为“树选择”组件,在发布后,即可获得树选择效果。 Step3:效果展示 级联选择 树选择

    2024年6月20日
    1.2K00
  • 7.4 Oinone的低无一体

    基础介绍 前面我们学习了基于低代码开发平台进行快速开发,以及通过oinone的设计器进行零代码开发两种模式。当然低无一体不是简单地说两种模式还指:低无两种模式可以融合。 在做核心产品的时候以低代码开发为主,以无代码为辅助。见低代码开发的基础入门篇中设计器的结合一文 在做实施或临时性需求则是以无代码为主,以低代码为辅助 本文主要介绍第二种模式,它是www.oinone.top官网在SaaS模式下的专有特性。满足客户安装标品后通过设计器进行适应性修改后,但对于一些特殊场景还是需要通过代码进行完善或开发 在该模式下,我们提供了jar模式和代码托管两种模式,客户只要选择需要进行代码开发的模块,点击生产SDK,下载扩展工程模版,按Oinone低代码开发平台规范进行研发,后上传扩展工程即可。 操作手册 低无一体这个模块是连接无代码设计器的桥梁,可以为一个模块或应用设计低代码的逻辑,可以在界面设计器或流程设计器中使用低代码的逻辑。 1.选择模块 首先需要在下拉单选中选择需要低代码的模块或应用。 下拉选中只展示在「应用中心」中已安装的模块或应用,可前往「应用中心」安装后继续低代码操作。 选择模块中不展示系统的基础模块或应用,因为这些模块或应用无法自定义模型。 2.模块信息 模块信息展示的是选择模块的基础信息:模块名称、模块编码、模块作者、模块版本、包的前缀、工程模板下载地址,下载地址仅在上传jar包模式时候用到。 3.低无一体操作 低无一体支持了两种使用模式:上传jar包模式、源码托管模式。 上传控制工程或创建研发分支动作完成会生成一条数据,可以对单条数据进行部署、卸载、修改、删除。 3.1 上传jar包模式 在这个模式下,需要做四步动作。 生成SDK,点击按钮之后,会把模块的当前模型状态打成一个SDK包,SDK最新生成时间更新。当模型变更但未生成SDK时,使用低无一体就会出错,请重新生成SDK并修改扩展工程。生成SDK通常需要1分钟左右,若第一次使用低无一体模块,可能需要更长时间,请耐心等待。 下载扩展工程模板,点击按钮之后,会将SDK包和工程模板生成一个下载链接,复制模块信息中的卸载地址打开即可下载。 技术人员在工程模板的基础上写低代码逻辑。 上传扩展工程,点击按钮展开弹窗,在弹窗中设置标签、备注,并将最终的jar包上传,完成上传之后表格中就会新增一条数据。 上传jar包模式下,模板工程中代码需要注意的点参考下图: 3.2 源码托管模式 在这个模式下,需要做三步动作。 生成SDK,点击按钮之后,会把模块的当前模型状态打成一个SDK包,SDK最新生成时间更新。当模型变更但未生成SDK时,使用低无一体就会出错,请重新生成SDK并修改扩展工程。生成SDK通常需要1分钟左右,若第一次使用低无一体模块,可能需要更长时间,请耐心等待。 创建研发分支,点击按钮展开弹窗。首次创建时需要设置git账号名称、git账号邮箱来创建一个账号,另外在弹窗中设置分支名称、标签、备注,完成创建后表格中就会新增一条数据。 通过表格中的Gitlab地址,技术人员写低代码逻辑。 3.3 行内操作 部署:工程状态为未部署、部署失败、已卸载时展示行内的部署按钮,点击之后进行部署,工程状态变为部署中。部署过程大致需要5-10分钟,请耐心等待。部署完成之后,会生成一个新的模块:“原模块名称”扩展工程。 卸载:工程状态为已部署时展示行内的卸载按钮,点击之后会卸载这个已部署的工程,工程状态变为已卸载。同一模块只能有一个已部署的工程(与选择的模式无关),若需要使用新的工程请先卸载已部署的工程。 修改:行内操作修改按钮始终展示,只允许修改标签、备注。 删除:工程状态为未部署、部署失败、已卸载时展示行内的删除按钮,点击之后删除这一条工程记录。 3.4 部署效果 低无一体部署成功之后,可以进入对应模块的模型页面中使用提交动作来使用低代码逻辑,也可以在流程设计器中的引用逻辑节点中使用低代码逻辑。

    2024年5月23日
    2.0K00

Leave a Reply

登录后才能评论