<< Click to Display Table of Contents >> Разработка > Элементы разработки > События типов сущностей Серверные события |
События сущности задаются в редакторе типа сущности в группе «Серверные события». Выполняются на веб-сервере.
Серверные события |
|
---|---|
События, которые есть у всех типов сущностей |
|
BeforeSave |
|
Saving |
|
Saved |
|
AfterSave |
|
BeforeSaveHistory |
|
BeforeDelete |
|
Deleting |
|
AfterDelete |
|
CreatingFrom |
|
Created |
|
PreFiltering |
|
Filtering |
|
События только для типов документов |
|
BeforeSigning |
|
ConvertingFrom |
|
События только для типа задачи |
|
BeforeStart |
|
BeforeRestart |
|
BeforeResume |
|
BeforeAbort |
|
AfterSuspend |
|
События только для типа задания, задания на приемку, уведомления |
|
BeforeComplete |
|
BeforeAccept |
|
BeforeSendForRework |
|
События только для типа справочника |
|
UIFiltering |
|
Показ подсказки (только для наследников Sungero.CoreEntities.User) |
GetDigest |
Выполняется до начала SQL-транзакции перед сохранением сущности в базе данных. Назначение: •валидация сущности (проверка заполнения свойств, наличие прав доступа); •расчет вычисляемых свойств, например, итогов; •изменение свойств текущей сущности, например, установка даты изменения; •создание или изменение других сущностей. Аргументы события: •_obj – сущность, которая будет сохранена; •e.AddError() – добавление сообщения об ошибке. Выполняемые операции будут прерваны; •e.AddInformation() – добавление информационного сообщения. Выполняемые операции не будут прерваны; •e.AddWarning() – добавление предупреждения. Выполняемые операции не будут прерваны. Примечание. Сообщение об ошибке, информационное сообщение и предупреждение отображаются с соответствующей иконкой в верхней части карточки сущности. Например, информационное сообщение выглядит следующим образом: •e.IsValid – признак того, что сущность валидная. Возможные значения: •True. Сущность валидная (доступна для сохранения); •False. Сущность не валидная. При сохранении сущности появится сообщение об ошибке, заданное в AddError. Например, если в карточке группы регистрации установить флажок Регистрирует входящие документы, то при сохранении карточки выполнится проверка группы. Если группа валидная, то она будет включена в роль «Регистраторы входящих документов»; •e.Params – дополнительные параметры. Пример:
|
До сохранения (в транзакции) (Saving)
Выполняется в SQL-транзакции перед сохранением сущности в базе данных. Назначение. Добавление вычислений, которые сохранятся в базе данных только в случае успешного сохранения сущности. Например, если при регистрации документа возникнет исключение, то регистрационный номер не будет сохранен в базу данных. При следующей регистрации номер будет заново вычисляться. Аргументы события: •_obj – сущность, которая будет сохранена; •e.Params – дополнительные параметры. Пример:
|
После сохранения (в транзакции) (Saved)
Выполняется в SQL-транзакции после сохранения сущности в базе данных. Сущность нельзя изменять в событии, так как она уже сохранена в базе данных. Назначение. Выполнение дополнительной логики при сохранении сущности, которая должна выполняться в транзакции. Например, обращение к базе данных через SQL-запросы. Аргументы события: •_obj – сохраненная сущность; •e.Params – дополнительные параметры. Пример:
|
Выполняется после завершения SQL-транзакции после сохранения сущности в базе данных. Сущность нельзя изменять в событии, так как она уже сохранена в базе данных. Примечание. Если в коде обработчика события возникнет исключение, пользователь увидит в системе соответствующее сообщение. При этом сама сущность все равно будет сохранена в базе данных. Назначение. Выполнение дополнительной логики после сохранения сущности. Например, запись в лог-файл. Аргументы события: •_obj – сохраненная сущность; •e.Params – дополнительные параметры. Пример:
|
До сохранения истории (BeforeSaveHistory)
Выполняется перед сохранением записи истории в системе. В том числе при вызове entity.History.Write() в серверном событии. Примечание. Если в коде обработчика события возникнет исключение, пользователь увидит в системе соответствующее сообщение. Все изменения, которые выполнялись с сущностью до выполнения события, будут отменены. Например, измененная сущность не будет сохранена. Назначение: •уточнение информации в истории. Например: •при регистрации документа вместо действия «Изменение» будет записываться действие «Регистрация» (переопределение записи истории); •при импорте документа в истории указывается информация, из какого файла сделан импорт; •запись дополнительных действий в историю. Например, при регистрации официального документа изменяется его состояние. В этом случае в историю добавится две записи: регистрация и изменение состояния документа. Аргументы события: •_obj – сущность, для которой записывается история; •e.Action – действие с сущностью. Например, Создание, Изменение, Просмотр, Удаление, Настройка прав, Подписание. Тип свойства: Перечисление. Доступно только для чтения; •e.Operation – логическая операция в предметной области, выполняющаяся над сущностью. В истории работы с сущностью отображается в колонке Действие. Например, «Экспорт» документа. Если логической операции нет, то в колонке будет отображаться информация о действии с сущностью из e.Action. Тип свойства: Перечисление. Свойство можно переопределять; •e.OperationDetailed – детальная информация о логической операции. В истории работы с сущностью отображается как локализованное значение в колонке Комментарий. Например, «Экспорт в файл». Тип свойства: Перечисление. Свойство можно переопределять; •e.Comment – комментарий к операции. В истории работы с сущностью отображается как нелокализованная часть комментария в колонке Комментарий. Расположение в комментарии зависит от настроек OperationDetailed. Например, при экспорте документа в файл в комментарии указывается имя файла. Тип свойства: Строка. Свойство можно переопределять. Важно. Значение комментария формируется из двух свойств OperationDetailed и Comment. Подробнее о локализации см. в разделе «Локализация действий истории»; •e.VersionNumber – номер версии документа, для которой выполняется действие. Тип свойства: Целое. Доступно только для чтения; •e.HistoryDate – дата и время действия. Тип свойства: Дата. Доступно только для чтения; •e.HostName – имя компьютера, с которого было выполнено действие. Тип свойства: Строка. Доступно только для чтения; •e.IsSubstitute – признак того, что действие выполнялось по замещению. Возможные значения: •True. У замещающего пользователя нет прав на выполнение операции, у замещаемого пользователя есть права; •False. У замещающего пользователя есть права на выполнение операции. Тип свойства – Логическое. Доступно только для чтения; •e.Write() – запись дополнительной информации в историю. При вызове метода событие До сохранения истории не будет вызываться повторно. Пример: При создании документа в историю работы добавляется отдельная запись регистрации. Для добавления записи в историю используется метод Write() в событии «До сохранения истории». Перед этим нужно локализовать значения операции.
Другой пример добавления записи в историю см. в разделе «Как добавить действие в историю работы сущностью». |
Выполняется до начала SQL-транзакции перед удалением сущности из базы данных. Назначение: •валидация сущности (проверка выполнения условий перед удалением сущности); •создание или изменение других сущностей. Аргументы события: •_obj – сущность, которая будет удалена; •e.AddError() – добавление сообщения об ошибке. Выполняемые операции будут прерваны; •e.AddInformation() – добавление информационного сообщения. Выполняемые операции не будут прерваны; •e.AddWarning() – добавление предупреждения. Выполняемые операции не будут прерваны. Примечание. Сообщение об ошибке, информационное сообщение и предупреждение отображаются с соответствующей иконкой в верхней части карточки сущности. Например, информационное сообщение выглядит следующим образом: •e.IsValid – признак того, что сущность валидная. Возможные значения: •True. Сущность валидная (доступна для удаления); •False. Сущность не валидная. При удалении сущности появится сообщение об ошибке, заданное в AddError; •e.Params – дополнительные параметры. Пример:
|
До удаления (в транзакции) (Deleting)
Выполняется в SQL-транзакции перед удалением сущности из базы данных. Назначение: •внесение изменений в связанные сущности; •выполнение дополнительной логики в транзакции при удалении сущности. Например, обращение к базе данных через SQL-запросы. Аргументы события: •_obj – сущность, которая будет удалена; •e.Params – дополнительные параметры. |
Выполняется после завершения SQL-транзакции, после удаления сущности из базы данных. Примечание. Если в коде обработчика события возникнет исключение, пользователь увидит в системе соответствующее сообщение. При этом сущность будет удалена из базы данных. Назначение. Выполнение дополнительной логики после удаления сущности. Например, запись в лог-файл. Аргументы события: •_obj – сущность, которая была удалена; •e.Params – дополнительные параметры. Пример:
|
Выполняется при создании сущности копированием из другой сущности. Назначение. Переопределение состава копируемых свойств при создании новой сущности из другой. Изменять создаваемую сущность в обработчике события нельзя. Аргументы события: •_source – сущность, которая копируется; •_info – информация о сущности; •e.Map() – правило копирования значений свойств исходного типа сущности. Используется, например, когда нужно чтобы свойство скопировалось иначе; •e.Without() – исключение свойств из списка копируемых; •e.Params – дополнительные параметры. Пример:
|
Выполняется при создании новой сущности. Назначение. Заполнение свойств сущности значениями по умолчанию. Аргументы события: •_obj – создаваемая сущность; •e.Params – дополнительные параметры. Пример:
ВАЖНО. В событии «Создание» можно выдать права доступа для роли, группы или пользователя на создаваемую сущность. При этом отключается стандартное поведение системы: автор не получит полные права на сущность. Если автору тоже нужны полные права, их нужно выдать явно, например:
|
Предварительная фильтрация (PreFiltering)
Выполняется каждый раз при получении сущности или списка сущностей. Назначение. Используется для оптимизации выполнения тяжелого SQL-запроса к большому списку сущностей с панелью фильтрации. Например, предварительную фильтрацию можно использовать для ограничения выборки данных, если список содержит более 10 млн записей. Чтобы выполнить запрос к базе данных оптимально, при добавлении события соблюдайте условия: •критерии фильтрации события PreFiltering должны значительно сократить объем данных; •для выбранных критериев фильтрации в базе данных созданы индексы; •критерии не должны фильтровать список по логическим свойствам. Вместо этого, например, задайте предварительную фильтрацию по подразделению или организации. Если событие Предварительная фильтрация задано, то SQL-запрос выполняется в два этапа: •событие PreFiltering формирует запрос на получение выборки данных по базовым критериям. В результате список записей ограничивается для дальнейшей фильтрации; •событие Filtering фильтрует получившийся список по остальным критериям. В коде события PreFiltering можно сформировать содержимое списка по часто используемым критериям, например отфильтровать реестр договоров по периоду. При этом в выборку попадают только записи, на которые у пользователя есть права доступа. Затем запрос из события Filtering выполняется к уменьшенному объему данных. События формируют один общий запрос вместо двух, если выполняется одно из условий: •вычисления перенесены с веб-сервера, например на сервис асинхронных событий; •в событии PreFiltering не заданы фильтры; •в списке нет панели фильтрации; •используется СУБД Microsoft SQL Server. Возвращаемое значение. Измененный запрос на получение списка сущностей. По умолчанию возвращается исходный запрос. Аргументы события: •query – исходный запрос на получение списка сущностей; •e.Params – дополнительные параметры; •_createFromTemplateContext – документ, для которого создается версия из шаблона. Аргумент отображается только в шаблонах документов, наследниках от Sungero.Content.ElectronicDocumentTemplate. Подробнее см. пример. ПРИМЕЧАНИЕ. Не рекомендуется использовать оператор OR в коде обработчика события фильтрации, если предполагается, что запрос будет обращаться к большим спискам (более 1 млн. записей). |
Выполняется каждый раз при получении сущности или списка сущностей. Назначение. Фильтрация списка сущностей. Например, в событии пишут код, чтобы сформировать содержимое списка по умолчанию, добавить условия фильтрации для списка с панелью фильтрации, отфильтровать список шаблонов, доступных для документа. Возвращаемое значение. Измененный запрос на получение списка сущностей. По умолчанию возвращается исходный запрос. Аргументы события: •query – исходный запрос на получение списка сущностей; •e.Params – дополнительные параметры; •_createFromTemplateContext – документ, для которого создается версия из шаблона. Аргумент отображается только в шаблонах документов, наследниках от Sungero.Content.ElectronicDocumentTemplate. Подробнее см. пример. ПРИМЕЧАНИЕ. Не рекомендуется использовать оператор OR в коде обработчика события фильтрации, если предполагается, что запрос будет обращаться к большим спискам (более 1 млн. записей). Пример:
Подробнее см. пример разработки «Как отфильтровать список шаблонов, доступных при создании документа». |
Выполняется на веб-сервере при подписании документа. Назначение. Валидация сущности (проверка выполнения условий при подписании документа определенным пользователем с одним из результатов: Согласовать, Не согласовать, Утвердить). Аргументы события: •_obj – подписываемый документ; •e.Certificate – сертификат, которым подписан документ; •e.Signature – подпись, которая устанавливается на документ; •e.AddError() – добавление сообщения об ошибке. Выполняемые операции будут прерваны; •e.IsValid – признак того, что сущность валидная. Возможные значения: True. Сущность валидная (документ доступен для подписания). False. Сущность не валидная. При подписании документа появится сообщение AddError. •e.Params – дополнительные параметры. |
Выполняется на веб-сервере при смене типа документа. Назначение. Определение правил переноса значений свойств исходного типа документа в новый тип. Аргументы события: •e.Map() – правило переноса значений свойств исходного типа документа в новый тип. По умолчанию общие свойства всегда переносятся. Если свойства не общие или нужно изменить правило переноса, то укажите их в e.Map(); •e.Without() – исключение свойств, которые переносятся в новый тип документа; •e.Params – дополнительные параметры. Пример:
|
Выполняется на веб-сервере перед стартом задачи. Назначение: •валидация задачи (проверка возможности старта задачи, проверка заполнения свойств); •заполнение текста задачи или свойств информацией из связанных сущностей или вложений. Аргументы события: •_obj – отправляемая задача; •e.AddError() – добавление сообщения об ошибке. Выполняемые операции будут прерваны; •e.AddInformation() – добавление информационного сообщения. Выполняемые операции не будут прерваны; •e.AddWarning() – добавление текста с предупреждением. Выполняемые операции не будут прерваны. Примечание. Сообщение об ошибке, информационное сообщение и предупреждение отображаются в верхней части формы карточки с соответствующей иконкой. Например, сообщение об ошибке выглядит следующим образом: •e.IsValid – признак того, что задача валидная. Возможные значения: •True. Задача валидная (доступна для старта); •False. Задача не валидная. При старте задачи появится сообщение AddError. Например, при старте задачи выполнится проверка заполнения обязательных полей. Если все обязательные поля заполнены, то задача будет отправлена исполнителю. •e.Params – дополнительные параметры. Пример:
|
Выполняется на веб-сервере перед рестартом задачи. Назначение. Заполнение свойств задачи перед рестартом. При этом свойства задачи становятся доступными для изменения. Аргументы события: •_obj – возобновляемая задача; •e.AddError() – добавление сообщения об ошибке. Выполняемые операции будут прерваны; •e.AddInformation() – добавление информационного сообщения. Выполняемые операции не будут прерваны; •e.AddWarning() – добавление текста с предупреждением. Выполняемые операции не будут прерваны. Примечание. Сообщение об ошибке, информационное сообщение и предупреждение отображаются в верхней части формы карточки с соответствующей иконкой. Например, сообщение об ошибке выглядит следующим образом: •e.IsValid – признак того, что задача валидная. Возможные значения: •True. Задача валидная (доступна для рестарта); •False. Задача не валидная. При рестарте задачи появится сообщение AddError. •e.Params – дополнительные параметры. Пример:
|
До возобновления (BeforeResume)
Выполняется на веб-сервере перед тем, как возобновить задачу. Назначение. Выполнение логики, необходимой для корректного возобновления задачи. Аргументы события: •_obj – возобновляемая задача; •e.AddError() – добавление сообщения об ошибке. Выполняемые операции будут прерваны; •e.AddInformation() – добавление информационного сообщения. Выполняемые операции не будут прерваны; •e.AddWarning() – добавление текста с предупреждением. Выполняемые операции не будут прерваны. Примечание. Сообщение об ошибке, информационное сообщение и предупреждение отображаются в верхней части формы карточки с соответствующей иконкой. Например, сообщение об ошибке выглядит следующим образом: •e.IsValid – признак того, что задача валидная. Возможные значения: •True. Задача валидная (доступна для возобновления); •False. Задача не валидная. При возобновлении задачи появится сообщение AddError. •e.Params – дополнительные параметры. Пример:
|
Выполняется на веб-сервере перед тем, как прекратить задачу. Назначение. Проверка возможности прекращения задачи на заданном этапе. Аргументы события: •_obj – прекращаемая задача; •e.AddError() – добавление сообщения об ошибке. Выполняемые операции будут прерваны; •e.AddInformation() – добавление информационного сообщения. Выполняемые операции не будут прерваны; •e.AddWarning() – добавление текста с предупреждением. Выполняемые операции не будут прерваны. Примечание. Сообщение об ошибке, информационное сообщение и предупреждение отображаются в верхней части формы карточки с соответствующей иконкой. •e.IsValid – признак того, что задача валидная. Возможные значения: •True. Задача валидная (доступна для прекращения); •False. Задача не валидная. При прекращении задачи появится сообщение AddError. •e.Params – дополнительные параметры. Пример:
|
После приостановки (AfterSuspend)
Выполняется на веб-сервере после того, как задача была приостановлена из-за ошибки выполнения. Назначение. Выполнение некоторой логики при возникновении ошибки. Например, отправка уведомления об ошибке. Аргументы события: •_obj – задача; •e.Params – дополнительные параметры. |
До выполнения (BeforeComplete)
Выполняется на веб-сервере перед тем, как выполнится задание. Назначение: •валидация задания (проверка возможности выполнения, проверка заполнения полей); •заполнение текста или свойств информацией из связанных сущностей или вложений. Аргументы события: •_obj – выполняемое задание; •e.AddError() – добавление сообщения об ошибке. Выполняемые операции будут прерваны; •e.AddInformation() – добавление информационного сообщения. Выполняемые операции не будут прерваны; •e.AddWarning() – добавление текста с предупреждением. Выполняемые операции не будут прерваны. Примечание. Сообщение об ошибке, информационное сообщение и предупреждение отображаются в верхней части формы карточки с соответствующей иконкой. Например, сообщение об ошибке выглядит следующим образом: •e.IsValid – признак того, что задание валидное. Возможные значения: •True. Задание валидное (доступно для выполнения); •False. Задание не валидное. При выполнении задания появится сообщение AddError. •e.Params – дополнительные параметры. Пример:
Подробнее см. пример разработки «Как зафиксировать дополнительную информацию о согласовании в тексте задания». |
Выполняется на веб-сервере перед тем, как принять задание на приемку. Назначение: •валидация задания (проверка возможности выполнения, проверка заполнения полей); •заполнение текста или свойств информацией из связанных сущностей или вложений. Аргументы события: •_obj – принимаемое задание на приемку; •e.AddError() – добавление сообщения об ошибке. Выполняемые операции будут прерваны; •e.AddInformation() – добавление информационного сообщения. Выполняемые операции не будут прерваны; •e.AddWarning() – добавление текста с предупреждением. Выполняемые операции не будут прерваны. Примечание. Сообщение об ошибке, информационное сообщение и предупреждение отображаются в верхней части формы карточки с соответствующей иконкой. Например, информационное сообщение выглядит следующим образом: •e.IsValid – признак того, что задание на приемку валидное. Возможные значения: •True. Задание на приемку валидное (доступно для принятия); •False. Задание на приемку не валидное. При принятии задания на приемку появится сообщение AddError. •e.Params – дополнительные параметры. |
До отправки на доработку (BeforeSendForRework)
Выполняется на веб-сервере перед тем, как отправить задание на приемку на доработку. Назначение: •валидация задания (проверка возможности выполнения, проверка заполнения полей); •заполнение текста или свойств информацией из связанных сущностей или вложений. Аргументы события: •_obj – отправляемое на доработку задание на приемку; •e.AddError() – добавление сообщения об ошибке. Выполняемые операции будут прерваны; •e.AddInformation() – добавление информационного сообщения. Выполняемые операции не будут прерваны; •e.AddWarning() – добавление текста с предупреждением. Выполняемые операции не будут прерваны. Примечание. Сообщение об ошибке, информационное сообщение и предупреждение отображаются в верхней части формы карточки с соответствующей иконкой. Например, информационное сообщение выглядит следующим образом: •e.IsValid – признак того, что задание на приемку валидное. Возможные значения: •True. Задание на приемку валидное (доступно для отправки на доработку); •False. Задание на приемку не валидное. При принятии задания на приемку появится сообщение AddError. •e.Params – дополнительные параметры. |
Выполняется только на веб-сервере после наложения всех остальных фильтров. Назначение. Событие используют для настройки видимости оргструктуры. В обработчике события прикладной разработчик пишет код, который накладывает дополнительные фильтры на запросы выборки данных. UI-фильтрация работает только в веб-клиенте. Событие выполняется, когда пользователи просматривают списки справочников и заполняют контролы, связанные со ссылками на справочники. При этом контролы могут быть: •в карточках; •на панелях фильтрации списков и папок; •в диалогах поиска; •в диалогах с выпадающими списками с выбором одного и нескольких значений. Важно. Событие не выполняется: •в диалогах, если в выпадающем списке или выпадающем списке с выбором нескольких значений явно указан источник данных либо указан список допустимых значений; •в вычисляемых папках и списках, если их содержимое формируется с помощью IQueryable или IList. Возвращаемое значение. Измененный запрос на получение списка сущностей. По умолчанию возвращается исходный запрос. Аргументы •query – исходный запрос на получение списка сущностей; •e.Params – дополнительные параметры. Точечное отключение выполнения обработчика. Иногда записи одного и того же справочника используются для заполнения контролов в разных местах, например, на форме типа задачи и на форме типа документа. При этом нужно, чтобы при заполнении контрола на форме документа событие UI-фильтрации срабатывало, а при заполнении контрола на форме задачи – нет, то есть показывались все записи из справочника. В этой ситуации для контрола на форме задачи выполнение события можно точечно отключить с помощью специального атрибута. Чтобы событие не выполнялось при заполнении контрола в карточке типа сущности, в код обработчика события Фильтрация выбора из списка для связанного с контролом свойства-ссылки добавьте атрибут e.DisableUiFiltering = true. Например:
Используйте этот же атрибут, чтобы отменить выполнение события UI-фильтрации при заполнении контролов: •на панели фильтрации в списках. Для этого добавьте атрибут в код обработчика события Фильтрация сущностей в редакторе свойства-ссылки; •в диалоге поиска. Для этого добавьте атрибут в код обработчика события Фильтрация выбора из списка при поиске в редакторе свойства-ссылки. Чтобы событие UI-фильтрации не выполнялось при заполнении контрола на панели фильтрации вычисляемой папки, в обработчик события Фильтрации сущностей добавьте атрибут: _disableUiFiltering = true. В базовом решении Directum RX обработчики для событий UI-фильтрации добавлены в справочниках Сотрудник, Подразделение и Наша организация. Список мест, где выполнение обработчика отключено, см. в руководстве администратора, в разделе «Списки, закладки и поля, содержимое которых формируется по бизнес-правилам». См. также пример «Как ограничить видимость сотрудников в списках». При наследовании и перекрытии справочников разработчик может: •вызвать событие UI-фильтрации из родительского типа сущности; •написать свою логику фильтрации; •отключить UI-фильтрацию в полях и справочниках, где в стандартной версии она по умолчанию работает. Пример:
|
Выполняется, когда в проводнике веб-клиента пользователь наводит курсор на фото или имя сотрудника: •в списке или папке; •в поле Кому в карточке задачи; •в переписке по задаче, заданию или уведомлению; •в свойствах-ссылках; •в истории работы с сущностью; •в окне о блокировке содержимого документа другим сотрудником, а также в сообщении о блокировке карточки документа. Назначение. Показ всплывающей подсказки с информацией о сотруднике. Событие доступно только для типа сущности Пользователь (Sungero.CoreEntities.User) и его наследников, например, Сотрудник (Employee): Возвращаемое значение. Сформированная подсказка с информацией о сотруднике. Аргументы события: e.Entity – сущность, для которой вызывается событие. В базовом решении Directum RX обработчик события Показ подсказки задан для типа справочника Сотрудники (Employee). В нем вызывается функция GetEmployeePopup(), в которой формируется подсказка. Чтобы изменить подсказку, достаточно переопределить функцию либо написать свой код для наполнения содержимого. Чтобы создать подсказку с нуля либо изменить существующую, используйте класс UserDigest, а также методы и свойства его экземпляра UserDigest.Сreate(). В подсказку можно добавить заголовок, текстовый контрол, ссылки на сущности или внешние ресурсы. Пример:
В результате подсказка примет вид: |
© Компания Directum, 2024 |