Для просмотра журнала изменений некоторого экземпляра сущности достаточно обычным способом загрузить в источники данных экрана
коллекцию экземпляров EntityLogItem
и ассоциированных с ними EntityLogAttr
, и создать визуальные компоненты, связанные с этими источниками. Например:
<dsContext> <datasource id="customerDs" class="com.sample.sales.entity.Customer" view="customerEdit"/> <collectionDatasource id="logDs" class="com.haulmont.cuba.security.entity.EntityLogItem" view="logView"> <query> select i from sec$EntityLog i where i.entityId = :ds$customerDs order by i.eventTs </query> <collectionDatasource id="logAttrDs" property="attributes"/> </collectionDatasource> </dsContext> <layout> ... <split orientation="vertical" width="100%" height="100%"> <table id="logTable" width="100%" height="100%"> <columns> <column id="eventTs"/> <column id="user.login"/> <column id="type"/> </columns> <rows datasource="logDs"/> </table> <table id="logAttrTable" width="100%" height="100%"> <columns> <column id="name"/> <column id="value"/> </columns> <rows datasource="logAttrDs"/> </table> </split> ... </layout>
Для отображения локализованных значений журналируемых атрибутов эти атрибуты должны содержать аннотацию
@LocalizedValue
. При ее наличии механизм журналирования заполняет поле EntityLogAttr.messagesPack
, и таблица, отображающая значения атрибутов из примера выше может использовать колонку locValue
вместо value
:
<table id="logAttrTable" width="100%" height="100%"> <columns> <column id="name"/> <column id="locValue"/> </columns> <rows datasource="logAttrDs"/> </table>