![]() |
#7 |
Участник
|
Способ 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": ![]() 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": ![]() 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 написать проверку пользователя и запуск диспетчера, если пользователь тот, который нам нужен. Все это работает. Отжирает сессию, конечно. Но ведь ночью мало кто работает из сотрудников ![]() |
|