Consultar nome de arquivos FTP - SSIS

23/07/2015

0

Bom dia,

Preciso saber como retornar uma lista de todos os arquivos de um FTP pelo SSIS,
A intenção é comprar com o que ja tenho, e baixar apenas o que tem de novo.

<b>OBS: Não posso utilizar o "SCRIPT TASK"</b>


Alguém pode me ajudar por favor?
Willian Siqueira

Willian Siqueira

Responder

Posts

23/07/2015

Isaac Jose

Bom dia Amigo. trabalho com SSIS. porem para ajudar teria que saber mais sobre a sua estrutura de pacote, como vc pega essa informação se a armazena em tabelas etc.
tenho um SSIS que compara dados e traz somente os novos porem eu faço comparações em SQL e envio o resultado para uma outra tabela.
poste a estrutura que esta fazendo mais detalhadamente para ver se consigo te ajudar.


att. Isaac
Responder

23/07/2015

Willian Siqueira

Isaac, beleza?

Obrigado por responder!

Bem, o Ambiente é o seguinte:

Estava elaborando um projeto, onde eu cadastrava um fornecedor com dados de conexão para o FTP, e para cada fornecedor, eu cadastrava um nome que seria um padrão para os arquivos que eu tenho que baixar, por exemplo:

Vamos supor o fornecedor "DEVMEDIA", ele compartilha comigo arquivos no formato TXT com os seguintes nomes:
usuarios_201506.txt
assinantes_201506.txt
cursos_201506.txt

Por padrão, os nomes dos arquivos são, "NOME_AAAAMM" ou seja, o nome sege o padrão a que representa seguido de ANO e MES.

Bom.... Eu tinha um banco de dados onde eu cadastrava o fornecedor "DEVMEDIA" E OS ARQUIVOS PADRÃO "USUARIOS_", "ASSINANTES_", "CURSOS_"... e um script olhava pra mim o ultimo arquivo que deu cerga EX. "usuarios_201506" e calculava o que seria o proximo "usuarios_201507".

Com este nome em mãos eu conseguia conectar no FTP através da ferramenta "FTP TASK" e baixar o arquivo corretamente, cadastrando no banco e tudo mais....

Só que meu gestor olhou o sistema que eu estava fazendo e me disse "Vc está construindo uma ferrary, mas eu quero um fusca".

Bom, o que ele quer é, q eu cadastre o fornecedor e crie uma tabela de arquivos, onde se for a primeira carga do fornecedor, seja baixado todo o conteúdo do FTP, caso não seja, ele quer que eu baixe apenas o que tem de novo.

O Ambiente atual "O FUSCA" tem a tabela de fornecedor, e uma dabela onde vou guardar os nomes dos arquivos, e vou ter que baixar do FTP apenas os arquivos que não estiverem salvos nesta tabela (SEM UTILIZAR O SCRIPT TASK).

A minha duvida é, como vao saber, qual arquivo do FTP é novo, já que o "FTP TASK" não retorna nomes, ele precisa saber o que baixar para poder baixar, e não me retorna uma lista para eu fazer uma comparação, sei lá....

:/
Responder

23/07/2015

Isaac Jose

amigo voce nao consegue puxar esse arquivo txt verificando o ultimo nome disponivel e montando o nome novo pela task de arquivo de origem simples.?
eu tenho alguns processos onde baixo diariamente porem faço insert ou update e recorto o arquivo para uma pasta de historico.
como é a estrutura das tabela de fornecedor e a de guarda? voce consegue altera-las?
Responder

23/07/2015

Willian Siqueira

Eu fazia assim no sistema anterior que eu estava fazendo, (mas nem todos os arquivos seguem este padrão, e pode ser que algum venha com nome diferente - "são as palavras do meu gestor")...

Então o que ele quer que eu faça, é comparar o que já tenho e baixar o que tiver novo, vai ter cadastrado em uma tabela os nomes dos arquivos, todos, mesmo q não sigam o padrão, e também eles estarão em pastas locais, a dificuldade, é saber quais são os arquivos novos do FTP e baixar eles.

Pela minha logica, eu teria que conseguir uma lista de todos os arquivos do FTP e comparar, mas não sei como conseguir essa lista sem o SCRIPT TASK.

Não concordo com esse método, mas quem manda é ele né rs...
O anterior fazia isso o que vc disse!
Responder

23/07/2015

Isaac Jose

amigo vc esta enrolado. kkk.

