Коллеги, добрый вечер!
Мы реализовали действие в разделе Юр. лиц, которое инициирует загрузку данных из сервиса СПАРК и записывает их в базу с помощью хранимой процедуры. Возникла проблема, связанная с тем, что по загруженным Юр. лицам не запускаются процессы (стартовые события процессов - сигнал добавление/изменение).
Кто-нибудь с таким сталкивался?
Нравится
Небольшое дополнение - в действии используется метод showBodyMask (this.showBodyMask();) для отображения анимации загрузки. Если это важно.
Здравствуйте!
Стартовые сигналы не реагируют на прямые запросы к БД (добавление/изменение/удаление записей).
Сигналы срабатывают если запрос выполняется через EntitySchemaQuery - https://academy.terrasoft.ua/documents/technic-sdk/7-9/rabota-s-dannymi
Вы можете решить вашу задачи с помощью триггеров в БД или создать процесс, который будет периодически запускаться с помощью планировщика и обрабатывать интересующие записи.
Поясните, пожалуйста, ваш ответ. EntitySchemaQuery используется для чтения данных.
У нас также реализована загрузка данных через конфигурационный сервис с помощью механизма - https://academy.terrasoft.ua/documents/technic-sdk/7-9/postroenie-zapro….
При добавлении данных через этот конфигурационный сервис процессы тоже не запускаются.
В конфигурационном сервисе тоже нужна дополнительная логика?
Сергей, здравствуйте!
Классы Insert, Update, Delete не вызывают срабатывания сигналов, поскольку запись не ведется на уровне ESQ.
Таким образом процессы запущены не будут.
Пример работы с ESQ можно найти в схеме ImapClient метод SaveActivityParticipants. При таком создании записей процессы будут запущены.
Коллеги, а триггеры в БД имеется в виду на добавление/изменение?
Если у нас будет обновление поля через ESQ и одновременно будет создан триггер на изменение этого поля в БД, не будет ли двойного срабатывания стартового события одного и того же процесса?
И какая логика должна выполняться после срабатывания триггера в БД?
Сергей, здравствуйте!
"Сергей Фролов КРОК" написал:Коллеги, а триггеры в БД имеется в виду на добавление/изменение?
Если у нас будет обновление поля через ESQ и одновременно будет создан триггер на изменение этого поля в БД, не будет ли двойного срабатывания стартового события одного и того же процесса?
Как было сказано ранее - если операции происходит на уровне сервера БД (процедуры, триггеры, прямые запросы в БД), то процессы срабатывать не будут. По этой причине процесс сработает только по запросу ESQ - триггеры не запустят второй экземпляр процесса.
Спасибо за информацию!
Подскажите, а как должен выглядеть триггер в БД, инициирующий запуск процессов?
"Сергей Фролов КРОК" написал:Подскажите, а как должен выглядеть триггер в БД, инициирующий запуск процессов?
Я надеюсь вопрос не про кварц тригеры? Механизм который позволяет запускать процессы по расписанию.
https://academy.terrasoft.ru/documents/technic-sdk/7-4-0/zapusk-process…
Все же обсуждение выше о том что прямая работа в бд, включая работу по созданию или удалению или модификации сущностей бд, вкючая тригеры бд, никак не могут запускать БП, и нет никакого механизма тригеров бд, которые будут запускать события бп. это может делать только bpmonline, работайте над созданием данных на уровне схем и сущностей, как было указано выше, пример:
var entitySchemaManager = _userConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager;
var activityParticipantSchema = entitySchemaManager.GetInstanceByName("ActivityParticipant");
var activityParticipant = activityParticipantSchema.CreateEntity(_userConnection) as ActivityParticipant;
activityParticipant.SetDefColumnValues();
activityParticipant.ActivityId = _currentEmailActivityId;
activityParticipant.ParticipantId = contactId;
activityParticipant.RoleId = roleId;
activityParticipant.Save();