Допустим вам необходимо на форме менять содержимое одного списка, в зависимости от текущего значения второго. Это реализуется с помощью механизма 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 вместе с именем, и есть возможность на это отреагировать, динамически изменяя данные формы.