Грид с использованием Celesta

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

Для того, чтобы создать грид с использованием Celesta, необходимо создать функциию вида:

1. функция загрузки данных gridData:

# coding: utf-8

import json
from common.sysfunctions import toHexForXml

from departments._departments_orm import departmentsCursor

try:
    from ru.curs.showcase.core.jython import JythonDTO
except:
    from ru.curs.celesta.showcase import JythonDTO

try:
    from ru.curs.showcase.util import XMLJSONConverter
except:
    from ru.curs.celesta.showcase.utils import XMLJSONConverter
    
    
def gridData(context, main=None, add=None, filterinfo=None,
             session=None, elementId=None, sortColumnList=None, firstrecord=None, pagesize=None):
    u'''Функция получения данных для грида. '''
    
    # Курсор таблицы departments
    cursor = departmentsCursor(context)
    
    # Определяем переменную для JSON-данных
    data = {"records":{"rec":[]}}

    # Заголовки для столбцов грида
    _header = {'id': ["~~id"],
               'code': [u'Код подразделения'],
               'name': [u'Наименование подразделения']}
        
    for column in _header:
        _header[column].append(toHexForXml(_header[column][0]))
    # Будут грузиться не сразу все данные из базы, а по частям
    cursor.limit(firstrecord-1, recordcount)
    # Получения данных из таблицы departments для отображения их в гриде
    for cursor in cursor.iterate():
        departments_dict = {}
        departments_dict[_header['id'][1]] = cursor.id
        departments_dict[_header['code'][1]] = cursor.code
        departments_dict[_header['name'][1]] = cursor.name                     
        data["records"]["rec"].append(departments_dict)
    
    # Конвертация JSON-данных в XML
    data = XMLJSONConverter.jsonToXml(json.dumps(data))
    return JythonDTO(data, None)

2. функция загрузки параметров gridMeta

# coding: utf-8

import json
from common.sysfunctions import toHexForXml, getGridHeight

from departments._departments_orm import departmentsCursor

try:
    from ru.curs.showcase.core.jython import JythonDTO
except:
    from ru.curs.celesta.showcase import JythonDTO

try:
    from ru.curs.showcase.util import XMLJSONConverter
except:
    from ru.curs.celesta.showcase.utils import XMLJSONConverter
    
    
def gridMeta(context, main, add=None, filterinfo=None,
             session=None, elementId=None):
    u"""Функция получения параметров для грида"""

    # Курсор таблицы departments
    cursor = departmentsCursor(context)
    
    # Заголовки для столбцов грида
    _header = {'id': ["~~id"],
               'code': [u'Код подразделения'],
               'name': [u'Наименование подразделения']}

    for column in _header:
        _header[column].append(toHexForXml(_header[column][0]))

    # Количество записей в базе
    totalcount = cursor.count()
    settings = {}
    settings["gridsettings"] = {"columns": {"col":[]},
                                "labels": {"header": u"Текст над таблицей",
                                           "footer": u"Текст под таблицей"},
                                "properties": {"@gridHeight": getGridHeight(session),
                                               "@gridWidth": "100%",
                                               "@totalCount": totalcount,
                                               "@pagesize": "100" # определяет количество единовременно загружаемых записей
                                               }
                                }

    settings["gridsettings"]["columns"]["col"].append({"@id":_header["id"][0]})

    settings["gridsettings"]["columns"]["col"].append({"@id":_header["code"][0]})
    settings["gridsettings"]["columns"]["col"].append({"@id":_header["name"][0]})

    return JythonDTO(None, XMLJSONConverter.jsonToXml(json.dumps(settings)))