Archive

Archive for the ‘Artigo’ Category

Rodando MSSQL Server on Linux no Mac usando Docker

CENÁRIO:

Depois de instalar o .NET Core, agora fazer uns “programa” que lê uns arquivos… acessa banco de dados… Hum, acessar banco? Vamos instalar o SQL Server on Linux! 😀

Se você perdeu a parte do .NET Core, ta aqui:

https://thiagottss.com.br/2017/05/07/instalando-net-core-no-mac-usando-docker/

Me surpreendi com a facilidade e agilidade de utilizar os containers “prontos” no Docker. Muito bom mesmo.

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-docker

Vamos lá!

Primeiro, vamos puxar a imagem no Docker Hub da Microsoft:

docker pull microsoft/mssql-server-linux

clip_image002

Agora, instalar/rodar o container:

docker run -e ‘ACCEPT_EULA=Y’ -e ‘SA_PASSWORD=<YourStrong!Passw0rd>’ -p 1433:1433 -d microsoft/mssql-server-linux

clip_image004

Pronto! Você já está com o MSSQL Server on Linux rodando no Docker.

Agora é conectar e rodar seus comandos no SQL Server. Utilize o Management Studio para conectar no SQL do Docker, ou se preferir, ainda no Mac, pode usar o sql-cli para conectar. Ou utilizar o Visual Studio Code também! J

Para instalar o sql-cli você precisa do Node.js:

https://github.com/creationix/nvm

Instalar o sql-cli:

npm install -g sql-cli

Com o sql-cli:

Mssql –help

clip_image006

mssql –u sa –p senha

clip_image008

Com o Visual Studio Code:

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-develop-use-vscode

clip_image010

Abraço!

Advertisements

Instalando .Net Core no MAC usando Docker

May 7, 2017 1 comment

CENÁRIO:

Sempre utilizei o Visual Studio para todas as atividades de código, mas desde que a Microsoft lançou .NET Core e Visual Studio Code procurei testar e rodar alguns códigos diretamente no Mac OS.

Ainda acho o Visual Studio muito mais produtivo e mais completo, mas devemos sempre nos manter atualizados com as novas tecnologias.

De início, instalar o .Net Core CLI diretamente no Mac OS, mas agora vou mostrar como instalar o .Net Core no Docker!

Ainda utilizo bem pouco o Docker, mas tenho gostado bastante de ter containers para realizar algumas atividades sem precisar instalar coisas no sistema operacional.

Vamos lá!

Primeiro instale o Docker, caso ainda não o tenha:

https://www.docker.com/docker-mac

Instalar o .NET Core via Docker é muito simples!

https://www.microsoft.com/net/core#dockercmd

docker run -it microsoft/dotnet:latest

Esse comando irá baixar e instalar o .Net Core container diretamente do Docker Hub da Microsoft.

Uma vez instalado e rodando, você já estará dentro do container e pode rodar alguns comandos do .NET Core. Tente alguns:

Dotnet –version

image

dotnet –info

image

Exit

image

Até aqui eu fui bem tranquilo, mas e agora se eu quiser voltar para o contexto do container?

Demorei um pouco lendo a documentação do Docker, mas encontrei 2 modos de voltar ao contexto do container. Mas antes, utilize o Kitematic para verificar as configurações e nomes dos seus containers.

clip_image002

clip_image004

Você pode iniciar o container pelo Kitematic e/ou utilizar o comando:

image

Para entrar no contexto do container:

Docker attach netcore

image

O comando attach permite que entre no contexto do terminal que você está, mas se abrir um novo terminal.. não será possível. Então utilize este outro comando para entrar no contexto em qualquer terminal:

Docker exec –i –t netcore /bin/bash

image

E é isso, agora você tem o .NET Core rodando no Mac utilizando Docker.

Abraço!

Entendendo o Alternate Access Mapping (AAM) do SharePoint 2010 de forma simples

November 17, 2010 Leave a comment

Autor:

Thiago Silva

Publicação:

17/Nov/10

Overview

