我正在使用企业架构师版本 15,并且我创建了一个基于文件的项目,其文件扩展名为 .eapx。我正在尝试通过具有以下层次结构的企业架构师中的 API(使用 C# 语言)创建和更新新包:根模型/包/新包,并且在更新包时,我收到以下消息:底层模型已更改 ,这会冻结我的企业架构师以响应任何进一步的 API 调用。
以下是执行顺序(这里每一步都是一个单独的函数,传递创建的 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();
尝试过的事情:
期望:
避免弹出显示警告消息,因为它会冻结我的企业应用程序以进行任何进一步的 API 调用(更合适的方法:避免对包使用抑制对话框方法)。
我很确定这种情况正在发生,因为所有多余的
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>...
)。如果其他方法都失败了,这些也可能会有所帮助。