Оригинал на GitHub
Вопрос
Есть поле, в котором я выбираю значения через Селект-дерево. Как сделать, чтобы после выбора в другой таблице создались новые строки, записав эти выбранные значения каждое в новую строку?
Ответ
Поле с типом Селект-дерево или Селект с включенным параметром Множественное хранит список (list).
Сначала надо определить, какие элементы выбраны в результате изменения поля. Это можно сделать по разности листов, функцией listMinus
.
Чтобы определить что:
Добавлено — надо из текущего листа значений поля вычесть предыдущий
Удалено — надо из предыдущего листа значений поля вычесть текущий
На основе этих данных, добавить или удалить строки из нужной таблицы:
В коде-действия поля с Селект-дерево или Селект с триггерами на добавление, изменение и удаление:
a1=: insertList(table: 'some_table'; field: 'some_field' = $listAdd; log: true)
listAdd: listMinus(list: $#nfv; list: $#onfv)
a2=: deleteList(table: 'some_table'; where: 'some_field' = $listDel; log: true)
listDel: listMinus(list: $#onfv; list: $#nfv)