Jump to content


Photo

DDS. Module. Table. Column. Trigger.

dds module table column trigger

  • Please log in to reply
5 replies to this topic

#1 dearhome

dearhome

    Advanced Member

  • Members
  • PipPipPip
  • 61 posts
  • Organisation:Home

Posted 28 March 2017 - 12:02

Добрый день.

 

Прошу помочь разобраться с регистрацией триггеров в DDS-модулях. Для таблицы Department добавляю триггер для заполнения значения поля departmentId (идентификатор записи в таблицы, делаю его автоинкрементным). Указал время срабатывания триггера, событие и тело, см. на скринот во вложении.

Выполнив команду "View SQL" на таблице я получаю тело триггера и скрипт в SQL Developer выполняется без ошибок.

 

Однако, при выполнении команды "Check" на DDS-объекте, перед выполнением Commit Capture, выдается ошибка несоответствия имени триггер, которую можно увидеть на приложенном скриншоте. Такая ошибка по всем трем таблицам, куда добавлял триггер.

 

Вопрос №1: что является причиной возникновения ошибки? прошу уточнить параграф в материалах wiqi с описанием корректной работы с триггерами для таблицы.

 

С чего, собственно, я начал добавлять триггера в таблицы: в Radixware Explorer при попытке добавления новой записи в автоматически сформированные формы я получаю ошибку следующего содержания: "Невозможно создать объект. Значение свойства Идентификатор должно быть задано". Идентификатор в данном случае - это поле locationId (Primary key). Это поле должно быть автоинкрементно. Галочки или иного параметра настройки в таблице DDS-модуля я не нашел. Последовательность "devLayer::Clients::PlaceSeq" во вкладке Values в после Sequence указал.

 

Вопрос №2: что является причиной возниконвения ошибки? прошу уточнить как правильно определять автоматическое заполнения поле PRIMARY KEY для таблицы, если не триггером?

 

С уважением, dearhome.

Attached Files


  • Yoursag, EdwardGennesi, LindaWhels and 12 others like this

#2 dlastochkin

dlastochkin

    Member

  • Administrators
  • 26 posts
  • Organisation:Compass Plus

Posted 28 March 2017 - 13:58

Добрый день.

Начну со второго вопроса. Для автоматического заполнения значения первичного ключа правильно использовать Sequence, а не триггер. Вам нужно убедится в том, что у колонки, которая используется в качестве первичного ключа, задан Sequence и в том, что соответсвующее поля класса-сущности (в ADS) действительно связано с этой колонкой (вкладка Main, поле Database Column в редакторе поля). Так же, для того, чтобы все изменения применились, нужно пересобрать branch (корень дерева на вкладке Projects в RW Designer).

 

По поводу первого вопроса: скорее всего, ошибка возникла из-за того, что у Вас возник конфликт имени триггера с префиксом БД для этого модуля (Database Attributes/Database name prefix). Если у DDS-модуля задан префикс, то имена всех объектов базы этого модуля должны начинаться с этого префикса. Если использовать автоматически сгенерированные имена (галочка Auto DB name на Вашем скриншоте), то префикс подставляется в имя объекта автоматически. Задавать имена объектам базы вручную не рекомендуется. В Вашем случае, похоже, что заданное вручную имя не содержит префикса. Для решения проблемы проще всего поставить галочку Auto DB name.


  • Frankvard, misha.19702 and RidgeMub like this

#3 dearhome

dearhome

    Advanced Member

  • Members
  • PipPipPip
  • 61 posts
  • Organisation:Home

Posted 28 March 2017 - 16:04

Спасибо за ответ. Триггера пока убрал, острой необходимости в них нет. Добавление данных в формах происходит, после Идентификатор заполняется корректно и последовательно. Ошибка моя была в том, что указав последовательности не выполнил Build.

 

С автоформами, которые предоставляются самой платформой чуточку яснее. Прошу уточнить как разрабатывать собственные формы для пользователей? Как формировать отчеты: автоматически средствами платформы и вручную? Уточните, пожалуйста, страницы в wiqi где приводится описание?!


  • Frankvard and misha.19702 like this

