开发背景

开发环境 Windows操作系统
开发工具 Visiual Studio 2019
开发人员 潘昌进 陈颖鸿
模块简介 RPA微流模块旨在方便用户对常用的部分流程做模块化管理,更加方便客户使用

微流一次迭代功能点

微流创建,修改,删除,微流展示(包含容器化)等功能

RPA-微流模块 - 图1

微流一次迭代功能关键点

微流创建与存储关键点

  1. 微流创建时,可存储于本地配置文件中,也可存于数据库,本地微流数据与与数据库中微流数据必须对应,且唯一标识符保持一致。
  2. 微流中,如果有开始和结束节点,是否会和主流程冲突,应避免冲突,是否可以不要开始和结束节点?

微流修改关键点

  1. 微流修改时,应同时修改本地配置文件微流节点和数据库中对应微流数据。
  2. 微流修改时,若有主流程正在使用此微流,应该如何处理?目前主剧本的微流独立于原微流

微流删除关键点

  1. 微流删除时,应同时删除本地配置文件微流节点和数据库中对应微流数据。
  2. 微流删除时,若有主流程正在使用此微流,应该如何处理?目前主剧本的微流独立于原微流

微流展示关键点

  1. 微流容器化:需等待容器模块初步完成,微流与容器进行结合
  2. 用户可在主流程中选定已加入的微流进行编辑,编辑完成后可保存,存为新的微流模板
  3. 用户可在主流程中选取一部分流程,存储为微流模板

代码关键点

  1. 原则上,将微流模块独立处理,不可像之前的代码都写在MainForm中,MainForm理当只作为设计器和逻辑出入口
  2. 尽量提取逻辑公共处,做统一化处理,减少代码冗余
  3. 微流本地存储和数据库存储应提供统一入口,降低代码耦合性

微流一期优化点以及待定需求 (目前进度)

  1. 创建微流后不添加节点,理论上无法保存,但是此时打开剧本,那么微流会被保存为一个空的文件,而空微流无法被打开和修改 ok
  2. 剧本中编辑微流 面包屑显示错误 ok
  3. 微流的面包屑显示错误 微流名称对不上 ok
  4. 微流拖拽到剧本中,显示的name和说明对应不上 微流名称对不上 ok
  5. Helper文件夹移动到unit中 unit和Entity会产生依赖死循环 不好移动,会造成UNIT和Entity项目循环依赖 ng
  6. 微流的上移 下移等其他按钮不生效 具体梳理哪一些
  7. 微流不能另存为模板 会导致新建剧本使用模板失败
  8. 微流加背景色—-浅色 不要刺眼
  9. 微流事件添加的图片 要在剧本中可以看到
  10. 删除剧本test0001 结果删除了所有剧本
  11. 微流中不能存在开始和结束节点
  12. 微流中不能加入微流节点
  13. 微流按钮挪到新建按钮下
  14. 保存模板的时候,剧本的图片存储位置不正确

—待讨论的点

  1. 微流与KVM的问题,是否需要KVM(正常来说是需要的),微流KVM需要和剧本的KVM分开,
  2. 微流是否可以另存为新的微流?需要讨论 另存按钮
  3. 剧本中编辑过的微流 保存为新的微流
  4. 剧本中折叠的节点 是否可以保存为微流 (折叠中间有微流不允许保存,微流暂时为最小单位)

微流二次迭代功能点

  1. 微流数据存于数据库,需要和剧本的数据库结构一起设计
  2. 微流与折叠器联动,微流中是否可包含折叠器,折叠器中是否可包含微流
  3. 微流与容器化联动,容器化尚未立项
  4. 微流与缓存联动,ctrl + Z之类的操作,此项前提为1. 需要数据库的设计明朗化
  1. if (curObject.GetType().Name.ToUpper() == "RPA_FOLDBEGIN" || curObject.GetType().Name.ToUpper() == "RPA_FOLDEND")
  2. {
  3. bool isCurFolding = Convert.ToBoolean(RPA_ReflectObj.GetPropertyValue(dragObj, "IsFold"));
  4. if (isCurFolding)
  5. {
  6. string curMatchID = (string)RPA_ReflectObj.GetPropertyValue(curObject, "MatchID");
  7. var curStartObj = Rpa_MS.Steps.Where(s => s.GetType().GetProperty("Id").GetValue(s).ToString() == curMatchID).FirstOrDefault();
  8. curStart = (int)RPA_ReflectObj.GetPropertyValue(curStartObj, "Index") - 1; //区域开始 索引为curStart-1
  9. curEnd = i;
  10. targetObj = Rpa_MS.Steps[curStart - 1];
  11. //折叠起来的节点 位于开始节点后 则不能位移
  12. if (curStart <= 1)
  13. {
  14. break;
  15. }
  16. }
  17. }