mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-04-05 07:46:35 +08:00
通过Emit优化Script脚本的解释执行;出于后期更新的方向,暂时隐藏表达式节点、条件表达式节点、全局数据节点;流程图转c#代码新增对于Script脚本的支持,Script脚本现在可以原生导出为C#代码。
This commit is contained in:
74
README.md
74
README.md
@@ -96,80 +96,6 @@ https://space.bilibili.com/33526379
|
||||
SereinEnv.GetFlowGlobalData("KeyName"); // 获取全局数据
|
||||
SereinEnv.AddOrUpdateFlowGlobalData("KeyName", obj); // 设置/更新全局数据,不建议
|
||||
~~~
|
||||
* **ExpOp- 表达式节点**
|
||||
* 入参: 自定义的表达式。
|
||||
* 取值表达式:@Get
|
||||
* 描述:有时节点返回了object,但下一个节点只需要对象中某个属性,而非整个对象。如果修改节点的定义,有可能破坏了代码的封装,为了解决这个痛点,于是增加了表达式功能。
|
||||
* 使用方法:
|
||||
1. 获取对象的属性成员:
|
||||
~~~~
|
||||
@Get .[property]/[field]
|
||||
~~~~
|
||||
2. 获取对象的数组成员中下标为22的项:
|
||||
~~~~
|
||||
@Get .array[22]
|
||||
~~~~
|
||||
3. 获取对象的字典成员中键为“33”的值:
|
||||
~~~
|
||||
@Get .dict[33]
|
||||
~~~
|
||||
4. 获取对象“ID”属性并转为int:
|
||||
~~~
|
||||
@Get .ID<int>
|
||||
~~~
|
||||
5. 获取KeyName为【 MyDevice 】全局数据:
|
||||
~~~
|
||||
@Get #MyDevice#
|
||||
~~~
|
||||
6. 从全局数据【 MyDevice 】中获取“IP”属性:
|
||||
~~~
|
||||
@Get #MyDevice#.IP
|
||||
~~~
|
||||
* 数据类型转换表达式:@Dtc
|
||||
* 描述:有时需要显式的设置节点参数值,但参数接收了其它的类型,需要经过一次转换,将显式的文本值转为入参数据类型。
|
||||
* 使用方法:
|
||||
~~~
|
||||
@Dtc <long>1233
|
||||
@Dtc <bool>True
|
||||
@Dtc <DateTime>2024-12-24 11:13:42 (注:如果右值为“now”,则自动获取当前时间)
|
||||
~~~
|
||||
* **ExpCondition - 条件表达式节点**
|
||||
* 入参: 自定义。
|
||||
* 描述:与表达式节点不同,条件表达式节点是判断条件是否成立,如果成立,返回true,否则返回false,如果表达式执行失败,而进入 error 分支。
|
||||
* 使用方式:
|
||||
* 入参说明:默认从上一节点获取,也可以显式设定值,也可以参考表达式节点,使用“@Get .[property]/[field]”的方式重新定义入参数据,用以条件表达式判断。
|
||||
* 条件表达式:默认“PASS”,代表跳过判断直接进入下一个分支。
|
||||
* 条件表达式格式“.[property]/[field]< type> [op] value”,注意,开头必须使用“.”符号,这有助于显然的表达需要从入参对象中取内部某个值。
|
||||
* 表达式符号说明:
|
||||
* [property] /[field] : 属性/字段
|
||||
* [op] : 操作符
|
||||
1. bool表达式:==
|
||||
2. 数值表达式 :==、>=、 <=、in a-b (表示判断是否在a至b的数值范围内), !in a-b(取反);
|
||||
3. 文本表达式:==/equals(等于)、!=/notequals(不等于)、c/contains(出现过)、nc/doesnotcontain(没有出现过)、sw/startswith(开头等于)、ew/endswith(结尾等于)
|
||||
* < type> :指定需要转换为某个类型,可不选。
|
||||
* [value] : 条件值
|
||||
* 使用示例:
|
||||
~~~
|
||||
场景1:上一个节点传入了该对象(伪代码):
|
||||
class Data
|
||||
{
|
||||
string Name; // 性能
|
||||
string Age; // 年龄,外部传入了文本类型
|
||||
string IdentityCardNumber; // 身份证号
|
||||
|
||||
}
|
||||
需求:需要判断年龄是否在某个区间,例如需要大于18岁,小于35岁。
|
||||
条件表达式:.Age<int> in 18-35
|
||||
|
||||
|
||||
|
||||
需求:需要判断是否是北京身份证(开头为”1100”)。
|
||||
条件表达式:.IdentityCardNumber sw 1100
|
||||
另一种方法:
|
||||
入参使用表达式:@Get .IdentityCardNumber
|
||||
条件表达式:sw 1100
|
||||
|
||||
~~~
|
||||
## 3. 从DLL生成控件的枚举值:
|
||||
* **Action - 动作**
|
||||
* 入参:自定义。如果入参类型为IFlowContext,会传入当前的上下文;如果入参类型为IFlowNode,会传入节点对应的实体Model。如果不显式指定参数来源,参数会尝试获取运行时上一节点返回值,并根据当前入参类型尝试进行类型转换。
|
||||
|
||||
Reference in New Issue
Block a user