复制K2流程图实现记录
开发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会对流程图进行转换生成代码项目。
- 所以通过一个现有流程进行复制,会提示以下类似问题。
- 生成代码的路径
- 各个流程图以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流程图实现记录相关推荐
- 效率提升工具--高级剪贴板Ditto Ditto - Windows剪贴板增强小工具,方便复制粘贴多条记录
在平时的工作中,好多地方需要重复的复制粘帖一些重复性的代码,频繁的Ctrl+C.Ctrl+V导致效率很低,而且时间长了会很烦,Windows自带的剪切板功能一次只能进行一条记录操作,单一的不行,与提高 ...
- Ditto —— windows 剪贴板增强小工具(复制粘贴多条记录)
Windows 虽然不断在升级,但系统自带的剪贴板功能却仍然弱爆了 (只能保留一条记录). Ditto 下载地址:http://sourceforge.net/projects/ditto-cp/fi ...
- VMware10虚拟机复制文件卡死解决记录
环境:* Win10 VMware10 CentOS-6.8-x86_64 问题: VMware10版本下宿主机复制文件到虚拟机下卡死,必须强制任务管理器才能关闭 原因 上网搜索原来我电脑win10现 ...
- postgresql 重启记录_PostgreSQL 高可用:PostgreSQL复制和自动故障转移
原文:PostgreSQL Replication and Automatic Failover Tutorial[1] 作者:Abbas Butt 翻译整理:alitrack 1.什么是 Postg ...
- 【MYSQL笔记】复制删除和表和记录
复制表的列结构和记录 create table 新表名 select * from 原表名; 这种方法不能复制auto_increment等属性,auto_increment等属性需要在复制后再次进行 ...
- 18、手把手教你Extjs5(十八)模块记录的拖放删除、拖放复制新增
网页当中的拖放(drag-drop)是比较有趣的操作,extjs5中很好的封装了拖放的动作,也有各种类来支持,但是要学好"拖放"这个东西真是很难,特别是象我这样英语不好的人,看不太 ...
- MySQL主主复制 外键_MySQL 组复制介绍
一.组复制是个什么鬼? 先从 MySQL 的复制技术谈起,首先是 MySQL 的异步复制 异步复制模式下,Master上执行事务产生 binlog,slave 通过连接 master 抓取 binlo ...
- 《Reids 设计与实现》第十二章 复制
<Reids 设计与实现>第十二章 复制 文章目录 <Reids 设计与实现>第十二章 复制 一.简介 二.旧版复制功能的实现 1.同步 2.命令传播 三.旧版复制功能的缺陷 ...
- mysql 从从(主主)复制(故障转移)
mysql 从从(主主)复制(故障转移) 更新说明 8.0 所谓主主,其实是从从: 数据库版本 从1 1.数据库配置 2.重启数据库 3.设置从从 4.开启数据同步功能 5.在linux系统中mysq ...
最新文章
- 继承jpanel不显示_房产继承全指南
- 04_Pytorch生态、PyTorch能做什么、PyTorch之Autograd、autograd案例、GPU加速案例
- js reduce实现中间件_实现redux中间件-洋葱模型
- Git 分支 - 分支简介
- 201521123018 《Java程序设计》第3周学习总结
- Pytorch中的train和eval模式详解
- 3.概率分布函数与概率密度函数
- 深度学习:智能时代的核心驱动力量
- 如何实现Solidworks批量修改工程图模板?
- xp下安装什么linux系统版本,windows xp sp3下怎么安装linux系统?
- 苹果开发者账号的那些坑
- 美服无限火力是哪个服务器,为啥无限火力不能永久开放?其实美服曾经开放过,但结果太残酷...
- 澎思科技茹敏:人脸识别的泛安防落地及多维数据实战应用|量子位沙龙回顾
- allegro生成不规则钻孔 .rou
- 「镁客·请讲」脑穿越黄庄:过分乐观和激情之后,行业需要找到VR不可替代之处...
- strstr函数[转]
- 「Swift」跳转至第三方App|淘宝、天猫、京东
- 树莓派4B ubuntu20.04 python驱动光电传感器实现计数 教程
- 联盟链-许可制区块链
- AngularJS 课程
热门文章
- android用户界面编程技巧——更新请求
- 较真的来了!这篇【硬核论文】为何恺明新作MAE提供了一种理论解释和数学证明...
- 杭州专场!华为机器视觉技术开放日—探索智能相机
- HTML MySQL实现登录注册_servlet+html+mysql实现登录注册功能
- 零基础想学Python,明白这2点,越快年薪30W
- 高效神器!小目标检测迎来曙光!SSPNet金字塔网络!川大出品
- 太棒了!8 个流行的 Python 可视化工具包,你喜欢哪个?
- Pygal简单使用——模拟掷骰子
- 《Python编程从入门到实践》记录之将Python函数存储在模块中(import、import*)
- FreeAnchor:令anchor自由匹配标签的策略