Элемент проекта вида «Событие Журнала Событий»
Создание события журнала событий
Для создания события журнала событий предназначен элемент проекта Событие Журнала Событий.
Начиная с версии 4.0, изменился механизм регистрации событий. Теперь вместо метода ЖурналСобытий.Зарегистрировать
необходимо использовать элемент проекта вида Событие Журнала Событий. Чтобы не потерять историю событий, зарегистрированных в версии «Исполнителя» ниже 4.0, создайте нужное количество элементов проекта Событие Журнала Событий с теми же именами, которые были указаны в вызове методов ЖурналСобытий.Зарегистрировать
. Если для событий были заданы свойства, то их также необходимо добавить в свойства соответствующих элементов проекта, используя те же имена. Важно выполнить все изменения до первого обновления приложения, иначе данные о событиях могут быть утеряны.
Всего есть три вида события, которые можно добавить в проект:
-
Ошибка
События, описывающие ошибку
-
Информация
События, несущие информационный характер
-
Операция
События, описывающие начало и конец операции
Чтобы добавить событие, создайте новый элемент проекта Событие Журнала Событий. Задайте ему все необходимые свойства. На основе описания события будут сгенерированы типы, доступные во встроенном языке, позволяющие читать и писать значения свойств события:
- Для событий вида Ошибка и Информация будет сгенерирован тип
<ИмяСобытия>
. - Для событий вида Операция будут сгенерированы два типа:
<ИмяОперации>
и<ИмяОперации>.КонтекстОперации
.
Для создания события во встроенном языке следует использовать конструктор, аргументы которого — обязательные свойства события. Например, если вы добавили в проект событие ОперацияИмпортДанных с обязательным свойством Задание, то создать его можно следующим образом:
пер СобытиеИмпортДанных = новый ОперацияИмпортДанных(Задание = "КлючЗадания")
Необязательные свойства можно задать через свойства объекта (МоеСобытие.НеобязательноеСвойствоСобытия = "Значение"
), а также через свойства контекста операции (Контекст.НеобязательноеСвойствоСобытия = "Значение"
). Уже заданные обязательные значения можно изменить таким же образом.
Для регистрации события во встроенном языке используются специальные методы события:
- метод
Записать()
для событий вида Информация и Ошибка; - метод
ЗаписатьНачало()
для события вида Операция.
Например, записать начало операции можно следующим образом:
исп Контекст = СобытиеИмпортДанных.ЗаписатьНачало()
Операции, иерархия событий
С помощью журнала можно зафиксировать факт наступления некоторого события. Таким событием может быть, например, изменение данных справочника, отправка сообщений, выполнение запроса к базе данных и прочее.
Журнал вводит понятие операции и предоставляет инструменты для фиксации событий, связанных с операцией. Под операцией подразумевается исполнение любой бизнес-логики, у которой можно выделить момент начала и момент окончания. В журнале операции отражаются в виде двух событий: начало операции и конец операции.
Операции могут быть длительными или короткими. Журнал может работать только с операциями, выполняемыми в рамках одного серверного вызова. Распределенные операции не поддерживаются — нельзя начать операцию и запустить фоновое задание, в котором эта операция будет завершена.
«Исполнитель» поддерживает иерархию событий. Все события, кроме события начала серверного вызова и окончания серверного вызова, регистрируются в контексте некоторой операции. Если разработчик не соз давал никаких операций, то они будут зарегистрированы в контексте операции серверного вызова.
Пример иерархии событий, зарегистрированных через вложенные операции:
исп Контекст1 = новый Операция1().ЗаписатьНачало()
область
исп Контекст2 = новый Операция2().ЗаписатьНачало()
новый Событие1().Записать()
;
новый Событие2().Записать()
В результате будут зарегистрированы события, из которых можно построить иерархию, используя свойство СобытиеЖурналаСобытий.Родитель
):
- НачалоОперации1
- НачалоОперации2
- Событие1
- КонецОперации2
- Событие2
- НачалоОперации2
- КонецОперации1
Еще одна особенность операций — возможность автоматической регистрации ошибок и маркировки операций как неудачных.
исп Контекст = новый Операция().ЗаписатьНачало()
...
выбросить новый ИсключениеВыполенния("Пояснения")
В результате выполнения такого кода в журнал попадут:
- Операция
ИсключениеВыполнения
с описанием «Пояснения»
- Операция с признаком
СобытиеЖурналаСобытий.Успешно
=