Contents

  1. Подключение библиотеки
  2. Перечень методов
  3. Перечень классов
    1. Информация о проекте (ProjectInfo)
    2. Сессия пользователя (UserSession)
    3. Окружение пользователя (Env)
    4. Подключение к базе данных (DBConnection)
    5. Курсор базы данных (DBCursor)
    6. Базовый класс объектов системы (ObjectWithPK)
      1. Типы аттрибутов объектов
        1. Общий интерфейс аттрибутов объектов
        2. IntegerField
        3. StringField
        4. EnumField
        5. ReferenceField
        6. DoubleField
        7. BoolField
        8. DateField
        9. DateTimeField
        10. DocumentField
        11. PictureField
      2. Значение, для установки поля объекта с типом документа/картинки (ValueExtension)
      3. События
    7. Контекст вызова (TableContext)
      1. Родительский ключ (ParentKey)
      2. SQL фильтр (SQLFilter)
      3. Колонка для сортировки (ColumnSort)
        1. SortDirection Enum
      4. Фильтр по колонке (ColumnFilter)
    8. Итератор по таблице объектов (TableIterator)
    9. Контейнер обеспечивающий перенос данных между клиентом и сервером (RContainer)
      1. Значение ссылочного поля (RefVal)
      2. Варианты открытия диалога (OpenVariantList)
      3. Вариант открытия диалога класса (OpenVariant)
    10. Работа с датой и временем
      1. Дата (Date)
      2. ДатаВремя (DateTime)
      3. Интервал времени (TimeInterval)
    11. Файл настроек (Settings)
    12. Интерфейс передачи сообщений (Sender)
    13. XSLT преобразования (XSLTransformation)
  4. module backup
    1. Подключение
    2. Выгрузка объектов
      1. Настройки выгрузки данных (BackupSettings)
      2. Рекурсивная выгрузка данных (RecursiveBackup)
      3. Пример использования
    3. Загрузка объектов
      1. Пример использования
  5. module url
    1. Подключение
    2. Методы
    3. Сохранение объекта по URL
    4. Получение данных по URL
    5. Передача URL клиенту
  6. Работа с исключениями
    1. Как передать исключение клиенту
    2. Настраеваемое исключение
    3. Типы исключений
      1. AppException
      2. SecurityException
      3. BusinessLogicException
      4. DatabaseException
    4. Как поймать исключение

Подключение библиотеки

   1 import api

Перечень методов

Преобразует строку к строке SQL для использования в SQL-запросе

Перечень классов

Информация о проекте (ProjectInfo)

Инициализация

Деинициализация

Загрузка библиотеки

Авторизация пользователя username(str) Имя пользователя password(str) Пароль Возвращает хэш по которому осуществляется дальнейшая авторизация

Получение сессии пользователя authorizationKey(str) Хэш-строка авторизации

Завершить сессию пользователя authorizationKey(str) Хэш-строка авторизации

Создание класса предметной области name(str) Имя класса

   1 # Пример создания объекта класса Town
   2 town = env.getProjectInfo().createDomainClass('Town')

Получает интерфейс передачи сообщений

Получает интерфейс доступа к файлу настроек

Сессия пользователя (UserSession)

Получение окружения пользователя

Получить ID пользователя

Освободить сессию

Окружение пользователя (Env)

dbName (str) - Имя источника данных

Получение идентификатора для таблицы table(str) Имя таблицы

Получение информации о проекте

получение ID пользователя

Установка фильтра на таблицу table(str) Имя таблицы filter(str) SQL-фильтр

   1 # Пример установки фильтров на таблицу
   2 prefix = args.get('prefix')
   3 regionID = args.get('region' +prefix + 'ID')
   4 if regionID and int(regionID):
   5         env.setFilterForTable(self.getClassName(env), 'actuality = 0 AND regionID = ' + str(regionID))

Подключение к базе данных (DBConnection)

commit транзакции

rollback транзакции

