В бизнесе Internet используется очень широко, большие объемы информации постоянно приходится записывать из сети во внутренние базы данных компаний и электронные таблицы. Эта насущная задача породила множество пользовательских приложений, призванных выполнять одни и те же функции. В этих приложениях есть код, отвечающий за загрузку данных из сети Web, запись в журнал успешных и неуспешных попыток, запуск приложения по заранее составленному расписанию и за извещение администратора о благополучном завершении процесса или о происшедших сбоях. При выборе методики разработки первоочередных задач следует отдать предпочтение тем методам, которые обеспечивают быструю отдачу, удобство управления и легкость модификации приложений, а также максимально используют возможности, предоставляемые операционной системой.

В качестве примера рассмотрим очень популярную в среде бизнеса проблему внесения в корпоративную базу данных информации из сети Web. Эта задача позволит наглядно проиллюстрировать преимущества использования пакета DTS, входящего в состав SQL Server 7.0. Решение состоит из двух частей. Для загрузки плоских файлов, баз данных Access и информации других видов, сбора сведений из всех этих источников и их обработки применяется DTS. А для составления расписаний, рассылки извещений и ведения журнала используется также входящий в состав SQL Server 7.0 пакет Job Scheduler. DTS представляет собой весьма ценное дополнение к арсеналу инструментальных средств SQL Server. Однако в настоящее время пакет DTS не очень хорошо приспособлен к работе с Internet, поскольку он не позволяет получать доступ к данным посредством URL и не поддерживает аутентификацию, используемую при начальном входе в сеть.Ожидается, что в скором времени появятся драйверы OLE DB для работы с сетевой информацией, и не за горами выпуск драйвера для XML. Однако в преддверии этого DTS позволяет запускать программы VBScript и использовать совместимые с СОМ объекты из VBScript. При помощи Visual Basic можно было бы создать простой общий объект для загрузки файлов из Web. В дальнейшем этот объект мог бы лечь в основу обработки сетевых данных.

В данной статье я хочу показать, как средствами VB создать простую библиотеку ActiveX DLL с единственной функцией - загружать файлы из Internet. Этот проект понравится тем, кто не любит писать программный код. В проекте используется не более десятка строк кода, причем после написания и компиляции к ним не надо будет больше возвращаться. После завершения создания DLL можно будет сконцентрироваться на создании пакета DTS для обработки данных. Наконец, при помощи Job Scheduler надо составить расписание для запуска этого пакета и задать опции, связанные с ведением журнала. Такой подход позволит многократно использовать один и тот же код и прикладные службы для загрузки файлов, протоколирования событий, рассылки извещений и составления расписаний. И в силу того, что расписание и извещения о сбоях формируются при помощи Job Scheduler, у вас не возникнет проблем при передаче приложения команде сопровождения.

Создание библиотеки ActiveX DLL

Если у вас нет VB 6.0, то можно воспользоваться regsvr32 для регистрации DLL. При этом следует открыть диалоговое окно Run и ввести следующую строку:


Regsvr32 "C:/WebDataFetcher/WebDataFetcher.dll"

Это позволит при первом появлении WebDataFetcher указать на тот каталог, где находится библиотека WebDataFetcher.dll. Теперь можно приступить к созданию проекта. Прежде всего, откройте Visual Basic. Если на экране не появилось диалоговое окно New Project, то выберите последовательно пункты File, New Project из меню File. В пункте New Project выберите значок ActiveX DLL, как показано на экране 1.

Затем откройте диалоговое окно со свойствами проекта, Project Properties, выбрав пункт Project1 Properties в меню Project. Теперь в окне Project Properties замените имя и описание проекта на WebFileFetcher, как на экране 2. Откройте диалоговое окно со свойствами класса, нажав Ctrl+R. Выберите из списка Class1 и нажмите F4. Теперь поменяйте имя класса на CwebDataFetcher, как показано на экране 3.

Наконец, нажмите Ctrl+T, чтобы открыть диалоговое окно Components, и в качестве способа управления передачей данных через сеть выберите Microsoft Internet Transfer Control 6.0, как показано на экране 4. Конечно, можно выбрать и другие способы управления, но этот прост в использовании и поддерживает самые распространенные протоколы передачи данных: FTP, HTTP, а также защищенный вариант HTTP, называемый HTTPS (HTTP over Secure Sockets Layer).

Чтобы ввести новую форму в создаваемый проект, выберите из меню Project пункт Add Form. При нажатии F4 откроется список свойств формы. Необходимо изменить имя формы на frmGetFile. Теперь можно добавить управление передачей по сети, Internet Transfer, которое средствами VB обеспечивает для формы frmGetFile поддержку протоколов FTP и HTTP. Для этого в меню View следует выбрать пункт, относящийся к инструментальным средствам, и дважды щелкнуть по Internet Transfer. И, наконец, в класс CwebDataFetcher следует поместить код, приведенный в листинге 1. Чтобы открыть окно для ввода кода в класс CwebDataFetcher, надо нажать Ctrl+R и дважды щелкнуть по пункту CwebDataFetcher.