#4 dlastochkin

dlastochkin

    Member

  • Administrators
  • 26 posts
  • Organisation:Compass Plus

Posted 29 March 2017 - 11:43

Добрый день.

 

1) Как создать форму

В общем случае, чтобы создать нестандартную форму редактора объекта нужно в презентации редактора на вкладке "General" включить настройку "Use custom view for Explorer". Это должно привести к появлению нового элемента презентации "View". Этот элемент представляет собой дизайнер диалога. В дизайнере на форму добавляются графические элементы путем перетаскивания из панели "Palette", в панели "Properties" настраиваются их свойства, а в панели "Events" создаются обработчики событий. Если возникает необходимость в программном создании компонент или их донастройке после открытия диалога, то для этого нужно у основной формы нужно создать обработчик события "opened". 
Desktop-проводник основан на графической библиотеке Qt (в настоящий момент используется версия 4.8.6) и при создании нестандартных диалогов полезно использовать документацию по этой библиотеке.
Хотелось бы более подробно узнать какой внешний вид формы редактора планируется получить в конечном итоге. Возможно, требуемый результат можно будет получить используя только декларативные средства платформы, не прибегая к созданию нестандартных форм.
 
2) Как создать отчет
К сожалению, в данный момент, статьи на вики по созданию отчетов нет. Работы по добавлению статьи ведутся и, в ближайшее время, она появится. Пока мы предлагаем Вам пример написания отчета, представленный ниже.
 
Пример написания простого бесконтекстного отчета, в котором выводятся названия модулей RadixWare-сервера
В этом коротком примере будет создан отчет, который выводит содержимое колонки "title" таблицы RDX_Unit в pdf-файл.
Сначала создадим новый ADS-модуль с названием "Reports.Demo" (в контекстном меню сегмента ADS выбрать пункт New->Module).
Таблица RDX_Unit описана в DDS-модуле System слоя Radix, чтобы к ней можно было обращаться из Reports.Demo ее нужно добавить в зависимости модуля. Для этого нужно открыть редактор модуля Reports.Demo, нажать кнопку "Add"  и выбрать DDS-модуль "System" из списка.
Далее создадим дефиницию отчета. В контекстном меню модуля  Reports.Demo нужно выбрать пункт New->Report Class. В диалоге создания следует указать название дефиниции отчета. В данном примере это будет "UnitsReport". 
Теперь добавим строковое поле отчета, в которое будет выводится название серверного модуля. Из контекстного меню отчета следует выбрать пункт New->Field. В появившемся диалоге в поле "Name" указать "unitName", а в поле "Type" выбрать "Radix type" -> "Str".
В редакторе отчета на вкладке General укажем заголовок отчета (нужно включить настройку "Title") "Отчет по модулям". 
На вкладке "Sqml" редактора отчета нужно составить SQL-запрос для выборки данных отчета из базы и связать поля выборки с полями отчета. Сначала надо зарегистрировать одну или несколько таблиц, из которых будут доставаться данные. Для этого на элементе "Tables" следует нажать правую кнопку мыши  и выбрать "Add Tables...". В появившемся списке таблиц выбрать таблицу "Unit". Далее будет предложено указать псевдоним (Alias) таблицы. В данном примере псевдоним использоваться не будет, поэтому нужно оставить поле незаполненным и нажать OK. Теперь напишем текст SQL запроса с использованием тегов:
"Select <Unit.title> as <This.unitName> from <Unit>". См. скриншот:
post-15-0-09237200-1490769082.png
При написании запроса для вставки тега <Unit.title> нужно в разделе "Тables" раскрыть элемент "Unit" (т.е. таблицу, которую добавляли), затем раскрыть вложенный элемент "Properties" и дважды щелкнуть по элементу "title". Для вставки тега <This.unitName> нужно дважды щелкнуть по элементу "unitName" в разделе "Fields". И наконец чтобы вставить тег <Unit> нужно дважды щелкнуть по элемнту "Unit" в разделе "Tables".
Таким образом, написав "<Unit.title> as <This.unitName>", мы связали поле title таблицы RDX_Unit с полем unitName отчета.
На вкладке "Design" редактора дефиниции отчета настраивается печатная форма. В этом примере печатная форма будет представлять собой выведенные в одну колонку значения поля "unitName". Чтобы ее настроить нужно нажать правой кнопкой мыши в области "Detail" и в контекстном меню выбрать пункт "Add Property". В открывшемся диалоге в поле "Field" выбрать "unitName". 
На странице http://wiki.radixwar...Report_Designer дана более подробная информация о редакторе отчета.
На этом этапе разработку отчета будем считать завершенной. Теперь нужно выполнить операцию "Clean And Build" из контекстного меню ADS-модуля Reports.Demo. После успешной компиляции следует выполнить публикацию отчета в RadixWare Explorer.
 
