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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2007, 13:37   #1  
abyzov is offline
abyzov
Участник
Аватар для abyzov
 
8 / 10 (1) +
Регистрация: 09.02.2007
Столкнулся с проблемой. Необходимо каждый день в определенное время запускать определенный codeunit (в целях синхронизации). Как это можно сделать средствами Нави? Может быть стоит попробовать придумать что-то с Application Server?
Старый 30.03.2007, 14:03   #2  
balashov is offline
balashov
Участник
Аватар для balashov
 
78 / 10 (1) +
Регистрация: 01.09.2005
Цитата:
Сообщение от a.abyzov Посмотреть сообщение
Столкнулся с проблемой. Необходимо каждый день в определенное время запускать определенный codeunit (в целях синхронизации). Как это можно сделать средствами Нави? Может быть стоит попробовать придумать что-то с Application Server?
Посмотри форму 6093 и все что с ней связано в 3.70 - диспетчер задачь. Должно хватить.
Старый 30.03.2007, 15:04   #3  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
У меня постоянно запущена формочка, и каждые 2 минуты запускает синхронизацию.
Старый 30.03.2007, 15:57   #4  
RedFoxUA is offline
RedFoxUA
Участник
Аватар для RedFoxUA
 
60 / 10 (1) +
Регистрация: 25.10.2006
Цитата:
Сообщение от a.abyzov Посмотреть сообщение
Столкнулся с проблемой. Необходимо каждый день в определенное время запускать определенный codeunit (в целях синхронизации). Как это можно сделать средствами Нави? Может быть стоит попробовать придумать что-то с Application Server?
Именно это и нужно сделать для правильно реализации (правда если в лицензии есть свободный Application Server, так как 1 бесплатно идет в "стандартной поставке").
Хотя даже если он используется, то можно дописаться либо в 1 кодеюнит (по аналогии), либо куда-нибудь еще (где он используется). Тогда сервер сам будет запусакть его в нужное время (днем, ночью, по выходным и т.д.)
Старый 02.04.2007, 11:17   #5  
MSI is offline
MSI
Участник
 
25 / 10 (1) +
Регистрация: 03.10.2006
Есть функционал Диспетчера задач в 4.0 (Администрирование - Управление ИТ - Диспетчер задач)
С помощью него можно запускать разные объекты (в т. ч. кодъюниты)
Правда как работает - не разобрался
Старый 02.04.2007, 13:45   #6  
RedFoxUA is offline
RedFoxUA
Участник
Аватар для RedFoxUA
 
60 / 10 (1) +
Регистрация: 25.10.2006
Цитата:
Сообщение от MSI Посмотреть сообщение
Есть функционал Диспетчера задач в 4.0 (Администрирование - Управление ИТ - Диспетчер задач)
С помощью него можно запускать разные объекты (в т. ч. кодъюниты)
Правда как работает - не разобрался
Этот диспечер задач должен быть запущен "вручную", чтобы потом он запускал разные объекты.
Старый 04.04.2007, 15:14   #7  
EDVard_imported is offline
EDVard_imported
Участник
 
49 / 10 (1) +
Регистрация: 22.07.2004
Способ 1: NAS - запуск в качестве сервиса из командной строки в формате:

