Как выполнить задачу процесса, в которой исполняемый путь поступает от пользователя Variable

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

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

Ответ 1

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

Это грубый пошаговый пример, который показывает, как вы можете передать переменную в свойство Executable задачи Execute Process. Пример был создан с использованием 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, для Stack Overflow, за которым следует идентификатор SO, и, наконец, описание. Это для меня, чтобы легко отнести это позже. См. Снимок экрана # 5.

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

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

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

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

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

На пути потока управления пакетами поставьте "Выполнять задачу процесса" и задачу Script, как показано на снимке экрана # 8.

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

В Script Задание замените основной метод, как показано на снимках экрана # 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:

<Т411 >

# 13:

13

# 14:

14

# 15:

15

# 16:

16

# 17:

17

# 18:

18

Ответ 2

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

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

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

НТН!