Академический Документы
Профессиональный Документы
Культура Документы
6 CRIANDO UM PROCEDIMENTO CONDICIONAL A SER EXECUTADO DATA DRIVEN QUERY TASK............8 Guia Source....................................................................................................................8 Guia Bindings...............................................................................................................10 Guia Queries.................................................................................................................10 Guia Lookups................................................................................................................12 Guia Transformations...................................................................................................12 EXECUTANDO A IMPORTAO...................................................................................................15 REALIZANDO A IMPORTAO DE UM ARQUIVO TEXTO EM UM SERVIDOR FTP.......................................................................................................................................16 REALIZANDO O FTP..............................................................................................................16 DESTINO DINMICO................................................................................................................16 ADICIONANDO A ORIGEM DE DADOS COMO ARQUIVO....................................................................19 ALTERANDO A LOCALIZAO DO ARQUIVO DE ORIGEM VIA SCRIPT.................................................20 ATRIBUINDO O DESTINO DOS DADOS IMPORTADOS........................................................................21 TAREFA PARA COPIAR OS DADOS...............................................................................................22 DEFININDO A ORDEM DE EXECUO..........................................................................................23
Dicionrio de Dados
DTS Data Transformation Services Enterprise Manager um ambiente genrico de gerenciamento de servios da Microsoft. Neste tutorial se refere ao gerenciador grfico do SQL Server. Packages Pacotes do DTS a serem executados CSV Coma separated values HTML Hyper Text Markup Language
INTRODUO
O DTS permite importar/exportar dados entre diferentes fontes de dados. As fontes/origens de dados podem ser bancos de dados ou arquivos (CSV, excel, HTML). Este tutorial pretende mostrar alguns procedimentos para configurao de pacotes de tarefas a serem executados periodicamente. Este tutorial assume que o usurio j tenha familiaridade com o SQL Server e comandos PL/SQL. Para ter acesso ao Data Transformation Services, o usurio deve executar o Enterprise Manager, e abrir a pasta Data Transformation Services. Ao clicar sob Local Packages, sero listados todos os pacotes existentes.
Visualizao do DTS
Dilogo de configurao de conexo Neste exemplo, Postos Ain a origem e QuotasPrd o destino.
Inicializando Variveis
comum a necessidade de inicializar algumas variveis globais. Estas variveis podem ser utilizadas em qualquer procedimento realizado no DTS. possvel por exemplo utilizar uma varivel global como parmetro de uma stored procedure. Para inicializar as variveis globais, deve-se criar um ActiveX Script Task. Este componente permite criar procedimentos em linguagem de script interpretada (como VBScript). Para criar uma task execute: Task->ActiveX Task.. O exemplo abaixo inicializa o ano/ms de referncia, que deve ser um ms anterior execuo do pacote. Observar que as variveis locais ficam armazenadas em DTSTaskGlobalVariables. A sintaxe : DTSTaskGlobalVariables(<<NOME_VARIAVEL>>).value Cdigo fonte:
'********************************************************************** ' Visual Basic ActiveX Script '************************************************************************ '/** ' * Inicializa variaveis globais '* ' * lngAnoMesReferencia - ano/mes (yyyymm) referencia a data que o pacote for executado ' */ Function Main() DTSGlobalVariables("lngAnoMesReferencia").Value = clng(getAnoMesRegerencia()) Main = DTSTaskExecResult_Success End Function '/** ' * Retorna o ano/mes (yyyymm) de referencia da data que este pacote for rodado. ' * Por exemplo: ' * Caso seja rodado no dia 2004-09-08 (yyyy-mm-dd), ira retornar 200408 (yyyymm) '* ' * @return inteiro longo que representa ano/mes de referencia (yyyymm) ' */ Function getAnoMesRegerencia() 'As Long Dim dteReferencia 'As Date dteReferencia = DateAdd("m", -1, Now()) If Month(dteReferencia) < 9 Then getAnoMesRegerencia = CLng(CStr(Year(dteReferencia)) & "0" & CStr(Month(dteReferencia))) Else getAnoMesRegerencia = CLng(CStr(Year(dteReferencia)) & CStr(Month(dteReferencia))) End If End Function
Guia Source
Nesta guia definida a fonte de dados. Pode-se selecionar uma tabela ou escrever uma consulta SQL (executar uma stored procedure, por exemplo). No caso de consultas parametrizadas, deve-se especificar os parmetros com o caractere ?. A ordem dos parmetros respeita a ordem de ocorrncia dos caracteres ?;
Data Driven Query Guia Source Para mapear os parmetros com variveis globais ou constantes, clicar em Parameters. importante prestar ateno a ordem de ocorrncia dos parmetros. Ex.: O primeiro ? o Param1, o segundo o Param2 e assim por diante...
Guia Bindings
Nesta guia define-se o destino. Deve-se selecionar a tabela que ir receber os dados.
Guia Queries
Aqui so definidas as consultas que podem ser executadas.
Podem ser definidas consultas de Insert/Update/Delete/Select. Construa as consultas de Insert e delete de forma a receber os dados da origem. Cdigo Insert:
INSERT INTO dbo.TbFiscaisPostos (CodEscala, RgFiscal, AnoMesRef) VALUES (?, ?, ?)
Cdigo Update (neste exemplo o update no faz muito sentido, pois todos os campos fazem parte da chave primria, logo no ser utilizado):
UPDATE dbo.TbFiscaisPostos SET CodEscala = ?, RgFiscal = ?, AnoMesRef = ? WHERE CodEscala = ? AND (RgFiscal = ?) AND (AnoMesRef = ?)
Data Driven Query Queries Os parmetros das consultas devem ser mapeados corretamente na listagem de parmetros. Cada registro existente na origem de dados ir executar uma destas consultas, e os parmetros mapeados sero trocados pelos respectivos valores.
Guia Lookups
Aqui so criadas consultas a serem utilizadas dentro do ActiveX Sctript para esta Data Driven Query. Por exemplo: Para saber se deve ser realizado um insert ou um update, necessrio consultar se o registro que est sendo importado j existe. Para criar a consulta, preencha a coluna Name, escolha a conexo e clique no boto ... da coluna query..
Data Driven Query Lookups A consulta utilizada : SELECT COUNT(1) AS Expr1 FROM dbo.TbFiscaisPostos WHERE (CodEscala = ?) AND (RgFiscal = ?) AND (AnoMesRef = ?)
Guia Transformations
Nesta guia so mapeados a origem e o destino.
Data Driven Query Task Transformations Nas guias Source Columns e Binding Columns selecione os atributos a serem utilizados. Deletar os scripts existentes e clicar em New para criar um novo ActiveX Script. Abrir-se- uma nova janela, que permitir criar um novo ActiveXScript (escolher esta opo). Ao clicar em properties e ser apresentado um editor de script.
ActiveX Script
Ser criado, automaticamente um cdigo que mapeia as origens nos destinos. Como o cdigo abaixo:
'********************************************************************** ' Visual Basic Transformation Script '************************************************************************ ' Copy each source column to the destination column Function Main() DTSDestination("AnoMesRef") = DTSSource("anoMesRef") DTSDestination("RgFiscal") = DTSSource("rgFiscal") DTSDestination("CodEscala") = DTSSource("codEscala") Main = DTSTransformstat_InsertQuery End Function
Neste script deve ser realizado o teste para descobrir se o registro que esta sendo importado j existe no destino. A consulta (INSERT/UPDATE) a ser executada depende do retorno da funo main. Algumas constantes que podem ser retornadas pela funo main: DTSTransformStat_InsertQuery indica que deve ser utilizada a consulta de insert DTSTransformStat_UpdateQuery indica que deve ser utilizada a consulta de update. DTSTransformStat_DeleteQuery indica que deve ser utilizada a consulta de delete DTSTransformStat_SelectQuery - indica que deve ser utilizada a consulta de select Quando o registro j existir, usaremos DTSTransformStat_SkipInsert. Esta constante indica que nada deve ser feito. Alterar o cdigo para: '********************************************************************** ' Visual Basic Transformation Script '************************************************************************ ' Copy each source column to the destination column Function Main() DTSDestination("AnoMesRef") = DTSSource("anoMesRef") DTSDestination("RgFiscal") = DTSSource("rgFiscal") DTSDestination("CodEscala") = DTSSource("codEscala") if DTSLookups("exists").Execute(DTSSource("codEscala"), _ DTSSource("rgFiscal"), DTSSource("codEscala")) = 0 then Main = DTSTransformstat_InsertQuery else Main = DTSTransformStat_SkipInsert end if
End Function Este trecho de cdigo utiliza a consulta criada na guia Lookups para verificar se o registro j existe. No existindo o registro utilizada a query de insert. Caso contrrio, nada ser feito.
Executando a importao
necessrio configurar a ordem de execuo do pacote. Para isto clique na DataDriven Query criada com o boto direito do mouse->Workflow>Workflow Propertirs. No dilogo apresentado selecione o modulo ActiveX Script criado anteriormente. O modelo workflow ficar como este:
Modelo workflow
Realizando o FTP
Acionar Tasks->File Transfer Protocol Task. Abrir-se- uma nova caixa de dilogo solicitando os parmetros de conexo FTP. Na guia location deve-se preencher os dados de origem e destino. Na guia files deve-se escolher os arquivos a serem baixados.
Destino dinmico
No momento em que o destino especificado, o diretrio listado o do computador do usurio.
Porm, quando o pacote for executado em um servidor, o destino ser procurado no servidor. Isto um problema, pois se faz necessria a replicao do ambiente do usurio no servidor. Ou seja: se for configurado para fazer o download do arquivo em d:\sistemas\sistema1, este diretrio dever existir no servidor. Alm disso, este diretrio dever ter permisso para escrita. Uma forma de resolver este problema utilizar o TEMP do usurio. Assim, quando o pacote for executado por um job do SQL Server, o arquivo ficar no temp do usurio do SQL Server. E quando for executado pelo desenvolvedor, ficar no TEMP do desenvolvedor. Para isto, ser utilizado o Dynamic Properties Task. (Tasks-> Dynamic Properties Task).
Dilogo Dynamic Properties Task Clicar em Add para definir uma nova propriedade dinmica. Abrir a rvore Tasks e selecionar o DTSTask_DTSFTPTask_1 (que uma referncia ao task de FTP criado anteriormente). Sero listadas todas as propriedades do task FTP.
Alterando propriedades dinamicamente Clicar em DestSite e depois em Set. Ser aberta uma caixa de dilogo solicitando a origem da propriedade. Selecione Environment Variable em Source e TEMP em Variable.
Arquivo de origem
oPacote.Connections("Arquivo CSV").dataSource = oPacote.Tasks("DTSTask_DTSFTPTask_1").customTask.destSite & "\teste.txt" Est sendo atribudo o arquivo copiado do servidor FTP. Arquivo CSV o nome do Text File e DTSTask_DTSFTPTask_1 o nome do task FTP.
Conexo de destino
Destino da importao