2024-11-03 23:51:18 +08:00
2024-10-22 00:17:55 +08:00
2024-09-26 21:03:45 +08:00
2024-11-03 23:51:18 +08:00
2024-11-02 16:48:40 +08:00
2024-11-02 16:48:40 +08:00
2024-11-02 16:48:40 +08:00
2024-09-28 23:55:19 +08:00
2024-08-05 10:11:58 +08:00
2024-10-22 00:15:57 +08:00
2024-10-28 23:19:04 +08:00
2024-10-29 10:46:39 +08:00

自述

基于WPFDotnet 8的流程可视化编辑器需二次开发。 不定期在Bilibili个人空间上更新相关的视频。 https://space.bilibili.com/33526379

计划任务 2024年10月28日更新

  • 正在重写节点的实现方式
  • 准备新增基础节点“属性包装器”,用来收集各个节点的数据,包装成匿名对象/Json类型暂时未想到如何设计
  • 后续拓展远程管理与远程客户端的功能(目前仅支持远程修改节点属性、添加/移除节点、启动流程、停止流程)
  • 计划实现单步执行(暂未想到如何在不影响异步流程的前提下停止流程)
  • 计划实现节点树视图、IOC容器对象视图目前残废版
  • 计划实现不停机更新类库更新整个DLL/某个节点),但似乎难度过大

如何加载我的DLL

使用 DynamicFlow 特性标记你的类,可以参照 Net461DllTest 的实现。编译为 Dll文件 后,拖入到软件中即可。 如果你不想下载整个工程文件“FLowEdit”目录下放有“FlowEdit可视化流程编辑器.zip”压缩包可以直接解压使用但可能需要你安装 .Net8 运行环境)。

如何让我的方法成为节点?

使用 NodeAction 特性标记你的方法。

  • 动作节点 - Action
  • 触发器节点 - Flipflop

关于 DynamicNodeType 枚举的补充说明。

1. 不生成节点控件的枚举值:

  • Init - 初始化方法

    • 入参:IDynamicContext(有且只有一个参数)。
    • 返回值:自定义,但不会处理返回值,支持异步等待。
    • 描述在运行时首先被调用。语义类似于构造方法。建议在Init方法内初始化类、注册类等一切需要在构造函数中执行的方法。
  • Loading - 加载方法

    • 入参:IDynamicContext(有且只有一个参数)。
    • 返回值:自定义,但不会处理返回值,支持异步等待。
    • 描述当所有Dll的Init方法调用完成后首先调用、也才会调用DLL的Loading方法。建议在Loading方法内进行业务上的初始化例如启动Web启动第三方服务
  • Exit - 结束方法

    • 入参:IDynamicContext(有且只有一个参数)。
    • 返回值:自定义,但不会处理返回值,支持异步等待。
    • 描述:当结束/手动结束运行时会调用所有Dll的Exit方法。使用场景类似于终止内部的其它线程通知其它进程关闭例如停止第三方服务。
  • 关于IDynamicContext说明

    • 基本说明IDynamicContext是动态上下文接口内部提供全局单例的IFlowEnvironment环境接口用以注册、获取实例单例模式一般情况下你无须关注IFlowEnvironment对外暴露的属性方法。

2. 基础节点

  • 待更新

3. 从DLL生成控件的枚举值

  • Action - 动作

    • 入参自定义。如果传入IDynamicContext会传入当前的上下文如果传入NodeBase会传入节点对应的Model。如果不显式指定参数来源参数会尝试获取运行时上一节点返回值并根据当前入参类型尝试进行类型转换。
    • 返回值自定义返回值由对应的Model类的object? FlowData变量接收。支持异步等待。
    • 描述:同步执行对应的方法。
  • Flipflop - 触发器

    • 全局触发器
      • 入参依照Action节点。
      • 返回值Task<IFlipflopContext<TResult>>
      • 描述运行开始时所有无上级节点的触发器节点在当前分支中作为起始节点分别建立新的线程运行然后异步等待触发如果有。这种触发器拥有独自的DynamicContext上下文共用同一个Ioc执行完成之后会重新从分支起点的触发器开始等待。
    • 分支中的触发器
      • 入参依照Action节点。
      • 返回值Task<IFlipflopContext<TResult>>
      • 描述:接收上一节点传递的上下文,同样进入异步等待,但执行完成后不会再次等待自身(只会触发一次)。
    • IFlipflopContext<TResult>
      • 基本说明IFlipflopContext是一个接口你无须关心内部实现。
      • 参数描述State状态枚举描述Succeed、Cancel、Error、Cancel如果返回Cancel则不会执行后继分支如果返回其它状态则会获取对应的后继分支开始执行。
      • 参数描述Type触发状态描述External外部触发Overtime超时触发当你在代码中的其他地方主动触发了触发器则该次触发类型为External当你在创建触发器后超过了指定时间创建触发器时会要求声明超时时间则会自动触发但触发类型为Overtime触发参数未你在创建触发器时指定的值
      • 参数描述Value触发时传递的参数。
    • 使用场景:配合 FlowTrigger<TEnum> 使用例如定时从PLC中获取状态当某个变量发生改变时会通知相应的触发器如果需要可以传递对应的数据。 演示: image image image image
Description
No description provided
Readme MIT 37 MiB
Languages
C# 100%