Enterprise Architect插件开发:元素TaggedValue变更通知触发异常
嘿,我之前开发EA插件时也踩过这个事件触发失败的坑,给你梳理几个最容易遗漏的关键点,一步步排查应该能解决:
1. 确认插件已正确加载且事件签名完全匹配
首先得确保你的插件在EA的「Add-Ins」管理器里是启用状态,可以在EA_Connect方法里加个简单弹窗(比如MessageBox.Show("插件已加载");)验证插件确实被EA识别了。
然后检查EA_OnElementTagEdit的方法签名必须和EA要求的完全一致:
public override void EA_OnElementTagEdit(EA.Repository Repository, long ObjectID, ref string TagName, ref string TagValue, ref string TagNotes)
注意几个细节:
- 参数
ObjectID是long类型,不能写成int - 三个字符串参数必须带
ref修饰符 - 返回值是
void,不能有返回值
2. 正确设置TaggedValue的广播类型
你用SetAttribute("Type", "AddinBroadcast")的方式其实没问题,但更推荐直接访问Type属性(更直观且不易出错):
ob3.Type = "AddinBroadcast";
这里要注意拼写完全正确,大小写敏感,不能写成Add-in Broadcast或者Broadcast。
3. 别忘了更新父元素并刷新模型
创建或修改TaggedValue后,只更新TaggedValue本身是不够的,必须同步更新它的父元素,还要刷新模型视图让EA感知到变更:
// 创建TaggedValue EA.TaggedValue ob3 = (EA.TaggedValue)NewElement.TaggedValues.AddNew("Responsible", "val"); ob3.Value = EEPROMBlocks.ElementAt(index).Responsible; ob3.Type = "AddinBroadcast"; ob3.Update(); // 关键:更新父元素 NewElement.Update(); // 刷新模型视图,确保EA识别到这个广播标签 Repository.RefreshModelView(NewElement.PackageID);
4. 确认触发场景是对的
EA_OnElementTagEdit只会在手动修改元素的TaggedValue时触发(比如在EA界面里双击元素,编辑TaggedValue后点击确定)。如果你是通过代码修改TaggedValue,这个事件不会自动触发——EA的广播事件是针对用户交互操作的,不是代码触发的变更。
5. 检查TaggedValue的归属对象
确保这个TaggedValue是直接属于**元素(Element)**的,而不是图表(Diagram)、包(Package)或者其他对象。如果是图表的TaggedValue,需要用EA_OnDiagramTagEdit事件,以此类推。
按上面的步骤逐一排查,应该就能让事件正常触发了!
内容的提问来源于stack exchange,提问作者Claudia Cazan