"\\сетевой_путь_к_папке_NAS\nassql.exe" appservername=NAVISIONSERVER-SQL, servername=NAVISIONSERVER, database=LiveDB, company="Компания """Тест""", startupparameter=jobschID_SCHED, installasservice=Yes
эту строку нужно запустить 1 раз.
А эту каждый раз, когда вам нужно запустить Диспетчер задач:

"\\сетевой_путь_к_папке_NAS\nassql.exe" appservername=NAVISIONSERVER-SQL, servername=NAVISIONSERVER, database=LiveDB, company="Компания """Тест""", startupparameter=jobschID_SCHED

где ID_SCHED - код задания в таблице 5981

При этом в СU1 ApplicationManagement нужно в триггере NASHandler прописать такой текст (отмечен //EDV01 begin/end)

ParamStr := UPPERCASE(NASID);
REPEAT
SepPosition := STRPOS(ParamStr,',');
IF SepPosition > 0 THEN
Parameter := COPYSTR(ParamStr,1,SepPosition - 1)
ELSE
Parameter := COPYSTR(ParamStr,1);
IF (COPYSTR(Parameter,1,2) = 'CG') THEN BEGIN
BizTalkNASStartup.RUN;
IF STRPOS(Parameter,' PORT=') > 0 THEN
IF EVALUATE(PortNumber,COPYSTR(Parameter,STRPOS(Parameter,'=') + 1)) THEN BEGIN
BizTalkNASStartup.StartTcpListen(PortNumber);
CGNASStartedinLoop := TRUE;
END;
IF (STRLEN(Parameter) = 2) THEN BEGIN
BizTalkNASStartup.StartTcpListen(0);
CGNASStartedinLoop := TRUE;
END;
END;
IF (COPYSTR(Parameter,1,4) = 'ADCS') THEN BEGIN
IF STRPOS(Parameter,' ADCSID=') > 0 THEN
IF EVALUATE(ADCSID,COPYSTR(Parameter,STRPOS(Parameter,'=') + 1)) THEN
ADCSNASStartup.SetNASID(ADCSID)
ELSE
ADCSNASStartup.SetNASID('NAS1');
ADCSNASStartup.RUN;
CGNASStartedinLoop := TRUE;
END;
//EDV01 begin
IF COPYSTR(Parameter,1,6) = 'JOBSCH' THEN
IF JobSchedulerSetup.GET(DELCHR(COPYSTR(Parameter,7),'<>',' ')) THEN BEGIN
CASE JobSchedulerSetup."Object Type" OF
JobSchedulerSetup."Object Type"::Report:
REPORT.RUNMODAL(JobSchedulerSetup."Object No.",FALSE,FALSE);
JobSchedulerSetup."Object Type":ataport:
DATAPORT.RUNMODAL(JobSchedulerSetup."Object No.",FALSE);
JobSchedulerSetup."Object Type"::Codeunit:
CODEUNIT.RUN(JobSchedulerSetup."Object No.");
END;
END;
CGNASStartedinLoop := TRUE;
//EDV01 end
IF CGNASStartedinLoop = FALSE THEN
CASE Parameter OF
'MAILLOG':
CODEUNIT.RUN(CODEUNIT::"E-Mail Dispatcher");
ELSE
IF CPApplnSrvSetup.GET(Parameter) THEN BEGIN
CPApplnSrvMgt.SetNASID(Parameter);
WORKDATE := 0D;
IF CPApplnSrvMgt.GetSendMail THEN BEGIN
MailHandler.RUN;
MailHandler.StartCountDown(2000);
END;
IF CPApplnSrvMgt.GetPerformSynch THEN
MsgDispatcher.RUN;
IF CPApplnSrvMgt.GetPerformRequests THEN
RequestHandler.RUN;
END ELSE
ERROR(Text018,Parameter);
END;
ParamStr := COPYSTR(ParamStr,SepPosition + 1);
CGNASStartedinLoop := FALSE;
UNTIL SepPosition = 0;

Это для случая, если нам нужно вызвать какую-то конкретную задачу. Если же нужно просто запустить диспетчер, то можно дописать
//EDV01 begin
IF COPYSTR(Parameter,1,6) = 'JOBSCH' THEN
IF JobSchedulerSetup.GET(DELCHR(COPYSTR(Parameter,7),'<>',' ')) THEN BEGIN
CASE JobSchedulerSetup."Object Type" OF
JobSchedulerSetup."Object Type"::Report:
REPORT.RUNMODAL(JobSchedulerSetup."Object No.",FALSE,FALSE);
JobSchedulerSetup."Object Type":ataport:
DATAPORT.RUNMODAL(JobSchedulerSetup."Object No.",FALSE);
JobSchedulerSetup."Object Type"::Codeunit:
CODEUNIT.RUN(JobSchedulerSetup."Object No.");
END;
END ELSE //добавляем для обработки параметра JOBSCH без указания конкретной задачи
//сюда вставить код с кнопки СТАРТ формы управления диспетчером задач
CGNASStartedinLoop := TRUE;
//EDV01 end

Единственное, что я не знаю, так это то, какой параметр нужно указать в строке запуска NAS (или NASSQL) для того, чтобы отрубить сессию (останосить application server). Если кто знает, подскажите.

Способ 2: Создать сервис Windows с помощью Windows Resource Kit (доки можно почитать тут: http://support.microsoft.com/kb/q137890/
Ресурс кит загружается тут - http://www.microsoft.com/downloads/details...DisplayLang=en)

Затем создать задания Windows через Стандартные программы Назначенные задания для запуска и остановки созданного сервиса.
Например:
C:\WINDOWS\system32\sc.exe start JobSchedulerNav
C:\WINDOWS\system32\sc.exe stop JobSchedulerNav
Все это нужно сделать от некого пользователя, отвечающего за диспетчер.
На главной форме или в ApplicationManagement написать проверку пользователя и запуск диспетчера, если пользователь тот, который нам нужен.

Все это работает. Отжирает сессию, конечно. Но ведь ночью мало кто работает из сотрудников
Старый 04.04.2007, 17:09   #8  
vovka_imported is offline
vovka_imported
Участник
 
62 / 10 (1) +
Регистрация: 07.02.2007
для организации синхронизаций еще есть замечательный инструмент от компании ланштайнер, последняя их версия это дата директор ..... очень рекомендую, по заявлениям может даже объекты в удаленных базах синхранизировать (но это я не проверял) ... работает отлично, канал при этом сильно не грузит, как то там сам регулирует размеры пакетов .... в общем достаточно интерессное решение получилось
Старый 04.04.2007, 18:27   #9  
RedFoxUA is offline
RedFoxUA
Участник
Аватар для RedFoxUA
 
60 / 10 (1) +
Регистрация: 25.10.2006
Цитата:
Сообщение от vovka Посмотреть сообщение
для организации синхронизаций еще есть замечательный инструмент от компании ланштайнер, последняя их версия это дата директор ..... очень рекомендую, по заявлениям может даже объекты в удаленных базах синхранизировать (но это я не проверял) ... работает отлично, канал при этом сильно не грузит, как то там сам регулирует размеры пакетов .... в общем достаточно интерессное решение получилось
Проверял и настраивал лично - работает почти без збоев. Сложность будет из-за отсутствия нормальной доки только в корректной настройке заданий (при этом нежно не забывать, что корректно нужно проектировать, а не только настраивать).
Правда есть несколько бочков и самый основной из них - лицензирование. Код не продают отдельно, а нужно покупать все решение + кол-во магазинов столько, сколько баз.

Хотя если распределенная сеть со своими базами в областях (например региональные представительства) = 100% решение., потоум что цена не очень велика. Да и то, что они добавили - просто "лакомка" для людей, которые любят различные рода "акции и подарки".
Старый 05.04.2007, 12:10   #10  
zm is offline
zm
Участник
 
44 / 10 (1) +
Регистрация: 15.07.2003
Адрес: Латвия
Zapuskat' cherez Appl. Server, tam vse dostatochno prosto i ne s'efdaetsja sessija, a v CU nuzno ewe rabotat's timerom. Ja delal nemnogo bolee universal'no - pishetsja otdel'nij CU s timerom iz kotorogo zapuskajutsja modernizirovannie modernizirovannij Job scheduler.
Старый 05.04.2007, 12:42   #11  
RedFoxUA is offline
RedFoxUA
Участник
Аватар для RedFoxUA
 
60 / 10 (1) +
Регистрация: 25.10.2006
Цитата:
Сообщение от zma Посмотреть сообщение
Zapuskat' cherez Appl. Server, tam vse dostatochno prosto i ne s'efdaetsja sessija, a v CU nuzno ewe rabotat's timerom.
Съедается сессия, но не пользовательская, а Appl. Server (указано в лицензии).

Цитата:
Ja delal nemnogo bolee universal'no - pishetsja otdel'nij CU s timerom iz kotorogo zapuskajutsja modernizirovannie modernizirovannij Job scheduler.
Так тогда этот кодеюнит нужно запускать каким-то образом, чтобы таймер отработал ;-)

Как по мне - подкорректировать 1 кодеюнит (или связанные данные - зависит от задачи) таким образом (если присутствует только 1 лицензия), чтобы дополнительно проверялось время и сопоставлялось с каким нибудь временем, которое хранится в настройках (всего 3 поля для универсальности - старое значение времени, тип настроечного времени - день, час, минута, секунта, {сводобное творчество}, значение прироста). Если пришло время отработки - запуск чего-то.

Ну это общая концепция, если делать через Appl. Server
Старый 05.04.2007, 13:09   #12  
zm is offline
zm
Участник
 
44 / 10 (1) +
Регистрация: 15.07.2003
Адрес: Латвия
"Так тогда этот кодеюнит нужно запускать каким-то образом, чтобы таймер отработал "
Esstestvenno on zapuskaetsja cherez 1-i CU (cherez Appl. Sever). Fishka v tom, chto standartnij Navi Job Scheduler ne trebuet dopolnitel'noj sessii, ne trebuet ruuchnogo zapuska, a v nem zalozeno dostatochno mnogo vsjakih udobnih vewei.
Старый 05.04.2007, 13:57   #13  
EDVard_imported is offline
EDVard_imported
Участник
 
49 / 10 (1) +
Регистрация: 22.07.2004
Коллеги!

С шедуллером, который запускается по времени, все просто и способов множество.

А вот как быть с запуском Navision с конкретным параметром, обработку которого несложно сделать в 1CU (NASHandler)??? Причем проблема не с самим запуском и не со съеданием сессии (какой бы то ни было), а именно с тем, чтобы NAS закрылся и чтобы его можно было запустить в следующий раз с другим параметром.

Например, нам нужен некий механизм управления батчами (обработки пакетов по миграции данных из разных систем, по учету и т.д.), который должен работать из некого внешнего приложения, написанного, к приеру на Delphi. Есть список процессов, которые нужно администровать централизованно. Есть администратор, который при необходимости должен запускать тот или иной процесс (в любой из ИС предприятия) вручную.
Задача в том, чтобы запустить Navision с неким параметром (ID задачи из диспетчера задач), в результате чего бы выполнилась определенная задача диспетчера задач.
И задачу это можно решить с помощью NAS, НО! После запуска NAS из командной строки, этот самый администратор должен нажать кнопку ESC, чтобы закончить работу NAS для того, чтобы запустить следующую задачу (например).
В принципе - администратору не сложно нажать эту кнопку, но хочется как-то сделать процесс красивее что ли. Чтобы по нажатию некой кнопки в написанном на Delhpi (или в любой другой среде разработки) приложении запускался NAS с определенным параметром, в триггере NASHandler происходила обработка этого параметра, запускалась соответствующая задача диспетчера задач и после ее успешного завершения NAS закрывался, освобождая тем самым сессию NAS и закрывая окно командной строки. То есть, по сути, нужно симитировать нажатие кнопки ESC админимтсратором, которого так ждет NAS для того, чтобы завершить свою работу.
В случае возниконовения ошибки обработки какой-либо задачи хотелось бы при этом получать сообщение либо писать информацию об ошибке в лог.
Если есть у кого то такой опыт, поделитесь, пожалуйста.
Старый 05.04.2007, 14:17   #14  
Wizard_imported is offline
Wizard_imported
Участник
 
157 / 10 (1) +
Регистрация: 25.11.2004
1. да не надо его закрывать, пусть себе крутится и обрабатывает очередь заданий, а это внешнее приложение пусть очередью управляет (записи в табличке создает с номером объекта и строкой параметров).
2. для обработки ошибок в NAS есть триггер NavisionTimer::TimerError(ErrorString : Text[1024]) в компоненте 'Navision Timer 1.0'.Timer
Старый 05.04.2007, 14:34   #15  
EDVard_imported is offline
EDVard_imported
Участник
 
49 / 10 (1) +
Регистрация: 22.07.2004
Мне не нужен таймер и не нужна очередь.

Ок, спасибо за ответы!
Старый 05.04.2007, 14:58   #16  
randrews is offline
randrews
Участник
Аватар для randrews
 
312 / 10 (1) +
Регистрация: 06.12.2004
Цитата:
Сообщение от EDVard Посмотреть сообщение
Мне не нужен таймер и не нужна очередь.

Ок, спасибо за ответы!
Честно говоря, вышеперечисленные советы более разумны. Но, если вы настаиваете на внешнем закрытии сессии, то можно такой метод попробовтаь:
1. Создаете процессы (Service) NAS с нужными параметрами.
2. Все-таки придется создать таблицу с признаками - в каком состоянии находится задание NAS. Выполнилось. В процессе выполнения. Свободно...
3. "внешнее приложение, написанное, к примеру, на Delphi" стартует NET START нужный процесс. Затем подсоединяется к SQL базе. Смотрит таблицу признаков - когда флаг станет "задание выполнено". Запускает NET STOP
Старый 05.04.2007, 15:24   #17  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от EDVard Посмотреть сообщение
Если есть у кого то такой опыт, поделитесь, пожалуйста.
Если не подходит в данном случае еще и батник, то я пас.. Не хочу участвовать в установке все с ног на непонятно что...
ИЗВИНИТЕ!!! Только без обид
Старый 06.04.2007, 10:56   #18  
EDVard_imported is offline
EDVard_imported
Участник
 
49 / 10 (1) +
Регистрация: 22.07.2004
RedFox, батчник мне как раз подходит!

Но у меня проблема с его написанием. Я пишу так:

"\\navisionserver\Application Server\nassql.exe" appservername=NAVISION-SQL, servername=NAVISIONSERVER, database=Live, company=Компания ""РиК"", startupparameter=jobschmigex, installasservice=Yes
net start NAVISION-SQL
net stop NAVISION-SQL

Но, моя обработка в триггере NASHandler не отрабатывает в этом случае.
Если открыть службу Navision Application Server NAVISION-SQL после ее установки первой строкой батника, то в ней нет никаких параметров, а строка испролняемый файл содержит следующее:
"\\navisionserver\Application Server\nassql.exe"
А строка Параметры запуска пустая.
Если я в строку параметров запуска прописываю:
servername=NAVISIONSERVER, database=Live, company=Компания ""РиК"", startupparameter=jobschmigex
и запускаю службу, то ничего в общем то не меняется, кроме состояния службы.
Сессия в Navi не появляется, обработка не работает.

Обращаюсь снова к вам за помощью!

Заранее спасибо!
Старый 06.04.2007, 11:22   #19  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от EDVard Посмотреть сообщение
"\\navisionserver\Application Server\nassql.exe" appservername=NAVISION-SQL, servername=NAVISIONSERVER, database=Live, company=Компания ""РиК"", startupparameter=jobschmigex, installasservice=Yes
net start NAVISION-SQL
net stop NAVISION-SQL

Но, моя обработка в триггере NASHandler не отрабатывает в этом случае.
Если открыть службу Navision Application Server NAVISION-SQL после ее установки первой строкой батника, то в ней нет никаких параметров, а строка испролняемый файл содержит следующее:
"\\navisionserver\Application Server\nassql.exe"
А строка Параметры запуска пустая.
Если я в строку параметров запуска прописываю:
servername=NAVISIONSERVER, database=Live, company=Компания ""РиК"", startupparameter=jobschmigex
и запускаю службу, то ничего в общем то не меняется, кроме состояния службы.
Сессия в Navi не появляется, обработка не работает.
Если я все-таки правильно понял то, что нужно сделать, то батник должен содержать следующее:
- запуск на выполнение Application Server с необходимыми параметрами (startupparameter=jobschmigex, где jobschmigex - код, по которому в 1 кодеюните производится обработка - см. аналог ADCS). Так же производится корректировка 1 кодеюнита с запуском то, что нужно, будь то другой кодеюнит, отчет, внешняя компонента или что-то еще. Самое главное, чтобы она возвращала куда-то признак о том, что ее работа или обработка закончилась (нужно смотреть по бизнес-процессу).
- далее можно использовать что-то для анализа статуса завершения процесса (это может быть что угодно, в зависимости от реализации и интеграции). Как только получено сообщение о завершении работы - переход на следующий пункт.
- остановка Application Server с необходимыми параметрами (startupparameter=jobschmigex) и переход на другое место

Далее все повторяется, но меняется только startupparameter=SecondJobsChmigex.

P.S. Кстати. вопрос к крутым спецам: Если кому не трудно, то объясните точнее по поводу net start NAVISION-SQL ..
net stop NAVISION-SQL, а то интересно. Ну или пришлите что-нибудь в личку или redfox@list.ru. Заранее благодарен.
Старый 06.04.2007, 11:41   #20  
randrews is offline
randrews
Участник
Аватар для randrews
 
312 / 10 (1) +
Регистрация: 06.12.2004
Цитата:
Сообщение от EDVard Посмотреть сообщение
"\\navisionserver\Application Server\nassql.exe" appservername=NAVISION-SQL, servername=NAVISIONSERVER, database=Live, company=Компания ""РиК"", startupparameter=jobschmigex, installasservice=Yes
net start NAVISION-SQL
net stop NAVISION-SQL
Во-первых, если что в NAS не получается - сразу смотрите Event Viewer. Без него вообще ничего не поймете.
Во-вторых, зачем вы каждый раз инсталируете как сервис ??? Сделайте заранее несколько сервисов NAS !!! Каждый со своим параметром !!!
И потом уже играйтесь с
net start NAVISION-SQL_NUM1
net stop NAVISION-SQL_NUM1

net start NAVISION-SQL_NUM2
net stop NAVISION-SQL_NUM2
и т.п.

Кстати, не обязательно запускать его батником - для тестов можно в NAS консоли Navision позапускать с разными параметрами.

В третьих, прописав за start сразу stop - я не уверен, что у вас будет все нормально выполняться. Надо все-таки между этим как-то убедиться что ваше задание уже выполнилось - как проверить - варианты описаны выше.

to redfox: net start и net stop - просто запускает и останавливает виновский Service.
 


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

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

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