Командная задача Informatica

Я задал этот вопрос на форумах Informatica, но никто не знал ответа, так что теперь я пришел сюда за помощью.

Насколько я понимаю, все, что находится в поле «Команда успеха после сеанса», должно быть передано в соответствующий командный интерфейс и выполнено. Однако когда я использую оператор IF, он не работает. Любые идеи?

"IF 1==1 echo.bob >> f:\filename.txt"

Это работает, когда я ввожу его вручную в терминал (в данном случае DOS). Но когда я бросаю его в многократно используемую командную задачу, я получаю следующее:

ОШИБКА
ПОСЛЕ СЕССИИ
CMN_1949
Ошибка: [команда до / после сеанса] Идентификатор процесса 2996. Команда оболочки завершилась ошибкой с кодом выхода 1.

PS: Использование 9.5.1 Hotfix 1


person Taejang    schedule 18.10.2013    source источник
comment
добро пожаловать в stackoverflow!   -  person Corley Brigman    schedule 18.10.2013
comment
Спасибо! Я все время ищу это место; наконец нашел вопрос, на который еще нет ответа, и пришлось зарегистрироваться   -  person Taejang    schedule 18.10.2013
comment
Я бы предположил по вопросу прав. Когда вы говорите, что пробовали это вручную, вы действительно входили на сервер, используя тот же вход, что и сервер интеграции informatica?   -  person whetstone    schedule 19.10.2013
comment
@Marek: echo.bob перекликается с новой строкой. Командная задача отлично работает без оператора IF.   -  person Taejang    schedule 24.10.2013
comment
@wetstone: я не заходил на сервер и не пробовал там; Я запустил команду на своем собственном терминале. Однако, используя пользователя Informatica и на сервере Informatica, я могу успешно выполнить эхо для упомянутого файла, поэтому это не должны быть разрешения для файла или папки. Даже создал новый файл, чтобы он не был заблокирован для записи. Не уверен, какие другие разрешения могут помешать.   -  person Taejang    schedule 24.10.2013


Ответы (1)


Думаю, проблема не в том, как Informatica выполняет команды. Проблема заключается в том, как DOS возвращает коды ошибок и, в частности, в том, что некоторые команды, такие как IF и ECHO, этого не делают. (Код возврата, который Informatica получает из DOS, можно увидеть с помощью echo %ERRORLEVEL% в DOS, и я буду использовать здесь имя DOS для удобства, хотя сейчас в Windows это не совсем правильно)

Выполните следующие команды по очереди:

REM "cd" sets ERRORLEVEL => ERRORLEVEL is set to 0
cd c:\
echo %ERRORLEVEL%

REM "echo" does not set ERRORLEVEL => ERRORLEVEL is left unchanged 
echo.bob >> c:\filename.txt
echo %ERRORLEVEL%

REM "echo" does not set ERRORLEVEL => ERRORLEVEL is left unchanged 
echo.bob >> c:\thisdirdontexist\filename.txt
echo %ERRORLEVEL%

Первый CD устанавливает код возврата, в данном случае 0.
Следующий ECHO (с тестом IF или без него) не меняет код возврата, поэтому он остается 0, даже если последний ECHO завершился неудачно.

Если бы первая команда CD возвратила бы ошибку;

@echo off
REM "cd" sets ERRORLEVEL => ERRORLEVEL is set to 1
cd xxxxxx
echo %ERRORLEVEL%

тогда все последующие ECHO вернут 1, и Informatica откажет им обоим.

Это говорит о том, что это все еще странно, поскольку каждая команда успеха после сеанса в Informatica выполняется под своей собственной cmd-оболочкой, поэтому начальный ERRORLEVEL для каждой команды всегда должен быть 0. Я не могу это объяснить и, к сожалению, я не могу фактически протестировать это в Informatica, поскольку мы работаем под UNIX, но я почти уверен, что это, по крайней мере, часть проблемы.

Чтобы обойти проблему, убедитесь, что вы установили опцию «Сбой задачи при сбое какой-либо команды» на вкладке свойств. Это заставляет Informatica использовать параметр cmd/c, и поскольку он устанавливает правильный код возврата, Informatica должна иметь возможность правильно определить ошибку (или успех). Если это по-прежнему не работает должным образом, попробуйте самостоятельно изменить команду на:

 cmd /c "IF 1==1 echo.uncle >> c:\filename.txt"
person whetstone    schedule 30.10.2013