O Alternate Access Mapping (AAM) direcionam usuários URLs durante sua interação com o SharePoint. AAM permite mapear solicitações Web para o endereço correto de aplicações Web e sites, e permite servir a URL correta de volta para o usuário.

Em outras palavras, podemos fazer com que a URL http://MinhaURLdoSharePoint, seja direcionada para URL verdadeira do meu ambiente, como http://notebook01 (nome da minha máquina).

NOTA: Neste artigo vou mostrar como podemos ver isso na prática, usando um ambiente de desenvolvimento. Por ser um ambiente de desenvolvimento, vou utilizar os arquivo “hosts” para mapear nosso endereço. Em um ambiente real, esse mapeamento deve ser feito em um servidor DNS.

Solução

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

· Windows 7 Enterprise;

· Microsoft SharePoint 2010 Server Enterprise;

· SQL Server 2008 Enterprise;

1. Mapeando o endereço IP do nosso servidor SharePoint, no arquivo “hosts”.

1.1. Clique em Iniciar, e depois em Executar. Ou, se preferir, use a tecla de atalho “Windows + R”.

1.2. Insira o endereço “%SystemDrive%\Windows\System32\drivers\etc” e clique Ok.

image

1.3. Clique com o botão direito no arquivo “hosts”, e clique em Open.

1.4. Abra o arquivo com o Notepad (Bloco de Notas).

image

1.5. Insira uma linha no fim do documento, similar a esta da imagem. O IP é o da minha própria máquina (127.0.0.1) que contém o SharePoint, você deve adequar para o seu ambiente. E o endereço (MinhaURLdoSharePoint), é o endereço que eu quero acessar o meu SharePoint meu Internet Explorer.

image

1.6. Pronto, salve o arquivo e vamos testar se o endereço está funcionando. Abra o prompt de comando e dê um ping no endereço que acabamos de mapear.

image

Funcionando. Agora, vamos criar o mapeamento no SharePoint.

2. Acessando a Central Administration do SharePoint e criando um AAM.

2.1. Na Central Administration, clique em Application Management.

2.2. Clique em Configure alternate access mappings.

image

2.3. Clique em Add Internal URLs.

image

2.4. Insira o endereço que você mapeou no arquivo “hosts”. No meu caso: http://MinhaURLdoSharePoint. Escolha a zona de autenticação desejada para o mapeando e certifique-se de que está utilizando a Collection correta. Depois, clique Save.

image

image

Pronto, configuramos o AAM para este endereço. Vamos acessar nosso SharePoint, abra o Internet Explorer e digite a sua URL: http://MinhaURLdoSharePoint.

image

Caso encontre dificuldades para acessar seu SharePoint com o novo endereço, veja este post: https://thiagottss.wordpress.com/2010/11/17/sharepoint-pede-autenticao-mas-no-faz-logon-pgina-em-branco-http-401-1-unauthorized-logon-failed/.

Conclusão

O AAM tem outras finalidades, como por exemplo, para ambientes com Network Load Balance (NLB). A ideia deste artigo foi, de forma simples, mostrar como podemos utilizar o AAM para mapear endereços para os usuários finais.

Informações adicionais sobre AAM:

http://blogs.msdn.com/b/sharepoint/archive/2007/03/06/what-every-sharepoint-administrator-needs-to-know-about-alternate-access-mappings-part-1.aspx – What every SharePoint administrator needs to know about Alternate Access Mappings (Part 1 of 3)

http://technet.microsoft.com/en-us/library/cc288609(office.12).aspx – Plan alternate access mappings (Windows SharePoint Services)

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.

Usando Named Sets no Analysis Services para entregar “Ranges” de datas pré-definidos para o usuário final

October 29, 2010 4 comments

Autor:

Thiago Silva

Publicação:

29/Out/10

Overview

Desenvolvendo soluções de BI, usando o SQL Server Analysis Services (SSAS), damos para o usuário final a possibilidade de navegar nos dados usando uma dimensão de tempo. Mas, quando o usuário começa a utilizar, ele sempre quer mais, por exemplo: Como faço para filtrar somente os dados do último mês, ou dos últimos três até a data atual?”.

