xls.handlers

xls.handlers

Таблица xls.handlers позволяет настраивать множество возможностей.

Ниже приведена структура таблицы:

IDTABLE_SCHEMATABLE_NAMECOLUMN_NAMEEVENT_NAMEHANDLER_SCHEMAHANDLER_NAMEHANDLER_TYPEHANDLER_CODETARGET_WORKSHEETMENU_ORDEREDIT_PARAMETERS
 

Ниже, например, приведена конфигурация обработчика событий изменений ячейки:

IDTABLE_SCHEMATABLE_NAMECOLUMN_NAMEEVENT_NAMEHANDLER_SCHEMAHANDLER_NAMEHANDLER_TYPEHANDLER_CODE
 s02usp_cashbook3Changes02usp_cashbook3_changePROCEDURE

Вы можете создавать такие таблицы и представления в ваших схемах, копируя таблицу xls.handlers или представление xls.view_handlers, если это имеет смысл.

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

Таблица обработчиков включает следующие логические секции:

  1. ID
  2. TABLE_SCHEMA, TABLE_NAME, and COLUMN_NAME
  3. EVENT_NAME
  4. HANDLER_SCHEMA, HANDLER_NAME, HANDLER_TYPE, and HANDLER_CODE
  5. TARGET_WORKSHEET, MENU_ORDER, and EDIT_PARAMETERS

Поле ID является опциональным для представлений.

TABLE_SCHEMA, TABLE_NAME и COLUMN_NAME определяют объект, который настраивается.

EVENT_NAME определяют событие или возможность, которая настраивается.

HANDLER_SCHEMA, HANDLER_NAME, HANDLER_TYPE и HANDLER_CODE определяют объект, который используется для обработки события или реализации возможности.

TARGET_WORKSHEET позволяет настроить обработчик.

MENU_ORDER определяет порядок в меню действий или контекстном меню.

EDIT_PARAMETERS управляет отображением диалогового окна ввода параметров перед выполнением обработчика.

Значения EVENT_NAME

Поле EVENT_NAME позволяет использовать около 50 типов событий.

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

Эти события требуют указания объекта в полях HANDLER_SCHEMA, HANDLER_NAME и HANDLER_TYPE.

Вторая группа позволяет настроить поведение на уровне объекта:

Следующая группа позволяет настроить свойства колонок:

  • AddHyperlinks
  • BitColumn
  • ConvertFormulas, DoNotConvertFormulas
  • DefaultValue
  • DoNotSelect, DoNotSave, DoNotChange, DoNotSort
  • DataTypeBit, DataTypeBoolean, DataTypeDate, DataTypeDateTime, DataTypeDateTimeOffset, DataTypeDouble, DataTypeInt, DataTypeGuid, DataTypeString, DataTypeTime, DataTypeTimeSpan
  • Formula, FormulaValue
  • SelectPeriod

Также есть два типа, которые обрабатываются продуктами SaveToDB:

  • License
  • Information

SelectPeriod

SaveToDB и DBEdit позволяют задавать диапазоны дат для фильтров по полям таблиц и представлений.

Также можно использовать два параметра процедур как начало и конец периода.

Настройка выполняется для полей и параметров начала периода с использованием типа SelectPeriod.

Формат поля TARGET_SHEET: [<pair parameter name>],[<DayOfWeek>],[<Hide>]

Имя парного параметра обязательно для параметров.

DayOfWeek передается в английском наименовании или числами от 0 до 7. Monday или 1 надо передавать, если неделю следует считать с понедельника.

Опции Hide: HideThis, HideNext, HideDays, HideWeeks, HideMonths, HideYears, HideThisMonth

Разделителями могут быть запятые, точки с запятой или пробелы.

Значения HANDLER_TYPE

Поле HANDLER_TYPE определяет тип обработчика.

SaveToDB, DBEdit, DBGate и ODataDB поддерживают следующие типы:

  • TABLE, VIEW, PROCEDURE, FUNCTION
  • CODE
  • HTTP
  • MENUSEPARATOR
  • VALUES
  • ATTRIBUTE

Используйте PROCEDURE, FUNCTION, TABLE и VIEW для объектов базы данных, которые используются для обработки событий или реализации возможности.

Используйте CODE для объектов на основе SQL запросов.

Используйте HTTP для объектов на основе HTTP запросов.

