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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.12.2009, 17:43   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,719 / 1204 (44) ++++++++
Регистрация: 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, время: 11:34.