Как выполнить задачу процесса, где путь к исполняемому файлу исходит от пользовательской переменной - PullRequest
11 голосов
/ 25 июля 2011

У меня есть пакет служб SSIS, который включает задачу процесса.Задача процесса должна выполнить командный файл.Расположение командного файла зависит от среды (dev, production).

Как динамически установить значение свойства Executable объекта Process Task в пользовательскую переменную?enter image description hereenter image description here

Ответы [ 2 ]

19 голосов
/ 25 июля 2011

Я думаю, что вам нужно создать переменную, которая будет содержать путь к папке и имя исполняемого файла для оценки в качестве выражения.Затем вам нужно присвоить эту переменную, которая оценивается как выражение, свойству Executable Execute Process Task.Кроме того, вам необходимо иметь допустимый путь к исполняемому файлу во время разработки.

Это грубый пошаговый пример, который показывает, как вы можете передать переменную свойству Executable свойства Execute Process Task.Пример был создан с использованием служб SSIS 2008 R2, а также использует три файла .bat для иллюстрации функциональности.Несмотря на то, что пример приведен в SSIS 2008 R2, логика должна быть применима к SSIS 2005.

Создайте три файла .bat, а именно Process_0.bat, Process_1.bat и Process_2.bat.Смотрите скриншот # 1 .Заполните их командами эха, как показано на скриншотах # 2 - # 4 .

Создайте пакет служб SSIS.В начале я назвал пакет в формате YYYYMMDD_hhmm, после которого SO означает переполнение стека, затем идентификатор вопроса SO и, наконец, описание.Это для меня, чтобы легко отослать это позже.См. Снимок экрана # 5 .

Создайте следующие переменные: См. Снимок экрана # 6 .

  • ExecutableFileName - эта переменная имеет тип string.Он будет содержать имя исполняемого файла.

  • ExecutableFolder - Эта переменная имеет тип string.Он будет содержать путь к папке исполняемого файла.

  • ExecutableFilePath - эта переменная имеет тип string.Не вводите никаких значений для этой переменной.Это будет выражение, которое объединяет переменные ExecutableFolder и ExecutableFileName для генерации полного пути к файлу.Смотрите скриншот # 7 .Выберите переменную и нажмите F4, чтобы открыть окно свойств.Установите для EvaluateAsExpression значение True и для параметра Expression - @[User::ExecutableFolder] + @[User::ExecutableFileName]

  • ExecutableOutput - эта переменная имеет тип string.Он будет хранить выходное значение исполняемого файла.В этом случае значение отражается в файлах .bat.

В пути потока управления пакета поместите задачу «Выполнить процесс» и задачу «Сценарий», как показано на снимке экрана # 8 .

Настройте задачу «Выполнить процесс», как показано на скриншоте # 9 - # 11 .В разделе «Задача» в разделе «Процесс» необходимо указать путь к исполняемому файлу для начальной настройки.Кроме того, укажите StandardOutputVariable (это для этого примера).В разделе «Выражения» переопределите путь к исполняемому файлу, указав переменную @ [User :: ExecutablePath]

В задаче «Сценарий» замените метод Main, как показано на снимках экрана # 12 - # 13 .

Выполнить пакет.Вы должны получить вывод, как показано на скриншоте # 14 .Он показывает, что файл .bat Process_0.bat был выполнен с выводом "Process 0".

Теперь измените значение переменной ExecutableFileName на Process_1.bat.Не вносите никаких других изменений.Выполнить пакет.Вы должны получить вывод, как показано на скриншотах # 15 - # 16 .Он показывает, что файл .bat Process_1.bat был выполнен с выводом "Process 1".

Теперь измените значение переменной ExecutableFileName на Process_2.bat.Не вносите никаких других изменений.Выполнить пакет.Вы должны получить вывод, как показано на скриншотах # 17 - # 18 .Он показывает, что файл .bat Process_2.bat был выполнен с выводом "Process 2".

Надеюсь, что поможет.

Снимки экрана:

# 1:

1

# 2:

2

#3:

3

# 4:

4

# 5:

5

# 6:

6

# 7:

7

# 8:

8

# 9:

9

# 10:

10

# 11:

11

# 12:

12

# 13:

13

# 14:

14

# 15:

15

# 16:

16

# 17:

17

# 18:

18

2 голосов
/ 06 января 2014

Причина, по которой я пишу этот комментарий, заключается в том, что у меня была похожая ошибка

Package Validation Error Error at @#@#@# [Execute Process Task]: The executable is not specified.

И все, что мне нужно было сделать, это выбрать TRUE в переменной EvaluateAsExpression. К вашему сведению, мое значение выражения было "C: \ PortableApps \ winscp517 \ WinSCP.exe"

НТН!

...