Вшита ли дата создания в объект?

Например, мы создали какой-то условный объект со свойствами а1, а2, а3, он получил свой идентификатор key0, а можно ли для данного объекта выцепить дату создания? Ведь, например, в журнале изменений дата отображается, может это можно как-то связать?


Ответы (1 шт):

Автор решения: Aliaksei Kirkouski

Каждый объект в 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;
}
→ Ссылка