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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.12.2009, 13:51   #1  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Обработка входящих сообщений
Добрый день! У меня есть один вопрос. Как поймать входящее сообщение на Axapta 3.0(3-хзвенная архитектура)
Суть задачи заключается в следующем. Необходимо чтоб приложение на клиенте запускало определённый скрипт(класс) по первой же необходимости. Запуском должен заниматься не пользователь, а администратор. Ничего лучше как поймать входящее сообщение и анализа его я не придумал. Но вот вопрос. Где его перехватить?
Старый 11.12.2009, 13:56   #2  
online
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,307 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Дурацкий вопрос. А пакетный сервер чем не угодил? Он же собственно говоря именно для этого и предназначен...
__________________
Возможно сделать все. Вопрос времени
Старый 11.12.2009, 13:59   #3  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Вопрос не дурацкий. Суть в том что запуск должен происходить не по графику, а произвольно...по первому требованию. Была идея использовать для этих целей таблицу, и постоянно проверять её на наличие команды, но идея тоже не совсем подходит....постоянные нагрузки на сервер. И скорость реакции не высокая.
Старый 11.12.2009, 14:18   #4  
online
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,307 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
А пакетный сервер не обязательно по графику запускает. Это как настроите конкретное задание.
По умолчанию - оно настроено на немедленный запуск. Т.е. Вы нажимаете ОК в диалоге периодической операции, задание добавляется в очередь и если пакетник свободен - то он выполняет задание. Если пакетник занят - то задание выполняется не сразу - а как только пакетник освободится. Если не хотите ждать - то можно запустить несколько пакетников одновременно - и тогда обработка очереди будет быстрее
__________________
Возможно сделать все. Вопрос времени
Старый 11.12.2009, 14:39   #5  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
sukhanchik хорошо. Представим так. Человек работает. Но вдруг администратору необходимо запустить обработку(дистанционно) именно сейчас...и заранее сервер пакетной обработки он не настраивал.... как тут быть?
Старый 11.12.2009, 14:39   #6  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
В руководстве по администрированию. Раздел "Processing batch jobs". Все толково описано.
raniel
А насчет этого - есть у меня некий очень интересный проектик... где-то под НГ, наверное, доведу до ума и выложу.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 11.12.2009 в 14:43.
Старый 11.12.2009, 14:43   #7  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Maximin с нетерпением буду ждать... Поседний встречный вопрос. Пакетную обработку можно запустить дистанционно на машине клиента? Я всё правильно понял?
Старый 11.12.2009, 14:46   #8  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Цитата:
Сообщение от raniel Посмотреть сообщение
Maximin с нетерпением буду ждать... Поседний встречный вопрос. Пакетную обработку можно запустить дистанционно на машине клиента? Я всё правильно понял?
Пакетная обработка будет работать на клиенте, предназначенном для пакетной обработки заданий (aka пакетном сервере). Не имеет значения, на какой машине он расположен. По сути, "пакетный сервер" - всего лишь машина, выделенная для выполнения клиента Axapta, с запущенным обработчиком какой-либо пакетной группы.
А насчет дистанционного запуска - это как раз - одна из функция моего проекта.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 11.12.2009, 14:50   #9  
online
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,307 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от raniel Посмотреть сообщение
Человек работает. Но вдруг администратору необходимо запустить обработку(дистанционно) именно сейчас...и заранее сервер пакетной обработки он не настраивал.... как тут быть?
Ммм.. у меня такое ощущение - что Вы не представляете что такое сервер пакетной обработки. Сервер пакетной обработки - это та же аксапта, только постоянно запущенная и ждущая когда ей скажут "работай". Сказать ей могут по-разному. Могут сказать: "каждый день в 8 утра запускай эту обработку". А могут сказать: "Мне тут нужно запустить обработку именно сейчас - запусти ее".
Обе команды даются так: запускается из меню нужная периодическая операция (с диалогом и вкладкой пакет). На вкладке пакет жмется галка "Пакетная обработка" и если нужно чтобы обработка запустилась именно сейчас - больше ничего не делают и жмут ОК. Для настройки повторения нужно нажать на кнопку "Повторение".

Собственно говоря - все. Т.е. один раз нужно запустить аксапту с ключиком batch, проверить, убедиться и дальше пользоваться. В общем-то тоже самое - как и при разработке - сначала написать, затем проверить, убедиться и пользоваться. Т.е. не нужно при каждом запуске настраивать сервер пакетной обработки.

