首先,在Sparx的帮助下,我在“创建模板片段”下阅读:
" 如果您在另一个片段中嵌入模板片段,则从父模板生成的报告将会更慢"。
所以,我知道一般来说,嵌套模板片段应该是可能的。
我有许多图表,我想从中生成文档。 对于每个图,我想在该图上处理某些类型的元素(例如活动)。 因此,我的主要模板(处理图表)引用了基于自定义查询的模板片段:
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}。
但是,我还想查询链接到每个活动的对象的标记值 ... 为此,我有另一个基于自定义查询的模板片段,如下所示:
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
直接使用,第二个模板片段也可以正常工作,我可以构建一个引用{TagName}和{TagValue}的表
然而,我无法弄清楚的是如何使两者一起工作,因此第二个模板片段嵌套在第一个模板片段中,因此对于每个图元素,我还可以显示链接的标记值。
可能是内心的'自定义查询没有收到#OBJECTID#? 我试过了。将OBJECTID作为'外部'中的字段返回自定义查询,但这没有任何区别。
是否有可能使用自定义查询嵌套模板片段??
答案 0 :(得分:0)
问题是您的片段应该在图表下的元素部分中使用,但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#
,为图表中的所有元素及其标记值创建一个大表
您可以使用
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 Fragment添加到模板的Diagram部分
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
中,并在标记值Copy/Paste..|Copy Node GUID to clipboard
中放置图表的GUID(右键单击项目浏览器中的图表并选择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