AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.10.2003, 11:12   #1  
parovoz is offline
parovoz
Участник
 
18 / 12 (1) ++
Регистрация: 28.08.2003
? Как остановить выполнение InitValue для связанных (innerJoin) таблиц?
Доброго дня!
На форме InventTable (для примера) пять датасорсев, связанных через InnerJoin. Когда создается новая запись, вызывается InitValue поочередно для всех датасорсев.
При создании записи пользователь должен сделать некоторые действия (код размещен в InitValue таблицы InventTable). Задача в том, что бы если пользователь сделал что-то не так - не создавать запись (удалить ее из буфера окна). Делаю так:

PHP код:
if (this.isFormDataSource())
{
    
_FormDataSource this.dataSource();
    
_FormDataSource.cacheRemoveRecord(this)

Строка успешно исчезает из окна, но затем проходит InitValue всех оставшихся датасорсев, причем со значениями следующей (не пустой и с нужными данными) строки.

Есть предположение, что должен существовать способ остановить (или отменить) создание новой строки.
Старый 29.10.2003, 13:13   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Способ есть - перенесите свой код в метод 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  
parovoz is offline
parovoz
Участник
 
18 / 12 (1) ++
Регистрация: 28.08.2003
Нельзя. Сначала пользователь выбирает шаблон записи, а уж потом определяется, то он выбрал или нет. Механизм шаблонов записей срабатывает при вызове super() на таблице.
Необходим именно способ отмены создания записей.
Старый 29.10.2003, 15:46   #4  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Что ж, придется постараться

Дело в том, что 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  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Что ж, придется постараться

Дело в том, что 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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Как остановить выполнение InitValue для связанных (innerJoin) таблиц?
Цитата:
Изначально опубликовано parovoz
При создании записи пользователь должен сделать некоторые действия (код размещен в InitValue таблицы InventTable). Задача в том, что бы если пользователь сделал что-то не так - не создавать запись (удалить ее из буфера окна).
Можно я снова побрюзжу?

Есть пользователь все равно "должен сделать некоторые действия", то, по-моему, стоит чуть изменить условия задачи. Пусть пользователь явно создает новую запись в ведомом датасорсе (Ctrl+N). Достаточно надо изменить только одно свойство - запретить автосоздание новой записи.
Тогда и программировать ничего не надо будет.
Старый 29.10.2003, 18:39   #7  
parovoz is offline
parovoz
Участник
 
18 / 12 (1) ++
Регистрация: 28.08.2003
Верно. Останется только умело прикрутить к каждой формрмочке механизм шаблонов записей (аксапта 3.0), да и убрать его из штатного места заодно, и всего делов-то!

Очень хочется найти красивое решение :о)

Расскажу подробней задачу. Пользователи при виде количества полей и галочек на формах, которые им предстоит заполнять, стали понимать для чего им надо было хорошо в школе учиться. Для облегчения их работы по некоторым справочникам были созданы шаблоны записей.
По справочнику номенклатуры был сделан мастер, помогающий пользователям вводить только правильную кодировку, а так же выбирающий нужный шаблон для каждого типа кодировки. Кривизна такого подхода только в том, что непонятно что делать если пользователь ввел кодировку неверно и пытается закрыть окно cancel'ом.

На первое время поле ItemID сделал недоступным для ввода, (ввести можно только мастером) и оставил его обязательным для ввода. В окне остается пустая строка, и пользователь ее в базу положить не может. Убого. Но пока работает.

зы. А по хорошему, запись из буфера окна мне надо удалять в конце SysRecordTemplate.CreateRecord()
Старый 29.10.2003, 18:49   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Есть кнопка Ctrl+Q. Она закрывает окно без проверки и без записи.

А как это неверно, если мастером? Вы имеете в виду мастер похожий на мастера ввода нового счета в плане счетов?

Насчет полей... Каждый пользователь должен вводить только то что знает. Не больше. НО и не меньше

Кстати, у номенклатуры вроде уже есть мастер. Вы его просто расширили? Или полностью подменили?
Старый 29.10.2003, 19:10   #9  
parovoz is offline
parovoz
Участник
 
18 / 12 (1) ++
Регистрация: 28.08.2003
Цитата:
Кстати, у номенклатуры вроде уже есть мастер. Вы его просто расширили? Или полностью подменили?
Подменил полностью, так как штатного на видел. Подскажите, где его посмотреть.

Цитата:
А Вы имеете в виду мастер похожий на мастера ввода нового счета в плане счетов?
Такого мастера тоже не нашел. Уже себя как то глуповато начинаю чувствовать.

Цитата:
А как это неверно, если мастером?
В двух словах так:
Код состоит из элементиков. Каждый из них осмыслен, а список доступных значений или допустимых символов текущего элемента определяют предыдущие элементы. Типа дерева, грубо говоря классификатор.
Так вот, если ользователь начинает вводить какую-нить фигню, то это неправильно. Пользователи разные бывают.

Цитата:
Насчет полей... Каждый пользователь должен вводить только то что знает. Не больше. НО и не меньше
Это сказка какая-то, когда пользователю говорят что он ДОЛЖЕН вводить, и он тих-мирно идет этим заниматься. А насчет "знает", они же профессионалы - они знают, что им за дело куда это все вбивать. Может есть эффективные способы воспитания?
Теги
шаблон

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Начальный импорт таблиц, связанных по RecId Рустем Гизатуллин DAX: Администрирование 3 02.12.2008 13:39
Блокировка таблиц пр InnerJoin Logger DAX: Программирование 5 26.11.2007 18:21
Данные в Grid из таблиц, связанных по Outer Join cherv DAX: Программирование 2 17.02.2007 01:36
Импорт связанных таблиц LGray DAX: Администрирование 0 19.04.2004 18:23
поля из связанных таблиц в Grid listener DAX: Программирование 2 17.09.2003 18:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:45.