Microsoft SQL Server
DTS

Принудительный запуск Step-а или логическое ИЛИ для Step-

Опубликовано: 30 сен 02
Рейтинг:

Автор: Glory
Прислал: Glory

Q.
Создал я DTS для подбора и обработки текстовых файлов. Файлов несколько, они независимы. Сначала собираем, потом обрабатываем, по окончании - высылаем мыло админу.
Собственно вопрос такой: как можно вести свой лог в DTS? Я попробовал после каждого task вставлять 2 объекта ActiveX Script - к одному идет ветка Workflow "Failure" к другому - "Succes" ну и уже в них формирую текст будущего письма (вставляю строчку - успешно или нет отработался шаг). Далее от каждого из них к следующему шагу идет Workflow "Complete". Однако не работает
DTS выполняется пошагово до первого такого ветвления и дальше не работает - говорит что успешно выполнен

Возможно криво я все это сделал, но тогда черкните пару строк, как это все лучше можно сделать?

A.

Если запуск задания зависит от статусов выполнения других заданий, то эти статусы проверяются с помощью логического И


-----On Success--->ActiveX Script1---On Complete----      
| |
Some Task1 Some Task2
| |
-----On Failure--->ActiveX Script2---On Complete------

т.е. Some Task2 выполнится при завершении ActiveX Script1 _И_ ActiveX Script2, что не может произойти в принципе.

Логическое ИЛИ в DTS придется организовывать через дублирование task-ов


-----On Success--->ActiveX Script1---On Complete---->Some Task2    
|
Some Task1
|
-----On Failure--->ActiveX Script2---On Complete---->Some Task3

или через динамическое изменение статуса выполнения нужных шагов.

Делается это так
1. Для SQL2000 все легко
- создаем Package вроде такого http://www.hot.ee/gloryee3/pic1.jpg
- Some Task1 случайно генерирует удачный/неудачный результат выполнения http://www.hot.ee/gloryee3/pic2.jpg
- ActiveX Script 1 и ActiveX Script 2 производят какие-либо действия http://www.hot.ee/gloryee3/pic3.jpg http://www.hot.ee/gloryee3/pic3.jpg
- Some Task2 должна выполнить какие-либо обязательные действия для любого результата Some Task1http://www.hot.ee/gloryee3/pic5.jpg

Для этого добавляем 2 Dynamic Properties Task (буду рассказывать про один, т.к. для второго нужно будет проделать тоже самое) Status for 2 и Status for 1 внутри которых принудительно устанавливаем статус "противоположного" Task-a в 4, что есть Step execution is completed
http://www.hot.ee/gloryee3/pic6.jpg
http://www.hot.ee/gloryee3/pic6_1.jpg
http://www.hot.ee/gloryee3/pic6_2.jpg



2. Для SQL7 придется немного "поработать", т.к. Dynamic Properties Task там нет, но сами Properties имеются

В ActiveX Script 1 ищем "противоположный" Step и опять же устанавливаем ему статус выполнения

Function Main()
msgbox "Some Task1 Success"
Dim dtsPackage, i, objStep
Set dtsPackage = DTSGlobalVariables.Parent
For i=1 to dtsPackage.Steps.Count
If dtsPackage.Steps.Item(i).Description = "ActiveX Script 2" Then
Set objStep = dtsPackage.Steps.Item(i)
objStep.ExecutionStatus = 4
Exit For
End if
Next
Main = DTSTaskExecResult_SuccessEnd Function


Тоже самое для ActiveX Script 2

Комментарии


  • главное принцип ясен :)

  • Вот вот, не рабочие

  • А ссылки на рисуночки то не рабочие. Думаю, что сейчас рисунки можно и здесь опубликовать (благо вроде уже такая возможность есть). Или, на худой конец, выложить на какой-нибудь читающийся ресурс.



Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Microsoft SQL Server / DTS / Принудительный запуск Step-а или логическое ИЛИ для Step-