Используйте MENUSEPARATOR для разделителей меню действий и контекстного меню.

Используйте VALUES для определения фиксированных значений для обработчиков ParameterValues, ValidationList и SelectionList.
Указывайте значения, разделенные запятыми или точкой с запятой, в поле HANDLER_CODE.

Используйте тип ATTRIBUTE вместо значения NULL, если другие типы не подходят.

Специальные типы для SaveToDB и DBEdit

SaveToDB и DBEdit поддерживают следующие типы для управления листами:

  • SELECTSHEET
  • SHOWSHEETS
  • HIDESHEETS

Используйте SELECTSHEET для того, чтобы активировать лист, заданный в поле TARGET_WORKSHEET.
Поле может содержать имя листа или же имя объекта базы данных.

Используйте SHOWSHEETS чтобы сделать листы видимыми, и HIDESHEETS чтобы скрыть листы, заданные в поле HANDLER_CODE.
Поле HANDLER_CODE может содержать список имен листов или же имен объектов базы данных, разделенных запятой или точкой с запятой.
Также, поле TARGET_WORKSHEET может содержать лист, который следует активировать.

Специальные типы надстройки SaveToDB

Надстройка SaveToDB дополнительно поддерживает следующие типы:

  • TEXT
  • MACRO
  • CMD
  • REFRESH
  • RANGE
  • PDF
  • REPORT

Используйте TEXT для запросов из текстовых файлов.

Используйте MACRO для макросов VBA. См. Запуск макросов.

Используйте CMD для команд оболочки Windows и команд CMD. См. Запуск команд CMD.

Используйте REFRESH для обновления данных на листах, заданных в поле TARGET_WORKSHEET и разделенных запятыми.

Используйте RANGE для использования диапазона Excel как источника для обработчиков ParameterValues, ValidationList и SelectionList.
В поле HANDLER_CODE следует указать адрес диапазона или же имя именованного диапазона.

Используйте PDF для создания PDF документов. В поле TARGET_WORKSHEET через запятую можно задать список требуемых листов.

Используйте REPORT для создания книги с отчетами. В поле TARGET_WORKSHEET через запятую можно задать список требуемых листов.

Значения TARGET_WORKSHEET

Поле TARGET_WORKSHEET позволяет настроить возможности обработчика.

Имя поля немного сбивает с толку. Но оно появилось в первых версиях, когда можно было задать только имена листов.

SaveToDB, DBEdit, DBGate и ODataDB поддерживают следующие значения:

  • _reload
  • _askSave
  • _askReload
  • _commit
  • _notransaction
  • _notnull
  • _keepnull

Используйте _reload чтобы обновить данные активной таблицы после выполнения обработчика.

Используйте _askSave чтобы предложить сохранение изменений перед выполнением обработчика.

Используйте _askReload чтобы предложить обновить данные после выполнения асинхронного обработчика.

Используйте _commit в обработчиках изменений ячеек чтобы указать, что обработчик сохраняет изменения в базу данных.

Используйте _notransaction чтобы отключить режим транзакций при выполнении обработчика.

Используйте _notnull чтобы предотвратить добавление пустого значения в список значений параметров.

Используйте _keepnull чтобы добавить пустое значение в список значений параметров, если значение существует в возвращаемом списке.

SaveToDB, DBEdit, DBGate и ODataDB также поддерживают следующие значения, определяющие вывод:

  • _none
  • _browser
  • _popup
  • _msgbox
  • _self
  • _new
  • <имя листа>

Используйте _none чтобы обработчик выполнялся без вывода.

Используйте _browser чтобы открыть HTTP запрос в окне браузера.

Используйте _popup чтобы показать результаты вывода в окне, которые поддерживает HTML и XML.

Используйте _msgbox чтобы показать результаты в окне MessageBox.

Используйте _self чтобы заменить активный запрос объектом, заданным в обработчике.

Используйте _new или имя листа чтобы создать или открыть лист или страницу с заданным объектом запроса.

Специальные значения для SaveToDB

Надстройка SaveToDB дополнительно поддерживает следующие значения:

  • _TopWindow | _LeftWindow | _RightWindow | _BottomWindow
  • _taskpane [ _transpose | _transposeauto]
  • <список имен листов, разделенных запятыми>
  • _saveas [<путь к файлу>[;CodePage=<кодовая страница>][;Format=CSV][;Separator=;|,|Tab]]

