Универсальная функция создания навигатора

Материал из 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-файлов

Описание

Функция standardNavigator в модуле common.navigator позволяет создавать навигатор распределенно, т.е. в каждой грануле добавлять свой необходимый кусок, при этом куски этого навигатора не зависят друг от друга.

В основе механизма создания навигатора лежит инициализация всех гранул при инициализации Celesta. Т.е. в момент инициализации Celesta последовательно вызываются файлы __init__.py каждой гранулы. Для корректной работы данной функции необходимо добавить в файл __init__.py вашей гранулы или гранул следующий код

from common import navigator
from grain1.modul1 import function1, function2

navigator.navigatorsParts['key'] = function1 #в случае если function1 возвращает одну группу
navigator.navigatorsParts['__set_key'] = function2 #в случае если function2 возвращает набор групп (важно начало с '__set_')

navigator.navigatorsParts - это глобальный словарь, в который записываются функции генерации частей навигатора. Важно заметить, что записываются именно функции, как объекты, а не результат их работы. В момент вызова процедуры standardNavigator все гранулы уже будут проинициализированы, поэтому в ваш навигатор попадут все части навигатора.

Каждая функция должна описывать ровно одну или несколько групп навигатора в формате json (в соответствие с правилами формирования групп в навигаторе). JSON должен быть построен исходя из правил конвертации из XML

Пример функции, описывающей одну группу

def function1(context, session):
    resultJSON = {"group":
                     {"@id": "test",
                      "@name": "Группа",
                      "level1":
                        {"@id": "123",
                          "@name": "Пункт меню",
                          "action":
                            {"main_context": "current",
                            "datapanel":
                                {"@type": "datapanel.xml",
                                 "@tab": "firstOrCurrent"}
                             }
                         }
                      }
                  }

    return resultJSON

Пример функции, описывающей набор групп

def function2(context, session):
    resultJSON = {"key2":{"group":
                     {"@id": "test1",
                      "@name": "Группа1",
                      "level1":
                        {"@id": "124",
                          "@name": "Пункт меню",
                          "action":
                            {"main_context": "current",
                            "datapanel":
                                {"@type": "datapanel.xml",
                                 "@tab": "firstOrCurrent"}
                             }
                         }
                      }
                  },
                  "key3":{"group":
                     {"@id": "test2",
                      "@name": "Группа2",
                      "level1":
                        {"@id": "125",
                          "@name": "Пункт меню",
                          "action":
                            {"main_context": "current",
                            "datapanel":
                                {"@type": "datapanel.xml",
                                 "@tab": "firstOrCurrent"}
                             }
                         }
                      }
                  }
              }

    return resultJSON

В случае, если группа или набор групп не должен отрисовываться, функция должна возвращать json вида {"group":None} либо {} соответственно. Для задания свойств самого навигатора, например его ширины необходимо добавить функцию с ключом "__header__". Все блоки навигатора будут отсортированы по алфавиту ключей, если их порядок не был определен в файле grainsettings.xml, поэтому стоит заранее продумывать их имена.

Для подключения данной функции к Showcase в файле app.properties конкретной userdata необходимо указать

navigator.proc.name = common.navigator.standardNavigator.celesta

Настройка навигатора под разные userdata

Периодически у нас появляются решения на Celesta, содержащие несколько userdata. При этом функцию для навигатора мы используем одну и ту же. Из-за этого приходится в каждой группе навигатора писать условия, что её необходимо подгружать в зависимоcти от того , какая userdata используется. Теперь это делать не обязательно, можно в файле grainssettings.xml указать список групп, которые вы хотите отобразить в соответствующих userdata

<grain name="common">
        <!--Указание необходимых групп навигатора для каждой userdata-->
	<navigator>
		<userdata name="workflow">
			<group>0</group>
			<group>1</group>
			<group>3</group>
		</userdata> 				
	</navigator>
</grain>

Т.е. для userdata workflow будут подгружены только группы меню с ключем 0,1 и 3.

Если вы не используете файл настроек вообще, то навигатор будет работать как и раньше!