ele quer que vc guarde os nomes dos arquivos em uma coluna da tabela para vc ter um historico do que ja foi inserido legal.
agora se ele deve estar falando que nao quer em um script task é pq deve ter alguma task que faz isso. mais eu realmente nao lembro se tem mesmo.
me dis uma coisa quando vc fala scrip task é a tarefa SCRIPT certo.
a que eu te falei é um TAREFA EXECUTAR SQL... essa vc pode usar?
Responder

23/07/2015

Willian Siqueira

Enrolado??? hahahahah
Eu to totalmente embrulhado e apertado! kkkkkk

Então... a tabela ele quer! uma tabela com o id_fornecedor e o nome do arquivo que baixou.

A tarefa que não posso utilizar, é a tarefa onde programamos em C#, VB.... ele tem pavor dessa tarefa, então não posso utilizar ela pra nada.

A tarefa Executar SQL eu posso utilizar normal, a que posso rodar uma query ou uma procedure e retornar um resultset e tal... essa eu posso!
Responder

23/07/2015

Isaac Jose

bom se pode usar a Tarefa executar sql ja nao esta mais tão enrrolado.
da pra montar o scrip em sql para ele listar os arquivos de um determinado local e em contra partida vc compara com a lista da sua tabela que contem o id_fornecedor e o nome do arquivo o que sobrar vc manda fazer um insert ..
Responder

23/07/2015

Willian Siqueira

Mas como eu listo os arquivos do FTP pelo SQL?
Responder

23/07/2015

Isaac Jose

putz tenho uns exemplos que de scrip puxando XLS em pastas distintas com nomes distintos. mais estou em horario de almoço e minha maquina principal nao pode ser acessada se queizer posso te manda o exemplo que tenho perto das 4 ai vc tenta montar algo para ver se consegue resolver.
Responder

23/07/2015

Willian Siqueira

Isaac, Seria o máximo!!!!!

Meu E-mail é: willsancho@msn.com

Vc Salvaria minha vida desse louco q é meu gestor! rs....
Responder

23/07/2015

Isaac Jose

mando sim e relaxa nao é por isso que vc vai morrer.. coisas piores viram kkkk
Responder

23/07/2015

Willian Siqueira

Hahahaha pior que vc tá certo!
Responder

23/07/2015

Isaac Jose

Amigo não estou achando o pacote que tenho o exemplo vou ter que te explicar mais ou menos oque fiz ai vc vai tentando fazer por ai.
os arquivos que vc tem são txt certo?.
vc vai precisar montar uma tabela com o id_fornecedor e o nome dos arquivos que vc tera que listar. isso vc consegue fazer com um foor loop
quando vc tiver essa tabela montada vc vai fazer um insert na sua tabela principal verificando se aquele id_fornec e nome_caminho nao existem.

uma vez com a sua table principal com esses dois campos inseridos vc vai montar o select.

select caminho from table_principal
where campo ex cnpj do fornecedor for null. isso vai listar os caras a serem inseridos os demais valores.
depois vc cria um fluxo de dados dentro do loop mandando o mesmo pegar um caminho no qual vc vai quer criado um conexão ate onde os arquivos estao criados e o resto do caminho vai ser passado atraves de um OLE DB de destino os campos restantes ..

vou ver se acho o que eu tenho ou se consigo montar um no meu pc particular pra te mandar..
Responder

24/07/2015

Willian Siqueira

Isaac, bom dia,

Eu não entendi muito bem...

Ele não quer preenchimentos manuais, então a unica foisa q não tem jeito seria o fornecedor por que tem que colocar o endereço do FTP, usuario, senha e tal....
Mas os demais cadastros devem ser feitos de forma audomatica...

Esta primeira tabela do seu exemplo, eu devo preencher ela com os arquivos que estão no FTP certo? como eu faço isso? Eu não sei como conectar no ftp apenas para pegar os nomes dos arquivos.
Responder

24/07/2015

Isaac Jose

bom dia.Will voce nao vai precisar fazer precisar preenchar manunal.

no foor loop container voce joga o nome da pasta ex c\teste\ftp em coleção e nos arquivos vc joga usuarios_*.txt ele vai listar todas os cara com esse nome.
no mapeamento de variaveis vc vai criar um variavel com o nome do parquivo com indice 0.
essa varivavel vai montar o nome c\teste\ftp usuarios_201501, c\teste\ftp usuarios_201502 etc esses nomes vc vai colocar em uma tabela para comparar com o que vc ja tem de historia o que sobrar vc atualiza. mata o container atualizar.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar