Archive

Posts Tagged ‘Foreach Loop Container’

Usando Foreach Loop Container e Variáveis para extrair informações de sites/listas diferentes do SharePoint usando Integration Services

November 8, 2010 4 comments

Autor:

Thiago Silva

Publicação:

09/Nov/10

Overview

Recentemente escrevi um artigo de como podemos extrair informações do SharePoint e inserindo em tabelas no SQL Server, usando a API do próprio SharePoint (https://thiagottss.wordpress.com/2010/10/28/cs21013-extraindo-informaes-de-listas-no-sharepoint-e-carregando-em-tabelas-no-sql-server-usando-integration-services/).

Agora, o cenário outro. Queremos extrair informações de vários sites e/ou listas dinamicamente usando variáveis. No meu caso, vou alimentar essas variáveis com valores de outra tabela no SQL Server, por exemplo, uma tabela de URLs. Assim, tenho diversas listas replicadas em vários sites, e quero, para cada URL encontrada na tabela de URLs, trocar a URL do componente SharePoint List Source em runtime e extrair as informações das várias encontradas em cada site.

Solução

Para essa solução vou trabalhar com os seguintes produtos e tecnologias:

· Windows 7 Enterprise;

· Microsoft SharePoint 2010 Server;

· SQL Server 2008 Enterprise;

· SQL Server 2008 Integration Services – SSIS;

· SQL Server Business Intelligence Development Studio;

· SharePoint List Source and Destination (http://sqlsrvintegrationsrv.codeplex.com/releases/view/17652).

A lógica não tem muito segredo. Só precisamos entender um pouco como podemos utilizar as ferramentas presentes no SSIS. Para isso, vamos utilizar um Foreach Loop Container.

Este artigo assume que você já tem um DataFlow Task para extrair informações do SharePoint. Caso ainda não o tenha, siga os passos deste post para alcançar este ponto: https://thiagottss.wordpress.com/2010/10/28/cs21013-extraindo-informaes-de-listas-no-sharepoint-e-carregando-em-tabelas-no-sql-server-usando-integration-services/.

Estrutura:

· Crie uma tabela que terá as informações que você quer trocar em runtime. No meu caso, vou utilizar uma tabela simples, contendo URLs.

image

1. Lendo as informações da tabela de URLs e armazenando em uma variável

1.1. No Control Flow, no ambiente de desenvolvimento do pacote SSIS, clique e arraste do Toolbox um Execute SQL Task.

image

1.2. Clique duas vezes sobre a task recém-criada. O Editor irá abrir, mude o ResultSet para Full result set, crie ou utilize uma conexão existe para acesso ao banco que possui a tabela de URLs, em Connection.

1.2.1. A mudança do ResultSet faz com que possamos utilizar o resultado e armazenar em uma variável. Caso contrário, não seria possível.

1.3. Em SQLStatement, digite o comando para trazer as URLs contidas na tabela. No meu caso “select url from dbo.URLs”.

image

1.4. No menu da esquerda, selecione Result Set, depois clique em Add.

1.5. Em Result Name, digite 0 (zero). Em Variable Name, crie uma nova variável do tipo Object.

image

image

1.6. Clique Ok para fechar o Editor.

Neste ponto configuramos a operação que irá buscar as URLs contida na tabela de URLs no SQL Server. Agora iremos criar um repetidor para utilizar essa variável para contar iterações serão necessárias, ou seja, quantas vezes irá rodar alguma operação específica, e além disso, manter o valor atual de cada iteração em outra variável.

2. Criando a estrutura de repetição utilizando a variável recém-criada

2.1. Clique e arraste, do Toolbox, um Foreach Loop Container para o design do pacote em Control Flow.

image

2.2. Clique duas vezes sobre a estrutura de repetição Foreach, e clique em Collection.

2.3. Em Enumarator, selecione Foreach ADO Enumerator.

2.4. Em Enumator configuration, selecione a variável que criamos no passo anterior em ADO object source variable, e mantenha Enumeration mode em Rows in the first table.

2.4.1. Essas configurações servem para indicarmos que iremos utilizar a variável que criamos, que contém todas URLs que iremos trabalhar, e que o número de iterações será igual ao número de linhas contidas na tabela armazena na variável (resultado de “select url from dbo.URLs”).

image

2.5. No menu da esquerda, clique em Varialbe Mappings, clique em Variables e crie uma nova variável do tipo String para armazenar a url atual de iteração.

2.5.1. Deixe um valor padrão na variável, para evitar um erro de validação do componente SharePoint List Source.

image

image

2.6. Clique Ok, para fechar o Editor.

2.7. Clique na tarefa criada anteriormente, e arrasta a seta verde para ligar os dois passos.

image

2.8. Agora, adicione um Data Flow Task dentro do Container. Não vou seguir os passos para criar um, reveja o post mencionado no topo deste artigo. Mas, a estrutura é similar a esta, como a imagem abaixo.

image

image

2.9. Volte para Control Flow. Vamos trocar o valor de SiteUrl, em runtime, usando a variável atual de cada iteração.

2.10. Nas propriedades de Data Flow Task, clique em Expressions, clique em (…), em Property, selecione [SharePoint List Source].[SiteUrl].

image

2.11. Em Expression, clique (…), expanda Variables, localize a variável User::URLatual, e arraste para Expression. Clique Ok para fechar.

image

image

Pronto. Configuramos todos os passos. Clique F5, para testar! Smile

Conclusão

Nesse artigo mostrei como automatizar e atualizar dinamicamente valores usando variáveis para extrair informações do SharePoint.

Advertisements