具有自定义查询的嵌套模板片段?

时间:2015-10-23 20:07:16

标签: sql templates documentation-generation enterprise-architect

首先,在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作为'外部'中的字段返回自定义查询,但这没有任何区别。

是否有可能使用自定义查询嵌套模板片段??

1 个答案:

答案 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#

可能的解决方案

  1. 使用片段中的#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#

  2. 然后将SQL Fragment添加到模板的Diagram部分

    package >
    Package Name: {Pkg.Name}
    diagram >
    Diagram name: {Diagram.Name}
    {My SQL Template Fragment}
    < diagram
    < package
    
    1. 使用虚拟文档为模板的图表部分添加模型文档,并为模板的元素部分添加模型文档。在这种情况下,您可以使用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>'

    2. 将搜索名称放在标记值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