Гранула dirusing

Материал из Course Orchestra
Перейти к: навигация, поиск
Внимание! Вы просматриваете документацию к Celesta 6.x. Документация по Celesta 7.x доступна на courseorchestra.github.io/celesta.

1. Справочник Celesta

1.1 Введение и основные понятия
1.2 Запуск и авто-обновление
1.3 Базовая настройка
1.4 Системные таблицы
1.5 CelestaSQL
1.6 CelestaDoc
1.7 Контексты сессии и вызова
1.8 Курсоры
1.9 BLOB-поля
1.10 Option-поля
1.11 Защита от потерянных обновлений
1.12 Метаданные Celesta
1.13 CelestaUnit

2. Celesta и базы данных

2.1 Особенности работы Celesta с поддерживаемыми типами СУБД
2.2 Проектирование базы данных Celesta в DBSchema

3. Создание решений с использованием Celesta для ShowCase

3.1 Программа обучения Celesta
3.2 Подготовка рабочего места для работы с Celesta
3.2.1 Для разработчиков платформы
3.2.2 Для разработчиков решений
3.3 Системные гранулы Celesta
3.3.1 common
3.3.1.1 Экспорт/импорт данных
3.3.1.2 Навигатор
3.3.1.3 Серии номеров
3.3.1.4 Иерархия Дьюи
3.3.1.5 Системные функции
3.3.1.6 Реестр настроек
3.3.1.7 Mailsender
3.3.1.8 Common.filter
3.3.2 common.api
3.3.4 security
3.3.3 lyra
3.4 Стандартные гранулы Celesta
3.4.1 dirusing
3.4.2 workflow
3.4.3 File repository
3.5 Отрисовка элементов Showcase при помощи Celesta
3.5.1 Конвертер XML-JSON
3.5.2 Навигатор (Navigator)
3.5.3 Информационная панель (Datapanel)
3.5.4 Серверное действие (Server activity)
3.5.5 Вебтекст (WebText)
3.5.6 Грид (Grid)
3.5.6.1 Панель инструментов (ToolBar)
3.5.7 XForms
3.5.7.1 Селекторы
3.5.7.2 Submission
3.5.7.3 Загрузка/Выгрузка файлов (Upload/Download)

5. Решение проблем

5.1 Проблемы с кодировкой jython-файлов
Адрес на SVN: https://share.curs.ru/svn/grains/common.dirusing

Данная гранула содержит набор функций и классов, необходимых для работы с системой «Справочники». Отвечает за:

  • отображение определенного списка гранул в навигаторе Showcase;
  • отображение структуры папок со справочниками в навигаторе Showcase;
  • отображение на информационной панели элементов типа:
    • dgrid (dircontentgrid.py) с данными из справочника,
    • webtext (dircontentbuttons.py) для отрисовки кнопок добавления/удаления/редактирования записей в dgrid,
    • xforms (dircontentcard.py) для редактирования записей справочника в модальном окне.

Навигатор

За отображение раздела «Гранулы и справочники» в навигаторе отвечает скрипт __init__.py в грануле dirusing. Он отрисовывает все гранулы в данном разделе, которые указаны в файле dirusing/showgrains.json. Например, следующая запись будет означать, что гранулы testgrain и spravtest будут отрисованы при составлении данного раздела навигатора.

["testgrain", "spravtest"]

Если гранула в этом списке присутствует, тогда производится считывание CelestaDoc данной гранулы (находится в папке с гранулой в файле _<grain_name>.sql перед оператором "CREATE GRAIN...", где <grain_name> - имя гранулы). Если CelestaDoc приведен к следующему иерархическому виду ("ID":"Название папки"), где "ID" - элемент иерархии Дьюи, тогда составляется соответствующая структура папок:

/**{
    "name":"Группа справочников1",
    "1":"Папка1",
    "1.1":"Папка2",
    "1.2":"Папка2.2",
    "1.2.1":"Папка3",
    "1.3":"Папка2.3",
    "2":"Папка1.2"
}*/

Из данного CelestaDoc следует, что будет создана следующая структура папок:

Группа справочников 1

  • Папка1
    • Папка2
    • Папка2.2
      • Папка3
    • Папка2.3
  • Папка1.2

А сама гранула в навигаторе будет иметь имя "Группа справочников 1". Данный параметр "name" - необязательный. При его отсутствии в качестве названия гранулы в навигаторе будет уникальное имя гранулы.

Справочники

