开发K2流程中,很多时候流程都是相似的,所以希望通过复制一个现有流程图再进行修改,达到快速开发提高工作效率,但通过右键对一个现有的流程图进行复制,复制后流程图并不是一个全新的流程图,还会保留部分原流程图的相关信息。所以查阅了相关的资料,也有一些人也提出相同的问题,但并没有找到相应的解决方案。还有一种是通过K2 API类库使用代码的方式生成kprx文件,但这个并不是适合我们的需求,因为我们还对默认生成代码进行修改,所以才有下面的方案。

流程图分析

  先通过查看(*.kprx)文件,使用记事本查看文件内容,了解K2流程图使用XML格式进行数据存储。接下来我们就可以创建两个新流程图,然后使用对比工具进行比对,查找差异。通过对比后发现只有GUID还有流程名称会有变化。

K2 GUID格式定义

  • GUID小写,格式”D”。

    98873e50-a321-439b-8c40-991f82d90005

  • GUID小写,格式”N”,也可能是格式”D”的变种。

    98873e50a321439b8c40991f82d90005

  • GUID小写,格式”B”。

    {b7b8c232-de89-446f-99e1-23d203cda63a}

  • GUID大写,格式”D”,不需要替换。

    FDA04D27-504A-4D24-A5BC-854E8CF395E0

GUID格式参考

说明符 返回值的格式
N

32 位数字:

00000000000000000000000000000000

D

由连字符分隔的 32 位数字:

00000000-0000-0000-0000-000000000000

B

由连字符,括在大括号分隔的 32 位数字:

{00000000-0000-0000-0000-000000000000}

P

由括在括号中的连字符分隔的 32 位数字:

(00000000-0000-0000-0000-000000000000)

X

四个十六进制值括在大括号,其中第四个值是也括在大括号的八个十六进制值的子集:

{0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}

K2 GUID作用补充

  虽然说K2流程图是以XML格式进行存储,但通过K2 设计器或者进行编译项目操作,K2会对流程图进行转换生成代码项目。

  • 所以通过一个现有流程进行复制,会提示以下类似问题。

  

  • 生成代码的路径
C:\Users\用户名\AppData\Local\Temp\ExtenderProjects
  • 各个流程图以CSWinWF-GUID为项目名称。
  • 同样的,节点相关代码也是含有GUID的。

实现方案

  通过上述分析的结果,我们就可以用正则表达式查找出所有小写的GUID,然后过滤掉重复(包括格式"D"的变种),之后使用替换方法,对旧的GUID生成一个新的GUID。

示例代码:

            var processes = Directory.GetFiles(OutputFolderPath, "*.kprx", SearchOption.AllDirectories);foreach (var fileName in processes){var file = new FileInfo(fileName);var fileContent = File.ReadAllText(fileName, Encoding.UTF8);//获取K2流程图所有小写字母GUIDvar pattern = "[a-f0-9]{8}(-[a-f0-9]{4}){3}-[a-f0-9]{12}|[a-f0-9]{8}([a-f0-9]{4}){3}[a-f0-9]{12}";Regex regex = new Regex(pattern);MatchCollection matchCollection = regex.Matches(fileContent);var guidList = new List<Guid>();foreach (Match match in matchCollection){var guid = new Guid(match.Value);if (!guidList.Contains(guid)){guidList.Add(guid);}}//将所有GUID替换为新的GUIDforeach (var guid in guidList){if (guid != Guid.Empty){var newGuid = Guid.NewGuid();fileContent = fileContent.Replace(guid.ToString("D"), newGuid.ToString("D"));fileContent = fileContent.Replace(guid.ToString("N"), newGuid.ToString("N"));}}//写入文件
                File.WriteAllText(fileName, fileContent, Encoding.UTF8);}

总结

  虽然最终实现复制流程图的想法,对K2流程图的分析也没有错,但在这个过程中碰到的坑还不少,尝试了无数种可能,生成了无数次,生成出来的流程图打开都报错了,将生成出来的流程图对比原来的流程图,都没有发现任何问题。

想过是不是GUID正则表达式有问题?
想过是不是GUID替换有问题?
想过是不是有些GUID是固定的?

  纠结了无数天,比较两个流程图眼睛都看花了,还是没有找到根源。最后索性新建一个只有一个K2节点流程图,减少生成的内容,通过手工比对依次一个个替换,重新加载流程图,直到替换到出现错误。最终发现一个相同GUID使用了有两种格式"D"和"N",差点没吐血。总之,有成功的喜悦,也有失败的启示。

参考资料

https://msdn.microsoft.com/zh-cn/library/97af8hh4.aspx
http://community.k2.com/t5/K2-blackpearl/copy-and-rename-a-process/td-p/24383
https://www.k2.com/onlinehelp/k2blackpearl/devref/current/default.htm#Create_Process.html

转载于:https://www.cnblogs.com/youyiying/p/5318785.html