Por padrão, este filtro não existe. O usuário teria que selecionar os meses que ele gostaria de ver, por exemplo, o mês anterior ao que vigente em que ele estava montando os filtros. Mas, e quando virar o próximo mês? Não será automático, ou seja, ele precisará fazer um novo filtro ou seu filtro inicial irá trazer dois meses anteiores, agora que ele está no próximo mês ao que ele estava antes.

Podemos então ajudar o usuário dando a possibilidade para que ele insira cálculos pré-configurados que farão o que ele precisa, de forma automática. Para isso, usamos Calculated Members e/ou Named Sets.

Solução

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

· Windows 7 Enterprise

· Microsoft SharePoint 2010 Server Enterprise (PerformancePoint Services);

· SQL Server 2008 Enterprise;

· Business Intelligence Development Studio;

· PerformancePoint Dashboard Designer.

O foco deste artigo não é a criação de um projeto no Analysis Services. Para ajuda neste assunto, consulte: http://msdn.microsoft.com/en-us/library/ms166552.aspx – Designing and Implementing: Tutorials (Analysis Services – Multidimensional Data)

1. Criando os Named Sets.

a. No seu projeto do Analysis Services, clique duas vezes sobre o seu cubo (.cube) no Solution Explorer.

b. Clique na tab Calculations, clique em Script View, para ver o script inteiro como na imagem abaixo.

image

c. Logo abaixo de “CALCULATE;”, insira o seguinte script.

/*

Dimensão Data

*/

CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[TodaySet]

AS filter([Data].[Calendar Date].[Date].Members,

[Data].[Calendar Date].CurrentMember.Properties(“Data As Int”)

= Format(Now(), “yyyyMMdd”)) ;

CREATE HIDDEN DYNAMIC SET CURRENTCUBE.[CalendarTodaySet]

AS exists([Data].[Calendar Date].[Date].Members, [TodaySet]).ITEM(0).ITEM(0) ;

CREATE DYNAMIC SET CURRENTCUBE.[Current Year To Date]

AS [CalendarTodaySet].ITEM(0).ITEM(0).Parent.Parent.FirstChild.FirstChild :

[CalendarTodaySet].ITEM(0).ITEM(0);

CREATE DYNAMIC SET CURRENTCUBE.[Last Month]

AS [CalendarTodaySet].ITEM(0).ITEM(0).Parent.Lag(1).FirstChild :

[CalendarTodaySet].ITEM(0).ITEM(0).Parent.Lag(1).LastChild;

CREATE DYNAMIC SET CURRENTCUBE.[Last Three Month]

AS [CalendarTodaySet].ITEM(0).ITEM(0).Parent.Lag(3).FirstChild :

[CalendarTodaySet].ITEM(0).ITEM(0).Parent.Lag(1).LastChild;

CREATE DYNAMIC SET CURRENTCUBE.[Last Three Month To Date]

AS [CalendarTodaySet].ITEM(0).ITEM(0).Parent.Lag(3).FirstChild :

[CalendarTodaySet].ITEM(0).ITEM(0);

/*

[Data] = Dimensão de Tempo

[Calendar Date] = Hierarquia com os seguintes atributos (Year → Month → Date)

[Date] = Atributo relacionado ao dia 

*/

d. Na Solution Explorer, vá até o DataSourceView que possui a sua tabela de Tempo. Clique duas vezes nela para criarmos um campo calculado que terá a data atual como “int”, no formato yyyymmdd.

e. Clique com o botão direito na sua tabela que contém as datas, e selecione Add New Named Calculation.

image

f. Em Column Name, dê o nome de Data As Int.

g. Em Expression, insira a seguinte expressão para transformar a data em um número inteiro.

i. convert(varchar(8), PK_Date, 112)

PK_Date = coluna que contém a data na tabela de datas.

h. Clique OK, e depois clique com o botão direito na tabela e selecione Explore Data para verificar se a expressão funcionou. Navegue com as barras, se necessário, até encontrar a coluna que acamos de criar.

