В Sparx Enterprise Architect я пытаюсь документировать модель классов, содержащую классы и атрибуты. Некоторые атрибуты имеют простой тип данных (например, флаг), а некоторые имеют тип перечисления. Все типы (простые и перечислимые) моделируются в отдельных классах. Модель хранится в одном файле с расширением .qea («репозиторий как файл»), который представляет собой базу данных SQLite. Ниже приведен пример класса «Праздник» с несколькими атрибутами. Например, атрибут «isDeferred» имеет простой тип данных «FLAG». «holidayDurationType» имеет тип данных «DAYDURATIONTYPE», который является перечислением. Оба типа данных описаны в отдельном классе, как показано ниже.



Моя цель — создать документ, в котором перечислено следующее:
Класс А
Атрибут A1
Тип A1 (простой тип данных или перечисление)
Атрибут A2
Тип A2 (простой тип данных или перечисление)
...
Вот пример PDF-документа, который я пытаюсь создать:

(1) Если тип представляет собой простой тип данных, мне нужно только имя (например, FLAG) класса типа данных (см. Атрибут «isDeferred» выше).
(2) Если тип является перечислением, мне нужны имя, примечания и перечисления (= атрибуты) класса типа данных. Перечисления должны отображаться в виде таблицы из двух столбцов. В столбце 1 показан код перечисления (1,2...), а в столбце 2 — примечания (см. атрибут «holidayDurationType» выше).
Чтобы решить эту проблему, я создал собственный шаблон документа, который включает в себя фрагмент пользовательского шаблона, содержащий пользовательский запрос SQL.
Пользовательский шаблон документа «Руководство пользователя»
Обновлено: благодаря ответу @Gert Bellekens код пользовательского шаблона был обновлен, чтобы предоставить весь раздел атрибутов в виде фрагмента шаблона в разделе element >.
package >
element >
Class "{Element.Name}"
{Element.Notes}
{Template - Attribute_and_DataType}
< element
< package
Фрагмент пользовательского шаблона «Attribute_and_DataType»
Изменить. Благодаря ответу @Gert Bellekens код пользовательского фрагмента был обновлен и теперь включает всю информацию об атрибутах и типах данных в фрагмент пользовательского шаблона.
custom >
Attribute "{AttName}"
{AttDesc.Formatted}
Domain: {AttType}
{TypeDesc.Formatted}
{Enums.Formatted}
< custom
SQL-запрос в разделе Параметры фрагмента шаблона\Пользовательский запрос\Пользовательский SQL. Изменить. Благодаря ответу @Gert Bellekens пользовательский код SQL во фрагменте пользовательского шаблона был обогащен и теперь отображает все значения перечисления и их описание для каждого атрибута, имеющего тип данных перечисления.
select
a.Name as 'AttName',
a.Notes as 'AttDesc.Formatted',
a.Type as 'AttType',
e.Note as 'TypeDesc.Formatted',
(select group_concat(CAST(ev.[Default] + ': ' + coalesce(ev.Notes,
'') as text), char(10))
from t_object e
inner join t_attribute ev on ev.Object_ID = e.Object_ID
where e.Object_ID = a.Classifier
and e.Object_Type = 'Enumeration'
) as 'Enums.Formatted'
from
t_attribute a
inner join
t_object e on a.Classifier = e.Object_ID
where
a.Object_ID = #OBJECTID#
Результат, который я получаю, когда перетаскиваю класс (например, «Праздник») в документ и применяю пользовательский шаблон «Руководство пользователя», выглядит следующим образом.

Обновлено: благодаря @Geert Bellekens создание документов теперь работает и предоставляет всю необходимую информацию. Однако мне не удается свести перечисления (код и примечания) в таблицу, как в приведенном выше примере PDF.
Я попробовал следующее:
Enums.Formatted в поле таблицы.Фрагмент шаблона
Результат выглядит следующим образом:

