Контейнеры KeyValue
Контейнеры KeyValueContainer
и KeyValueCollectionContainer
предназначены для работы с сущностями типа KeyValueEntity. Такая сущность может содержать произвольный набор атрибутов, задаваемый во время работы приложения.
KeyValueContainer
и KeyValueCollectionContainer
могут быть заданы декларативно в XML-дескрипторе экрана элементами keyValueInstance
и keyValueCollection
.
XML-описание контейнеров KeyValue должно содержать элемент properties
, который задает атрибуты KeyValueEntity
(то есть ключи и значения). Порядок вложенных элементов property
должен соответствовать порядку колонок в результирующем наборе, возвращаемом запросом. Например, в следующем определении атрибут username
получит значение из колонки us.user.username
, а атрибут stepsCount
из колонки count(us)
:
<keyValueCollection id="summaryDc">
<loader id="summaryDl">
<query>
<![CDATA[select us.user.username, count(us) from UserStep us
where us.dueDate < current_date and us.completedDate is null
group by us.user.username]]>
</query>
</loader>
<properties>
<property name="username" datatype="string"/>
<property name="stepsCount" datatype="int"/>
</properties>
</keyValueCollection>
Кроме того, можно настроить контейнеры KeyValue, используя их Java API, который содержит следующие методы:
-
addProperty()
- позволяет определить атрибуты сущности (ключи пар ключ-значение). Данный метод принимает имя атрибута и его тип в виде Datatype или Java-класса. В последнем случае класс должен быть либо сущностью, либо классом, поддерживаемым одним из типов данных (datatypes). Фреймворк использует этот метод при декларативном определении свойств контейнера KeyValue в XML, как описано выше. -
setIdName()
опциональный метод, позволяющий назначить один из атрибутов идентификатором сущности. Это означает, что экземплярыKeyValueEntity
, содержащиеся в данном контейнере, будут иметь идентификаторы, получаемые из данного атрибута. В противном случае экземплярыKeyValueEntity
получают случайно сгенерированные UUIDs. -
getEntityMetaClass()
возвращает динамическую реализацию интерфейса MetaClass, которая представляет текущую схему экземпляровKeyValueEntity
, заданную вызовами методаaddProperty()
.