在 Enterprise Architect 中访问 Repository.GetElementSet 时出现异常
Exception while accessing Repository.GetElementSet in Enterprise Architect
我尝试使用 VBA 脚本来自动化 Enterprise Architect 中元素之间的可追溯性。如果元素之间已经存在可追溯性,我需要跳过这些元素。
我使用一个简单的查询编写,其中对象 ID 存在于 EAP 中。
set useCaseCollection = Repository.GetElementSet("select Start_Object_ID from t_connector where (Start_Object_ID = -1222814411 and End_Object_ID = 505879126 and Connector_Type = 'Realisation')",2)
If Err.Number <> 0 Then
Session.Output( useCaseCollection.Count)
End if
On Error Goto 0
现在的问题是,如果元素之间存在可追溯性,我会遇到一个异常,因为在集合中找不到项目。如果不存在可追溯性,那么它会将值打印为零。上面的方法有什么问题或者有什么其他的解决方法可以解决这个问题吗?
我想答案很简单。 GetElementSet
仅适用于 t_object
(元素),不适用于 t_connector
。请改用 SQLQuery
。或者使用 JOIN
实际上 return 连接的元素,而不是对象 ID。
类似的东西:
dim useCaseCollection as EA.Collection
set useCaseCollection = Repository.GetElementSet("select * from t_object WHERE object_ID in (SELECT start_object_id FROM t_connector)",2)
Session.Output( useCaseCollection.Count)
我认为将查询中字段 Start_Object_ID
的别名更改为 Object_ID
可能就足够了
set useCaseCollection = Repository.GetElementSet("select Start_Object_ID as Object_ID from t_connector where (Start_Object_ID = -1222814411 and End_Object_ID = 505879126 and Connector_Type = 'Realisation')",2)
假设其余查询当然没问题;我从未见过负对象 ID。
我尝试使用 VBA 脚本来自动化 Enterprise Architect 中元素之间的可追溯性。如果元素之间已经存在可追溯性,我需要跳过这些元素。
我使用一个简单的查询编写,其中对象 ID 存在于 EAP 中。
set useCaseCollection = Repository.GetElementSet("select Start_Object_ID from t_connector where (Start_Object_ID = -1222814411 and End_Object_ID = 505879126 and Connector_Type = 'Realisation')",2)
If Err.Number <> 0 Then
Session.Output( useCaseCollection.Count)
End if
On Error Goto 0
现在的问题是,如果元素之间存在可追溯性,我会遇到一个异常,因为在集合中找不到项目。如果不存在可追溯性,那么它会将值打印为零。上面的方法有什么问题或者有什么其他的解决方法可以解决这个问题吗?
我想答案很简单。 GetElementSet
仅适用于 t_object
(元素),不适用于 t_connector
。请改用 SQLQuery
。或者使用 JOIN
实际上 return 连接的元素,而不是对象 ID。
类似的东西:
dim useCaseCollection as EA.Collection
set useCaseCollection = Repository.GetElementSet("select * from t_object WHERE object_ID in (SELECT start_object_id FROM t_connector)",2)
Session.Output( useCaseCollection.Count)
我认为将查询中字段 Start_Object_ID
的别名更改为 Object_ID
set useCaseCollection = Repository.GetElementSet("select Start_Object_ID as Object_ID from t_connector where (Start_Object_ID = -1222814411 and End_Object_ID = 505879126 and Connector_Type = 'Realisation')",2)
假设其余查询当然没问题;我从未见过负对象 ID。