🥯链路继承🧪 Beta
版本支持:v2.12.0+
LiteFlow从以上版本起,支持chain之间的继承关系,使得chain之间可以进行继承和扩展。
❗注意: 本特性为Beta实验性功能,不保证后续小版本升级能够向下兼容。
# 使用方法
可以在某个chain中使用extends
属性来指明该chain继承自哪个chain。在被继承的chain中,需要预留出一个或多个占位符,以便于子chain可以对其进行扩展;而在子chain中,需要对被继承的父chain中的所有占位符进行实现。
子chain中的实现可以是组件,可以是表达式,可以是其他chain的id。但是需要注意的是,最终实现的chain必须是一个合法的EL规则,否则会解析失败。子chain的实现中同样可以包含占位符,从而实现多级继承。
# 例子
下面是一个基本的例子:
<chain id="base">
THEN(a, b, {{0}}, {{1}});
</chain>
<chain id="implA" extends="base">
{{0}}=IF(c, d, e);
{{1}}=SWITCH(f).to(j,k);
</chain>
通过上述定义,实现了一个继承自base的implA,最终实现的implA流程如下
<chain id="implA">
THEN(a, b, IF(c, d, e), SWITCH(f).to(j,k));
</chain>
下面是一个多级继承的例子:
<chain id="base">
THEN(a, b, {{0}}, {{1}});
</chain>
<chain id="base2" extends="base">
{{0}}=THEN(a,b,{{3}});
{{1}}=SWITCH(f).to({{4}},k);
</chain>
<chain id="implB" extends="base2">
{{3}}=THEN(a,b);
{{4}}=j;
</chain>
在上面的定义中,implB继承自base2,base2又继承自base,最终实现的implB流程如下:
<chain id="implB" extends="base2">
THEN(
a, b,
THEN(a, b,
THEN(a,b)
),
SWITCH(f).to(j,k)
);
</chain>
# 注意事项
- 一定是要
{{..}}
双花括弧的形式提供占位符,用双花括弧是为了避免和用户自己的占位符产生冲突 - 在继承chain和被继承chain中需要使用形如
{{x}}
的占位符,其中x可以是以下两种形式之一:- 纯数字构成
- 由字母、下划线以及数字构成,但是数字不能作为开头
也就是说,形如
{{1}}
、{{a}}
、{{a1}}
、{{a_1}}
都是合法的占位符,而{{1a}}
、{{1_a}}
都是非法的占位符。
- 请保证被继承chain中至少有一个占位符,且在被继承chain中定义的所有占位符,都必须要在子chain中进行实现,否则会抛出异常。
{{a}}=THEN(x,y,z)
这种形式得写成一行,如果写成多行,则会报错。- 如果一个chain中包含未被实现的占位符,那么执行该chain会抛出异常。例如,尝试执行上文所述的base,base2都会抛出异常,因为它们分别包含未被实现的占位符
{{0}}
,{{1}}
和{{3}}
,{{4}}
。 - 如果在子chain中定义了除占位符实现以外的其他表达式,那么该表达式将被忽略。举个例子,如果implA这样实现:那么其中的
<chain id="implA" extends="base"> {{0}}=IF(c, d, e); {{1}}=SWITCH(f).to(j,k); THEN(a,b); </chain>
THEN(a,b);
将会被忽略。
帮助我们改善此文档 (opens new window)
上次更新: 2024/11/07, 18:57:07