Разница во времени в Активностях

Скажите, почему в полях CreatedOn и ModifiedOn записей таблицы Activity есть разница во времени при создании новой записи без модификации? Неужели после Insert происходит Update ModifiedOn и зачем это сделано? BPM 78
См. рисунок.

Нравится

7 комментариев

Посмотрел профайлером - и правда через некоторый интервал после insert самой активности и связанных событий (права, например) выполняется запрос

exec sp_executesql N'
UPDATE [dbo].[Activity]
SET
	[ModifiedOn] = @P2
WHERE
	[Id] = @P1',N'@P1 uniqueidentifier,@P2 datetime2(7)',@P1='22500B7C-DD4D-449A-AD6D-48EBE7A18B02',@P2='2016-08-19 07:38:11.5640924'

Откуда он инициируется не знаю :)

Если не секрет, какую цель преследуете, просто интерес + понять намного глубже события "под капотом"? Вроде мелочь это, но странная соглашусь.

А вот откуда вызов идет
Объект ActivityParticipant (пакет Base), его процесс.
Там есть обработка события ActivityParticipantInserting. Вызывается элемент скрипт с оригинальным названием ScriptTask1.
В его коде находим:

Update update = new Update(UserConnection, "Activity")
	.Set("ModifiedOn", Column.Parameter(DateTime.UtcNow))
	.Where("Id").IsEqual(Column.Parameter(Entity.GetTypedColumnValue<Guid>("ActivityId"))) as Update;
update.Execute();

А зачем оно - типа при добавлении участника в задачу, мы должны отработать это как изменение самой задачи, что по сути правильно :cool:

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

А можно сделать, чтобы при Insert записи Активности этой модификации не было бы?
А уже при повторном добавлении участника - было бы?

"Alex GF" написал:Как можно выяснить откуда и зачем он инициируется? Чтобы если что убрать его.

Ну вот я и написал) можно сделать замещение объекта и там попробовать эти обработчики поправить...
только имхо на быстродействие это повлияет примерно как протирание пыли с монитора) хотя конечно если у вас Активности создаются скажем тысячами одновременно, может и заметна будет разница

"Alex GF" написал:А можно сделать, чтобы при Insert записи Активности этой модификации не было бы?

Видимо можно, только овчинка не стоит выделки...
В 3х просто отключали события, а здесь надо как то подумать чтобы это событие не отрабатывало, например - переписать заполнение участников в sql запрос (а не через объект) и вызывать его по факту создания задачи, при этом обращение к объекту ActivityParticipant не будет и соответственно его события задействованы не будут. Копать процесс на объекте Activity (событие типа Inserted)

"Александр Кудряшов" написал:

А вот откуда вызов идет

Объект ActivityParticipant (пакет Base), его процесс.

Там есть обработка события ActivityParticipantInserting. Вызывается элемент скрипт с оригинальным названием ScriptTask1.

В его коде находим:


Александр, пока осваиваю БПМ, подскажите как правильно сделать:
Хочу с помощью замещающего объекта убрать из обработки события ActivityParticipantInserting Update поля ModifiedOn:
Создал замещающий объект ActivityParticipant (пакет Custom).
Как теперь в нем убрать Update ModifiedOn?

Я так понимаю назначить обработчик на событие Inserting в новом объекте (событие перед добавлением), далее в процессе после стартового сообщения поставить элемент скрипт с новым содержимым и далее элемент завершения процесса. Примерно так
ps - в оригинале завершения нет, можно значит и без него.
pps - не забудьте дать уникальные имена всем новым элементам на схеме процесса (включая "стрелочку"), чтобы ни в коем случае они не пересеклись с существующими в родителе, в 7.6 это приводило к обрушению при компиляции

ppps - еще тонкость есть, сейчас опишу
Чтобы отключить выполнение родительского кода, после реализации своего обработчика добавьте такой код, например в еще одном элементе сценария

if (ActivatedEventElements.Contains("ActivityParticipantInserting")) {
ActivatedEventElements.Remove("ActivityParticipantInserting");
}
return true;

Это отключит родительский обработчик

Показать все комментарии