С этим подходом есть две проблемы.
(1) для всех атрибутов с простым типом данных (например, FLAG) создается пустая таблица.
(2) Конечно, для каждого значения/описания перечисления не существует отдельного столбца и строки, поскольку SQL-запрос выдает только один текст (group_concat, CAST(..., as text)) с разрывами строк (char10).
Есть ли способ настроить SQL-запрос так, чтобы значение перечисления и описание попадали в отдельные столбцы и строки (например, теги разметки в SQL-запросе, чтобы EA отображал его как таблицу из двух столбцов)? Любые идеи очень ценятся.
SQL-запрос
select
a.Name as 'AttName',
a.Notes as 'AttDesc.Formatted',
a.Type as 'AttType',
e.Note as 'TypeDesc.Formatted',
ev.[Default] as 'EnumCode',
ev.Notes as 'EnumDesc.Formatted'
from
t_attribute a
inner join
t_object e on a.Classifier = e.Object_ID
left join
t_attribute ev on ev.Object_ID = e.Object_ID
where
a.Object_ID = #OBJECTID#
Фрагмент шаблона
Результат выглядит следующим образом:

У этого подхода есть две проблемы:
(1) пустая таблица для атрибутов с простым типом данных.
(2) каждое значение/описание перечисления находится в отдельной таблице в дублирующемся разделе атрибутов.
Есть идеи, как решить эту проблему с помощью этого подхода?
Есть идеи, как решить эту проблему с помощью селектора шаблонов?
Или я совершенно не на правильном пути и мне нужно начать с другого подхода (например, с пользовательских скриптов)?
Наша модель в настоящее время хранится в одном файле .qea. Насколько я понимаю руководство пользователя EA, файл .qea представляет собой базу данных SQLite. Справочная информация: Модель создавалась не в самой EA. Я импортировал файл XMI, созданный в результате преобразования Eclipse. Логическая модель данных изначально хранилась в базе данных PostgreSQL. Сейчас мы пытаемся перейти на EA.
Возможно, вы сможете скрыть таблицу с помощью закладок.
Скрытие таблицы не работает, когда я добавляю закладки .start и .end вокруг таблицы. Как перечисления могут отображаться в таблице, как показано в моем вопросе? Возможно ли это при моем подходе или мне нужно использовать собственный сценарий или сценарий документа?
Я почти уверен, что трюк с закладками должен сработать. Я сам делал это в прошлом. Убедитесь, что вы используете правильное имя вашего настраиваемого поля (включая нижний/верхний регистр).
Круто, классный трюк, спасибо, Герт. Он работает отлично! Есть идеи, как перенести перечисления в таблицу? У меня есть многострочные объяснения для многих значений перечисления. Без таблицы это выглядит довольно запутанно.
Я думаю, это будет сложнее. Возможно, вы сможете что-то сделать с фрагментом сценария документа.
Хорошо, я посмотрю на сценарии документов. Еще раз спасибо за вашу помощь, Герт. Вероятно, мне все равно рано или поздно придется обратиться в консалтинговую компанию Bellekens.


Вы не можете добавлять фрагменты шаблона в раздел attribute>, поскольку они могут принимать в качестве параметра только ObjectID, PackageID или DiagramID.
Альтернатива — предоставить весь раздел атрибутов в виде фрагмента шаблона и добавить его в раздел element>.
Сложность здесь в том, что вы хотите показать все возможные значения перечисления и их описание для каждого атрибута. Это немного усложняет запрос, поскольку вам придется сводить значения перечисления и примечания в одну строку.
Возможный запрос может быть
select a.Name, a.Notes as 'Description.Formatted'
,(select group_concat(CAST(ev.Name + ': ' + coalesce(ev.Notes, '') as text), char(10))
from t_object e
inner join t_attribute ev on ev.Object_ID = e.Object_ID
where e.Object_ID = a.Classifier
and e.Object_Type = 'Enumeration'
) as 'enums.Formatted'
from t_attribute a
where a.Object_ID = #OBJECTID#
Вам нужен .Formatted, чтобы убедиться, что при создании документа интерпретируется разметка в примечаниях.
CAST as text необходим, чтобы избежать усечения, если у вас много значений перечисления.
Огромное спасибо за помощь @Geert Bellekens! Благодаря вашему ответу мне удалось запустить генератор документов, добавив раздел атрибутов отверстия в качестве фрагмента шаблона в раздел element >. Однако я все еще сталкиваюсь с некоторыми проблемами при сведении перечислений в таблицу. Я обновил свой первоначальный вопрос, указав более подробную информацию и то, что я пробовал. Не могли бы вы взглянуть и помочь мне понять, как решить эту часть? Буду очень признателен за дальнейшую помощь. Еще раз спасибо!
С какой базой данных вы работаете?