image

image

i. Na Solution Explorer, clique duas vezes sobre a sua dimensão de Datas.

j. Em Data Source View, na tabela de Datas, localize a coluna que acabamos de criar, clique com o botão direito e selecione New Attribute from Column.

image

NOTA: Repare na hierarquia Calendar Date, é nela que o script é baseado.

k. Pronto. Agora é só fazer Deploy e Processar o cubo. Na dimensão de Data teremos nossos filtros!

image

l. E onde entra o SharePoint nisso tudo? Podemos gerar gráficos dinâmicos usando o PerformancePoint e/ou Excel Services acessando informações do cubo criado no SQL Server com Analysis Services.

m. E estes Named Sets podem ser utilizados no PerformancePoint Dashboard Designer para filtrar os dados!

image

Conclusão

Nesse artigo mostrei como podemos criar filtros/membros calculados para automatizar ações do usuário final. Assim, ele não precisa ficar atualizando o mesmo relatório sempre que alguma variável já conhecia mude, como é o caso de um relatório que traz informações do mês anterior.

Sem estes filtros/membros calculados, o usuário precisaria atualizar o relatório sempre que o mês mudasse, selecionando então, o anterior vigente.

Extraindo informações de listas no SharePoint e carregando em tabelas no SQL Server usando Integration Services

October 28, 2010 13 comments

Autor:

Thiago Silva

Publicação:

28/Out/10

Overview

Constantemente encontramos situações onde precisamos extrair as informações do SharePoint para tratar, analisar e mostrar algo.

Já vi situações que usuários acessam os dados do SharePoint diretamente no Banco de Dados. Esse procedimento não é recomendado, pois a Microsoft não garante suporte ao produto se acessamos os dados diretamente na base de dados do SharePoint. Para isso, existem as APIs e afins.

Recentemente, montei um projeto de BI, usando as informações das listas do SharePoint, para montar indicadores, dashboards e tudo mais. Mas, como fazer isso usando as listas do SharePoint?

Utilizei os recursos do SQL Server, mais precisamente o Integration Services (SSIS), para extrair as informações do SharePoint e jogar em tabelas criadas no SQL Server, em uma instância e um Banco de Dados separado para isso. Assim, também ajudamos para que a performance das outras aplicações do SharePoint não sofram tanto.

