Опции свойства
При объявлении свойства в инструкции = в конце объявления может указываться некоторый набор опций свойства.
Синтаксис
Опции перечесляются друг за другом в произвольном порядке через пробел или переводы строк:
propertyOption1 ... propertyOptionN
Поддерживается следующий набор опций (синтаксис каждой опции указывается в отдельной строке):
IN groupName
viewType
customView
ON eventType { actionOperator }
CHANGEKEY key [SHOW | HIDE]
CHANGEMOUSE key [SHOW | HIDE]
STICKY | NOSTICKY
syncType
MATERIALIZED [dbName]
TABLE tableName
INDEXED [dbName] [indexType]
COMPLEX | NOCOMPLEX
PREREAD
HINT | NOHINT
NONULL [DELETE] eventClause
AGGR
AUTOSET
CHARWIDTH width [FLEX | NOFLEX]
PATTERN patternStr
REGEXP rexpr [message]
ECHO
DEFAULTCOMPARE compare
EVENTID eventId
LAZY [WEAK | STRONG] [WAIT | NOWAIT]
EXTID extId
imageSetting
annotationSetting
Описание и параметры
-
IN groupNameУказание группы свойств и действий, которой принадлежит свойство. Если опция не указывается, то свойство по умолчанию будет принадлежать группе
System.private.-
groupNameИмя группы. Составной идентификатор.
-
-
MATERIALIZED [dbName]Ключевое слово, помечающее свойство как материализованное. Такие свойства будут храниться в полях таблицы базы данных.
-
dbNameСтроковый литерал, задающий физическое имя поля (колонки) в базе данных. Если не указан, имя генерируется автоматически.
-
-
TABLE tableNameУказание таблицы, в которой будет храниться свойство. Количество ключей таблицы должно совпадать с количеством аргументов свойства, и классы аргументов должны подходить к классам ключей таблицы. Если таблица не задана, свойство автоматически будет помещено в "ближайшую" существующую в системе таблицу.
-
tableNameИмя таблицы. Составной идентификатор.
-
-
INDEXEDКлючевое слово, указание которого создает индекс по этому свойству. Может использоваться только для материализованного свойства. Аналогично использованию инструкции
INDEX.-
dbNameСтроковый литерал, задающий физическое имя индекса в базе данных. Если не указан, имя генерируется автоматически.
-
indexTypeНеобязательный выбор специального типа индекса. Если не указан, создается обычный индекс.
-
LIKEКлючевое слово, указание которого для строковых свойств сохраняет обычный индекс и дополнительно пытается создать специализированный GIN индекс для операций
LIKE. -
MATCHКлючевое слово, указание которого создает индекс для операций
MATCH.- для одного поля типа
TSVECTORсоздается только специализированный GIN индекс по самому полю - для строковых свойств сохраняется обычный индекс и дополнительно пытаются создаваться специализированные индексы для
MATCHиLIKE - строковый
MATCHиндекс строится поto_tsvectorс текущим языком полнотекстового поиска
Специализированные
LIKE/MATCHиндексы создаются только если для текущего адаптера БД доступна соответствующая trigram/full-text поддержка. Обычный индекс при этом создается независимо от нее. - для одного поля типа
-
-
-
COMPLEX | NOCOMPLEXКлючевые слова, помечающие вычисление свойства как сложное (
COMPLEX) или явно несложное (NOCOMPLEX). Сложное свойство всегда вычитывается заранее. Если ничего не указано, свойство считается сложным только если прямо или транзитивно зависит от сложного свойства. -
PREREADКлючевое слово, при котором значение свойства вычитывается заранее при обработке изменений, а не вычисляется на месте.
-
HINT | NOHINTКлючевые слова, управляющие автоматическим инкрементальным кэшированием изменений свойства.
HINTпринудительно включает такое кэширование для свойства, когда оно применимо;NOHINTотключает его для свойства и зависящих от него свойств. Без указания платформа решает автоматически (эвристически). -
NONULL [DELETE] eventClauseДобавление ограничения определенности. Если это ограничение в результате каких-то изменений для некоторых объектов нарушается, то будет либо показано соответствующее сообщение, либо при указании
DELETEтакие объекты будут удалены.-
DELETEКлючевое слово, при указании которого в случае, если свойство становится равным
NULL, будут удалены объекты, которые являются в данном случае аргументами свойства. -
eventClauseБлок описания типа события. Описывает событие по которому будет выполняться проверка свойства на
NULL.
-
-
AGGRКлючевое слово, помечающее свойство как агрегирующее. Предназначено для свойства, которое принимает один параметр пользовательского класса и возвращает объект, в который этот параметр агрегируется; только такое свойство регистрируется как агрегирующее свойство этого класса. Платформа обращается с ним так же, как со свойством, которое оператор
AGGRсоздает автоматически для поиска агрегируемого объекта по его параметрам: для заданного объекта-параметра оно находит существующий агрегируемый объект, что позволяет платформе проверять целостность агрегации и повторно использовать этот объект вместо создания дубликата. Это опция свойства, и её не следует путать с операторомAGGR, который является определением свойства. -
AUTOSETКлючевое слово, помечающее первичное свойство с объектным параметром и объектным значением для автоматической установки при создании объекта. Если объект создается с опцией
AUTOSET(например,NEW ... AUTOSET) и его класс совпадает с классом параметра свойства или является его наследником, платформа устанавливает для него это свойство в текущий объект класса значения, если он доступен.
Блок интерактивного представления
-
viewTypeУказание типа представления свойства при добавлении на форму.
GRID- колонка таблицыTOOLBAR- тулбарPANEL- панель
По действию аналогично указанию опции
viewTypeв блоке свойств инструкцииFORM. Соответственно если эта опция не указана ни в опциях свойств, ни в блоке свойств непосредственно на форме, используется тип представления по умолчанию для группы отображения, добавляемого на форму свойства. -
customViewУказание пользовательского представления значения свойства при добавлении на форму. По действию аналогично указанию опции
customViewв блоке свойств инструкцииFORM, которая может его переопределить. -
ON eventType { actionOperator }Указание действия, которое будет обработкой по умолчанию некоторого события формы всех интерактивных представлений этого свойства. Могут быть переопределены в блоке свойств инструкции
FORM.-
eventTypeТип события формы. Задается одним из следующих вариантов:
CHANGE- происходит при попытке изменения значения свойства.CHANGEWYS- происходит при попытке изменении значения свойства с помощью специального механизма ввода.GROUPCHANGE- происходит при попытке изменения значения свойства для всех объектов в таблице (групповое редактирование).EDIT- происходит при попытке редактировать объект, который является значением этого свойства.CONTEXTMENU [caption]- пользователь выбрал в контекстном меню свойства на форме заданный пункт. Также при необходимости можно задать заголовокcaptionэтого пункта меню (строковый литерал). Если этого не сделать, то, по умолчанию, он будет равен заголовку действия.
-
actionOperatorКонтекстно-зависимый оператор-действие. Оператор, описывающий выполняемое по событию действие. В качестве параметров оператора можно использовать параметры самого свойства.
-
-
imageSettingНастройка иконки, которая будет отображаться для свойства. Эта опция позволяет настроить отображение иконки вручную. Может иметь один из двух видов:
-
IMAGE [imageLiteral]Указание иконки, которая будет отображаться в качестве иконки свойства. Если
imageLiteralне указывается, то происходит переключение в режим автоматической установки иконки.-
imageLiteralСтроковый литерал, значение которого определяет иконку.
-
-
NOIMAGEКлючевое слово, указывающее на то, что иконка свойства должна отсутствовать.
-
-
annotationSettingАннотация свойства. Начинается с @@. Поддерживаются следующие аннотации:
-
@@deprecated -
@@deprecated(since) -
@@deprecated(since,message)Пометка свойства как устаревшего и не рекомендованного для использования. Плагин показывает использование таких свойств перечёркнутым.
-
sinceСтроковый литерал, версия платформы, начиная с которой свойство считается устаревшим.
-
messageСтроковый литерал, сообщение, поясняющее, почему свойство помечено устаревшим.
-
-
Блок значений по умолчанию инструкции DESIGN
-
CHARWIDTH width [FLEX | NOFLEX]Указание количества символов значения свойства, которые должны быть видны пользователю. Устанавливает значение для дизайна по умолчанию, может быть переопределено в инструкции
DESIGN.-
widthКоличество символов. Целочисленный литерал.
-
FLEXКлючевое слово. Если указано, коэффициент расширения значения свойства автоматически устанавливается равным его базовому размеру.
-
NOFLEXКлючевое слово. Если указано, коэффициент расширения значения свойства автоматически устанавливается равным нулю.
-
-
PATTERN patternStrУказание шаблона форматирования значения свойства. Синтаксис задания шаблона аналогичен синтаксису DecimalFormat либо SimpleDateFormat в зависимости от типа значения.
-
patternStrСтроковый литерал, задающий шаблон форматирования. Может быть локализуемым.
-
-
REGEXP rexpr [message]Указание регулярного выражения, которому должно соответствовать значение свойства после редактирования. Устанавливает значение для дизайна по умолчанию, может быть переопределено в инструкции
DESIGN.-
rexprСтроковый литерал, описывающий регулярное выражение. Правила задания аналогичны принятым в языке Java. Может быть локализуемым.
-
messageСтроковый литерал, описывающий сообщение, которое будет показано пользователю в случае, если он введет значение, не соответствующее регулярному выражению. Может быть локализуемым. Если не указывается, то будет показано сообщение по умолчанию.
-
-
ECHOКлючевое слово, указание которого приведет к отображению символов звездочки
*вместо значения свойства. Используется, например, для паролей. Может быть переопределено в инструкцииDESIGN. -
CHANGEKEY key [SHOW | HIDE]Указание комбинации клавиш, при нажатии которой будет начато редактирование свойства. Устанавливает значение для дизайна по умолчанию, может быть переопределено в инструкции
DESIGN.key
Строковый литерал, описывающий комбинацию клавиш. Синтаксис:
keyStroke [;(modeKey=modeValue;)*]-
keyStrokeСтроковое представление комбинации клавиш. Принцип задания аналогичен способу задания параметра в методе Java-класса Keystroke.getKeystroke(String). -
(modeKey=modeValue;)*Опции, задающие условия выполнения дляkeyStroke. Поддерживаются следующие опции:-
priority = priorityValueПриоритет, целочисленное значение. Если несколько свойств имеют подходящий под условияCHANGEKEY, выполнится тот, у которого приоритет будет выше. Если приоритет не задан, он равняется порядковому номеру свойства на форме. Кроме того, в любом случае к значению приоритета добавляется 1000, если совпадает группа объектов. -
preview = previewValueВсе события проверяются на выполнение дважды: сначала с isPreview=true, потом - с isPreview=false. Поддерживаемые значенияpreviewValue:auto,only-> isPreviewno-> !isPreviewall-> true
-
dialog = dialogValueПроверка, выполнять лиCHANGEKEYв диалоговом окне. Поддерживаемые значенияdialogValue:auto,all-> trueonly-> isDialogno-> !isDialog
-
window = windowValueПроверка, выполнять лиCHANGEKEYв модальном окне. Поддерживаемые значенияwindowValue:auto,all-> trueonly-> isWindowno-> !isWindow
-
group = groupValueПроверка, совпадает ли группа объектов. Поддерживаемые значенияgroupValue:auto,all-> trueonly-> equalGroupno-> !equalGroup
-
editing = editingValueПроверка, выполнять лиCHANGEKEYв режиме редактирования свойства. Поддерживаемые значенияeditingValue:auto-> !(isEditing() && getEditElement().isOrHasChild(Element.as(event.getEventTarget())))all-> trueonly-> isEditingno-> !isEditing
-
showing = showingValueПроверка, показывается ли в данный момент свойство на форме (для свойств, скрытых черезhideв дизайне). Поддерживаемые значенияshowingValue:auto,only-> isShowingall-> trueno-> !isShowing
-
panel = panelValueПроверка, находится ли свойство в панели. Поддерживаемые значенияpanelValue:auto-> !isMouse || !isPanelall-> trueonly-> isPanelno-> !isPanel
-
cell = cellValueПроверка, находится ли свойство в таблице. Поддерживаемые значенияcellValue:auto-> !isMouse || isCellall-> trueonly-> isCellno-> !isCell
Для всех опций кроме
priorityзначением по умолчанию являетсяauto. -
-
SHOWКлючевое слово, при указании которого комбинация клавиш будет отображаться в заголовке свойства. Используется по умолчанию.
-
HIDEКлючевое слово, при указании которого комбинация клавиш не будет отображаться в заголовке свойства.
-
CHANGEMOUSE key [SHOW | HIDE]Указание комбинации клавиш мыши, при нажатии которых будет начато редактирование свойства. Устанавливает значение для дизайна по умолчанию, может быть переопределено в инструкции
DESIGN.key
Строковый литерал, описывающий комбинацию клавиш. Синтаксис:
keyStroke [;(modeKey=modeValue;)*]-
keyStrokeСтроковое представление комбинации клавиш мыши. В данный момент единственное поддерживаемое значение -DBLCLK- двойной клик. -
(modeKey=modeValue;)*Синтаксис полностью совпадает сCHANGEKEY. -
SHOWКлючевое слово, при указании которого комбинация клавиш мыши будет отображаться в заголовке свойства. Используется по умолчанию.
-
HIDEКлючевое слово, при указании которого комбинация клавиш мыши не будет отображаться в заголовке свойства.
-
STICKY|NOSTICKYКлючевые слова.
STICKYуказывает на то, что свойство в таблице будет прикреплено слева и при скроллинге вправо будет оставаться видимым.NOSTICKYснимает это закрепление. По умолчаниюSTICKYилиNOSTICKYвычисляется эвристически. -
syncTypeОпределяет, включены ли для свойства асинхронные действия:
WAIT- асинхронные действия выключены.NOWAIT- асинхронные действия включены.
Если опция не указана, действия выполняются синхронно.
-
DEFAULTCOMPARE compareУказание для свойства типа фильтра по умолчанию.
-
compareТип фильтра по умолчанию. Строковый литерал. Может принимать следующие значения:
=,>,<,>=,<=,!=,=*(содержит),=@(нечёткий поиск). По умолчанию принимает значение=для всех типов данных кроме строковых регистронезависимых, для которых принимает значение=@или=*(а при включенной настройкеSystem.defaultCompareForStringContains- кроме всех строковых, независимо от регистронезависимости). Выбор значения=@или=*зависит от настройкиSystem.defaultCompareSearchInsteadOfContains(true -=@, false -=*, по умолчанию true). Может быть переопределено в инструкцииDESIGN.
-
-
EVENTID eventIdУказание для свойства специального режима обработки ввода.
-
eventIdСтроковый литерал. На данный момент поддерживается только значение
SCANNER. Включает специальный режим обработки нажатий клавиш для выявления ввода GS (group separator).
-
-
LAZY [WEAK | STRONG] [WAIT | NOWAIT]Указание для свойства уровня кэширования (значение свойства кэшируется на сервере приложений, если чтение идет для всех фиксированных параметров).
WEAKиSTRONGопределяют, что очищается из кэша при изменении свойства.WEAKозначает, что при любом изменении, от которого зависит свойство, очищаются все его закэшированные значения.STRONGозначает, что кэш будет очищаться не целиком при любом изменении свойства, а будет создаваться событие и будут очищаться конкретные значения. Требует, чтобы множество измененных значений было перечислимым. По умолчаниюWEAK.WAITиNOWAITопределяют, когда происходит инвалидация кэша. ПриWAITинвалидация синхронна с применением изменения: после применения изменения ни одно чтение не вернет из кэша предыдущее значение. Используйте для свойств, на основе значений которых логика принимает решения (например, проверка существования объекта по уникальному значению). ПриNOWAITинвалидация отложена и выполняется периодически (период задается настройкойflushAsyncValuesCaches, по умолчанию 1 секунда), поэтому короткое время после изменения чтения могут возвращать предыдущее значение. Используйте там, где такое кратковременное устаревание безвредно. По умолчаниюNOWAIT. ДляSTRONGинвалидация всегда синхронна, поэтомуNOWAITс ним указать нельзя. -
EXTID extIdУказание имени, которое будет использоваться для экспорта / импорта свойства при добавлении на форму. По действию аналогично указанию опции
EXTIDв блоке свойств инструкцииFORM, которая может его переопределить.-
extIdСтроковый литерал.
-
Примеры
// cвойство задано контекстно-независимым оператором-свойством DATA
cost 'Стоимость' (i) = DATA NUMERIC[12,3] (Item);
// cвойство задано выражением
weightedSum 'Взвешенная сумма' (a, b) = 2*a + 3*b;
// заголовком этого свойства будет 'diff', а параметрами - (a, b)
diff = a - b;
// свойство задано оператором DATA с указанием дополнительных опций свойства
teamName 'Название команды' = DATA BPSTRING[30](Team) IN baseGroup TABLE team;