Enterprise Architect 通过 C# 使用 API 时显示弹出窗口

问题描述 投票:0回答:1

我正在使用企业架构师版本 15,并且我创建了一个基于文件的项目,其文件扩展名为 .eapx。我正在尝试通过具有以下层次结构的企业架构师中的 API(使用 C# 语言)创建和更新新包:根模型/包/新包,并且在更新包时,我收到以下消息:底层模型已更改 ,这会冻结我的企业架构师以响应任何进一步的 API 调用。

pop-up from Enterprise architect

以下是执行顺序(这里每一步都是一个单独的函数,传递创建的 newPackage):

1。首先创建一个名为“Demo”的包

Package newPackage = package.Packages.AddNew(EAConstants.OH_CREATE_TEMPLATE, "Package");
newPackage.Update();

2。设置系统字段值。

Package package = (Package)newPackage;
package.Element.Status = "Approved"
package.Element.Stereotype = <Some Stereotype Value>;
package.Element.Update();
package.Update();

3.设置标记值

Package pc = (Package)newPackage;
Element element = pc.Element;
set tag values for element
element.TaggedValues.Refresh();
element.Update();

4。更新新包的名称

Package changePackage = (Package)newPackage
changePackage.Name = "NewName"
changePackage.Update();

5。刷新包

Package package = (Package)newPackage
newPackage.Element.Refresh();
newPackage.Update();

尝试过的事情:

  1. 尝试在每个更新步骤后刷新所有模型。
  2. 尝试在每个更新步骤之前刷新所有模型。

期望:
避免弹出显示警告消息,因为它会冻结我的企业应用程序以进行任何进一步的 API 调用(更合适的方法:避免对包使用抑制对话框方法)。

c# enterprise-architect
1个回答
0
投票

我很确定这种情况正在发生,因为所有多余的

Update()
Refresh()
调用。

你真的不应该执行代码,除非你确定你需要它。

示例:

Package package = (Package)newPackage;
package.Element.Status = "Approved"
package.Element.Stereotype = <Some Stereotype Value>;
package.Element.Update();
package.Update();

不需要最后一个

package.Update()
,因为您没有对包对象进行任何更改,并且您已经保存了
package.Element

Package pc = (Package)newPackage;
Element element = pc.Element;
set tag values for element
element.TaggedValues.Refresh();
element.Update();

此代码根本不执行任何操作(功能)。不需要

Refresh()
element.Update()

Package package = (Package)newPackage
newPackage.Element.Refresh();
newPackage.Update();

再次强调,这段代码什么也没做。

如果您将代码限制为仅包含您实际需要的内容,您将有更好的机会避免这些烦人的弹出窗口。

还有一种延迟 GUI 更新的方法 (

EnableUI<something>..
),以及一种告诉 EA 某些内容已更改的方法 (
Notify<something>...
)。如果其他方法都失败了,这些也可能会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.