Динамическое изменение полей
Допустим вам необходимо на форме менять содержимое одного списка, в зависимости от текущего значения второго. Это реализуется с помощью механизма SetValue.
Для этого необходимо сначала в описании формы, обозначить соответствующие поля ключём setvalues="yes":
<metadata name="example.setvalues" type="form"> <form> <field name="selectme"> <select name="selectme" setvalues="yes"/> </field> <field name="autochanged"> <select name="autochanged"/> </field> </form> </metadata>
Теперь в исходном коде, где описывается класс формы, добавим обработку, например так:
class ExampleSetValue : public FormAction { public: ExampleSetValue() : FormAction("example.setvalues", MinLevel(lvAdmin)) {} void SetValues(Session& ses, const string& name, const string& value) const { if (name == "selectme")//Проверяем что сейчас изменилось поле, которое нас интересует. {...}//Здесь реагируем на изменение и меняем значение второго селекта. } }
Таким образом, когда будет выбираться новое значение одного селекта, оно будет передано в качестве параметра value в функцию SetValue вместе с именем, и есть возможность на это отреагировать, динамически изменяя данные формы.