#peoplesoft #peoplesoft-app-engine
#peoplesoft #peoplesoft-app-engine
Вопрос:
Я хочу выполнить пакетный файл с использованием People code в программе Application Engine. Но у программы возникла проблема с возвратом кода Exec в виде ненулевого значения (значение — 1).
Ниже приведен фрагмент кода people.
Global File amp;FileLog;
Global string amp;LogFileName, amp;Servername, amp;commandline;
Local string amp;Footer;
If amp;Servername = "PSNT" Then
amp;ScriptName = "D: amp;amp; D:psoftPT854appservprcsRNBatchFile.bat";
End-If;
amp;commandline = amp;ScriptName;
/* Need to commit work or Exec will fail */
CommitWork();
amp;ExitCode = Exec("cmd.exe /c " | amp;commandline, %Exec_Synchronous %FilePath_Absolute);
If amp;ExitCode <> 0 Then
MessageBox(0, "", 0, 0, ("Batch File Call Failed! Exit code returned by script was " | amp;ExitCode));
End-If;
Любая помощь, как решить эту проблему.
Комментарии:
1. Почему вы делаете
amp;ScriptName = "D: amp;amp; D:psoftPT854appservprcsRNBatchFile.bat";
вместоamp;ScriptName = "D:psoftPT854appservprcsRNBatchFile.bat";
2. Я хочу изменить каталог на общий диск и выполнить скрипт.
3. Вы должны быть в состоянии сделать
amp;exitCode = Exec("D:psoftPT854appservprcsRNBatchFile.bat", %Exec_Synchronous %FilePath_Absolute);
, я думаю"D: amp;amp; D:psoft.."
, синтаксически недопустимо, что вызывает вашу ошибку.4. Таким образом, нет необходимости предоставлять cmd.exe /с?
5. Я попытался использовать следующее: amp;ExitCode = Exec(«D:psoftPT854appservprcsRNBatchFile.bat «, %Exec_Synchronous %FilePath_Absolute); Но это не сработало. Я увидел сообщение — Ошибка вызова пакетного файла! Код выхода, возвращенный скриптом, был равен 2
Ответ №1:
Лучше всего выполнить трассировку выполнения.
Мысли:
- Можете ли вы войти в планировщик процессов, на котором вы запускаете это, и выполнить скрипт НОРМАЛЬНО?
- AE планируется или вызывается во время выполнения?
- Вам не нужно менять каталог, поскольку вы используете полный путь к скрипту.
- вам не нужно вызывать «cmd / c», поскольку это создаст дополнительную оболочку для запуска вашего приложения, усложнит отладку и т. Д.
Запустите трассировку и отправьте нам результат. 🙂 HTH
Ответ №2:
Как насчет изменения рабочего каталога на D: внутри скрипта вместо этого? Вы вызываете две команды, и мне интересно, что оболочка возвращает в exec. Я предполагаю, что вы написали свой скрипт для предоставления соответствующего кода возврата, и это не проблема.
Я не мог сказать из текста вопроса, но вы ищете отрицательный результат, например, -1? Я думаю, что коды возврата обычно положительные. 0 для успеха, какое-то другое положительное число для сбоя. Отрицательные числа могут быть приемлемыми, но мне интересно, не нравится ли Exec отрицательные числа?
Возможно, функция ChDir PeopleCode все еще работает как альтернатива двум командам в одной строке? Я давно не пробовал.
Другой альтернативой, которая дает вам значительный контроль над процессом, является использование java.lang.Runtime.exec из PeopleCode: http://jjmpsj.blogspot.com/2010/02/exec-processes-while-controlling-stdin.html .