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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.04.2021, 06:38   #1  
oleggy is offline
oleggy
Участник
 
276 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
массив DialogField для метода RunBaseBatch::dialog()
Привет всем.
Возможно ли в переопределенном методе dialog в наследнике RunBaseBatch реализовать генерацию элементов DialogField посредством цикла?

Допустим есть динамический set на основании которого я хочу сгенерировать поля DialogField в диалоге.
Просто если такую задумку реализовать то надо уже иметь заранее объявленный массив DialogField с запасом в classDeclaration. А как это сделать? Можете пример скинуть.
Такое вообще возможно?
Или на методах dialog невозможно пользоваться циклами. Только хардкорно задавать состав полей с уникальными именами DialogField и максимум только if использовать где нужно.
Так?
Старый 08.04.2021, 06:48   #2  
Pandasama is offline
Pandasama
Участник
 
457 / 137 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
надо уже иметь заранее объявленный массив DialogField с запасом в classDeclaration
а зачем иметь заранее объявленный?
делаешь в цикле dialog.addFieldValue() сколько угодно раз - и всё

В целом, конечно, задача звучит для аксапты довольно странно - я бы в таком случае задумался "точно ли я делаю всё так".
Я в похожих (наверно - т.к. ТЗ вашего не знаю) случаях делал и видел простой вариант с использованием таблицы для параметров (куда можно строчек нагенерить легко, а тип вашего массива полей, вероятно, более-менее одинаковый - куча каких-то чекбоксов, например?) и использование заранее созданный формы с гридом в качестве диалоговой
Старый 08.04.2021, 06:58   #3  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,039 / 1633 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Ну можно наверное просто массив объявить(или Set) и добавить туда все поля
X++:
Array s = new Array(Types::Class);
еще pack, unpack придется переделывать
Но лучше наверное просто таблицу завести для ввода параметров с уникальным ключем ParmId(который генерить при запуске), соответственно в форме показывать ее
Старый 08.04.2021, 07:08   #4  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
А почему собственно нет? У вас в распоряжении есть куча классов-коллекций + контейнеры в конце концов. Единственное, что нужно, соблюсти соответствие между каждым полем-значением и контролом DialogField. Проблем может добавить тот факт, что типы данных в вашей коллекции могут быть разными.
Попробуйте простой пример для начала, затем усложните, реализовав свою задачу.
Контролы обычно получают имя автоматически, в АХ 2009 (а может и в 4-ке) вроде бы добавлили метод, назначающий имя, чтобы к нему можно было обращаться.
Посмотрите как используется InventDimParm в Runbase-классах, например в InventCountCreate.
__________________
// no comments
Старый 08.04.2021, 09:20   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Пример: InputBox

Для хранения колекции полей используется
X++:
List listFields = new list(Types::Class);

Последний раз редактировалось S.Kuskov; 08.04.2021 в 09:22.
Старый 08.04.2021, 10:11   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вот Вы добились чего хотели. Динамически сформировали кучу полей на форме. Но!

1. У окна диалога нет скроллинга. Окно расширяется чтобы вместить все параметры.

Вы уверены, что в результате окно диалога не превысит окно монитора?

2. Вы видели формы, на которых много полей ввода (параметров)? Они все каким-то образом группируются для того, чтобы упростить поиск нужного поля на форме. Как пользователь искать-то будет то поле, куда надо что-то ввести?

3. Вы уверены, что для каких-то полей не потребуется дополнительная обработка при вводе? Lookup или Modified?

4. А что Вы собираетесь делать с полученными значениями? Как обрабатывать? Каждое значение по своему? Ну и смысл в динамическом создании, если обработку надо делать для каждого поля свою?

5. Если все параметры однотипные и специфическая обработка не предполагается, то проще добавить Grid и параметры - это строки этого Grid во временной таблице. Это уже предлагали

Собственно, тут уже много раз и по разным поводам упоминалось, что написание чего-то универсального и "самопрограммируемого" - это плохое решение. Для тренировки навыков программирования - хорошо, но для сопровождения приложения - плохо
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: mazzy (5).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
How to change Batch caption dialog field in run time. RunBaseBatch sample Blog bot DAX Blogs 0 17.01.2014 11:11
axaptapedia: RunBaseBatch Blog bot DAX Blogs 0 04.04.2009 22:05
axaptapedia: RunBaseBatch Blog bot DAX Blogs 0 31.03.2009 06:06
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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