Para utilizar o SSIS e extrair as informações do SharePoint, precisaremos de um add-in disponível no CodePlex (http://sqlsrvintegrationsrv.codeplex.com/releases/view/17652). Faça o download, instale e adicione o add-in no Toolbox como sugerido a seguir.

Solução

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

· Windows 7 Enterprise;

· Microsoft SharePoint 2010 Server Enterprise;

· SQL Server 2008 Enterprise;

· SQL Server 2008 Integration Services;

· SQL Server Business Intelligence Development Studio;

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

1. Instalando o SSIS SharePoint List Adapters

a. Faça download do executável no link mencionado acima.

b. Rode o instalador e prossiga com a instalação.

image

2. Adicione o List Source (puxar informação do SharePoint) e o List Destination (inserir informação no SharePoint) ao Toolbox do Business Intelligence Development Studio.

a. Abra o Business Intelligence Development Studio e crie um novo Projeto do Integration Services.

image

b. Clique em DataFlow, depois clique no link no meio da tela para criar um Data Flow Task.

image

c. No menu Tools, selecione Choose Toolbox Items para adicionar os novos itens.

image

d. Na tab SSIS Data Flow Items, selecione SharePoint List Destination e SharePoint List Source marcando os checkbox’s.

image

e. Para organizar melhor, arraste os controles que estão em General para Data Flow sources e Data Flow Destinations respectivamente.

image

3. Criando uma lista customizada no SharePoint para testes com a integração do SSIS.

a. Vá até o site desejado, clique em All Site Contents, e depois em Create para criar uma nova lista. Escolha uma Custom List para facilitar a criação de colunas. Clique Ok, após dar um nome para sua lista.

image

b. Insira alguns itens na lista para que algo seja retornado quando rodarmos o pacote no SSIS.

image

4. De volta ao Business Intelligence Development Studio.

a. Em Data Flow, selecione SharePoint List Source no Toolbox e arraste para a area de Design do Data Flow.

image

image

b. Clique duas vezes para editar as configurações, e apontarmos para a lista desejada.

i. A janela do Advanced Editor for SharePoint List Source deve aparecer para editarmos as configurações.

ii. Em Custom Properties, localize SiteUrl e SiteListName. Insira as informações de acordo com seu ambiente. No meu caso, http://notebook01/ e Lista Teste SSIS respectivamente.

image

NOTA: Perceba que podemos customizar muitas outras opções, como por exemplo, inserir uma Query CAML para trazer apenas itens baseados em certo filtro e/ou ordenado por alguma coluna específica.

iii. Nas tabs Column Mappings e Input and Output Properties, você pode customizar quais colunas deseja trazer da lista e também criar próprias colunas e mapeá-las de acordo com a necessidade.

5. Criando uma tabela no SQL Server para receber os dados da lista.

a. Clique no menu View, depois em Server Explorer.

image

b. Clique com o botão direito em Data Connections, em seguida em Add Connection.

image

c. Insira o nome do seu servidor de banco de dados (caso ele possua instâncias diferentes, como no meu caso, insira também o nome da instância). E mais abaixo, selecione o nome do seu banco de dados onde iremos criar a tabela que irá receber as informações da lista.

image

d. Clique em Test Connection para testar sua conexão com o Banco de Dados, e depois clique em Ok.

e. Expanda a conexão que você acabou de criar. Expanda Tables, clique com o botão direito e selecione Add New Table.

image

f. Crie duas colunas: uma “ID”, do tipo int, para armazenar o ID do item do SharePoint, e outra coluna “Nome”, do tipo nvarchar(255), para armazenar o campo Title do item do SharePoint.

g. Em Propierties, da tabela, coloque um nome para sua tabela. No meu caso, coloquei algo similar ao nome da Lista no SharePoint. Então, ficou assim: “Table_Teste_SSIS”.

image

6. Inserindo as informações extraídas da Lista do SharePoint para a tabela no SQL Server.

a. No Toolbox, arraste o item OLE DB Destination para o Design do Data Flow task.

image

b. Clique no SharePoint List Source, e arraste o conector (output) para o OLE DB Destination (input).

image

c. Clique duas vezes sobre OLE DB Destination para configurar os mapeamentos.

i. O OLE DB Destination Editor deve aparecer. Clique em New no OLE DB connection manager para criar uma nova conexão, que será utilizada por este controle.

ii. Em Configure OLE DB Connection Manager, clique em New.

iii. Configure a conexão com o seu Banco de Dados, como feito anteriormente.

image

iv. Clique Ok, e Ok novamente para voltar ao OLE Destination Editor. De volta ao Editor, escolha a tabela que acabamos de criar.

image

v. Depois clique em Mappings, para mapear as colunas que queremos.

vi. Veja que a coluna ID já teve seu mapeamento feito automaticamente por que elas tem o mesmo nome na Lista do SharePoint e na Tabela no SQL. Mas a coluna Title e Nome, não foram mapeadas. Por tanto, vamos fazê-lo agora.

vii. Clique no Input Column abaixo de ID, e seleciona Title. Depois, clique em OK.

image

d. Agora, clique duas vezes sobre o conector (linha verde) para adicionar um “viewer” para visualizar o que está vindo do SharePoint.

i. O Data Flow Path Editor irá aparecer. Clique Data Viewers, clique em Add. Depois clique em Ok, e Ok novamente pare fechar todos os Editor’s.

image

e. Pronto! Agora vamos pressionar F5 para iniciar a extração dos dados.

f. O Data Viewer vai aparecer para visualizarmos as informações que vieram da lista do SharePoint. Pressione o “play” para continuar e jogar as informações na tabela do SQL.

image

g. Sucesso!

image

h. No Server Explorer clique com o botão direito na tabela, e selecione Show Table Data.

image

i. As informações da nossa lista estão agora na tabela no SQL Server!

image

Conclusão

Nesse artigo mostrei como podemos usar funcionalidades do SLQ Server para extrair dados do SharePoint de forma estruturada e aproveitando-se das API’s do SharePoint para isso, já que não é recomendado acessar diretamente as informações do SharePoint no seu banco de dados.

Benefícios na utilização do SharePoint List Source and Destination:

· Somente os campos que você quer são retornados do SharePoint.

· Listas grandes não são transferidas de uma única vez. Elas são paginadas em batches, com a configuração de tamanho dos batches. Por padrão, são 1000 itens por vez.

· Informação dos tipos de coluna do SharePoint é usada para o mapeamento nos tipos de dados dentro do Integration Services.

· Queries CAML podem ser adicionadas para realizar filtros nas linhas que serão retornadas da lista.

Acessando e processando dados externos de planilhas via Excel Services Web Services

October 17, 2010 18 comments

Autor:

Thiago Silva

Publicação:

16/Out/10

Overview

Uma das funcionalidades do SharePoint 2010, quando o assunto é BI, é o Excel Services. Juntamente com o PerformancePoint Services e as WebParts de gráficos, eles formam uma grande ferramenta para acompanhamento de resultados e tomadas de decisão.

Essas ferramentas tem um potencial ainda maior quando os conectamos com um Analysis Services para atualizar as informações automaticamente baseando no processamento de cubos OLAP.

Neste artigo, utilizei uma planilha Excel publicada no Excel Services do SharePoint 2010. Esta planilha possui uma conexão de dados com um cubo no Analysis Services para atualizar valores de uma pivot table, e por sua vez, atualizar informações em um gráfico, usando a WebPart de gráfico que está conecta a planilha no Excel Services.

O Excel Services pode atualizar a conexão de dados quando o usuário abre a planilha, ou de tempos em tempos, mas só enquanto o usuário interage com a planilha. Ou seja, é necessário que o usuário matenha uma sessão aberta para que a atualização dos dados seja realizada.

No meu caso, eu preciso atualizar a planilha em runtime, sem interação do usuário, por que o usuário vai ver apenas a WebPart de gráficos (fiz esta conexão da WebPart de gráficos com o Excel Services por que a WebPart não acessa dados do Analysis Services diretamente).

Solução

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

· Windows 7 Enterprise;

· Microsoft SharePoint Server 2010 Enterprise;

· SQL Server 2008 Enterprise;

Neste exemplo, já tenho as aplicações funcionando. O Excel Services já está rodando a planilha que possui conexão com o cubo no Analysis Services do SQL Server e a WebPart de gráfico, por sua vez, lê as informações da planilha hospedada no Excel Services. Vejam as imagens do ambiente montado:

WebPart de Gráfico acessando planilha no Excel Services:

image

Planilha no Excel Services acessando Analysis Services:

image

Se clicarmos em “Data” e depois em “Refresh All Connections”, a conexão com os dados irá atualizar e trazer os dados atuais da fonte de dados.

image

Mas, no meu caso, preciso que esta atualização seja feita com o arquivo fechado, sem intereção do usuário. Por este, criei um TimeJob (serviço de agendamento de tarefas do SharePoint) para realizar esta operação de tempos em tempos.

Neste artigo vou usar uma WebPart, para simplificar o deploy e “start” da operação usando um botão.

Crie um projeto de Visual Web Part no Visual Studio 2010 para começarmos. Caso preciso de informações de como fazer, acesse: http://www.canalsharepoint.com.br/tutoriais/Tutoriais/SharePoint%202010%20-%20Visual%20WebParts.aspx.

1. Adicionando Excel Services Web Services

1.1. Na Solution Explorer, clique com o botão direito no projeto e selecione Add Service Reference;

image

1.2. Clique em Advanced para abrir a janela de opções avançadas, e depois clique em Add Web Reference;

image

image

1.3. Insira a URL do Excel Services Web Services do seu site, no meu caso: http://notebook01/sites/bi/_vti_bin/excelservice.asmx. Dê o nome de “ExcelServices” e depois, clique em Add Reference.

image

1.4. Adicione o seguinte código na sua WebPart:

Code Snippet
  1. using System;
  2. using System.Web.UI;
  3. using System.Web.UI.WebControls;
  4. using System.Web.UI.WebControls.WebParts;
  5.  
  6. using SharePointWebParts.Demo.ExcelServices;
  7. using Microsoft.SharePoint;
  8.  
  9. namespace SharePointWebParts.Demo.VisualWebPartTeste
  10. {
  11.     public partial class VisualWebPartTesteUserControl : UserControl
  12.     {
  13.         protected void Page_Load(object sender, EventArgs e)
  14.         {
  15.             LiteralControl lc = new LiteralControl();
  16.             lc.Text = “<h3>Clique aqui para atualizar a planilha no Excel Services!</h3>”;
  17.             this.Controls.Add(lc);
  18.  
  19.             Button btnAtualiza = new Button();
  20.             btnAtualiza.Text = “Atualizar Agora!”;
  21.             btnAtualiza.Click += new EventHandler(btnAtualiza_Click);
  22.             this.Controls.Add(btnAtualiza);
  23.         }
  24.  
  25.         void btnAtualiza_Click(object sender, EventArgs e)
  26.         {
  27.             ExcelService es = new ExcelService();
  28.  
  29.             string workbookpath = http://notebook01/sites/bi/documents/Chart.xlsx&#8221;;
  30.             Status[] outStatus;
  31.  
  32.             es.Credentials = System.Net.CredentialCache.DefaultCredentials;
  33.  
  34.             try
  35.             {
  36.                 string sessionid = es.OpenWorkbook(workbookpath, “en-US”, “en-US”, out outStatus);
  37.  
  38.                 es.Refresh(sessionid, “notebook01_sqlexpress SSAS”);
  39.  
  40.                 byte[] contents = es.GetWorkbook(sessionid, WorkbookType.FullWorkbook, out outStatus);
  41.                 
  42.                 using (SPSite site = new SPSite(SPContext.Current.Web.Url))
  43.                 {
  44.                     using (SPWeb web = site.OpenWeb())
  45.                     {
  46.                         web.AllowUnsafeUpdates = true;
  47.  
  48.                         web.Files.Add(workbookpath, contents, true);
  49.  
  50.                         web.AllowUnsafeUpdates = false;
  51.                     }
  52.                 }
  53.  
  54.                 es.CloseWorkbook(sessionid);
  55.             }
  56.             catch (Exception ex)
  57.             {
  58.                 Label lblmensagem = new Label();
  59.                 lblmensagem.Text = ex.ToString();
  60.                 this.Controls.Add(lblmensagem);
  61.             }
  62.         }
  63.     }
  64. }

 

1.5. Clique em Build e depois em Deploy Solution;

image

1.6. Adicione sua WebPart na página desejada e clique no botão “Atualizar Agora!” para fazer com nosso código acesse o Excel Services via Web Services, abra a planilha em runtime, processe os dados das conexões externas e salve a planilha atualizada.

image

1.7. Se houveram mudanças na fonte de dados, a planilha irá atualizar e, consequentemente, a WebPart de Gráficos também será atualizada.

Veja nas imagens que, no meu caso, as informações mudaram. Assim, atualizando a planilha no Excel Services e, consequentemente a WebPart de Gráficos.

Planilha no Excel Services Atualizada:

image

WebPart de Gráficos após clicar no botão da WebPart para atualizar as informações:

image

Conclusão

Neste artigo mostrei como atualizar conexões de dados externas em planilhas rodando no Excel Services em runtime usando Excel Services Web Services.

Informações adicionais:

https://thiagottss.wordpress.com/2010/10/17/acessando-e-processando-dados-externos-de-planilhas-via-excel-services-web-services-usando-uma-webapplication-e-sharepoint-2010-client-object-model/ – Acessando e processando dados externos de planilhas via Excel Services Web Services usando uma WebApplication e SharePoint 2010 Client Object Model