带有自定义查询的嵌套模板片段?
Nested Template Fragments with Custom Queries?
首先,在我阅读的 Sparx 帮助中 'Creating a Template Fragment':
"如果将一个模板片段嵌入到另一个片段中,从父模板生成报告的速度会变慢"。
所以,我知道一般来说嵌套模板片段应该是可能的。
我有许多图表要从中生成文档。
对于每个图表,我想处理该图表上某些类型(例如活动)的元素。
因此,我的主要模板(处理图表)引用了一个基于自定义查询的模板片段:
select o.Name as ActivityName, ...
from t_object o, t_diagramobjects do
where
o.Object_ID = do.Object_ID
and do.Diagram_ID = #DIAGRAMID#
and o.Object_Type = 'Activity'
有效 - 例如,我可以在模板片段中插入自定义字段 {ActivityName}。
不过,我还想查询链接到每个 activity 的对象的 标记值...
为此,我有另一个基于自定义查询的模板片段,如下所示:
select op.Property as LinkedTagName, op.Value as LinkedTagValue
from
t_object o1, t_connector c, t_object o2, t_objectproperties op
where
o1.Object_ID = #OBJECTID#
and o1.Object_ID = c.Start_Object_ID
and c.End_Object_ID = o2.Object_ID
and o2.Object_ID = op.Object_ID
直接使用,第二个模板片段也可以正常工作,我可以构建一个 table 引用 {TagName} 和 {TagValue}
但是,我不知道如何让两者一起工作,所以第二个模板片段嵌套在第一个模板片段中,这样对于每个图表元素,我还可以显示链接的标记值。
可能 'inner' 自定义查询没有收到 #OBJECTID#?
我试过了 a.o。 return OBJECTID 作为 'outer' 自定义查询中的字段,但这没有任何区别。
是否可以通过自定义查询嵌套模板片段...?
问题是您的片段应该用在图表下方的元素部分,但 EA 不允许这样做
package >
Package Name: {Pkg.Name}
diagram >
Diagram name: {Diagram.Name}
element >
The fragment should be added here but EA doesn't allow that
< element
< diagram
< package
我猜你随后将它添加到了 diagram>
部分,但这不会起作用,因为它没有可用的 #OBJECTID#
。
可能的解决方案
在片段中使用 #DIAGRAMID#
并为图表中的所有元素及其标记值创建一个大 table
您可以使用
等查询
select o.[Name] AS Owner, tv.[Property] as TV_Name, tv.[VALUE] AS TV_Value, tv.[Notes] as TV_Notes
from (((t_object o
inner join t_diagramObjects dob on dob.[Object_ID] = o.[Object_ID])
inner join t_diagram d on dob.[Diagram_ID] = d.[Diagram_ID])
left join t_objectproperties tv on tv.[Object_ID] = o.[Object_ID])
where d.[Diagram_ID] = #DIAGRAMID#
然后将 SQL 片段添加到模板的图表部分
package >
Package Name: {Pkg.Name}
diagram >
Diagram name: {Diagram.Name}
{My SQL Template Fragment}
< diagram
< package
使用虚拟文档,您可以在其中为模板的图表部分添加一个模型文档,并为模板的元素部分添加一个模型文档。在这种情况下,您可以使用 SQL 搜索来定义片段应报告的元素。使用类似:
select o.[ea_guid] AS CLASSGUID, o.[Object_Type] AS CLASSTYPE, o.[Name] as Name
from ((t_object o
inner join t_diagramObjects dob on dob.[Object_ID] = o.[Object_ID])
inner join t_diagram d on dob.[Diagram_ID] = d.[Diagram_ID])
where d.[ea_guid] = '<Search Term>'
将搜索的名称放入标记值 SearchName
并将图表的 GUID(在项目浏览器中右键单击图表并选择 Copy/Paste..|Copy Node GUID to clipboard
)放入标记值 SearchValue
然后制作一个普通模板并使用类似
的东西
package >
element >
Element Name: {Element.Name}
tagged value >
Tagged Value Name: {ElementTagVal.Name}
Tagged Value Value: {ElementTagVal.Value}
Tagged Value Notes: {ElementTagVal.Notes}
< tagged value
< element
< package
首先,在我阅读的 Sparx 帮助中 'Creating a Template Fragment':
"如果将一个模板片段嵌入到另一个片段中,从父模板生成报告的速度会变慢"。
所以,我知道一般来说嵌套模板片段应该是可能的。
我有许多图表要从中生成文档。 对于每个图表,我想处理该图表上某些类型(例如活动)的元素。 因此,我的主要模板(处理图表)引用了一个基于自定义查询的模板片段:
select o.Name as ActivityName, ...
from t_object o, t_diagramobjects do
where
o.Object_ID = do.Object_ID
and do.Diagram_ID = #DIAGRAMID#
and o.Object_Type = 'Activity'
有效 - 例如,我可以在模板片段中插入自定义字段 {ActivityName}。
不过,我还想查询链接到每个 activity 的对象的 标记值... 为此,我有另一个基于自定义查询的模板片段,如下所示:
select op.Property as LinkedTagName, op.Value as LinkedTagValue
from
t_object o1, t_connector c, t_object o2, t_objectproperties op
where
o1.Object_ID = #OBJECTID#
and o1.Object_ID = c.Start_Object_ID
and c.End_Object_ID = o2.Object_ID
and o2.Object_ID = op.Object_ID
直接使用,第二个模板片段也可以正常工作,我可以构建一个 table 引用 {TagName} 和 {TagValue}
但是,我不知道如何让两者一起工作,所以第二个模板片段嵌套在第一个模板片段中,这样对于每个图表元素,我还可以显示链接的标记值。
可能 'inner' 自定义查询没有收到 #OBJECTID#? 我试过了 a.o。 return OBJECTID 作为 'outer' 自定义查询中的字段,但这没有任何区别。
是否可以通过自定义查询嵌套模板片段...?
问题是您的片段应该用在图表下方的元素部分,但 EA 不允许这样做
package >
Package Name: {Pkg.Name}
diagram >
Diagram name: {Diagram.Name}
element >
The fragment should be added here but EA doesn't allow that
< element
< diagram
< package
我猜你随后将它添加到了 diagram>
部分,但这不会起作用,因为它没有可用的 #OBJECTID#
。
可能的解决方案
在片段中使用
等查询#DIAGRAMID#
并为图表中的所有元素及其标记值创建一个大 table 您可以使用select o.[Name] AS Owner, tv.[Property] as TV_Name, tv.[VALUE] AS TV_Value, tv.[Notes] as TV_Notes from (((t_object o inner join t_diagramObjects dob on dob.[Object_ID] = o.[Object_ID]) inner join t_diagram d on dob.[Diagram_ID] = d.[Diagram_ID]) left join t_objectproperties tv on tv.[Object_ID] = o.[Object_ID]) where d.[Diagram_ID] = #DIAGRAMID#
然后将 SQL 片段添加到模板的图表部分
package >
Package Name: {Pkg.Name}
diagram >
Diagram name: {Diagram.Name}
{My SQL Template Fragment}
< diagram
< package
使用虚拟文档,您可以在其中为模板的图表部分添加一个模型文档,并为模板的元素部分添加一个模型文档。在这种情况下,您可以使用 SQL 搜索来定义片段应报告的元素。使用类似:
select o.[ea_guid] AS CLASSGUID, o.[Object_Type] AS CLASSTYPE, o.[Name] as Name from ((t_object o inner join t_diagramObjects dob on dob.[Object_ID] = o.[Object_ID]) inner join t_diagram d on dob.[Diagram_ID] = d.[Diagram_ID]) where d.[ea_guid] = '<Search Term>'
将搜索的名称放入标记值 SearchName
并将图表的 GUID(在项目浏览器中右键单击图表并选择 Copy/Paste..|Copy Node GUID to clipboard
)放入标记值 SearchValue
然后制作一个普通模板并使用类似
的东西package >
element >
Element Name: {Element.Name}
tagged value >
Tagged Value Name: {ElementTagVal.Name}
Tagged Value Value: {ElementTagVal.Value}
Tagged Value Notes: {ElementTagVal.Notes}
< tagged value
< element
< package