Навигация:  МОДУЛЬ "ПРОТОКОЛ HL7" >

НАСТРОЙКА ТРИГГЕРОВ ТАБЛИЦ

Предыдущая страницаВернуться в начало главыСледующая страница

Чтобы создать пользовательский триггер для таблицы, необходимо открыть Microsoft SQL Server Management Studio, подключиться к серверу, выбрать базу данных и открыть раздел Triggers (рис. 7.1). Здесь можно создать новый триггер или изменить существующий.

 Рисунок 7.1. Редактирование триггера для таблицы PATIENTS


Рисунок 7.1. Редактирование триггера для таблицы PATIENTS

Триггер, отвечающий за синхронизацию по протоколу HL7, записывает определенные данные в таблицу HL7_EVENTS. Структура таблицы и характеристика содержащихся в ней данных приведены в разделе ТАБЛИЦЫ БАЗЫ ДАННЫХ МОДУЛЯ "ПРОТОКОЛ HL7".

Ниже представлен пример триггера, выполняющегося при изменении пациента, а именно — полей NOM (Фамилия), PRENOM (Имя), PATRONYME (Отчество), NE_LE (Дата рождения), N_OMON (Номер ЭМК) таблицы PATIENTS (Пациенты).

Триггер выполняется только в том случае, когда в параметрах модуля установлен флаг Синхронизация медицинской информации через HL7 протокол, т.е. FM_PARAMS.PRM_VALUE=1 для параметра с именем 'ISCHECKHL7'. Проверка данного параметра

if Exists(select PRM_VALUE from fm_params where PRM_NAME = 'ISCHECKHL7' and PRM_VALUE = '1')

должна выполняться для любого триггера.

При вставке значений в таблицу HL7_EVENTS

insert into HL7_EVENTS (HL7_EVENTS_ID, REC_ID, REC_TYPE, ACTION_TYPE, EXT_CODE, CREATION_DATE)

values (@HL7_EVENTS_ID, @REC_ID, 'P', 'U', @EXT_CODE, GetDate())

значения, прописываемые в поля REC_TYPE и ACTION_TYPE, должны соответствовать коду события, заданному в файле настройки исходящих сообщений (HL7_OUT.xml). Если поле HL7_EVENTS.ACTION_TYPE не пусто, его значение прибавляется к HL7_EVENTS.REC_TYPE со знаком подчеркивания, т.е. код события:

<code>P_U</code>

Поле REC_TYPE можно не использовать.

Пример триггера:

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

GO

 

ALTER trigger [dbo].[tU_PATIENTS] on [dbo].[PATIENTS] for UPDATE as

begin

/* синхронизация с HL7 модулем */

/* для синхронизации нужно включить флаг Синхронизация медицинской информации через HL7 протокол в параметрах системы */

if Exists(select PRM_VALUE from fm_params where PRM_NAME = 'ISCHECKHL7' and PRM_VALUE = '1')

begin

if UPDATE(NOM) or UPDATE(PRENOM) or UPDATE(PATRONYME) or UPDATE(NE_LE) or UPDATE(N_OMON)

begin

  DECLARE @HL7_EVENTS_ID int

  DECLARE @REC_ID int

  DECLARE @EXT_CODE varchar(64)

  DECLARE HL7 CURSOR FOR

    SELECT PATIENTS_ID, N_OMON from inserted

  OPEN HL7

  FETCH NEXT FROM HL7 INTO @REC_ID, @EXT_CODE

  WHILE @@FETCH_STATUS = 0

  BEGIN

    exec up_get_id 'HL7_EVENTS', 1, @HL7_EVENTS_ID output

    insert into HL7_EVENTS (HL7_EVENTS_ID, REC_ID, REC_TYPE, ACTION_TYPE, EXT_CODE, CREATION_DATE)

    values (@HL7_EVENTS_ID, @REC_ID, 'P', 'U', @EXT_CODE, GetDate())

    FETCH NEXT FROM HL7 INTO @REC_ID, @EXT_CODE

  END

  CLOSE HL7

  DEALLOCATE HL7

end

end

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