11.12.2009, 13:51 | #1 |
Участник
|
Обработка входящих сообщений
Добрый день! У меня есть один вопрос. Как поймать входящее сообщение на Axapta 3.0(3-хзвенная архитектура)
Суть задачи заключается в следующем. Необходимо чтоб приложение на клиенте запускало определённый скрипт(класс) по первой же необходимости. Запуском должен заниматься не пользователь, а администратор. Ничего лучше как поймать входящее сообщение и анализа его я не придумал. Но вот вопрос. Где его перехватить? |
|
11.12.2009, 13:56 | #2 |
Administrator
|
Дурацкий вопрос. А пакетный сервер чем не угодил? Он же собственно говоря именно для этого и предназначен...
__________________
Возможно сделать все. Вопрос времени |
|
11.12.2009, 13:59 | #3 |
Участник
|
Вопрос не дурацкий. Суть в том что запуск должен происходить не по графику, а произвольно...по первому требованию. Была идея использовать для этих целей таблицу, и постоянно проверять её на наличие команды, но идея тоже не совсем подходит....постоянные нагрузки на сервер. И скорость реакции не высокая.
|
|
11.12.2009, 14:18 | #4 |
Administrator
|
А пакетный сервер не обязательно по графику запускает. Это как настроите конкретное задание.
По умолчанию - оно настроено на немедленный запуск. Т.е. Вы нажимаете ОК в диалоге периодической операции, задание добавляется в очередь и если пакетник свободен - то он выполняет задание. Если пакетник занят - то задание выполняется не сразу - а как только пакетник освободится. Если не хотите ждать - то можно запустить несколько пакетников одновременно - и тогда обработка очереди будет быстрее
__________________
Возможно сделать все. Вопрос времени |
|
11.12.2009, 14:39 | #5 |
Участник
|
sukhanchik хорошо. Представим так. Человек работает. Но вдруг администратору необходимо запустить обработку(дистанционно) именно сейчас...и заранее сервер пакетной обработки он не настраивал.... как тут быть?
|
|
11.12.2009, 14:39 | #6 |
NavAx
|
В руководстве по администрированию. Раздел "Processing batch jobs". Все толково описано.
raniel А насчет этого - есть у меня некий очень интересный проектик... где-то под НГ, наверное, доведу до ума и выложу.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... Последний раз редактировалось Maximin; 11.12.2009 в 14:43. |
|
11.12.2009, 14:43 | #7 |
Участник
|
Maximin с нетерпением буду ждать... Поседний встречный вопрос. Пакетную обработку можно запустить дистанционно на машине клиента? Я всё правильно понял?
|
|
11.12.2009, 14:46 | #8 |
NavAx
|
Цитата:
Сообщение от raniel
Maximin с нетерпением буду ждать... Поседний встречный вопрос. Пакетную обработку можно запустить дистанционно на машине клиента? Я всё правильно понял?
А насчет дистанционного запуска - это как раз - одна из функция моего проекта.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|
11.12.2009, 14:50 | #9 |
Administrator
|
Цитата:
Обе команды даются так: запускается из меню нужная периодическая операция (с диалогом и вкладкой пакет). На вкладке пакет жмется галка "Пакетная обработка" и если нужно чтобы обработка запустилась именно сейчас - больше ничего не делают и жмут ОК. Для настройки повторения нужно нажать на кнопку "Повторение". Собственно говоря - все. Т.е. один раз нужно запустить аксапту с ключиком batch, проверить, убедиться и дальше пользоваться. В общем-то тоже самое - как и при разработке - сначала написать, затем проверить, убедиться и пользоваться. Т.е. не нужно при каждом запуске настраивать сервер пакетной обработки. Я вот только не понял - в чем разница между дистанционным запуском и запуском из пакета? В чем дистанционность? Только в том, что пользователь удаленно зайдет на компьютер?
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 11.12.2009 в 14:52. |
|
11.12.2009, 14:55 | #10 |
Участник
|
Maximin в моём случае... значит все машины на которых работает Axapta должны быть настроены как сервера пакетной обработки(все компьютеры бухгалтерии, кадровиков, экономистов и т.д)? если это так, то мне не кажется это решение некрасивым. Хотя возможно это единственный выход... Всё же интересно, Можно ли каким либо образом перехватить входящее сообщение? Какие классы инициализируются? Сколько я работаю с Axapta всегда поражался её гибкостью....всё реализовано через приложение, и его без проблем можно доработать/изменить. И как то не верится что такая вещь как приём сообщения и вывод его на экран сделано иначе.
|
|
11.12.2009, 14:57 | #11 |
Administrator
|
А зачем настраивать все машины бухгалтерии? А нельзя настроить одну отдельно взятую машину и все делать на ней?
И еще. Так Вам что нужно? Запустить из командной строки конкретный кусок кода (запустив Аксапту и завершив ее работу по выполнении) или запускать периодически (по требованию администратора) операцию на отдельном сервере? Зачем мучать КАЖДУЮ машину?
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 11.12.2009 в 15:00. |
|
11.12.2009, 14:59 | #12 |
Участник
|
sukhanchik в том и дело что нет. Скрипт может/должен запускаться на любом клиенте, в любое время, а может и сразу везде.
|
|
11.12.2009, 15:03 | #13 |
Участник
|
В таком случае, мне кажется, только через таблицу, подобно тому, как реализована система алертов в Аксапте.
__________________
Axapta has seduced me deadly! |
|
11.12.2009, 15:05 | #14 |
NavAx
|
raniel
Вы б сначал тогда прочитали про пакетную обработку - думаю, что вы не представляете, что это такое. Да и неплохо бы услышать решаемую задачу. Думаю, все можно сделать проще. Настраивать все машины как сервера пакетной обработки бессмысленно - это не для тех целей предназначено. Если стоит задача, чтобы администратор мог запустить на любом клиенте некий класс в произвольное время, то пакетная обработка здесь непригодна. В 3ке подобное получалось сделать, используя небольшую табличку, полностью кэшируемую (Cachemode:EntireTable) на AOS + таймеры, висящие на постоянно используемых формах. Период опроса стоит ставить не менее 30 секунд и при большом кол-ве записей будет не очень хорошо - при любом изменении записей клиенты будут её перечитывать. Причем в табличке должно храниться как можно меньше информации. Т.е. буквально к примеру, userid и флаг наличия сообщения. Всё остальное клиент должен читать уже из другой таблицы при появлении подходящей записи. На 4ке же, можно включиться в стандартный механизм сообщений - там всё легче. Или же, посмотрев, содрать её в 3ку. Но, по сути, оно во многом подобно.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... Последний раз редактировалось Maximin; 11.12.2009 в 15:10. Причина: Добавил ремомендации по содержанию таблицы. |
|
11.12.2009, 15:09 | #15 |
Участник
|
HorrR аллерты это всплывающие сообщения? Те самые сообщения которые выводятся командой info? Если это реализовано через таблицу то через какую? Я чтото ничего подобного не видел. Возможно не туда смотрел...
|
|
11.12.2009, 15:30 | #16 |
Участник
|
Да, это всплывающие сообщения, но не путайте с инфологом. Наполняется буфер EventInbox. Ну а если хотите реализовать что-то подобное, но с выводом инфолога, то можно создать собственную таблицу ну и класс-сервер для обработки сообщения, который стартуется вместе с клиентской сессией и по таймеру проверяет содержимое таблици на наличие новых сообщений для этого юзера или даже клиентской сессии, тут уж как хотите. В общем по идее нагрузка на сервер будет не такой и существенной, если индекс и кеширование будет правильно настроено. Плюс, записей ведь будет немного, они же после отработки сообщения должны будут удалятся.
__________________
Axapta has seduced me deadly! Последний раз редактировалось HorrR; 11.12.2009 в 15:34. |
|
11.12.2009, 15:37 | #17 |
Участник
|
Maximin
Цитата:
На 4ке же, можно включиться в стандартный механизм сообщений
Программное создание оповещения.
__________________
Axapta has seduced me deadly! Последний раз редактировалось HorrR; 11.12.2009 в 15:39. |
|
11.12.2009, 16:13 | #18 |
Administrator
|
Цитата:
Сообщение от raniel
sukhanchik в том и дело что нет. Скрипт может/должен запускаться на любом клиенте, в любое время, а может и сразу везде.
Просто если речь идет об обработке данных в АХ - то тогда нет смысла эту обработку запускать на всех компьютерах - заняться обработкой данных может и отдельно взятый сервер. Если речь идет об обработке каких-либо данных вне АХ (на компьютере клиента) - то тогда зачем АХ? Если речь идет о периодической загрузке(выгрузке) данных в(из) АХ с компьютера клиента, то гораздо проще исходные данные положить куда-то централизованно и опять-таки не мучать каждую машинку.
__________________
Возможно сделать все. Вопрос времени |
|
11.12.2009, 16:15 | #19 |
NavAx
|
Там всё достаточно прозрачно, общие черты вы правильно описали. Ничего сложного - сесть и поэкспериментировать займет меньше времени, чем мне описать всё это, уж не обессудьте.
Цитата:
Сообщение от HorrR
Maximin
А подробнее можно? Нет ли информации полной по этому механизму. Я уже недавно вопрошал: Программное создание оповещения.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|
11.12.2009, 17:43 | #20 |
Участник
|
Все, абсолютно все, "ждущие" ("слушающие") системы основаны на таймере. И пакетная обработка в том числе. Просто все настолько "тонет" во всяких "умных" словах и настройках или скрыто внутри "системного" кода, что добраться до сути становится проблематично...
Т.е. по таймеру, через определенные интервалы времени, запускается некий код, который проверят нет ли чего для выполнения. Далее - по ситуации. В Axapta, основой для ручного создания таймера, является метод setTimeOut(), который есть у любого класса, поскольку это метод "базового" ("родительского") класса Object. Соответственно, если нужен "глобальный" слушатель, то следует вызвать setTimeOut() глобального же объекта. Удобнее всего это сделать в глобальном классе Info. Общая схема примерно такая: 1) В классе Info создается собственный метод, например info.MyMethod(), в котором и производится анализ того, не надо ли что-то сделать. 2) В методе info.executeUserOptions() организуется вызов этого метода по таймеру примерно так X++: this.setTimeOut(identifierstr(MyMethod), 30*1000, false); X++: this.setTimeOut(identifierstr(MyMethod), 30*1000, false); Правда, возникает дополнительная проблема "совместного доступа". Т.е. чтобы два (или более) сеанса не начали выполнять одно и то же задание. Как это "разрулить" решается в каждом конкретном случае. В зависимости от того, что именно должно быть сделано. Да, кстати, если обмен директивами идет через таблицу, то ее ни в коем случае не надо кешировать. Вам ведь надо всегда читать актуальную информацию, а не то, что сохранено в кеше. ============================================================== Но, вообще-то, присоединяюсь к sukhanchik. Сначала ответьте самому себе ЧТО Вы собираетесь выполнять таким способом? Не "общими словами" вроде "администратору захотелось", а именно вполне конкретно. Например: администратору надо сделать перезагрузку AOS. Далее попробуйте уточнить, обязательно ли для этой обработки запускать для ВСЕХ клиентов или достаточно, чтобы работал хотя бы один клиент? А нельзя запустить этого одного именно тогда, когда "администратору захотелось"? |
|
|
За это сообщение автора поблагодарили: konfet (1), raniel (1), someOne (5). |
Теги |
обработка событий, события, сообщение |
|
Похожие темы | ||||
Тема | Ответов | |||
Обработка входящего НДС | 12 | |||
Помогите!!!!!Обработка вх.НДС в SP4 | 4 | |||
Висит обработка фактуры | 12 | |||
Суммарная обработка накладной | 1 | |||
Окно сообщений | 4 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|