Как добавить таблицу перечисления в соответствующие атрибуты в пользовательских документах в Sparx Enterprise Architect?

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

Как добавить таблицу перечисления в соответствующие атрибуты в пользовательских документах в Sparx Enterprise Architect?
Как добавить таблицу перечисления в соответствующие атрибуты в пользовательских документах в Sparx Enterprise Architect?Как добавить таблицу перечисления в соответствующие атрибуты в пользовательских документах в Sparx Enterprise Architect?

Моя цель — создать документ, в котором перечислено следующее:

Класс А
Атрибут A1
Тип A1 (простой тип данных или перечисление)
Атрибут A2
Тип A2 (простой тип данных или перечисление)
...

Вот пример PDF-документа, который я пытаюсь создать: Как добавить таблицу перечисления в соответствующие атрибуты в пользовательских документах в Sparx Enterprise Architect?

(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#

Результат, который я получаю, когда перетаскиваю класс (например, «Праздник») в документ и применяю пользовательский шаблон «Руководство пользователя», выглядит следующим образом.

Как добавить таблицу перечисления в соответствующие атрибуты в пользовательских документах в Sparx Enterprise Architect?

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

Я попробовал следующее:

  1. Добавил таблицу во фрагмент шаблона и переместил Enums.Formatted в поле таблицы.

Фрагмент шаблона
Как добавить таблицу перечисления в соответствующие атрибуты в пользовательских документах в Sparx Enterprise Architect?

Результат выглядит следующим образом: Как добавить таблицу перечисления в соответствующие атрибуты в пользовательских документах в Sparx Enterprise Architect?

С этим подходом есть две проблемы.
(1) для всех атрибутов с простым типом данных (например, FLAG) создается пустая таблица.
(2) Конечно, для каждого значения/описания перечисления не существует отдельного столбца и строки, поскольку SQL-запрос выдает только один текст (group_concat, CAST(..., as text)) с разрывами строк (char10).

Есть ли способ настроить SQL-запрос так, чтобы значение перечисления и описание попадали в отдельные столбцы и строки (например, теги разметки в SQL-запросе, чтобы EA отображал его как таблицу из двух столбцов)? Любые идеи очень ценятся.

  1. Скорректирован SQL-запрос и фрагмент шаблона:

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#

Фрагмент шаблона
Как добавить таблицу перечисления в соответствующие атрибуты в пользовательских документах в Sparx Enterprise Architect?

Результат выглядит следующим образом: Как добавить таблицу перечисления в соответствующие атрибуты в пользовательских документах в Sparx Enterprise Architect?

У этого подхода есть две проблемы:
(1) пустая таблица для атрибутов с простым типом данных.
(2) каждое значение/описание перечисления находится в отдельной таблице в дублирующемся разделе атрибутов.

Есть идеи, как решить эту проблему с помощью этого подхода?

  1. Взглянул на селектор шаблонов Sparx EA. Мне было интересно, могу ли я создать два фрагмента шаблона: один для простых типов данных (без таблицы) и один для типов данных перечисления (с таблицей).
    Насколько я понимаю, проблема здесь в том, что фрагмент селектора шаблона принимает тип и стереотип выбранного элемента, чтобы решить, какой шаблон будет применен. Поскольку тип и стереотип элемента (класса), который я перетаскиваю в документ, всегда равен «Класс»/«EMLClassObj», дифференциация невозможна.

Есть идеи, как решить эту проблему с помощью селектора шаблонов?

Или я совершенно не на правильном пути и мне нужно начать с другого подхода (например, с пользовательских скриптов)?

С какой базой данных вы работаете?

Geert Bellekens 24.05.2024 07:48

Наша модель в настоящее время хранится в одном файле .qea. Насколько я понимаю руководство пользователя EA, файл .qea представляет собой базу данных SQLite. Справочная информация: Модель создавалась не в самой EA. Я импортировал файл XMI, созданный в результате преобразования Eclipse. Логическая модель данных изначально хранилась в базе данных PostgreSQL. Сейчас мы пытаемся перейти на EA.

BAAM 24.05.2024 09:22

Возможно, вы сможете скрыть таблицу с помощью закладок.

Geert Bellekens 28.05.2024 08:00

Скрытие таблицы не работает, когда я добавляю закладки .start и .end вокруг таблицы. Как перечисления могут отображаться в таблице, как показано в моем вопросе? Возможно ли это при моем подходе или мне нужно использовать собственный сценарий или сценарий документа?

BAAM 28.05.2024 12:01

Я почти уверен, что трюк с закладками должен сработать. Я сам делал это в прошлом. Убедитесь, что вы используете правильное имя вашего настраиваемого поля (включая нижний/верхний регистр).

Geert Bellekens 28.05.2024 12:39

Круто, классный трюк, спасибо, Герт. Он работает отлично! Есть идеи, как перенести перечисления в таблицу? У меня есть многострочные объяснения для многих значений перечисления. Без таблицы это выглядит довольно запутанно.

BAAM 28.05.2024 15:01

Я думаю, это будет сложнее. Возможно, вы сможете что-то сделать с фрагментом сценария документа.

Geert Bellekens 28.05.2024 16:42

Хорошо, я посмотрю на сценарии документов. Еще раз спасибо за вашу помощь, Герт. Вероятно, мне все равно рано или поздно придется обратиться в консалтинговую компанию Bellekens.

BAAM 28.05.2024 17:52
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
8
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете добавлять фрагменты шаблона в раздел 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 >. Однако я все еще сталкиваюсь с некоторыми проблемами при сведении перечислений в таблицу. Я обновил свой первоначальный вопрос, указав более подробную информацию и то, что я пробовал. Не могли бы вы взглянуть и помочь мне понять, как решить эту часть? Буду очень признателен за дальнейшую помощь. Еще раз спасибо!

BAAM 27.05.2024 19:34

Другие вопросы по теме