После составления структуры папок производится считывание CelestaDoc каждой таблицы внутри гранулы (в том же _<grain_name>.sql перед каждый оператором "CREATE TABLE..."), который соответствует следующему образцу:

/**{
  "name":"Адреса",
  "dirTypeId":"1",
  "folderId":"1.2.1",
  "isHierarchical":"false",
}*/

При соответствии значения элемента "folderId" одному из значений атрибута @id папок в CelestaDoc гранулы (пример выше) производится отрисовка справочника в соответствующей папке в навигаторе. Если соответствие не найдено, справочник не будет показан. При пустом значении ("folderId":"") справочник будет отображен в корне гранулы минуя иерархию папок. В нашем примере справочник "Адреса" будет расположен внутри папки с именем "Папка3" и id=1.2.1 Если справочник иерархический, то его содержимое будет выводиться в treeDgrid и он будет иметь кнопки для управления иерархией.

dirTypeId: 1 - таблица, 2 - представление. isHierarchical – признак иерархического справочника (true/false).

Структура справочников

Справочники выводятся в dgrid на информационной панели при активации соответствующего элемента в навигаторе.

  • Записи хранятся в таблице в БД с именем <grain_name>.<table_name>, где <table_name> - имя таблицы.
  • Все параметры столбцов записаны в CelestaDoc непосредственно перед каждым оператором. Если CelestaDoc отсутствует, значит данный столбец не будет выводиться и является служебным.
/**{
    "name":"Страна",
    "fieldTypeId":"9",
    "visualLength":"NULL",
    "fieldOrderInSort":"2"
}*/

Основные элементы CelestaDoc столбцов справочника:

  • name - имя, которое будет выводится;
  • fieldTypeId - тип поля;
    • 1 - Boolean - true/false
    • 2 - Datetime - дата/время
    • 3 - Decimal - числовое поле с точностью до сотых (20,2), max 20 символов, 2 после запятой
    • 4 - Image - файл (пока полный функционал не реализован)
    • 5 - Integer - целое числовое поле
    • 6 - Reference list - множественный выбор значений из связанного справочника (подробнее о реализации далее)
    • 7 - Reference value - выбор единственного значения из связанного справочника (подробнее о реализации далее)
    • 8 - Select list - выбор значений из фиксированного списка
    • 9 - String - текстовое поле, varchar(255)
  • visualLength - ширина столбца и видимость, где Null - по умолчанию, 0 - не показывается в гриде (но присутствует в xforms при добавлении/редактировании записи), 1 - ### произвольное значение;
  • fieldOrderInSort - порядковый номер для отображения в xforms при добавлении/редактировании

Если CelestaDoc отсутствует, данный столбец не будет отображаться в справочнике.

Тип поля Reference value

Данный тип поля используется для выбора одного значения из связанного справочника. В xforms предлагается выбор значений с помощью селектора. Для создания данного типа поля вручную необходимо изменить параметры CelestaDoc для нужного поля в .sql файле непосредственно над записью "create column <columnName>...", где <columnName> - имя столбца:

  • изменить тип поля на "fieldTypeId":"7"
  • добавить в CelestaDoc следующие элементы:
/**{
    ...
    "refTable":"adresses_new",
    "refTableColumn":"country"
}*/

где:

  • refTable - имя таблицы в данной грануле;
  • refTableColumn - имя поля в данной таблице, из которого берутся значения для селектора

Тип поля Reference list

Данный тип поля используется для выбора нескольких значений из связанного справочника. В grid записи отображаются в одной ячейке через точку с запятой ";" В xfroms предлагается выбор значений с помощью мультиселектора. Для создания данного типа поля вручную необходимо: 1) Изменить параметры CelestaDoc для нужного поля в .sql файле непосредственного над записью "create column <columnName>...", где <columnName> - имя столбца:

  • изменить тип поля на "fieldTypeId":"6"
  • добавить в CelestaDoc следующие элементы:
/**{
    ...
    "refTable":"adresses",
    "refTableColumn":"flat",
    "refMappingTable":"mapping_test"
    ...
}*/

где:

  • refTable - имя таблицы в данной грануле;
  • refTableColumn - имя поля в данной таблице, из которого берутся значения для мультиселектора
  • refMappingTable - таблица связи с внешними ключами в текущей грануле. Данную таблицу необходимо создать в .sql файле гранулы следующим образом:
create table mapping_test (
id int IDENTITY not null, 
ak1 int not null,
ak2 varchar(30) not null,
bk1 varchar(10) not null,
bk2 varchar(5) not null,
bk3 varchar(5) not null,
primary key (id)
);

