08.09.2003, 16:26 | #1 |
Участник
|
Аксапта и динамический код?
Привет всем!
Можно ли выполнить в аксапте динамически сформированный код? Например: Динамически формируется диалог, список полей которого и их типы описаны в какой-нить табличке... Для поля диалога с типом DATE, в текстовом поле таблицы, указано значение по-умолчанию: "today() - 1" или "str2date('01-01-2003',123)" Необходимо это код выполнить и получить значение даты... Способна на такое аксапта? |
|
08.09.2003, 16:50 | #2 |
Banned
|
Можно. Только в вашем случае это излишне. Для создания функций с подобными динамическими диалогами предназначен класс RunBase, сотни наследников которого дают примеры использования (методы dialog() и getFromDialog() ).
Если все-таки интересует исполнение динамически созданного кода, то вот пища для размышлений: \Classes\ReleaseUpdateDB\run(). |
|
08.09.2003, 18:32 | #3 |
Участник
|
Цитата:
Изначально опубликовано EVGL
Можно. Только в вашем случае это излишне. Для создания функций с подобными динамическими диалогами предназначен класс RunBase, сотни наследников которого дают примеры использования (методы dialog() и getFromDialog() ). Если все-таки интересует исполнение динамически созданного кода, то вот пища для размышлений: \Classes\ReleaseUpdateDB\run(). Вот что получилось (может кому-то понадобится) : PHP код:
|
|
08.09.2003, 18:50 | #4 |
Участник
|
редкостное извращение, на мой взгляд.
нужны серьерзные обоснования, чтобы такой подход оправданным. хотя... в некоторых случаях он действительно спасает. например, при импорте текстовых данных, таким образом можно включать произвольные обработчики... а для чего, это? если не секрет |
|
09.09.2003, 10:23 | #5 |
Участник
|
Цитата:
Изначально опубликовано mazzy
редкостное извращение, на мой взгляд. ... а для чего, это? если не секрет Повторюсь, если что-то показалось непонятным: - диалог формируется динамически и с произвольным числом параметров, т.е. заранее неизвестно сколько данных (dialogField'ов) и каких типов будет запрошено у пользователя - диалоги и описания их парметров хранятся в некой таблице... - у некоторого dialogField'а с типом DATE необходимо сразу установить значение по-умолчанию, например - сегодня, день или неделю или месяц... назад или вперед - задав некоторую формулу (или даже весь метод) получения значения по-умолчанию для некоторого поля я смогу заполнить данное поле при динамическом формировании диалога... Соответсвенно формула может меняться в зависимости от текущей необходимости... без исправления кода приложения... Если можешь предложить другое решение - предлагай... ЗЫ пример с датой рассмотрен как самый простой для понимания... вот другой пример: необходимо заполнить поле диалога типа листбокс или комбобокс списком заранее неизвесных значений... |
|
09.09.2003, 11:58 | #6 |
Участник
|
Можно воспользоваться методом add() и в ComboBox и в ListBox.
Он как раз позволяет добавить элементы в список. |
|
09.09.2003, 12:03 | #7 |
Banned
|
Я думаю, автор знает, как добавлять элементы в комбобокс, он решает другую интересную задачу: как создать интерфейс, который позволит единообразно и гибко задавать начальные значения полей произвольных типов.
Тут остается посоветовать только вот что: на таблице, в которой вводятся эти "today() - 1" и т.д., стоит сделать метод проверки validateWrite(), который запускал бы код с помощью того же runbuf() и проверял его синтаксис на предмет ошибок. |
|
09.09.2003, 12:11 | #8 |
Участник
|
Цитата:
Изначально опубликовано puz
Можно воспользоваться методом add() и в ComboBox и в ListBox. Он как раз позволяет добавить элементы в список. PS здесь обсуждается тема НЕ как добавить элемент в комбобокс или листбокс, а как выполнить динамически сгенерированный код для формирования списка значений для комбобокса или листбокса не исправляя ни строчки кода приложения |
|
09.09.2003, 12:40 | #9 |
Участник
|
Сорри. Сглупил. Внес сумбур. Больше не буду.
|
|
09.09.2003, 13:06 | #10 |
Участник
|
Цитата:
Изначально опубликовано SnowMan
Для чего, я описал в первом постинге... ... у некоторого dialogField'а с типом DATE необходимо сразу установить значение по-умолчанию Поэтому, EVGL, я не понял твоего замечания насчет "интересную задачу: как создать интерфейс". Такой интерфейс уже существует. Назвается dialog. Описан в документации. Делается цикл. В цикле считаываются ваши параметры и значения по умолчанию. В цилке создаются контролы и ИНИЦИАЛИЗИРУЮТСЯ. Или я снова чего-то не понимаю? В чем проблема то? пример PHP код:
|
|
09.09.2003, 13:14 | #11 |
Banned
|
Просто автор с самого начала дал в вопросе слишком много информации, что вызвало переполнение стека у EVGL и mazzy. Автор знает, как создавать поля диалога. Его интересует, как создать динамичный интерфейс для указания значений по умолчанию этих полей! Надо долго читать, чтобы понять.
|
|
09.09.2003, 13:38 | #12 |
Участник
|
Я тупой, наверное. Не понял.
|
|
09.09.2003, 14:48 | #13 |
Участник
|
Наверное я плохо объясняю...
Как говорится лучше один раз увидеть Попытаюсь еще раз Есть форма регистрации диалогов (см рис 1) в которой можно зарегистрировать новый диалог и описать его параметры... Значения по-умолчанию для типа DATE указаны как 'today() - 7' и 'today() + 7' соответсвенно... Результат вызова диалога показан на рисунке 2 в случае если необходимо поменять значения по-умолчанию для первой даты, то нет необходимости исправлять код приложения, а можно просто поменять допустим на 'str2date("01-01-2003",123)' теперь результат вызова будет как на рис 3 |
|
09.09.2003, 16:13 | #14 |
Участник
|
Вот к чему приводит чрезмерное увлечение любимым лозунгом МБС: "Не бойтесь программировать в Аксапте!"
|
|
09.09.2003, 20:14 | #15 |
Участник
|
Цитата:
Изначально опубликовано SnowMan
Как говорится лучше один раз увидеть ... и это все еще и на динамическом диалоге, у которого нет хелпа... мдя.. Что ж, начнем каверзные вопросы.
Главные вопросы, конечно же - почему вас не устроили стандартные механизмы? Я конечно же могу ошибаться... Но такого программировать точно не стоит. |
|
10.09.2003, 12:33 | #16 |
Участник
|
Начну с того, что тема данной ветки сообщений представляла собой вопрос: "Дружат ли аксапта и динамически сформированный код? "
На поставленный вопрос во втором постинге был получен исчерпывающий ответ (огромное спасибо EVGL) Дальнейшее же обсуждение лежит в области вопроса "а зачем?" На него можно ответить просто: "Надо", но я попробую все-таки объснить, что за задачу я решаю на данный момент... Сразу оговорюсь - я не внедренец (нам внедряют), систему изучаю не больше месяца, полную функциональность и приемы программирования освоить не успел и поэтому рад конструктивной критике... Итак, описание целей и задач: Глобальная цель (уровня отдела ИТ и, надеюсь, внедренцев) - подружить аксапту с бизнесом, в основном именно аксапту, а не бизнес (надеюсь объяснять не придется, да и это не тема для данного форума) Исходя из глобальной цели, необходимы временные (в 80% случаев читай постоянные) механизмы взаимодействия аксапты и функционирующего бизнеса. Отсюда Задача - создание механизма управления внешними приложениями или паралельными задачами. Требования: - Необходимо зарегистрировать внешнее приложение в системе, указать список требуемых для выполнения параметров, разграничить права доступа к задаче и возможно, параметрам. Количество внешних приложений и их параметров не ограничено. Параметры могут быть обязательными и не обязательными, видимыми и не видимыми, доступными и не доступными, с автозаполнением и заполнением в ручную... - Необходимо указание где должно быть запущено приложение: на машине инициатора или на сервере (AOS) - Необходимо осуществить два метода запуска внешнего приложения: с ожиданием завершения работы и без ожидания. - Необходимо сформировать уведомление (если таковое требуется) инициатора запуска о результатах работы приложения и если требуется доставить результат работы приложения инициатору (будь то сформированный файл или просто код возврата) - Необходимо описать реакцию системы инициатора на полученный результат работы внешнего приложения, вплоть до запуска другого внешнего приложения - Необходимо регистрировать: кто, когда, с какими параметрами и какое внешнее приложение запускал, когда внешнее приложение завершило свою работу и с какими результатами. - Необходимо вести архив результатов работы внешних приложений в системе, чтобы пользователь, в случае, если пользователь инициировал задачу, или другое лицо, наделенное соответствующими правами, могли иметь доступ к результатам и логам работы внешнего приложения. Возможно что-то упустил, но смысл, думаю передал... Теперь скажите, есть ли подобная функциональность в аксапте и можно ли избежать программирования для осуществления такой задачи? Цитата:
Изначально опубликовано mazzy
... и это все еще и на динамическом диалоге, у которого нет хелпа... мдя.. Цитата:
Изначально опубликовано mazzy
Чем вас не устраивает стандартный механизм LastValue? (см. Руководство разработчика) Цитата:
Изначально опубликовано mazzy
Вы предлагаете использовать формулы для дат. Чем не устраивает стандартный механизм интервалы дат? (см. главная книга \ Настройка). Почему вы не стали вместо дат вводить просто интервал дат? (как в финансовых отчетах, например) Цитата:
Изначально опубликовано mazzy
Вы всерьез полагаете, что пользователи смогут запомнить хитросочиненные английские функции? Или этот механизм вы только для себя делаете? Кто будет настраивать этот механизм для пользователей? Цитата:
Изначально опубликовано mazzy
Вы наверняка понимаете, что в колонке "значение по умолчанию" можно использовать только функции без аргументов. Цитата:
Изначально опубликовано mazzy
Судя по закладке в верхней части формы, вы вводить аргументы функций в свой механизм, так? Как вы планируете указывать аргументы? Цитата:
Изначально опубликовано mazzy
Главные вопросы, конечно же - почему вас не устроили стандартные механизмы? |
|
10.09.2003, 13:25 | #17 |
Banned
|
Хочется поздравить SnowMan: я не разделяю скептицизм Mazzy, для первого месяца работы с системой - очень хорошо, на удивление хорошо придумано. Теперь по вопросам:
|
|
10.09.2003, 13:42 | #18 |
Участник
|
Цитата:
Изначально опубликовано EVGL
Хочется поздравить SnowMan: я не разделяю скептицизм Mazzy, для первого месяца работы с системой - очень хорошо, на удивление хорошо придумано. Насчет скпетицизма и разделения... EVGL, это у нас давно. Однако, это не есть плохо Нормальное расхождение мнений по рабочим вопросам. Цитата:
Изначально опубликовано EVGL
мысль маззи насчет хелпа тоже не понял, возможно, имеется в виду, что на динамическом диалоге нельзя создать контекстную справку по полям. Если я это правильно понял, то возражение странное: мало кто эту справку вообще делает ввиду отсутствия времени, в особенности на клиентском проекте. А то, что эту справку мало кто делает...кхм... вот это и есть странно. А предложенный SnowMan'ом механизм делает создание справки вообще нереальным делом. SnowMan, да я вспомнил ваши вопросы про управление сторонним приложением. Стало понятнее. Спасибо. Я выбрал бы статический подход. Вроде финансовых отчетов. Можно выбрать и динамический, как в конфигураторе. Тут вам взвешивать плюсы и минусы и принимать решение. Мне кажется, что динамическое программирование в Аксапте не очень хорошо поддерживается ядром и слишком много придется делать руками. Или по-другому, ядро замечательно поддерживает статические связи и статические формы. По-моему при прочих равных, в Аксапте стоит выбрать статическое программирование. |
|
10.09.2003, 13:53 | #19 |
Участник
|
Цитата:
Изначально опубликовано SnowMan
еще не сталкивался с таким механизмом, попытка найти его описание в Руководстве разработчика (полный поиск по словосочетанию LastValue) не увенчалась успехом, оправлю сообщение посмотрю полным поиском по AOT Последние введенные (LastValue) значения в Аксапте 3.0 можно посмотреть в меню Сервис \ Средства разработки \ Объекты приложения \ использование данных закладка Настройка форм. Кнопка Данные позволит вам просмотреть контейнер. Идея состоит в том, что если уж программировать, то переопределить этот стандартный механизм, чтобы он подставлял в форму то что вам нужно. Тогда этот механизм будет работать на всех формах, а не только на ваших. |
|
10.09.2003, 13:59 | #20 |
Banned
|
Никаких проблем со скептицизмом и разделением.
Теперь по поводу Цитата:
предложенный SnowMan'ом механизм делает создание справки вообще нереальным делом
|
|