4 BAT-файла на клиентском уровне (клиентского слоя NAV 2009)

Пожалуйста, перед чтением этой статьи ознакомьтесь с заметкой «Multiple Service Tiers»

Неужели вам необходимо подходить к машине, на которой запущен сервер приложений (Service Tier), чтобы стартовать нужные сервисы вручную, или есть более простой способ сделать это?

Наверно, уже догадались, что есть. Для этого нам понадобится команда SC:

SC \\machine start servicename

Предположим, что мы будем использовать файл CreateService.bat для создания сервера приложений. Известно, что имя сервиса связано с именем инстанса сервера. Тогда нам понадобится 4 .BAT файла, которые позволят:

  • Запускать сервера приложений.
  • Останавливать сервера приложений.
  • Перезапускать сервера приложений.
  • Запускать клиента (RTC), для работы с нужным сервером приложений (и, если понадобится, стартовать сам сервер).

Эти четыре скрипта сильно упрощают жизнь, если вы работаете с нескольми серверами приложений, встречайте:

StartService.bat

@ECHO OFF
IF «%1» == «» GOTO usage
SETLOCAL
SET SERVICETIER=%2
IF NOT «%SERVICETIER%» == «» SET SERVICETIER=\\%SERVICETIER%
SET NAVPATH=%~dp0
SC %SERVICETIER% query MicrosoftDynamicsNavServer$%1 > nul
IF ERRORLEVEL 1 GOTO :eof
SC %SERVICETIER% query MicrosoftDynamicsNavServer$%1 | FINDSTR «RUNNING»
IF NOT ERRORLEVEL 1 GOTO :eof
SC %SERVICETIER% start MicrosoftDynamicsNavServer$%1
CALL «%NAVPATH%SLEEP.BAT» 3
SC %SERVICETIER% start MicrosoftDynamicsNavWS$%1
CALL «%NAVPATH%SLEEP.BAT» 3
GOTO :eof
:usage
ECHO.
ECHO Usage:
ECHO.
ECHO startservice instancename [servicetier]
ECHO.

SETLOCAL означает, что изменения в переменных окружения будут работать только в пределах видимости файла

Все .BAT проверяют, существует ли служба и даже, запущена ли она – в этом случае стартовать ее уже не надо.

Кроме того, из-за запасов надо достать файл Sleep.BAT, описанный вот в этой заметке.

StopService.bat

@ECHO OFF
IF «%1» == «» GOTO usage
SETLOCAL
SET SERVICETIER=%2
IF NOT «%SERVICETIER%» == «» SET SERVICETIER=\\%SERVICETIER%
SET NAVPATH=%~dp0
SC %SERVICETIER% query MicrosoftDynamicsNavServer$%1 > nul
IF ERRORLEVEL 1 GOTO :eof
SC %SERVICETIER% query MicrosoftDynamicsNavServer$%1 | FINDSTR «STOPPED»
IF NOT ERRORLEVEL 1 GOTO :eof
SC %SERVICETIER% stop MicrosoftDynamicsNavWS$%1
CALL «%NAVPATH%SLEEP.BAT» 3
SC %SERVICETIER% stop MicrosoftDynamicsNavServer$%1
CALL «%NAVPATH%SLEEP.BAT» 3
GOTO :eof
:usage
ECHO.
ECHO Usage:
ECHO.
ECHO stopservice instancename [servicetier]
ECHO.

Примерно такой же подход, что и в StartService.bat – если служба не запущена, то и останавливать ее не требуется..

RestartService.bat

Наверное, вы уже догадались, что делает этот bat-файл, т.ч. нет нужды пояснять.

@ECHO OFF
IF «%1» == «» GOTO usage
SETLOCAL
SET SERVICETIER=%2
IF NOT «%SERVICETIER%» == «» SET SERVICETIER=\\%SERVICETIER%
SET NAVPATH=%~dp0
SC %SERVICETIER% query MicrosoftDynamicsNavServer$%1 > nul
IF ERRORLEVEL 1 GOTO :eof
SC %SERVICETIER% query MicrosoftDynamicsNavServer$%1 | FINDSTR «STOPPED»
IF NOT ERRORLEVEL 1 GOTO dontstop
SC %SERVICETIER% stop MicrosoftDynamicsNavWS$%1
CALL «%NAVPATH%SLEEP.BAT» 3
SC %SERVICETIER% stop MicrosoftDynamicsNavServer$%1
CALL «%NAVPATH%SLEEP.BAT» 3
:dontstop
SC %SERVICETIER% start MicrosoftDynamicsNavServer$%1
CALL «%NAVPATH%SLEEP.BAT» 3
SC %SERVICETIER% start MicrosoftDynamicsNavWS$%1
CALL «%NAVPATH%SLEEP.BAT» 3
GOTO :eof
:usage
ECHO.
ECHO Usage:
ECHO.
ECHO restartservice instancename [servicetier]
ECHO.