ALTER TABLE mapping_test ADD CONSTRAINT FK_mapping_test_adresses
FOREIGN KEY (bk1, bk2, bk3) REFERENCES adresses(postalcode, building, flat);

ALTER TABLE mapping_test ADD CONSTRAINT FK_mapping_test_employees
FOREIGN KEY (ak1,ak2) REFERENCES employees(id,name);

где:

  • id - идентификатор, остается без изменений;
  • ak1, ak2 - первичные ключи в таблице с типом поля referenceList (по количеству ключей, в данном случае 2 первичных ключа);
  • bk1, bk2, bk3 - первичные ключи в таблице, из которой предполагается брать данные для мультиселектора (в данном случае 3);
  • ADD CONSTRAINT FK_mapping_test_adresses - внешний ключ на таблицу, из которой берутся данные, с указанием первичных ключей (bk1,bk2,bk3), имени таблицы (adresses), имен полей с первичными ключами (postalcode, building, flat);
  • ADD CONSTRAINT FK_mapping_test_employees - аналогично для таблицы с типом поля referenceList.

Иерархические справочники

Иерархический справочник отличается от обычного тем, что в нем каждому элементу присвоен определенный код в Иерархии Дьюи. Следовательно, он имеет древесную структуру, и выводится на панель в treeDgrid. Таблица, содержащая иерархический справочник, имеет два дополнительных поля - код и иерархии Дьюи вида "1.2.1" и сортировочное поле, которое генерируется на основании этого кода и используется для отображения элементов в гриде в нужном порядке. Для создания иерархического справочника, в CelestaDoc таблицы следует прописать:

/**{
    ...
    "isHierarchical":"true"
    ...
}*/

Также, иерархический справочник должен в обязательном порядке иметь два системных поля – код Дьюи и Номер сортировки. Эти поля должны иметь в CelestaDoc следующие значения параметров:

/**{
    "name":"deweyCode",
    "fieldTypeId":"9"
    ...
}*/
#для поля "код Дьюи"
/**{
    "name":"sortNumber",
    "fieldTypeId":"9"
    ...
}*/
#для поля "номер сортировки"

В отличие от обычного справочника, иерархический имеет инструменты для работы с элементами внутри иерархии. Кнопки для работы с иерархическим справочником находятся в webtext-элементе, рядом с кнопками Добавить/Редактировать/Удалить.

Управление элементами иерархии

  • Вверх. Элемент в иерархии Дьюи можно сдвинуть вверх на текущем уровне, например, элемент с кодом 1.2.2 при движении вверх станет 1.2.1. Вверх нельзя двигать элементы, уже являющиеся первыми на своем уровне иерархии.
  • Вниз. Аналогично можно сдвинуть элемент вниз на уровне, т.е. элемент 1.2.1 станет 1.2.2. Вниз нельзя сдвигать элемент, являющийся крайним снизу.
  • Влево. Движение на один уровень иерархии вверх. Элемент-“потомок” сдвигается на один уровень со своим непосредственным “предком” в качестве крайнего снизу элемента на этом уровне. Элемент, находящийся на верхнем уровне иерархии (не имеющий “предков”) сдвигаться влево не может.
  • Вправо. Движение на уровень вниз, элемент сдвигается под элемент, стоящий выше него на текущем уровне, и становится его “потомком”. Если вышестоящий элемент уже имеет “потомков”, перемещаемый элемент становится на крайнюю снизу позицию. Вправо не может быть перемещен элемент, находящийся первым на своем уровне иерархии.
  • Добавление. Элемент в иерархию может быть добавлен как в “корень” (на самый верхний уровень), так и в качестве “потомка” одного из элементов.

Подробнее о функциях для работы с иерархией Дьюи можно прочитать в разделе Модуль для работы с иерархией Дьюи.

Требует доработки

  • Загрузка файлов для fieldTypeId = 4 (Image);
  • Кнопки "Удалить" и "Удалить все" не работают для записей, в которых значение поля с fieldTypeId = 6 (Reference List) ненулевое(конфликт внешних ключей). Для удаления такой записи необходимо через функцию "Редактировать" сделать поле ReferenceList пустым, затем удалять всю строку.
  • Иерархические справочники: необходимость добавлять вручную поля с кодом Дьюи и Сортировкой; все элементы попадают в конец списка при перемещении; не протестирован импорт/экспорт.