Можно ли добавить опцию существующему свойству формы?
При добавлении свойств в структуру формы существует возможность добавления опций свойствам формы. Например так:
MODULE Main;
CLASS LockedField;
text = DATA STRING[10] (LockedField);
isLock = DATA BOOLEAN (LockedField);
// здесь я добавляю свойство 'text' сразу с
// опцией 'READONLYIF'
FORM lockedField
OBJECTS lf = LockedField
PROPERTIES (lf) text READONLYIF isLock(lf), isLock, NEW, DELETE
;
NAVIGATOR {
NEW lockedField FIRST;
}
Можно ли подобным образом добавить опцию уже добавленному свойству? Например:
MODULE Main;
CLASS LockedField;
text = DATA STRING[10] (LockedField);
// Здесь в структуру формы я добавляю свойство
// 'text' без опций
FORM lockedField
OBJECTS lf = LockedField
PROPERTIES (lf) text, NEW, DELETE
;
isLock = DATA BOOLEAN (LockedField);
// а здесь свойству 'text' нужно добавить
// опцию 'READONLYIF'
EXTEND FORM lockedField
PROPERTIES (lf) isLock
;
NAVIGATOR {
NEW lockedField FIRST;
}
Ответы (1 шт):
Автор решения: Aliaksandr Kirkouski
→ Ссылка
В 3-й версии такой возможности пока нет. Но такая возможность скорее всего будет добавлена в следующей 4-й версии. Соответственно выглядеть будет как и остальные EXTEND (то есть просто добавлением впереди EXTEND):
EXTEND FORM lockedField
EXTEND PROPERTIES (lf) text READONLYIF isLock(lf);
;
Пока в качестве workaround (правда неполного) можно использовать ABSTRACT:
// объявляем свойство, которое по умолчанию NULL, то есть text всегда будет доступен для записи
isLock = ABSTRACT BOOLEAN (LockedField);
FORM lockedField
OBJECTS lf = LockedField
PROPERTIES (lf) text READONLYIF isLock(lf)
;
// добавляем реализацию, которая будет ограничивать запись
shouldBeLocked = DATA BOOLEAN (LockedField);
isLock(LockedField lf) += shouldBeLocked(lf);