Дадим краткое пояснение кода, вводимого в класс CWebDataFetcher. При вызове функции GetFile ей передается несколько параметров: значение URL (например, http://www.anywhere.com/test.mdb), имя файла, его местоположение (например, C:\test/mdb), имя пользователя и его пароль. Если нет необходимости передавать имя и пароль пользователя, то вместо них вводятся пустые строки. Эти два параметра используются для разграничения доступа к защищенным сайтам. Код, приведенный в листинге 1, загружает форму frmGetFile. Строка кода


Frm.GetFile.Inet1.URL = Aurl

присваивает свойству URL управления Inet1 значение, содержащееся в переменной aURL. Эта переменная содержит имя и адрес файла, который надо загрузить из Web. Код передает эти значения управлению Inet1. В следующей строке кода,


If aUsername <> "" Then 

проводится проверка наличия непустого значения у переменной aUsername. Если переменная aUsername содержит непустую строку, то значения переменных aUsername и aPassword будут присвоены соответственно свойствам Username и Password управления Inet1.

В строке кода


b() = frmGetFile.Inet1.OpenURL(, icByteArray)

производится вызов метода OpenURL управления Inet1. В результате применения этого метода файл, находящийся по указанному адресу в сети, должен быть передан как значение типа ByteArray переменной b(), тоже относящейся к типу ByteArray.

Строка кода


Open aFile For Binary Access Write As #1

создает файл, указанный в переменной aFile. Следующая строка


Put #1, , b()

помещает в него считанный из сети файл, находящийся в переменной b() типа ByteArray. Код

Close #1

закрывает открытый файл. После этого код выгружает форму. В приведенном коде предусмотрена также простейшая обработка возможных ошибок.

Теперь проект, который может загружать и обрабатывать данные из сети Web, полностью готов. Осталось только откомпилировать его, выбрав пункт WebDataFetcher.dll в меню File. Краткие сведения о том, каким образом выполняется отладка подобных проектов, приведены во врезке <Как отлаживать библиотеки VB СОМ DLL, применяемые в DTS>.

Создание пакета DTS

В этом разделе речь пойдет о создании пакета DTS, который должен загружать текстовый файл из локального сервера сети Web. Этот файл содержит сведения о нескольких новых книжных магазинах для базы данных Pubs. Создаваемый пакет будет размещать эту информацию в таблице Stores базы данных Pubs. Прежде всего, откройте SQL Server Enterprise Manager и подсоединитесь к своей локальной базе данных. Щелкните правой кнопкой мыши на папке Data Transformation Services и выберите пункт меню создания нового пакета, New Package. Задачу сценария ActiveX назовите Download Webdata.txt. На экране 5 показан вид окна со свойствами задачи ActiveX Script Task, используемой для загрузки данных из Web.

В окно свойств задачи ActiveX Script Task следует ввести код, приведенный в листинге 2. Этот код создает экземпляр класса CWebDataFetcher. Затем происходит вызов функции GetFile, при этом в качестве параметров ей передаются сведения о местонахождении интересующего файла в сети Web, а также о каталоге локального компьютера, куда следует поместить загружаемый файл.

Скопируйте файл Webdata.txt в корневой каталог. Его местоположение указывается в процессе установки сетевого сервера IIS, по умолчанию используется директория C:\InetPub. Сохраните пакет DTS, а затем запустите его. Если в ходе исполнения задачи возникнут ошибки, следует воспользоваться рекомендациями, изложенными в приложении <Как отлаживать библиотеки VB СОМ DLL, применяемые в DTS>, размещенном в конце данной статьи. Файл Webdata.txt, находящийся уже в корневом каталоге на диске, будет использоваться на следующих этапах построения пакета.

Теперь необходимо открыть DTS Designer и добавить в пакет источник текстового файла. Он будет служить соединением при доступе DTS к файлу Webdata.txt. Чтобы открыть диалоговое окно со свойствами соединения, перетяните значок нового текстового файла из инструментария в область пакета DTS. Назовите соединение Webdata.txt, а в качестве имени файла укажите С:\Webdata.txt, как это показано на экране 6.

Нажмите ОК, откроется мастер свойств текстовых файлов. Выберите вариант представления текста, показанный на экране 7, то есть с использованием разделителей (Delimited), но без описателя текста (параметр Text qualifier имеет значение None).

Нажмите кнопку Next. В поле Specify Column Delimiter, где указывается знак, используемый в качестве разделителя, выберите запятую, Comma. После этого в окне предварительного просмотра Preview появятся две строки файла WebData.txt, как на экране 8. Нажмите Finish, а затем OK

Перетяните в поле пакета значок поставщика Microsoft OLE DB для SQL Server из инструментария Data. Назовите соединение Pubs, укажите в поле Server локальный сервер и выберите базу данных Pubs, как показано на экране 9. Нажмите ОК.

Чтобы создать преобразование между соединениями WebData.txt и Pubs, следует при нажатой кнопке Ctrl щелкнуть по соединению WebData.txt, а затем по соединению Pubs. Для вывода контекстного меню щелкните правой кнопкой мыши, после этого выберите пункт Transform On из списка WorkFlow. Теперь откройте диалоговое окно со свойствами преобразования и введите его описание, например, такое, как показано на экране 10: В нем говорится, что преобразование заключается в переносе из текстового файла записей о магазинах (Move the store records from the text file).

Теперь откройте закладку, описывающую конечный пункт преобразования, Destination. Из списка таблиц выберите таблицу [pubs].[dbo].[stores], как показано на экране 11.

Вернитесь к закладке Transformations и нажмите OK. Создайте цепочку работ On Success от написанного на ActiveX сценария Download WebData.txt к источнику данных WebData.txt, как показано на экране 12. Для этого, не отпуская клавишу Ctrl, щелкните по сценарию Download WebData.txt, а затем по источнику WebData.txt. Для вызова контекстного меню щелкните правой кнопкой мыши и выберите пункт On Success из меню Workflow.

Завершенный пакет можно загрузить из приложения к оригиналу данной статьи (в меню Article Information выберите пункт Dowmload the code). Чтобы еще раз запустить пакет, удалите вновь введенные записи из таблицы Stores. Это можно сделать при помощи следующего простого запроса:


Delete from stores where stor_id in(1,2)

Сохраните пакет на локальном сервере.

Описанный в статье пакет дает возможность загружать файлы из сети Web при помощи DTS. Созданный сценарий Download WebData.txt можно многократно использовать во многих проектах DTS для загрузки и обработки сетевых данных.

Как используется агент SQL Server

Загрузка и обработка данных из сети относятся к категории периодически выполняемых задач. В связи с этим потребуется автоматически формировать извещения об успешном завершении задачи или о произошедшем сбое, а также делать соответствующие записи в журнале. Прекрасным средством для осуществления такого рода задач является мастер Schedule Package, входящий в состав SQL Server Agent. Чтобы открыть его, щелкните правой кнопкой мыши по значку пакета DTS в Enterprise Manager. На мониторе появится диалоговое окно для редактирования расписания запуска периодически выполняемых задач, Edit Recurring Job Schedule, показанное на экране 13. Оно позволяет настраивать различные параметры расписания, такие как периодичность и длительность.

По завершении формирования расписания вы получите пакет, который SQL Server Agent будет периодически запускать. Чтобы определить функции ведения журнала и формирования извещений, следует воспользоваться свойствами заданий на вкладке извещений Notifications, которые показаны на экране 14. Местоположение выходного файла, в который следует посылать извещения, указывается на вкладке Advanced диалогового окна Properties, относящегося к данному шагу. После того, как будут определены все параметры рассылки извещений, у вас будет завершенная устойчивая система обработки данных.

Самым большим преимуществом предложенного решения является то, что оно дает возможность проектировщикам применять к данным правила бизнеса. Отпадает необходимость писать программы для реализации функций загрузки данных, составления расписаний, ведения журнала, рассылки извещений об успешном или аварийном завершении задачи. Это решение также позволяет обрабатывать сетевую информацию стандартным образом, что существенно облегчает работу команды сопровождения.

Кристиан Джилстрап z37954@apsc.com работает старшим программистом и аналитиком в компании Arizona Public Service.

ПРИЛОЖЕНИЕ

Как отлаживать библиотеки VB СОМ DLL, применяемые в DTS

Отладка библиотек VB СОМ DLL, используемых в DTS, выполняется проще, чем может показаться на первый взгляд. Прежде всего, откройте в DTS Designer пакет DTS Package. Затем стартуйте имеющийся в Visual Basic интерактивный отладочный редактор, Interactive Debugging Editor (IDE) и откройте проект WebDataFetcher. Работая в VB IDE, можно запустить полную компиляцию проекта, для этого следует нажать Ctrl+F5. Полная компиляция полезна для выявления явных синтаксических ошибок. Программа выделит синим цветом все строчки, которые содержат синтаксические ошибки.

Помимо этого можно провести пошаговое исполнение кода и посмотреть, насколько правильно он работает, тем самым выявить ошибки в логике программы. Для этого следует перевести VB IDE в режим отладки, нажав F8. Отладчик VB IDE временно зарегистрирует проект WebDataFetcher. В режиме отладки VB IDE остановится на первой строке кода проекта до начала ее исполнения. При запуске DTS Package на экране не будет видно VB IDE. По окончании работы с Package следует щелкнуть на значке VB IDE, чтобы вывести IDE на экран. Программа выделит желтым первую строку функции GetFile. Эту строку VB IDE будет выполнять следующей. В дальнейшем каждый раз при нажатии F8 отладчик VB IDE будет выполнять текущую строку, переходить к следующей и подсвечивать ее. Мигающий курсор можно переместить к любой переменной, например, к aURL, сделать паузу, и тогда в окне появится содержимое этой переменной. Если вам больше не хочется проводить пошаговую отладку, нажмите F5, и VB IDE выполнит оставшуюся часть кода без остановок. Для выхода из режима отладки VB IDE необходимо нажать End в меню Run.