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低代码应用平台体验

Like (0)
史, 昂's avatar史, 昂数式管理员
Previous 2024年5月23日
Next 2024年5月23日

相关推荐

  • 节点动作

    节点动作为触发和结束结点中间的动作,点击节点名称可以进行修改。

    Oinone 7天入门到精通 2024年6月20日
    2.0K00
  • 3.5.6.2 视图的配置

    ,视图的大致配置在3.5.2.2【构建View的Template】一文中已经介绍过,这里主要介绍视图层的基本属性配置,这些配置会透传给视图内的组件Widget,组件会根据配置内容做出不同的呈现样式 视图的配置 Table的配置 配置项 可选值 默认值 作用 activeCount number 5 表格上方动作区默认展示操作的数量,超过个数的操作将被折叠收起 inlineActiveCount number 3 表格最右侧操作列默认展示操作的数量,超过个数的操作将被折叠收起 defaultPageSize number 30 表格默认分页条数 表3-5-6-9 Table的配置 Form/Detail的配置 配置项 可选值 默认值 作用 direction horizontal/vertical(大小写不明感) vertical 表单标题排列方式 表3-5-6-10 Form/Detail的配置 Table的配置项举例 Step1 修改宠物达人的表格视图 我们在宠物达人的自定义表格视图的Template文件中增加三个属性配置activeCount="1" 、inlineActiveCount="1"、 defaultPageSize="1" <view name=tableView model=demo.PetTalent cols=1 activeCount=1 inlineActiveCount=1 defaultPageSize=1 type=TABLE enableSequence=true > </view> 图3-5-6-15 在宠物达人的自定义表格视图的Template文件中增加三个属性配置 Step2 重启看效果 图3-5-6-16 示例效果 Form的配置举例 Step1 修改宠物达人的表单视图 我们在宠物达人的自定义表格视图的Template文件中增加一个属性配置direction = horizontal 。 另:宠物达人在之前的教程中增加了一些字段,大家利用默认视图把新增字段也展示出来。还是通过数据库查看默认页面定义,找到base_view表,过滤条件设置为model =\’demo.PetTalent\’ and name =\’formView\’,查看template字段,把里面涉及新增字段复制到pet_talent_form.xml文件中。 <view name=formView1 model=demo.PetTalent cols=2 type=FORM priority=1 direction = horizontal> </view> 图3-5-6-17 增加一个属性配置direction = "horizontal" Step2 重启看效果 图3-5-6-18 示例效果

    2024年5月23日
    1.8K00
  • 3.4.2 函数的开放级别与类型

    一、函数开放级别 我们在日常开发中通常会因为安全性,为方法定义不同的开放层级,或者通过应用分层把需要对web开放的接口统一定义在一个独立的应用中。oinone也提供类似的策略,所有逻辑都通过Function来归口统一管理,所以在Function是可以定义其开放级别有API、REMOTE、LOCAL三种类型,配置可多选。 四种自定义新增方式与开放级别的对应关系 函数 本地调用(LOCAL) 远程调用(REMOTE) 开放(API) 伴随模型新增函数 支持 支持【默认】 支持 独立新增函数绑定到模型 支持 支持【默认】 支持 独立新增函数只作公共逻辑单元 支持 支持【默认】 伴随ServerAction新增函数 必选 表3-4-2-1 四种自定义新增方式与开放级别的对应关系 远程调用(REMOTE) 如果函数的开放级别为本地调用,则不会发布远程服务和注册远程服务消费者 非数据管理器函数 提供者:如果函数定义在当前部署包的启动应用中,则主动发布远程服务提供者。 消费者:如果函数定义在部署依赖包中但未在当前部署包的启动应用中,则系统会默认注册远程消费者。发布注册的远程服务使用命名空间和函数编码进行路由。 所以非数据管理器函数的消费者并不需要感知该服务是否是本地提供还是远程提供。而服务提供者也不需要手动注册远程服务。 数据管理器类函数 提供者:如果数据管理器函数所在模型定义在当前部署包的启动应用中,则系统会主动发布数据管理器的远程服务作为数据管理器的远程服务提供者; 消费者:如果模型定义在部署依赖包中但未在当前部署包的启动应用中,则系统会主动注册数据管理器的远程服务消费者。 所以数据管理器类函数的消费者与服务提供者并不需要感知函数的远程调用。 二、函数类型 函数的类型语义分为:增、删、改、查,在编程模式下目前用于Function为API级别,生成GraphQL的Schema时放在query还是mutation。查放在query,其余放mutation。 三、函数分类 TBD 在无代码编辑器中,函数分类主要用函数选择的分类管理。

    Oinone 7天入门到精通 2024年5月23日
    2.1K00
  • 4.1.3 模块之生命周期

    了解oinone的启动生命周期过程,对于理解oinone或者开发高级功能都有非常大的帮助 一、生命周期大图 图4-1-3-1 生命周期大图 二、平台扩展说明 平台节点通过SPI机制进行扩展,本书籍暂不展开,更多详情请见可关注数式Oinone公众号中的Oinone内核揭秘系列文章。 三、业务扩展说明 接口 说明 使用场景 LifecycleBeginAllInit 系统进入生命周期前置逻辑注:不能有任何数据库操作 系统级别的信息收集上报 LifecycleCompletedAllInit 系统生命周期完结后置逻辑 系统级别的信息收集上报、生命周期过程中的数据或上下文清理 LifecycleBeginInit 模块进入生命周期前置逻辑注:不能有任何数据库操作 预留,能做的事情比较少 LifecycleCompletedInit 模块生命周期完结后置逻辑 本模块需等待其他模块初始化完毕以后进行初始化的逻辑。比如:1.集成模块的初始化2.权限缓存的初始化…… MetaDataEditor 元数据编辑注:不能有任何数据库操作 这个在第3章Oinone的基础入门中已经多次提及,核心场景是向系统主动注册如Action、Menu、View等元数据 ExtendBuildInit 系统构建前置处理逻辑 预留,能做的事情比较少,做一些跟模块无关的事情 ExtendAfterBuilderInit 系统构建后置处理逻辑 预留,能做的事情比较少,做一些跟模块无关的事情 InstallDataInit 模块在初次安装时的初始化逻辑 根据模块启动指令来进行选择执行逻辑,一般用于初始化业务数据。应用启动参数与指令转化逻辑详见4.1.2【模块之启动指令】一文 UpgradeDataInit 模块在升级时的初始化逻辑注:根据启动指令来执行,是否执行一次业务自己控制 ReloadDataInit 模块在重启时的初始化逻辑注:根据启动指令来执行,是否执行一次业务自己控制 表4-1-3-1 业务拓展说明 四、常用生命周期举例 Install\Upgrade\Reload的业务初始化(举例) Step1 新建DemoModuleBizInit DemoModuleBizInit实现InstallDataInit, UpgradeDataInit, ReloadDataInit a. InstallDataInit 对应 init b. UpgradeDataInit 对应 upgrade c. ReloadDataInit 对应 reload modules方法代表改初始化类与哪些模块匹配,以模块编码为准 priority 执行优先级 package pro.shushi.pamirs.demo.core.init; import org.springframework.stereotype.Component; import pro.shushi.pamirs.boot.common.api.command.AppLifecycleCommand; import pro.shushi.pamirs.boot.common.api.init.InstallDataInit; import pro.shushi.pamirs.boot.common.api.init.ReloadDataInit; import pro.shushi.pamirs.boot.common.api.init.UpgradeDataInit; import pro.shushi.pamirs.demo.api.DemoModule; import pro.shushi.pamirs.demo.api.enumeration.DemoExpEnumerate; import pro.shushi.pamirs.meta.common.exception.PamirsException; import java.util.Collections; import java.util.List; @Component public class DemoModuleBizInit implements InstallDataInit, UpgradeDataInit, ReloadDataInit { @Override public boolean init(AppLifecycleCommand command, String version) { throw PamirsException.construct(DemoExpEnumerate.SYSTEM_ERROR).appendMsg("DemoModuleBizInit: install").errThrow(); //安装指令执行逻辑 // return Boolean.TRUE; } @Override public boolean reload(AppLifecycleCommand command, String version) { throw PamirsException.construct(DemoExpEnumerate.SYSTEM_ERROR).appendMsg("DemoModuleBizInit: reload").errThrow(); //重启指令执行逻辑 // return Boolean.TRUE; } @Override public boolean upgrade(AppLifecycleCommand command, String version, String existVersion) { throw PamirsException.construct(DemoExpEnumerate.SYSTEM_ERROR).appendMsg("DemoModuleBizInit: upgrade").errThrow(); //升级指令执行逻辑 // return Boolean.TRUE; } @Override public List<String> modules() { return Collections.singletonList(DemoModule.MODULE_MODULE); } @Override public int priority() { return 0; } } 图4-1-3-2 新建DemoModuleBizInit Step2 重启看效果 启动指令为-Plifecycle=INSTALL,转化指令为 install为AUTO;upgrade为FORCE 因为DemoModule我们已经执行过好多次了,所以会进入upgrade逻辑。系统重启的效果跟我们预期的结果一致,确实执行了DemoModuleBizInit的upgrade方法 图4-1-3-3 系统重启执行DemoModuleBizInit的upgrade方法 MetaDataEditor 回顾使用情况 最早在3.3.2【模型的类型】一文中介绍“传输模型”时,初始化ViewAction窗口动作时使用到,这里不过多介绍。下面主要介绍下InitializationUtil的工具类包含方法。 注:模块上报元数据只能通过注解或者实现MetaDataEditor接口并使用InitializationUtil工具来进行,更建议用注解方式

    2024年5月23日
    1.7K00

Leave a Reply

Please Login to Comment