Документация COREmanager

Динамическое изменение полей

 

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