Он сначала останавливает службу, потом запускает ее снова.

RTC.bat

А вот и самый интересный батничек – который запускает RTC, с подключением к нужному серверу приложений, но вначале запускает сам сервер (если он еще не запущен).

@ECHO OFF
IF «%1» == «» GOTO usage
SETLOCAL
SET COMPANY=%3
REM IF ‘%COMPANY%’ == » SET COMPANY=»CRONUS International Ltd.»
IF ‘%COMPANY%’ == » SET COMPANY=»CRONUS USA, Inc.»
ECHO.%COMPANY%
SET COMPANY=%COMPANY:»=%
SET COMPANY=%COMPANY:,=#%
:again
SET BEFORE=%COMPANY%
FOR /F «tokens=1* delims= » %%A IN (‘ECHO.%COMPANY%’) DO (
IF NOT «%%B» == «» SET COMPANY=%%A%%20%%B
)
IF NOT «%BEFORE%» == «%COMPANY%» GOTO again
SET COMPANY=%COMPANY:#=,%
SET MACHINE=%2
SET SERVICETIER=%MACHINE%
IF «%SERVICETIER%» == «» SET SERVICETIER=localhost
CALL STARTSERVICE.BAT %1 %SERVICETIER%
START dynamicsnav://%SERVICETIER%/%1/%COMPANY%/
GOTO :eof
:usage
ECHO.
ECHO Usage:
ECHO.
ECHO RTC instancename [servicetier] [«Company»]
ECHO.

RTC можно запустить, указав имя сервера приложений, имя машины, на которой крутится сервер, и название фирмы.

Запуск RTC с подключением к серверу приложений, установленному по умолчанию, будет выглядеть так:

C:\Prog…\60\>RTC DynamicsNAV localhost «CRONUS International Ltd.»

или просто

C:\Prog…\60\>RTC DynamicsNAV

Т.к. второй параметр по умолчанию – localhost, а третий – CRONUS. У меня, во всяком случае, работает.

Обратите внимание, что в .BAT-файле отрабатывает цикл, который заменяет все пробелы в названии фирмы на сочетание %20. Кроме того, до запуска цикла я заменил все запятые на решетки (#), т.к. с запятыми работа цикла изменится. После того, как цикл отработал, я делаю обратную замену. Это значит, что названии фирмы не должно быть #,

Пустое название фирмы тоже не сработает.

Если у вас есть еще какие-то спец.символы, или в названии фирмы – решетка, поменяйте в этом цикле алгоритм замены на нужный.

Лично я использую эти батники для создания ярлыков RTC на рабочий стол, которые подключаются к нужным серверам. Кроме того, каждую ночь я останавливаю все сервера приложений вот такой командой:

for /f %D in (‘dir /ad/b’) do ( CALL STOPSERVICE.BAT %D )

Батники можно задействовать и на машине с запущенным сервером для управления запуском и остановкой сервисом (кроме RTC.bat, естественно), но полезнее всего они для десктопа

Архив со всеми .BAT-файлами можно взять здесь: http://www.freddy.dk/4ForTheClientTier.zip

В нем, кроме вышеописанных, есть файл StopServices.bat (остановка всех серверов приложений, должен быть запущен с соответствующей машины).

Приятного аппетита :)

Оригинал статьи доступен здесь: http://blogs.msdn.com/b/freddyk/archive/2008/10/31/4-bat-files-for-the-client-tier.aspx

Автор:

В области Navision - с 2003 года. Профессиональные интересы: NAV, MS SQL, .NET, BPMN, IT-менеджмент. Предметная область: логистика, финансы, склады, 3PL.

Количество статей, опубликованных автором: 86.

Добавить комментарий