08.04.2021, 06:38 | #1 |
Участник
|
массив DialogField для метода RunBaseBatch::dialog()
Привет всем.
Возможно ли в переопределенном методе dialog в наследнике RunBaseBatch реализовать генерацию элементов DialogField посредством цикла? Допустим есть динамический set на основании которого я хочу сгенерировать поля DialogField в диалоге. Просто если такую задумку реализовать то надо уже иметь заранее объявленный массив DialogField с запасом в classDeclaration. А как это сделать? Можете пример скинуть. Такое вообще возможно? Или на методах dialog невозможно пользоваться циклами. Только хардкорно задавать состав полей с уникальными именами DialogField и максимум только if использовать где нужно. Так? |
|
08.04.2021, 06:48 | #2 |
Участник
|
Цитата:
надо уже иметь заранее объявленный массив DialogField с запасом в classDeclaration
делаешь в цикле dialog.addFieldValue() сколько угодно раз - и всё В целом, конечно, задача звучит для аксапты довольно странно - я бы в таком случае задумался "точно ли я делаю всё так". Я в похожих (наверно - т.к. ТЗ вашего не знаю) случаях делал и видел простой вариант с использованием таблицы для параметров (куда можно строчек нагенерить легко, а тип вашего массива полей, вероятно, более-менее одинаковый - куча каких-то чекбоксов, например?) и использование заранее созданный формы с гридом в качестве диалоговой |
|
08.04.2021, 06:58 | #3 |
Участник
|
Ну можно наверное просто массив объявить(или Set) и добавить туда все поля
X++: Array s = new Array(Types::Class); Но лучше наверное просто таблицу завести для ввода параметров с уникальным ключем ParmId(который генерить при запуске), соответственно в форме показывать ее |
|
08.04.2021, 07:08 | #4 |
Участник
|
А почему собственно нет? У вас в распоряжении есть куча классов-коллекций + контейнеры в конце концов. Единственное, что нужно, соблюсти соответствие между каждым полем-значением и контролом DialogField. Проблем может добавить тот факт, что типы данных в вашей коллекции могут быть разными.
Попробуйте простой пример для начала, затем усложните, реализовав свою задачу. Контролы обычно получают имя автоматически, в АХ 2009 (а может и в 4-ке) вроде бы добавлили метод, назначающий имя, чтобы к нему можно было обращаться. Посмотрите как используется InventDimParm в Runbase-классах, например в InventCountCreate.
__________________
// no comments |
|
08.04.2021, 09:20 | #5 |
Участник
|
Пример: InputBox
Для хранения колекции полей используется X++: List listFields = new list(Types::Class); Последний раз редактировалось S.Kuskov; 08.04.2021 в 09:22. |
|
08.04.2021, 10:11 | #6 |
Участник
|
Вот Вы добились чего хотели. Динамически сформировали кучу полей на форме. Но!
1. У окна диалога нет скроллинга. Окно расширяется чтобы вместить все параметры. Вы уверены, что в результате окно диалога не превысит окно монитора? 2. Вы видели формы, на которых много полей ввода (параметров)? Они все каким-то образом группируются для того, чтобы упростить поиск нужного поля на форме. Как пользователь искать-то будет то поле, куда надо что-то ввести? 3. Вы уверены, что для каких-то полей не потребуется дополнительная обработка при вводе? Lookup или Modified? 4. А что Вы собираетесь делать с полученными значениями? Как обрабатывать? Каждое значение по своему? Ну и смысл в динамическом создании, если обработку надо делать для каждого поля свою? 5. Если все параметры однотипные и специфическая обработка не предполагается, то проще добавить Grid и параметры - это строки этого Grid во временной таблице. Это уже предлагали Собственно, тут уже много раз и по разным поводам упоминалось, что написание чего-то универсального и "самопрограммируемого" - это плохое решение. Для тренировки навыков программирования - хорошо, но для сопровождения приложения - плохо
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
|
Похожие темы | ||||
Тема | Ответов | |||
How to change Batch caption dialog field in run time. RunBaseBatch sample | 0 | |||
axaptapedia: RunBaseBatch | 0 | |||
axaptapedia: RunBaseBatch | 0 |
|