Публикация отчета
Для публикации созданного отчета в проводнике нужно установить подключение с сервером и выбрать корневой элемент "Разработка пользовательских дефиниций".  Затем, перейти на элемент "Общие отчеты" и нажать кнопку "Настроить публикации отчетов". В открывшемся диалоге выбрать в выпадающем списке "Бесконтекстные" и нажать сначала кнопку "Создать список публикаций", а затем кнопку "Добавить публикацию отчета". В диалоге создания публикации в поле "Класс отчета" выбрать "Отчет по модулям".  
Опубликованный таким образом отчет можно выполнять, выбирая его из списка общих отчетов.
 
Создание параметризованного отчета
Теперь немного усложним предыдущий пример. Добавим в отчет параметр, который будет задавать пользователь перед выполнением. Допустим, что в отчет требуется выводить только модули заданного типа, а если тип не указан, то все модули. 
Типы модулей сервера описаны в ADS-модуле System в перечислении UnitType. Чтобы в модуле Reports.Demo можно было использовать это перечисление следует добавить еще одну зависимость от ADS-модуля System (все теже действия какие были ранее при добавлении зависимости от DDS-модуля System).
Далее добавим в отчет параметр. Для этого в контекстном меню дефиниции отчета нужно выбрать пункт "New->Parameter". В диалоге создания в поле "Name" укажем "unitType", а в поле "Type" нужно выбрать "Radix type" ->" Enumeration..."->"UnitType". Теперь откроем редактор созданного парамета и на вкладке "Presentation" зададим строку загловка (первая галочка "Define") "Тип модуля", а в настройке "Display instead of '<Not Defined>'" напишем строку "<любой>".
После этого потребуется поменять SQL-условие выборки. На вкладке "Sqml" редактора дефиниции отчета новое условие будет иметь вид:
"Select <Unit.title> as <This.unitName> from <Unit> where <:unitType> is NULL OR <Unit.type>=<:unitType>"
post-15-0-54078800-1490769168.png
Для вставки тега <:unitType> нужно дважды щелкнуть по элементу "unitType" в разделе "Parameters", ну а чтобы вставить тег <Unit.type> нужно выбрать соответствующее поле таблицы "Unit".
После компиляции модуля Reports.Demo можно смотреть отчет в проводнике. Перед выполнением отчета пользователю будет показан диалог с предложением выбрать параметр "Тип модуля".
 

 

Attached Files


  • misha.19702 likes this

#5 dearhome

dearhome

    Advanced Member

  • Members
  • PipPipPip
  • 61 posts
  • Organisation:Home

Posted 29 March 2017 - 12:01

Большое спасибо за Ваш развернутый ответ. Буду разбираться.


  • misha.19702 likes this

#6 dearhome

dearhome

    Advanced Member

  • Members
  • PipPipPip
  • 61 posts
  • Organisation:Home

Posted 29 March 2017 - 13:59

Спасибо за Ваш развернутый ответ. С отчетом все получилось. Что касается пользовательских форм, создаваемых не стандартными средствами, я еще не знаю какие именно формы и способы представления данных будут необходимы. Сейчас уточняю с прицелом на будущее. Во всяком случае первоочередными средствами будут стандартные возможности платформы.

 

Спасибо.







0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users