把VISIO绘制的流程图导出成XML文件 - wgtboy

时间:2024-03-06 16:28:01

把VISIO绘制的流程图导出成XML文件

最近帮忙谢了个工作流创建小工具,原理就是用VISO画出流程图,然后用VBA弄成XML导出,还挺有意思。



生成结果:

<?xml version="1.0" encoding="UTF-8"?>
<Workflow>
 <Process id="0-起始环节" name="开始环节" type="start" turnModeType="" turnModeFlag="" term="" rejectAction="false" SMSApr="false" SMSAprCon="" description="" customFunction="" formTemplate="">
  <Action name="提交" toStatus="中间" runCondition="" runOrder="" customFunction="" ACL="" toTurnModeType="不指定" toTurnModeFlag="" awakeType="sms:notify" IsMustInput="false" toProcessID="0-普通环节" SMSShortcut=""/>
 </Process>
 <Process id="0-中止环节" name="结束环节" type="end" turnModeType="" turnModeFlag="" term="" rejectAction="false" SMSApr="false" SMSAprCon="" description="" customFunction="" formTemplate=""/>
 <Process id="0-普通环节" name="普通环节" type="normal" turnModeType="用户" turnModeFlag="0300052318" term="48" rejectAction="false" SMSApr="false" SMSAprCon="" description="" customFunction="" formTemplate="">
  <Action name="提交" toStatus="结束" runCondition="" runOrder="" customFunction="" ACL="" toTurnModeType="不指定" toTurnModeFlag="" awakeType="sms:notify" IsMustInput="false" toProcessID="0-中止环节" SMSShortcut=""/>
 </Process>
</Workflow>


1、首先要建立一个模具:*.vss,一个模板:*.vst,搞一些基本图标上去,如环节图标,动作图标什么的;

2、就是分析页面上的图了,visio的图形模型比较怪异,没办法应用图论的知识去分析(最起码是我不会,嘻嘻),只好用笨方法:遍历所有的图形,每个作为一个节点,插入到DOM模型中,导出成XML文件。VISIO会给每个图形分配一个id(不是32位GUID,不知道命名规则是怎么定的,大体是图标模板名+编号),还能取得与之关联的图形。

过程中学到一些以前不知道的技巧:

1、图标自定义属性必须使用shapsheet窗口才比较好搞,直接在属性设置窗口里面保证搞得你头大你都搞不出想要得效果。

2、可以自己添加自定义菜单到visio的界面上

3、vba其实也很牛,VB能干得它都能干,无论是链接数据库还是调用API,难怪office搞得wps一点脾气都没有

最后得结果比较让人满意,这样画好流程图,直接就能导出成XML文件给工作流引擎用了,挺方便的。