создание нового курсора

Курсор базы данных (DBCursor)

commit транзакции

rollback транзакции

выполнение запроса query(str) - Запрос

fetch запроса

закрытие курсора

получение количетсва колонок

получение номера колонки по названию name(str) Имя колонки

определяет равно ли значение колонки NULL colNum(int) Номер колонки

получение целого значения колонки colNum(int) Номер колонки

получение дробного значения колонки colNum(int) Номер колонки

получение символьного значения колонки colNum(int) Номер колонки

получение значения колонки с последующим преобразованием к строке colNum(int) Номер колонки

Базовый класс объектов системы (ObjectWithPK)

value (True, False) Устанавливает является ли класс сингулярным (без таблицы в БД)

Получает признак сингулярности

Возвращает все аттрибуты объекта

Зачитать запись по ID env - окружение пользователя fromDB (bool) - Форсировать загрузку (загрузить напрямую из БД

Получает интерфейсное представление объекта в системе env - окружение пользователя

Подготовка к созданию нового объекта (инициализация объекта) env - окружение пользователя

Добавить запись в БД. Обновляет поля, для которых указан флаг restored env - окружение пользователя

Обновить запись по ID. Обновляет поля, для которых указан флаг restored env - окружение пользователя

Удалить запись по ID env - окружение пользователя

Добавляет запись в таблицу Данный метод используется для формирования таблицы с данными. env - окружение пользователя

Установка родительского ключа env - окружение пользователя aKey(int) - значение родительского ключа refFieldName(str) - поле, внешняя ссылка на родителя

Установка фильтра на таблицу. Может использоваться в методе __parentkey__ filter (str) - SQL фильтр

Обновление в БД измененных полей объекта (полей, для которых установлен флаг updated) env - окружение пользователя

Добавление объекта в БД с присвоением идентификатора env - окружение пользователя

Сохранение объекта в БД (с добавлением объекта в базу, если его там нет) env - окружение пользователя

Проверяет существование объекта с указанным ID env - окружение пользователя

Устанавливает поля объекта в значение по умолчанию

Установить для объекта название класса name(str) Название класса

Установить для класса название таблицы БД из которой зачитывать объекты name(str) Название таблицы

Определяет название класса env - окружение пользователя

Определяет SQL-таблицу класса env - окружение пользователя

Выполняет интерфейсные метод базового (С++) класса env - окружение пользователя args(RContainer) - Перечень аргументов и информация о методе

Создает поле name с типом type в объекте. description - описание поля возможные типы:

Данное поле предназначено для отображения аттрибутов объектов, на который ссылается объект в диалогах и таблицах. Например, есть класс Town (город), который ссылается на Region (регион) по полю regionID и необходимо отображать поля name (имя) и type (тип региона) в таблице и/или диаге города. Для этого достаточно создать два поля с типом PathField

   1 self.createAttribute('regionID.name', 'PathField', 'Название региона')
   2 self.createAttribute('regionID.type', 'PathField', 'Тип региона')

Обновляет объект в кэше

Типы аттрибутов объектов

Общий интерфейс аттрибутов объектов

Флаг, указывающий, что поле виртуальное (не содержится в базе данных)

Флаг, указывающий, что поле изменено (было присвоено какое-либо значение)

Флаг, указывающий, что поле восстановлено из интерфейса (пришло в запросе от клиента)

Флаг, указывающий, что поле не может быть изменено

Флаг, указывающий, что данное поле не будет отображаться у пользователя

Описание поля

Флаг, указывающий на то, что поле не может принимать пустые значения

Максимальная длина для строкового поля

Отчистить значение (установить пустое значение)

DBCursor dbc Восстанавливает значение поля из DBCursor-а

Восстанавливает значение поля из строки

Помещает текущее значение поля в строку

Делает данную колонку интерфейсной (отображаемой в названии объекта)

Запрещает/разрешает использование null в качестве значения value (bool) - True (разрешнить использование null), False (запретить использование null)

Определяет равно ли значение поля null

Устанавливает значение поля в null. Эквивалентом данной функции является присваивание полю объекта None

   1 self.employees = None

Определяет является ли поле ссылочным

Определяет название класса на который ссылается поле (в случае, если поле является ссылочним)

Возвращает имя поля (имя, используемое в базе данных)

Возвращает полное (с названием таблицы) имя поля

Возвращает текущее значение поля в виде строки

IntegerField

Поле для хранения целых чисел

Возвращает True, в случае, если значение поля отлично от 0

Возвращает значение поля

StringField

Поле для хранения строк

Возвращает значение поля

EnumField

Поле для хранения строковых констант

Возвращает значение поля

item (str) Добавляет возможное значение для списка

ReferenceField

Поле для хранения ссылок

Устанавливаем имя класса, на который ссылается данное поле

Флаг, указывающий что для данного ссылочного поля применяется каскадное удаление

Расширяет объект, в котором находится данное поле, полями объекта, на который ссылается поле

Возвращает объект, соответствующий текущему значению поля

   1 # Пример получения объекта из ссылочного поля
   2 town = env.getProjectInfo().createDomainClass('Town')
   3 ...
   4 # Получаем название региона, соответствющего данному городу
   5 regionName = town.regionID.getRefObject(env).name.value()

Устанавливает название класса объектов, на которые ссылается поле

DoubleField

Поле для хранения чисел с плавающей точкой

Возвращает True, в случае, если значение поля отлично от 0

Возвращает значение поля

BoolField

Поле для хранения чисел с плавающей точкой

Возвращает значение поля

Возвращает значение поля

DateField

Поле для хранения даты

DateTimeField

Поле для хранения даты и времени

DocumentField

Поле для хранения документов

Сохраняет данные по текущему URL-у

Получает действительный URL по которому хранится документ. Данный URL формируется динамически. Для получения базового URLа, который можно использовать для копирования в другие объекты следует использовать метод getBaseURL() и setBaseURL()

Получает базовый URL (хранящийся в БД) по которому строится основной URL документа

Устанавливает базовый URL документа, полученный через функцию getBaseURL()

PictureField

Поле для хранения картинок

Значение, для установки поля объекта с типом документа/картинки (ValueExtension)

type(str) - тип(расширение) документа data(str) - массив байт (данные) length(int) - объем

События

Подготовка объекта при создании новой записи из интерфейса может возвращать варианты диалогов через RContainer

   1 # Пример отображения вариантов открытия диалога при создании новой записи
   2 import api
   3 result = api.RContainer('Варианты открытия диалога')
   4 result.openVariants.add(api.OpenVariant('Town', 'Город'))
   5 result.openVariants.add(api.OpenVariant('Region', 'Регион'))
   6 return result

Установка дополнительных прав на поля объекта

   1 # Пример установки прав
   2 if self.productTransferID.getRefObject(env).state.value() != STATE_NEW:
   3   for attr in set(self.attributes()).difference(set([self.comment.name()])):
   4     a = getattr(self, attr)
   5     a.readonly = True

Сохранение объекта

Удаление объекта

Зачитывание записи из базы данных

Зачитывание таблицы объектов для добавления записи в таблицу результат используется метод addToTable

Определяет класс объекта в иерархии классов

   1 # пример определения имени класса
   2 return self.getClassTable(env)

Вызывается при получении JMS сообщения, адресованного классу

Вызывается у родительского объекта при установке родительского ключа (ParentKey)

Вызывается у объекта при установке родительского ключа (ParentKey)

   1 def __parentkey__(self, env, args):
   2     """Установка родительского ключа"""
   3     fieldName = args.get("field")
   4     parentID = args.get("parentID")
   5     if fieldName == "groupid":
   6         if parentID != ALL_GROUP_ID:
   7             self.parentID = parentID

Контекст вызова (TableContext)

Добавление родительского ключа key - родительский ключ возвращает self

Добавление фильтра filter - фильтр возвращает self

Добавляет колонку для сотрировки sort - колонка для сортировки возвращает self

Добавляет фильтр по колонке filter - фильтр по колонке возвращает self

Родительский ключ (ParentKey)

field(str) - поле по которому строится фильтр parentID(int) - ID родительской записи parentClassName, optional - имя класса родителя

SQL фильтр (SQLFilter)

filter(str) - фильтр

Колонка для сортировки (ColumnSort)

column(str) - колонка direction - направление сортировки

SortDirection Enum

Фильтр по колонке (ColumnFilter)

column(str) - колонка regexp(str) - регулярное выражение, описывающее фильтр

Итератор по таблице объектов (TableIterator)

ObjectWithPK объект, в который будет происходить зачитывание строчек таблицы

Получает контекст таблицы для последующего изменения

Выполняет запрос на получение таблицы. Возвращает количество зачитанных записей env - окружение пользователя

Читает строчку таблицы и помещает результат в объект возвращает - количество зачитанных строчек (int)

В случае, если чтение успешно возвращает объект. Тип объекта определяется автоматически с помощью функции __type__. В случае, если данных нет возвращает None

Контейнер обеспечивающий перенос данных между клиентом и сервером (RContainer)

name(str) Имя контейнера

Получить количество полей

Установить название вызываемого метода name(str) - имя вызова

Получить имя класса

Получить имя вызываемого метода

Добавить параметр key(str) - имя параметра value(int, double, str, RefVal) - значение

Получить строковый параметр key(str) - имя параметра

Получить целый параметр key(str) - имя параметра

Получить десятичный параметр key(str) - имя параметра

Варианты открытия диалога

Значение ссылочного поля (RefVal)

Варианты открытия диалога (OpenVariantList)

Добавить вариант открытия variant(OpenVariant) - вариант открытия

Вариант открытия диалога класса (OpenVariant)

name(str) - название диалога label(str) - отображаемое имя для пользователя

Работа с датой и временем

Дата (Date)

Инициализация текущей датой

year(int) - год month(int) - месяц(1..12) day(int) - день(1..31)

isoFormat(str) - дата в ISO формате

Печать в строку в формате ДД месяц ГГГГ

Печать в строку (ISO)

Печать в строку по формату

Получить год

Получить месяц

Получить день

Получить день недели

Получить день года

Возвращает дату, увеличенную на days дней

Возвращает дату, уменьшенную на days дней

ДатаВремя (DateTime)

Инициализация текущей датойвеременем

year(int) - год month(int) - месяц(1..12) day(int) - день(1..31) hours(int) - час (0..23) min(int) - минуты (0..59) sec(int) - секунды (0..59)

isoFormat(str) - датавремя в ISO формате

Печать в строку (ISO)

Печать в строку по формату

Получить год

Получить месяц

Получить день

Получить часы

Получить минуты

Получить секунды

Возвращает дату-время, увеличенную на days дней

Возвращает дату-время, уменьшенную на days дней

Возвращает дату-время, увеличенную на интервал времени

Возвращает дату-время, уменьшенную на интервал времени

Интервал времени (TimeInterval)

Создает интервал времени

Файл настроек (Settings)

Получает значение параметра key в виде строки

Получает значение параметра key и приводит его к типу bool

Интерфейс передачи сообщений (Sender)

Отправлет пользователю системы объект бизнес логики, который будет открыт в отдельном диалоге env - окружение пользователя userID (int) - Идентификатор пользователя object - Объект бизнес логики useTopic (bool) - Использовать топик

Отправлет пользователю системы информацию о изменении объекта бизнес логики env - окружение пользователя userID (int) - Идентификатор пользователя object - Объект бизнес логики useTopic (bool) - Использовать топик

Отпрвляет пользователю информационное сообщение userID (int) - Идентификатор пользователя title (str) - Тема сообщения text (str) - Текст сообщения useTopic (bool) - Использовать топик

Отпрвляет текстовое сообщение по определенному URI uri (str) - Идентификатор пользователя message (str) - сообщение useTopic (bool) - Использовать топик

   1 env.getProjectInfo().getSender().sendObject(env, env.getUserID(), deal, False)

XSLT преобразования (XSLTransformation)

 boost::python::class_<xslt::XSLTransformation>("XSLTransformation", boost::python::init<std::string, std::string, xslt::DocumentType>())
   .def_readwrite("xmlURL", &xslt::XSLTransformation::xmlURL, "XML URL")
   .def_readwrite("xsl", &xslt::XSLTransformation::xsl, "Файл xsl преобразования")
   .def_readwrite("resultURL", &xslt::XSLTransformation::resultURL, "URL результата xsl преобразования")
   .def_readwrite("type", &xslt::XSLTransformation::type, "Тип преобразования")
   .def_readwrite("xslParams", &xslt::XSLTransformation::xslParams, "Перечень параметров")
 ;

module backup

Подключение

   1 import backup

Выгрузка объектов

Настройки выгрузки данных (BackupSettings)

Добавление ссылки, по которой нужно пройти при построении дерева объектов env(Env) - Окружение пользователя ref(ReferenceField) - ссылочное поле объекта

Рекурсивная выгрузка данных (RecursiveBackup)

Данная выгрузка используется для выгрузки объекта вместе с объектами, на который ссылается данный и объектами, ссылающимися на данный (перечень объектов задается параметором BackupSettings при выгрузке.

Выгружает объект obj env(Env) - Окружение пользователя obj(ObjectWithPK) - Выгружаемый объект settings(BackupSettings) - Настройки выгрузки

Возвращает выгруженные данные в виде строки

Пример использования

   1 # Выгрузка определенного региона
   2 # с перечнем входящих в его состав
   3 # городов
   4 import backup
   5 # Создаем настройки выгрузки
   6 settings = backup.BackupSettings()
   7 town = env.getProjectInfo().createDomainClass('Town')
   8 # Указываем, что города должны быть подгружены по ссылке regionID
   9 settings.addReference(env, town.regionID)
  10 region = env.getProjectInfo().createDomainClass('Region')
  11 region.id = 8241
  12 region.selectByID(env)
  13 # Создаем выгрузку
  14 backup = backup.RecursiveBackup()
  15 # Выгружаем регион
  16 backup.init(env, region, settings)
  17 # Пишем результат в файл
  18 res = open('result.dat', 'w+')
  19 res.write(backup.toString())
  20 res.close()

Загрузка объектов

Пример использования

   1 # Загрузка региона с вложенным справочником городов
   2 # Поиск города осуществляется по трем полям
   3 # (регион, название, тип)
   4 import backup
   5 # Загрузка данных из файла
   6 data = backup.RecursiveBackup()
   7 data.loadFromFile('./result.dat')
   8 
   9 # Создаем загрузчик данных
  10 provider = backup.RestoreProvider()
  11 # Устанавливаем стандартный обработчик событий
  12 provider.setHandler(backup.DefaultSearcherHandler())
  13 # Создаем интерфейс поиска городов в системе
  14 # по трем полям (регион, название, тип)
  15 townSearcher = backup.ObjectSearcherByFields()
  16 townSearcher.addField('regionID')
  17 townSearcher.addField('name')
  18 townSearcher.addField('shortType')
  19 # Указываем загрузчику какой интерфейс
  20 # использовать для поиска городов
  21 provider.addSearcher('Town', townSearcher)
  22 # Загружаем данные в систему
  23 provider.load(env, data)

module url

Подключение

   1 import url

Методы

Создает уникальное имя файла

Создает уникальное имя для XML файла в папке с XML-файлами

Создает уникальное имя для PDF файла в папке с PDF-файлами

Создает уникальное имя для HTML файла в папке с HTML-файлами

Определяет директорию в которой хранятся HTML файлы

Определяет директорию в которой хранятся XML файлы

Определяет директорию в которой хранятся XSL файлы

Определяет директорию в которой хранятся документы, удаление которых не производится

Определяет директорию в которой хранятся картинки

Определяет директорию в которой хранятся документы

Определят url web-сервера

Сохранение объекта по URL

   1 import url
   2 resultURL = url.getUrlBase() + url.generateUniqueXml()
   3 putter = url.putter()
   4 putter.put(resultURL, url.getBinaryData('Hello world!', 12))
   5 # or
   6 putter.put(resultURL, 'Hello world!')

Получение данных по URL

   1 getter = url.getter()
   2 response = getter.get('http://softlogic.ru/logo.png')
   3 data = getter.getData()

Передача URL клиенту

   1 import url
   2 resultURL = url.getUrlBase() + url.generateUniqueXml()
   3 return url.url(resultURL)

Работа с исключениями

Как передать исключение клиенту

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

   1 import api
   2 api.throwBusinessLogicException("Редактировать подписанный документ запрещено!", "Документ был подписан %s" % self.signerID.getRefObject(env).fio.value())

   1 import api
   2 raise Exception(api.BusinessLogicException("Редактировать подписанный документ запрещено!", "Документ был подписан %s" % self.signerID.getRefObject(env).fio.value()))

Настраеваемое исключение

Платформой предусмотрен механизм создания исключений, контролировать которые можно с помощью настроек системы. При создании данного исключения сервер платформы сначала определяет настройки исключения:

и бросает исключение, в случае если оно помечено как активное.


Для создания данного исключения используется метод throwConfigurableException(env, object, method, error, detail) env (Env) - окружение пользователя object (ObjectWithPK) - объект, в который будет происходить зачитывание строчек таблицы (используется для идентификации настроек исключения) method (str) - название метода (используется для идентификации настроек исключения) error (str) - сообщение об ошибке (используется для идентификации настроек исключения) detail (str) - детальное описание ошибки


Пример использования:

   1 import api
   2 api.throwConfigurableException(env, self, 'sign', 'Документ уже подписан', 'Документ уже подписан пользователем %s' % signer.fio)

Типы исключений

AppException

AppException является базовым классом исключений клиента. Данное исключение используется в случае возникновения критической ошибки.

Создает экземпляр исключения. Первый параметр - текст, выводимый клиенту в окошке ошибки, второй параметр - детальное описание ошибки

Создает экземпляр исключения. Параметр - текст, выводимый клиенту в окошке ошибки.

Возвращает текст ошибки

Возвращает детальное описание ошибки

Преобразование к строке. Возвращает строку, в которой содержится текст ошибки и детальное описание ошибки

   1 import api
   2 api.throwAppException("Не удается сохранить файл!", "Не достаточно места на жестком диске")

SecurityException

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

Создает экземпляр исключения. Первый параметр - текст, выводимый клиенту в окошке ошибки, второй параметр - детальное описание ошибки

   1 import api
   2 api.throwSecurityException("Не достаточно прав для подписи распоряжения!")

BusinessLogicException

Данное исключение используется для информирования пользователя о возникновении не критической ошибки бизнес-логики

Создает экземпляр исключения. Первый параметр - текст, выводимый клиенту в окошке ошибки, второй параметр - детальное описание ошибки

   1 import api
   2 api.throwBusinessLogicException("Не указан адрес студента %s!" % student.fio.value())

DatabaseException

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

Как поймать исключение

Для того, чтобы поймать указанные выше исключения можно воспользоваться следующим способом

   1 import api
   2 try:
   3    self.sign(env)
   4 except Exception, e:
   5    # Получаем исключение сервера
   6    servException = e.message
   7    print str(servException)

Archimedes/API (last edited 2011-09-15 10:49:02 by and)