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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.11.2004, 11:05   #1  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от mazzy
измените dialog, getFromDialog и putToDialog так, чтобы пользователь мог вводить значения ваших переменных
а что такого есть в putToDialog(), чего нельзя сделать в dialog() ?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 29.11.2004, 12:29   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Спасибо, Vadik.
Или перекройте только два метода: dialog, getFromDialog.
__________________
полезное на axForum, github, vk, coub.
Старый 29.11.2004, 14:22   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Сообщение от Vadik
Цитата:
Сообщение от mazzy
измените dialog, getFromDialog и putToDialog так, чтобы пользователь мог вводить значения ваших переменных
а что такого есть в putToDialog(), чего нельзя сделать в dialog() ?
Ну, вообще-то, это не есть хорошо, смешивать построение дизайна и вывод данных. В принципе, конечно, можно обойтись и методом dialog(), но лучше все-таки вносить значения в элементы диалога в методе putToDialog().
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 29.11.2004, 14:31   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
В этой ветке ведется обсуждение FAQ-вопроса отсюда
Как создать свой класс, который можно запустить по расписанию (в пакетном режиме)
__________________
полезное на axForum, github, vk, coub.
Старый 29.11.2004, 14:38   #5  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Ну вот, опять "Как лучше" против "Как написана вся Аксапта"
Я специально искал вхождения putToDialog() по классам - их там ровно два

\Classes\RHRMJournalCheckPost\putToDialog
\Classes\SysDataExpImpGroupCreate\putToDialog

Максим, положа руку на сердце - сколько раз ты сам использовал dialog() и сколько putToDialog() ?

__________________
-ТСЯ или -ТЬСЯ ?
Старый 29.11.2004, 14:49   #6  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Ну, если честно, Best Practice это в общепринятом смысле не является (то есть, ни в каких документах такая рекомендация не зафиксирована )

Лично я, кстати, никогда не заполняю контролы в методе dialog(), если программирую обработку "с нуля". Всегда пользуюсь putToDialog(). В общем, можете считать это моей Best Practice
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 29.11.2004, 15:13   #7  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Maxim Gorbunov
Лично я, кстати, никогда не заполняю контролы в методе dialog(), если программирую обработку "с нуля". Всегда пользуюсь putToDialog(). В общем, можете считать это моей Best Practice
"Народный перевод Navision" уже есть. Как насчет запуска "народного Best Practice"?

__________________
-ТСЯ или -ТЬСЯ ?
Старый 29.11.2004, 16:21   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
народный Best Practice = FAQ?
__________________
полезное на axForum, github, vk, coub.
Старый 29.11.2004, 17:08   #9  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
нет

FAQ читают после того, как возникла проблема.
Best Practice - для того, чтобы избежать проблем, описываемых в FAQ

__________________
-ТСЯ или -ТЬСЯ ?
Старый 19.12.2004, 08:07   #10  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Пока mazzy проверит и разместит в собственно FAQ-е помещу сюда... Кому не лень - дополните плиз.

Хочу дополнить теоретической подоплекой.

Класс RunBaseBatch очень важен в Аксапте и буквально красной нитью проходит по всем процессам в ней. Подавляющее большинство menuitem-ов прямо или косвенно запускают наследников этого класса.
И это очень важный момент - в идеологии аксапты любая мало мальски трудоёмкая операция обязана иметь возможность быть отложенной в очередь заданий на пакетную обработку. Под "любой мало мальски трудоёмкой операцией" как правило подразумеваются все действия, которые находятся в менюшках "Журналы" (при выполнении разносок, резервирований и т.п.), "Периодические операции", "Отчёты".
Для пользователя это выглядит следующим образом: при нажатии на кнопку (или пункт меню) начинающую какую либо операцию (например разноску журнала или формирование отчёта) сперва открывается диалог содержащий в себе параметры операции и либо закладку "Пакет" либо кнопку "Пакет". По нажатию на OK операция либо начинается выполнятся сразу, либо (если проставлены соответствующие опции), откладываеся в очередь заданий для пакетной обработки (Основное->Запросы->Пакеты) где будет лежать, до тех пор пока её не запустят оттуда вручную, либо пока её не запустит сервер пакетной обработки (Основное->Периодические операции->Пакет->Режим сервера).
Для программиста в простейшем случае это выглядит так, как описал mazzy выше. Т.е. создаётся класс, наследник от RunbaseBatch по вышеприведенной схеме, и по нажатии на кнопки запускается именно он.
Но схема по которой сделан класс tutorial_RunBaseBatch неудобна, когда параметров в диалоге много и между ними нужно организовать какую нибудь функциональную взаимосвязь (другими словами - "умно" реагировать на ввод пользователя в диалог). Обычный диалог позволяет лишь "накидать на него" поля ввода и по нажатию на OK прочитать их значения.
Когда требуется сложная форма диалога для RunBaseBatch существует возможность задать для этого диалога свою собственную форму, разработанную в AOT - как это делается показано в классе tutorial_RunBaseForm. В методе dialog() помещается примерно следующий код:
Код:
public Object dialog()
{
    dialogRunbase   dialog = dialog::newFormnameRunbase(formstr(имя_нашей формы_в_AOT),this);
;
    dialog = super(dialog);
    // Заполнение полей или передача их в форму
    ...
    return dialog;
}
К форме предявляются следующие требования:
1. В ней должен быть Tab с именем Tab - в него автоматически подставится закладка "Пакет" при запуске
2. В ней должна быть группа (Group) с именем dialogStartGrp - в неё будут помещены поля, которые вы добавляете через метод addField
3. Ну и разумеется две кнопки типа CommanButton: OK и Cancel

