EA插件中追踪Enterprise Architect模型用户变更的最佳实践是什么?
EA模型修改状态监测方案解答
「EA_OnNotifyContextItemModified」事件的context item说明
官方文档提到的context item并不仅限于GUI当前选中的元素,它指代所有被操作触发了变更的模型对象,覆盖元素、连接器、图、属性、标记值、项目配置等所有可修改的模型实体。大部分单对象修改操作都会触发该事件,你当前的测试方案可以覆盖绝大多数常规场景。
但该方案存在两个已知局限性:
- 部分场景无法触发:批量修改操作(如批量导入元素、脚本批量更新属性)、部分图层面的外观调整(如修改画布背景、全局样式)不会触发该事件
- 存在误触发可能:打开元素属性窗口后未做任何修改直接点击确认,部分版本的EA也会触发该事件
更优的全场景监测方案
推荐用事件组合的方式实现无死角的修改监测,覆盖所有你需要的逻辑结构、外观修改场景:
- 组合监听核心事件
同时监听以下三类事件,只要触发任意一类就标记dirty = true:
EA_OnNotifyContextItemModified:覆盖常规单对象修改场景EA_OnPostNewElement/EA_OnPostNewConnector/EA_OnPostNewDiagram:覆盖所有新增模型实体的操作EA_OnEndNotification:监听画布编辑结束事件,覆盖所有图层面的外观调整(如元素位置拖动、连线路由调整、画布样式修改)
- 误触发过滤优化
每次触发事件后,可以先获取变更对象的ModifiedDate属性,和你记录的该对象上次修改时间比对,时间戳没有更新就跳过dirty标记,过滤无实际变更的误触发操作。 - 兜底简化方案
如果你的导出逻辑性能开销极低,不需要严格的实时dirty标记,可以直接在EA_OnPreCloseFile关闭文件事件中,比对当前模型文件的最后修改时间和你上次导出时记录的时间,只要模型更新时间晚于导出时间就触发导出,不需要全程监听事件维护标记,实现成本最低。
内容的提问来源于stack exchange,提问作者Benjamin4991
相关产品推荐
相关产品推荐

