Question:
When adding properties to the form structure, it is possible to add options to the form properties. For example like this:
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;
}
Is it possible to add an option to an already added property in a similar way? For instance:
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;
}
Answer:
In the 3rd version, this feature is not yet available. But this feature will most likely be added in the next 4th version. Accordingly, it will look like the rest of EXTEND (that is, just adding EXTEND in front):
EXTEND FORM lockedField
EXTEND PROPERTIES (lf) text READONLYIF isLock(lf);
;
For now, you can use ABSTRACT as a workaround (though incomplete):
// объявляем свойство, которое по умолчанию 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);