29.10.2003, 11:12 | #1 |
Участник
|
Как остановить выполнение InitValue для связанных (innerJoin) таблиц?
Доброго дня!
На форме InventTable (для примера) пять датасорсев, связанных через InnerJoin. Когда создается новая запись, вызывается InitValue поочередно для всех датасорсев. При создании записи пользователь должен сделать некоторые действия (код размещен в InitValue таблицы InventTable). Задача в том, что бы если пользователь сделал что-то не так - не создавать запись (удалить ее из буфера окна). Делаю так: PHP код:
Есть предположение, что должен существовать способ остановить (или отменить) создание новой строки. |
|
29.10.2003, 13:13 | #2 |
Administrator
|
Способ есть - перенесите свой код в метод FormDataSource::create() и не вызывайте super(), если пользователь сделал что-то не так.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
29.10.2003, 13:44 | #3 |
Участник
|
Нельзя. Сначала пользователь выбирает шаблон записи, а уж потом определяется, то он выбрал или нет. Механизм шаблонов записей срабатывает при вызове super() на таблице.
Необходим именно способ отмены создания записей. |
|
29.10.2003, 15:46 | #4 |
Administrator
|
Что ж, придется постараться
Дело в том, что super() для create() как раз все эти initValue() и инициализирует. create() для класса FormDataSource вы переопределить не сможете... Остается менять только create для InventTable_ds. Можете, конечно, изворачиваться и менять JoinSource, но это, ИМХО, лишние проблемы.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
29.10.2003, 15:56 | #5 |
Administrator
|
Что ж, придется постараться
Дело в том, что super() для create() как раз все эти initValue() и инициализирует. create() для класса FormDataSource вы переопределить не сможете... Остается менять только create для InventTable_ds. Можете, конечно, изворачиваться и менять JoinSource, но это, ИМХО, лишние проблемы.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
29.10.2003, 17:41 | #6 |
Участник
|
Re: Как остановить выполнение InitValue для связанных (innerJoin) таблиц?
Цитата:
Изначально опубликовано parovoz
При создании записи пользователь должен сделать некоторые действия (код размещен в InitValue таблицы InventTable). Задача в том, что бы если пользователь сделал что-то не так - не создавать запись (удалить ее из буфера окна). Есть пользователь все равно "должен сделать некоторые действия", то, по-моему, стоит чуть изменить условия задачи. Пусть пользователь явно создает новую запись в ведомом датасорсе (Ctrl+N). Достаточно надо изменить только одно свойство - запретить автосоздание новой записи. Тогда и программировать ничего не надо будет. |
|
29.10.2003, 18:39 | #7 |
Участник
|
Верно. Останется только умело прикрутить к каждой формрмочке механизм шаблонов записей (аксапта 3.0), да и убрать его из штатного места заодно, и всего делов-то!
Очень хочется найти красивое решение :о) Расскажу подробней задачу. Пользователи при виде количества полей и галочек на формах, которые им предстоит заполнять, стали понимать для чего им надо было хорошо в школе учиться. Для облегчения их работы по некоторым справочникам были созданы шаблоны записей. По справочнику номенклатуры был сделан мастер, помогающий пользователям вводить только правильную кодировку, а так же выбирающий нужный шаблон для каждого типа кодировки. Кривизна такого подхода только в том, что непонятно что делать если пользователь ввел кодировку неверно и пытается закрыть окно cancel'ом. На первое время поле ItemID сделал недоступным для ввода, (ввести можно только мастером) и оставил его обязательным для ввода. В окне остается пустая строка, и пользователь ее в базу положить не может. Убого. Но пока работает. зы. А по хорошему, запись из буфера окна мне надо удалять в конце SysRecordTemplate.CreateRecord() |
|
29.10.2003, 18:49 | #8 |
Участник
|
Есть кнопка Ctrl+Q. Она закрывает окно без проверки и без записи.
А как это неверно, если мастером? Вы имеете в виду мастер похожий на мастера ввода нового счета в плане счетов? Насчет полей... Каждый пользователь должен вводить только то что знает. Не больше. НО и не меньше Кстати, у номенклатуры вроде уже есть мастер. Вы его просто расширили? Или полностью подменили? |
|
29.10.2003, 19:10 | #9 |
Участник
|
Цитата:
Кстати, у номенклатуры вроде уже есть мастер. Вы его просто расширили? Или полностью подменили?
Цитата:
А Вы имеете в виду мастер похожий на мастера ввода нового счета в плане счетов?
Цитата:
А как это неверно, если мастером?
Код состоит из элементиков. Каждый из них осмыслен, а список доступных значений или допустимых символов текущего элемента определяют предыдущие элементы. Типа дерева, грубо говоря классификатор. Так вот, если ользователь начинает вводить какую-нить фигню, то это неправильно. Пользователи разные бывают. Цитата:
Насчет полей... Каждый пользователь должен вводить только то что знает. Не больше. НО и не меньше
|
|