Существует еще возможность вместо закладки "Пакет" помещать на свою форму только кнопку "Пакет", при нажатии на которую откроется дополнительный диалог с параметрами пакетных заданий и тем самым сэкономить место на форме - для этого надо поместить на форму menuItemButton настроенный на menuItem BatchDialog, и подавить вывод закладки "Пакет" (как это сделать - отдельный разговор, к которому я пока не готов ).

Ну и последнее что остаётся сказать - это RunbaseBatch для отчётов.
Так как формирование отчётов как правило является трудоёмкой операцией отчёты - наипрямейшие кандидаты в очередь пакетных заданий.
Но в самих отчётах такой функциональности нет, и поэтому большинство стандартных menuItem-ов отчётов указывают не непосредственно на сами отчёты, а на классы наследники от RunbaseReport (см. tutorial_RunbaseReport). Самое главное в таком классе-наследнике переопределить метод lastValueElementName так, чтобы он возвращал имя отчёта в АОТ:
Код:
identifiername lastValueElementName()
{
    return reportStr(MyReport);
}
Так же как и в других наследниках от RunbaseBatch здесь можно организовывать ввод параметров для дальнешей передачи в отчёт.
Старый 20.12.2004, 12:32   #11  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
У нас как то странно работает пакетный режим. Постоянно запущена станция в режиме пакетного сервера, так вот в рабочие дни все ОК, а в выходные пакеты не запускаются. При чем часть пакетов есть ежедневные, но есть еженедельные пакеты назначенные на воскресенье.
Это нормальное поведение?
Старый 20.12.2004, 14:48   #12  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Цитата:
Сообщение от raz
У нас как то странно работает пакетный режим. Постоянно запущена станция в режиме пакетного сервера, так вот в рабочие дни все ОК, а в выходные пакеты не запускаются. При чем часть пакетов есть ежедневные, но есть еженедельные пакеты назначенные на воскресенье.
Это нормальное поведение?


По иронии судьбы мы только что - сегодня решили эту проблему!

На самом деле вы ставите в параметрах диалога повторения периодичность = "День", параметр - "Выполнять каждый день".
Если посмотреть в англоязычной аксапте "Выполнять каждый день" изначально было написано как "Every weekday".
Так вот, видимо (Lingvo мне в помощь) "weekday" в литературном переводе на русский означает не "день недели", а "будни"! Что значит в техническом переводе - "рабочий день"! Другими словами - с понедельника по пятницу. Выходные дни в английском пишутся как weekends.

Т.е. ставьте период "Повторять через указанный интервал" = 1.

P.S.
Мы долго ржали еще с утра над этим, а тут еще вы настроение подняли вовремя.
Старый 20.12.2004, 17:04   #13  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
На самом деле вы ставите в параметрах диалога повторения периодичность = "День", параметр - "Выполнять каждый день".
Это мы уже прошли.

Я же писал, что у меня есть пакеты, котрые должны выполняться еженедельно по воскресеньям, но выполняются в понедельник.
Старый 20.12.2004, 18:41   #14  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Цитата:
Сообщение от raz
Цитата:
На самом деле вы ставите в параметрах диалога повторения периодичность = "День", параметр - "Выполнять каждый день".
Это мы уже прошли.

Я же писал, что у меня есть пакеты, котрые должны выполняться еженедельно по воскресеньям, но выполняются в понедельник.
Это надо уже смотреть по коду Batch-формы-обработчика, сейчас не могу, но скорее всего тот же самый принцип проблемы - "everyweek" означает "каждую рабочую неделю", а не "каждую календарную"... или что то в этом духе. В общем надо проверять.
Старый 25.01.2008, 18:41   #15  
Zeratul is offline
Zeratul
Участник
 
75 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Минск
А в 2.5 есть возможность создания такого класса, который можно запустить по расписанию (в пакетном режиме) ?
Старый 25.01.2008, 21:25   #16  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Aliaksei_Berkau Посмотреть сообщение
А в 2.5 есть возможность создания такого класса, который можно запустить по расписанию (в пакетном режиме) ?
Да. Насколько я помню, этот механизм существует давно и существенно не менялся.
__________________
полезное на axForum, github, vk, coub.
 


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

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

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