复制K2流程图实现记录相关推荐

  1. 效率提升工具--高级剪贴板Ditto Ditto - Windows剪贴板增强小工具,方便复制粘贴多条记录

    在平时的工作中,好多地方需要重复的复制粘帖一些重复性的代码,频繁的Ctrl+C.Ctrl+V导致效率很低,而且时间长了会很烦,Windows自带的剪切板功能一次只能进行一条记录操作,单一的不行,与提高 ...

  2. Ditto —— windows 剪贴板增强小工具(复制粘贴多条记录)

    Windows 虽然不断在升级,但系统自带的剪贴板功能却仍然弱爆了 (只能保留一条记录). Ditto 下载地址:http://sourceforge.net/projects/ditto-cp/fi ...

  3. VMware10虚拟机复制文件卡死解决记录

    环境:* Win10 VMware10 CentOS-6.8-x86_64 问题: VMware10版本下宿主机复制文件到虚拟机下卡死,必须强制任务管理器才能关闭 原因 上网搜索原来我电脑win10现 ...

  4. postgresql 重启记录_PostgreSQL 高可用:PostgreSQL复制和自动故障转移

    原文:PostgreSQL Replication and Automatic Failover Tutorial[1] 作者:Abbas Butt 翻译整理:alitrack 1.什么是 Postg ...

  5. 【MYSQL笔记】复制删除和表和记录

    复制表的列结构和记录 create table 新表名 select * from 原表名; 这种方法不能复制auto_increment等属性,auto_increment等属性需要在复制后再次进行 ...

  6. 18、手把手教你Extjs5(十八)模块记录的拖放删除、拖放复制新增

    网页当中的拖放(drag-drop)是比较有趣的操作,extjs5中很好的封装了拖放的动作,也有各种类来支持,但是要学好"拖放"这个东西真是很难,特别是象我这样英语不好的人,看不太 ...

  7. MySQL主主复制 外键_MySQL 组复制介绍

    一.组复制是个什么鬼? 先从 MySQL 的复制技术谈起,首先是 MySQL 的异步复制 异步复制模式下,Master上执行事务产生 binlog,slave 通过连接 master 抓取 binlo ...

  8. 《Reids 设计与实现》第十二章 复制

    <Reids 设计与实现>第十二章 复制 文章目录 <Reids 设计与实现>第十二章 复制 一.简介 二.旧版复制功能的实现 1.同步 2.命令传播 三.旧版复制功能的缺陷 ...

  9. mysql 从从(主主)复制(故障转移)

    mysql 从从(主主)复制(故障转移) 更新说明 8.0 所谓主主,其实是从从: 数据库版本 从1 1.数据库配置 2.重启数据库 3.设置从从 4.开启数据同步功能 5.在linux系统中mysq ...

最新文章

  1. 继承jpanel不显示_房产继承全指南
  2. 04_Pytorch生态、PyTorch能做什么、PyTorch之Autograd、autograd案例、GPU加速案例
  3. js reduce实现中间件_实现redux中间件-洋葱模型
  4. Git 分支 - 分支简介
  5. 201521123018 《Java程序设计》第3周学习总结
  6. Pytorch中的train和eval模式详解
  7. 3.概率分布函数与概率密度函数
  8. 深度学习:智能时代的核心驱动力量
  9. 如何实现Solidworks批量修改工程图模板?
  10. xp下安装什么linux系统版本,windows xp sp3下怎么安装linux系统?
  11. 苹果开发者账号的那些坑
  12. 美服无限火力是哪个服务器,为啥无限火力不能永久开放?其实美服曾经开放过,但结果太残酷...
  13. 澎思科技茹敏:人脸识别的泛安防落地及多维数据实战应用|量子位沙龙回顾
  14. allegro生成不规则钻孔 .rou
  15. 「镁客·请讲」脑穿越黄庄:过分乐观和激情之后,行业需要找到VR不可替代之处...
  16. strstr函数[转]
  17. 「Swift」跳转至第三方App|淘宝、天猫、京东
  18. 树莓派4B ubuntu20.04 python驱动光电传感器实现计数 教程
  19. 联盟链-许可制区块链
  20. AngularJS 课程

热门文章

  1. android用户界面编程技巧——更新请求
  2. 较真的来了!这篇【硬核论文】为何恺明新作MAE提供了一种理论解释和数学证明...
  3. 杭州专场!华为机器视觉技术开放日—探索智能相机
  4. HTML MySQL实现登录注册_servlet+html+mysql实现登录注册功能
  5. 零基础想学Python,明白这2点,越快年薪30W
  6. 高效神器!小目标检测迎来曙光!SSPNet金字塔网络!川大出品
  7. 太棒了!8 个流行的 Python 可视化工具包,你喜欢哪个?
  8. Pygal简单使用——模拟掷骰子
  9. 《Python编程从入门到实践》记录之将Python函数存储在模块中(import、import*)
  10. FreeAnchor:令anchor自由匹配标签的策略