Я вот только не понял - в чем разница между дистанционным запуском и запуском из пакета? В чем дистанционность? Только в том, что пользователь удаленно зайдет на компьютер?
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 11.12.2009 в 14:52.
Старый 11.12.2009, 14:55   #10  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Maximin в моём случае... значит все машины на которых работает Axapta должны быть настроены как сервера пакетной обработки(все компьютеры бухгалтерии, кадровиков, экономистов и т.д)? если это так, то мне не кажется это решение некрасивым. Хотя возможно это единственный выход... Всё же интересно, Можно ли каким либо образом перехватить входящее сообщение? Какие классы инициализируются? Сколько я работаю с Axapta всегда поражался её гибкостью....всё реализовано через приложение, и его без проблем можно доработать/изменить. И как то не верится что такая вещь как приём сообщения и вывод его на экран сделано иначе.
Старый 11.12.2009, 14:57   #11  
online
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,307 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
А зачем настраивать все машины бухгалтерии? А нельзя настроить одну отдельно взятую машину и все делать на ней?

И еще. Так Вам что нужно? Запустить из командной строки конкретный кусок кода (запустив Аксапту и завершив ее работу по выполнении) или запускать периодически (по требованию администратора) операцию на отдельном сервере?

Зачем мучать КАЖДУЮ машину?
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 11.12.2009 в 15:00.
Старый 11.12.2009, 14:59   #12  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
sukhanchik в том и дело что нет. Скрипт может/должен запускаться на любом клиенте, в любое время, а может и сразу везде.
Старый 11.12.2009, 15:03   #13  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
В таком случае, мне кажется, только через таблицу, подобно тому, как реализована система алертов в Аксапте.
__________________
Axapta has seduced me deadly!
Старый 11.12.2009, 15:05   #14  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
raniel
Вы б сначал тогда прочитали про пакетную обработку - думаю, что вы не представляете, что это такое.
Да и неплохо бы услышать решаемую задачу. Думаю, все можно сделать проще.
Настраивать все машины как сервера пакетной обработки бессмысленно - это не для тех целей предназначено.
Если стоит задача, чтобы администратор мог запустить на любом клиенте некий класс в произвольное время, то пакетная обработка здесь непригодна. В 3ке подобное получалось сделать, используя небольшую табличку, полностью кэшируемую (Cachemode:EntireTable) на AOS + таймеры, висящие на постоянно используемых формах. Период опроса стоит ставить не менее 30 секунд и при большом кол-ве записей будет не очень хорошо - при любом изменении записей клиенты будут её перечитывать.
Причем в табличке должно храниться как можно меньше информации. Т.е. буквально к примеру, userid и флаг наличия сообщения. Всё остальное клиент должен читать уже из другой таблицы при появлении подходящей записи.
На 4ке же, можно включиться в стандартный механизм сообщений - там всё легче. Или же, посмотрев, содрать её в 3ку. Но, по сути, оно во многом подобно.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 11.12.2009 в 15:10. Причина: Добавил ремомендации по содержанию таблицы.
Старый 11.12.2009, 15:09   #15  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
HorrR аллерты это всплывающие сообщения? Те самые сообщения которые выводятся командой info? Если это реализовано через таблицу то через какую? Я чтото ничего подобного не видел. Возможно не туда смотрел...
Старый 11.12.2009, 15:30   #16  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Да, это всплывающие сообщения, но не путайте с инфологом. Наполняется буфер EventInbox. Ну а если хотите реализовать что-то подобное, но с выводом инфолога, то можно создать собственную таблицу ну и класс-сервер для обработки сообщения, который стартуется вместе с клиентской сессией и по таймеру проверяет содержимое таблици на наличие новых сообщений для этого юзера или даже клиентской сессии, тут уж как хотите. В общем по идее нагрузка на сервер будет не такой и существенной, если индекс и кеширование будет правильно настроено. Плюс, записей ведь будет немного, они же после отработки сообщения должны будут удалятся.
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 11.12.2009 в 15:34.
Старый 11.12.2009, 15:37   #17  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Maximin
Цитата:
На 4ке же, можно включиться в стандартный механизм сообщений
А подробнее можно? Нет ли информации полной по этому механизму. Я уже недавно вопрошал:
Программное создание оповещения.
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 11.12.2009 в 15:39.
Старый 11.12.2009, 16:13   #18  
online
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,307 / 3540 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от raniel Посмотреть сообщение
sukhanchik в том и дело что нет. Скрипт может/должен запускаться на любом клиенте, в любое время, а может и сразу везде.
Прям вирус какой-то А можно узнать хотя бы в общих чертах - какое действие этот скрипт будет выполнять?
Просто если речь идет об обработке данных в АХ - то тогда нет смысла эту обработку запускать на всех компьютерах - заняться обработкой данных может и отдельно взятый сервер.
Если речь идет об обработке каких-либо данных вне АХ (на компьютере клиента) - то тогда зачем АХ?

