Контейнеры KeyValue
Контейнеры KeyValueContainer и KeyValueCollectionContainer предназначены для работы с сущностями типа KeyValueEntity. Такая сущность может содержать произвольный набор атрибутов, задаваемый во время работы приложения.
KeyValueContainer и KeyValueCollectionContainer могут быть заданы декларативно в XML-дескрипторе экрана элементами keyValueInstance и keyValueCollection.
XML-описание контейнеров KeyValue должно содержать элемент properties, который задает атрибуты KeyValueEntity (то есть ключи и значения). Порядок вложенных элементов property должен соответствовать порядку колонок в результирующем наборе, возвращаемом запросом. Например, в следующем определении атрибут customer получит значение из колонки o.customer, а атрибут sum из колонки sum(o.amount):
<data readOnly="true">
<keyValueCollection id="ordersDc">
<loader id="ordersDl">
<query>
<![CDATA[select o.customer, sum(o.amount) from uiex1_Order o group by o.customer]]>
</query>
</loader>
<properties>
<property name="customer" class="ui.ex1.entity.Customer"/>
<property name="sum" datatype="decimal"/>
</properties>
</keyValueCollection>
</data>
Кроме того, можно настроить контейнеры KeyValue, используя их Java API, который содержит следующие методы:
-
addProperty()- позволяет определить атрибуты сущности (ключи). Данный метод принимает имя атрибута и его тип в виде Datatype или Java-класса. В последнем случае класс должен быть либо сущностью, либо классом, поддерживаемым одним из типов данных (datatypes). Фреймворк использует этот метод при декларативном определении свойств контейнера KeyValue в XML, как описано выше. -
setIdName()опциональный метод, позволяющий назначить один из атрибутов идентификатором сущности. Это означает, что экземплярыKeyValueEntity, содержащиеся в данном контейнере, будут иметь идентификаторы, получаемые из данного атрибута. В противном случае экземплярыKeyValueEntityполучают случайно сгенерированные UUIDs. -
getEntityMetaClass()возвращает динамическую реализацию интерфейса MetaClass, которая представляет текущую схему экземпляровKeyValueEntity, заданную вызовами методаaddProperty().