我用 C# 创建了一个插件。
当在 EA 应用程序中,用户选择一个元素,打开上下文元素窗口(通过双击元素)并仅按“确定”按钮而不更改元素内的任何内容时,将触发 API
EA_OnNotifyContextItemModified
。没有修改任何内容,为什么会触发这个API?
有没有办法或者API来区分:
选择一个元素,打开上下文元素窗口(双击元素),按“确定”
选择一个元素,打开上下文元素窗口(双击元素),修改某些内容(例如元素的名称),然后按“确定”
当元素可能发生更改时,EA 会通知您。由您决定是否以及什么发生变化。
实现此目的的一种方法是订阅
EA_OnContextItemChanged
事件,并记住元素和相关值(例如名称)
然后在
EA_OnNotifyContextItemModified
中,您可以将这些值与之前记录的值进行比较。
这似乎在大多数情况下都有效。
下面是一个 VBScript 示例,演示了这个概念
Dim contextName
Dim contextGUID
function EA_OnContextItemChanged(GUID, ot)
if ot = otElement then
Dim contextElement
set contextElement = Repository.GetElementByGuid(GUID)
if not contextElement is nothing AND isUsedByBPM(contextElement) then
contextName = contextElement.Name
contextGUID = contextElement.ElementGUID
end if
end if
end function
function EA_OnNotifyContextItemModified(GUID, ot)
'check if the name has been changed
if GUID = contextGUID then
Dim contextElement
set contextElement = Repository.GetElementByGuid(GUID)
if contextName <> contextElement.Name then
msgbox "Element with name '" & contextName & "' has been changed to '" & contextElement.Name & "'"
end if
end if
end function