SaveToDB 7-8 в Excel 2007-2010 позволяет задать положение окна листа, например RightWindow.

Используйте _taskpane чтобы отобразить результаты запроса в панели задач.

Поведение окон _popup и панелей задач отличается.
Окна _popup не зависят от запроса. Пользователь должен явно закрывать такие окна.
Панели задач привязаны к листам, и надстройка отображает и скрывает панели самостоятельно.

Используйте _transpose чтобы показать строки в столбцах, а колонки в строках.

Эта возможность позволяет, например, показать данные большой строки в виде таблицы из двух колонок.

Используйте _transposeauto для транспонирования данных из одной строки и показа многострочных данных в обычном режиме.

Поле TARGET_WORKSHEET может содержать список листов при использовании с типами PDF и REPORT.

Используйте _saveas для экспорта данных из запроса обработчика в CSV файл из меню действий.

Выбор типа вывода по умолчанию

HTTP запросы открываются во внешнем браузере.

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

Например, в единственной ячейке можно вернуть HTML или XML с таблицей стиля, которые будут отображены во внутреннем браузере.

Генерирование настройки обработчиков

Вы можете использовать представления для автоматической генерации настройки обработчиков.

Например, следующее представление добавляет пункт меню "See Online Help" для всех объектов в схеме s02, доступных для подключения.

CREATE VIEW s02.xl_actions_online_help
AS
SELECT
    t.TABLE_SCHEMA
    , t.TABLE_NAME
    , CAST(NULL AS nvarchar(128)) AS COLUMN_NAME
    , 'Actions' AS EVENT_NAME
    , t.TABLE_SCHEMA AS HANDLER_SCHEMA
    , 'See Online Help' AS HANDLER_NAME
    , 'HTTP' AS HANDLER_TYPE
    , 'https://www.savetodb.com/samples/sample'
        + SUBSTRING(t.TABLE_SCHEMA, 2, 2) + '-' + t.TABLE_NAME
        + CASE WHEN USER_NAME() LIKE 'sample%' THEN '_' + USER_NAME() ELSE '' END AS HANDLER_CODE
    , CAST(NULL AS nvarchar(128)) AS TARGET_WORKSHEET
    , 1 AS MENU_ORDER
    , 0 AS EDIT_PARAMETERS
FROM
    INFORMATION_SCHEMA.TABLES t
WHERE
    t.TABLE_SCHEMA = 's02'
    AND NOT t.TABLE_NAME LIKE 'xl_%'
UNION ALL
SELECT
    t.ROUTINE_SCHEMA AS TABLE_SCHEMA
    , t.ROUTINE_NAME AS TABLE_NAME
    , CAST(NULL AS nvarchar(128)) AS COLUMN_NAME
    , 'Actions' AS EVENT_NAME
    , t.ROUTINE_SCHEMA AS HANDLER_SCHEMA
    , 'See Online Help' AS HANDLER_NAME
    , 'HTTP' AS HANDLER_TYPE
    , 'https://www.savetodb.com/samples/sample'
        + SUBSTRING(t.ROUTINE_SCHEMA, 2, 2) + '-' + t.ROUTINE_NAME
        + CASE WHEN USER_NAME() LIKE 'sample%' THEN '_' + USER_NAME() ELSE '' END AS HANDLER_CODE
    , CAST(NULL AS nvarchar(128)) AS TARGET_WORKSHEET
    , 1 AS MENU_ORDER
    , 0 AS EDIT_PARAMETERS
FROM
    INFORMATION_SCHEMA.ROUTINES t
WHERE
    t.ROUTINE_SCHEMA = 's02'
    AND NOT t.ROUTINE_NAME LIKE 'xl_%'
    AND NOT t.ROUTINE_NAME LIKE '%_insert'
    AND NOT t.ROUTINE_NAME LIKE '%_update'
    AND NOT t.ROUTINE_NAME LIKE '%_delete'
    AND NOT t.ROUTINE_NAME LIKE '%_change'
    AND NOT t.ROUTINE_NAME LIKE '%_merge'

Представление выводит колонки, которые определены для таблицы xls.handlers, за исключением ID.

Такой подход можно также использовать и для других таблиц конфигурации.