Если речь идет о периодической загрузке(выгрузке) данных в(из) АХ с компьютера клиента, то гораздо проще исходные данные положить куда-то централизованно и опять-таки не мучать каждую машинку.
__________________
Возможно сделать все. Вопрос времени
Старый 11.12.2009, 16:15   #19  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Там всё достаточно прозрачно, общие черты вы правильно описали. Ничего сложного - сесть и поэкспериментировать займет меньше времени, чем мне описать всё это, уж не обессудьте.
Цитата:
Сообщение от HorrR Посмотреть сообщение
Maximin
А подробнее можно? Нет ли информации полной по этому механизму. Я уже недавно вопрошал:
Программное создание оповещения.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 11.12.2009, 17:43   #20  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Все, абсолютно все, "ждущие" ("слушающие") системы основаны на таймере. И пакетная обработка в том числе. Просто все настолько "тонет" во всяких "умных" словах и настройках или скрыто внутри "системного" кода, что добраться до сути становится проблематично...

Т.е. по таймеру, через определенные интервалы времени, запускается некий код, который проверят нет ли чего для выполнения. Далее - по ситуации.

В Axapta, основой для ручного создания таймера, является метод setTimeOut(), который есть у любого класса, поскольку это метод "базового" ("родительского") класса Object. Соответственно, если нужен "глобальный" слушатель, то следует вызвать setTimeOut() глобального же объекта. Удобнее всего это сделать в глобальном классе Info.

Общая схема примерно такая:

1) В классе Info создается собственный метод, например info.MyMethod(), в котором и производится анализ того, не надо ли что-то сделать.

2) В методе info.executeUserOptions() организуется вызов этого метода по таймеру примерно так

X++:
this.setTimeOut(identifierstr(MyMethod), 30*1000, false);
3) В самом методе в самом конце также организуется "самовызов" по тому же таймеру

X++:
this.setTimeOut(identifierstr(MyMethod), 30*1000, false);
Далее уже "техника". У Вас есть метод info.MyMethod(), который автоматически запускается при запуске Axapta и периодически, с некоторым интервалом, запускается в процессе работы. Вам остается только организовать "чтение" некой служебной информации (таблицы) и запуск других классов и методов, на основе этой информации.

Правда, возникает дополнительная проблема "совместного доступа". Т.е. чтобы два (или более) сеанса не начали выполнять одно и то же задание. Как это "разрулить" решается в каждом конкретном случае. В зависимости от того, что именно должно быть сделано.

Да, кстати, если обмен директивами идет через таблицу, то ее ни в коем случае не надо кешировать. Вам ведь надо всегда читать актуальную информацию, а не то, что сохранено в кеше.

==============================================================

Но, вообще-то, присоединяюсь к sukhanchik. Сначала ответьте самому себе ЧТО Вы собираетесь выполнять таким способом? Не "общими словами" вроде "администратору захотелось", а именно вполне конкретно. Например: администратору надо сделать перезагрузку AOS.

Далее попробуйте уточнить, обязательно ли для этой обработки запускать для ВСЕХ клиентов или достаточно, чтобы работал хотя бы один клиент? А нельзя запустить этого одного именно тогда, когда "администратору захотелось"?
За это сообщение автора поблагодарили: konfet (1), raniel (1), someOne (5).
Теги
обработка событий, события, сообщение

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обработка входящего НДС andrw DAX: Функционал 12 05.03.2008 11:35
Помогите!!!!!Обработка вх.НДС в SP4 lila DAX: Функционал 4 15.02.2006 16:41
Висит обработка фактуры Pavel8338 DAX: Администрирование 12 12.01.2006 13:10
Суммарная обработка накладной AlexUnik DAX: Функционал 1 19.08.2004 15:51
Окно сообщений DA_NEAL DAX: Функционал 4 02.09.2002 23:55

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

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

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