Диспетчеризация и проверка события перед началом действия и после его завершения
Диспетчеризация и проверка события перед началом действия и после его завершения
Каждый раз при инициировании действия создания, обновления или удаления перед проверкой базы данных вызывается элемент проверки перед действием (PTC.SCA.SCO.PreActionValidator). Если проверка выполнена успешно, то база данных обновится, и действие завершится. После успешного обновления базы данных в другом потоке вызывается элемент обработчика после действия (PTC.SCA.SCO.PostActionHandler). Это не влияет на выполнение действия. На следующей схеме показана последовательность действий диспетчера предварительного валидатора и последующего обработчика в случае успешной предварительной проверки.
Если во время проверки произошел сбой, то действие не может быть закончено и база данных не обновится. На следующей схеме показана последовательность действий диспетчера при сбое предварительной проверки.
Элемент предварительного валидатора по умолчанию (PTC.SCA.SCO.DefaultPreActionValidator) наследует шаблон элемента предварительного валидатора (PTC.SCA.SCO.PreActionValidatorThingTemplate). Таким же образом, элемент предварительного обработчика (PTC.SCA.SCO.PostActionHandler) наследует шаблон вещи после действия (PTC.SCA.SCO.PostActionHandlerThingTemplate). Эти шаблоны вещей реализуют необходимые профили вещей для инициирования предварительных и последующих событий в диспетчере.
При инициации таких действий, как создание, обновление или удаление, запускается соответствующий сервис предварительной проверки (PreCreateAction, PreUpdateAction или PreDeleteAction). Служба предварительного действия в свою очередь запускает сервис CallServices, которая проверяет изменения данных и считывает конфигурацию с валидатора предварительного действия. Если есть служба, настроенная для этого действия и профиля данных, то CallServices производит диспетчеризвацию надлежащих служб проверки. Если при выполнении какого-либо из этапов проверки происходит сбой, то действие не может быть закончено.
Если такие действия, как создание, обновление или удаление завершены, то происходит инициация последующего обработчика (PostCreateAction, PostUpdateAction или PostDeleteAction). Служба последующего действия выполняет сервис CallServices, который считывает конфигурацию в последующем обработчике по умолчанию. Если сервис настроен для этого действия и профиля данных, то происходит диспетчеризация службы последующего действия.
Сервисы предоставляются на валидаторе до действия и на обработчике после действия, которые запускаются всякий раз при создании или обновлении определения работы, смены или сайта. Эти реализации можно использовать в качестве моделей для внедрения ваших собственных сервисов перед началом действия и после его окончания.
Например, сервисы определения работы до и после действия работают следующим образом:
В элементе предварительного валидатора: WorkDefinitionPreCreate, WorkDefinitionPreUpdate, ValidateWorkDefinitionExecutionStatus и EnumerationValidation.
После создания или обновления определения работы, а также указания состояния выполнения, состояние выполнения проверяется перед тем, как продолжить действие. В зависимости от выполняемого действия вызывается служба WorkDefinitionPreCreate или WorkDefinitionPreUpdate. Это действие, в свою очередь, вызывает службу ValidateWorkDefinitionExecutionStatus, которая вызывает сервис EnumerationValidation. Если создание или обновление нескольких определений работы происходит в одно действие, и у одного из определений есть недопустимое состояние выполнения, то действие не может быть закончено. Подробные сведения о службах проверки и любых ошибках можно посмотреть в Мониторинг > ScriptLog, после того, как для Уровень журнала установлено состояние Отладка. Обратитесь к сервису EnumerationValidation для просмотра примера того, как выводится исключение при сбое проверки.
В вещи последующего обработчика по умолчанию: WorkDefinitionPostCreate, WorkDefinitionPostUpdate, LogWorkDefinitionExecutionStatusChange
После того, как определение работы успешно создано или обновлено, в зависимости от выполняемого действия, вызывается служба WorkDefinitionPostCreate или WorkDefinitionPostUpdate. Это действие, в свою очередь, вызывает службу LogWorkDefinitionExecutionStatusChange, которая вносит в журнал следующие сведения о действии: агент, ответственный за действие, созданный или обновленный UID определения работы, а также значение и UID для состояния выполнения. Эти сведения можно просмотреть в Мониторинг > ScriptLog, после того, как для Уровень журнала установлено состояние Отладка.
Добавление служб предварительных и последующих действий
Элементы PTC.SCA.SCO.PreActionValidator и PTC.SCA.SCO.PostActionHandler не редактируются. Чтобы добавить новые сервисы до или после действия, продублируйте соответствующую вещь, добавьте новые сервисы на дубликат и обновите конфигурацию базы данных для вашей системы, чтобы она ссылалась на дубликат.
Чтобы добавить дополнительне службы предварительных и последующих действий:
1. Для дополнительных сервисов перед действием продублируйте элемент PTC.SCA.SCO.PreActionValidator. Для дополнительных сервисов после действия продублируйте элемент PTC.SCA.SCO.PostActionHandler. Для этой процедуры, эти повторяющиеся вещи будут называться PTC.SCA.SCO.PreActionValidator_Duplicate вещь, и PTC.SCA.SCO.PostActionHandler_Duplicate соответственно.
2. Создайте свои услуги до действия с вещью PTC.SCA.SCO.PreActionValidator_Duplicate. Создайте сервисы после действия для элемента PTC.SCA.SCO.PostActionHandler_Duplicate.
3. При необходимости добавьте новую запись в таблицу конфигурации ActionConfigurationSettings на странице Конфигурация для элемента PTC.SCA.SCO.PreActionValidator_Duplicate или PTC.SCA.SCO.PostActionHandler_Duplicate:
DataShapeName: найдите и выберите наименование профиля данных, для которого применяются службы предварительного и последующего действия.
Действие : введите действие: Create, Update или Delete. Данное значение чувствительно к регистру, оно должно быть записано точно так, как представлено здесь.
ThingName - найдите и выберите наименование вещи, в которой находятся ваши сервисы, такие как PTC.SCA.SCO.PreActionValidator_Duplicat или PTC.SCA.SCO.PostActionHandler_Duplicate.
ServiceName: введите наименование службы, которая должна будет пройти диспетчеризацию CallServices. Если реализация выполняется несколькими службами, укажите первую службу, которая вызывает все остальные. Данное значение чувствительно к регистру, оно должно точно соответствовать наименованию службы.
* 
Если в вашей реализации могут находиться серии служб, то служба, указанная в таблице конфигурации ActionConfigurationSettings и прошедшая диспетчеризацию CallServices, должна содержать входной параметр с названием DataChanges, являющийся таблицей данных профиля данных PTC.SCA.SCO.DataChange.
4. Нажмите Добавить, затем нажмите Сохранить, чтобы сохранить изменения конфигурации.
5. Перейдите к объекту базы данных, настроенному для вашей системы, например PTC.SCA.SCO.PostgresDatabase или PTC.SCA.SCO.MSSQLDatabase.
* 
Вещь базы данных, настроенную для вашей системы, можно найти на странице вещи конфигурации точки запуска Конфигурация (PTC.Factory.C_LaunchPointConfigurationThing_[ReleaseVersion]).
6. На странице Конфигурация в таблице DatabaseValidationConfigurationTable обновите поля PreActionValidator и PostActionHandler для элемента базы данных, чтобы продублировать вещи, созданные на шаге 1.
7. Нажмите Сохранить, чтобы сохранить изменения конфигурации элемента базы данных.