Вшита ли дата создания в объект?
Например, мы создали какой-то условный объект со свойствами а1, а2, а3, он получил свой идентификатор key0, а можно ли для данного объекта выцепить дату создания? Ведь, например, в журнале изменений дата отображается, может это можно как-то связать?
Ответы (1 шт):
Каждый объект в lsFusion имеет уникальный внутренний код среди всех объектов в системе (не только своего класса), который хранится в поле key0. Он представляет собой число типа long, и формируется инкрементно в момент создания объекта. Если при этом объект не сохранился в базу данных, то внутренний код "исчезает" и больше никогда использоваться не будет. Таким образом, непосредственно в код не зашита дата создания объекта.
Однако, при каждом сохранении транзакции в базу данных создается объект класса Session (сессия изменений), в котором есть дата/время создания, и у которого есть также key0. То есть можно приблизительно найти дату/время создания любого объекта, находя ближайший по key0 объект класса Session.
Например, для тестового класса Row, используя оператор GROUP, можно построить следующее свойство, которое будет возвращать приблизительную дату создания :
dateTimeCreated (Row r) = GROUP MIN dateTime(SystemEvents.Session st) IF LONG(st) > LONG(r AS Row);
А вот общий скрипт для интерпретатора, который позволяет проверить правильность работы свойства :
dateTimeCreated (Row r) = GROUP MIN dateTime(SystemEvents.Session st) IF LONG(st) > LONG(r AS Row);
FORM test
OBJECTS r = Row
PROPERTIES(r) VALUE, dateTimeCreated
OBJECTS s = SystemEvents.Session
PROPERTIES(s) VALUE, dateTime
;
run() {
NEWSESSION { NEW r = Row; APPLY; }
SHOW test DOCKED;
}