quinta-feira, 5 de março de 2009

Retornando Listas do Sharepoint

A integração entre as ferramentas Microsoft pode e deve ser sempre utilizada ao favor dos desenvolvedores e usuários.

A ferramenta WSS, ou Windows Sharepoint Services oferece uma gama variada de serviços para compartilhamento de informações e um ambiente completo de colaboração.

Neste post vamos criar um webapplication simples para retornar as listas de um determinado site do Sharepoint:

  1. Criar um projeto WebApplication;
  2. Fazer referência ao web service na Solution Explorer, clicando com o botão direito sobre o item Web References, Add Web Reference;
    1. Inserir a URL da sua aplicação SharePoint no campo URL e clicar em GO;
    2. Definir um nome da sua referência no campo Web Reference Name e clicar em Add Reference;
  3. Inserir um asp:ListBox ao formulário default1.aspx que foi gerado pelo BIDS;
  4. Inserir um asp:Button;
  5. Duplo click sobre o botão Button1;
    1. Vai surgir a página de edição de código;
    2. Copiar o seguinte código:

/*Declara e inicializa uma variável para listas do web service*/

suporteint.Lists myservice = new suporteint.Lists();


/*Autentica o usuário corrente, passando suas credenciais default para o Web service do System Credential Cache */

myservice.Credentials = System.Net.CredentialCache.DefaultCredentials;


/* definir a propriedade URL do serviço para o seu subsite. A não definição desta propriedade retornará as listas no Web Site Raiz.*/

myservice.Url = "http://<seu site>/_vti_bin/Lists.asmx";


/*Declare um objeto XmlNode e inicialize-o com o XML response do método GetListCollection. */

System.Xml.XmlNode node = myservice.GetListCollection();


/*Varra através do resultado XML e defina o valor do atributo "título" para cada lista. */

foreach (System.Xml.XmlNode xmlnode in node)

{

ListBox1.Items.Add(xmlnode.Attributes["Title"].Value);

ListBox1.Rows++;

}

  1. Clique start no menu debug para executar a aplicação;
  2. Clique no botão "Button1" para retornar a relação de listas do seu site sharepoint informado.

Compensa estudar os WebServices e métodos disponibilizados para acesso a listas e dados do Sharepoint.

Referência: http://msdn.microsoft.com/en-us/library/ms450301.aspx


sexta-feira, 16 de janeiro de 2009

Erro SSIS: product level is insufficient

Eu havia desenvolvido um pacote SSIS, testado exaustivamente no ambiente de desenvolvimento e, depois disso, instalamos o pacote no ambiente de testes do cliente.
Quando fui executar o pacote, diretamente no SSIS obtive um erro absolutamente inesperado:

Product level is insufficient for [nome do objeto]

- O pacote estava sendo executado a partir do SSMS apontando para outro servidor, onde havia sido instalado o pacote.
- Este servidor onde estava sendo executado o SSMS não possui o serviço do SSIS instalado, e este serviço está instalado somente no servidor "B", onde foi instalado o pacote.

Pesquisando na web, aprendi algumas coisas interessantes sobre o comportamento e execução dos pacotes SSIS:
1) Quando se executa um pacote SSIS, ele é executado no servidor "A", ou seja, o que chama a execução, e utiliza todos os recursos desde CPU, inclusive os serviços. Logo, é necessário que o serviço do SSIS esteja instalado no servidor que faz a chamada ao pacote;
2) Uma forma de resolver esta questão, para o caso de não poder instalar o serviço do SSIS na máquina que vai chamar o pacote é agendar um SQL Job que faça a chamada ao pacote;

Fiz os testes em ambas as situações e tudo ocorreu ok!

Fontes:
http://blogs.msdn.com/michen/archive/2006/11/11/ssis-product-level-is-insufficient.aspx
http://blogs.msdn.com/michen/archive/2006/08/11/package-exec-location.aspx

Ps.: Depois disso tive um outro problema, que fica para outro post...

quinta-feira, 16 de outubro de 2008

SSAS porta default

Amigos,

Instalando uma solução de BI num determinado cliente, me deparei com um problema para acessar os dados dos cubos através do MS Excel. A infra do cliente bloqueou algumas portas e, até o momento, não sabia qual porta deveria ser liberada para poder acessar os cubos corretamente.
Fazendo uma pesquisa pela web, localizei a informação, e aqui estão 3 dos links mais interessantes que eu achei:

Ms TechNet
http://www.microsoft.com/technet/prodtechnol/sql/2005/ssasproperties.mspx
http://www.ssas-info.com/analysis-services-faq/29-mgmt/75-what-tcp-port-ssas-2005-uses

http://www.ssas-info.com/analysis-services-faq/36-excel/98-how-to-disable-excel-pivot-table-security-warning-data-connections-have-been-disabled-enable-this-content
Este último na verdade trata de outra questão de segurança no Excel, mas vai no bolo! ;-)

Então, a porta default do SSAS é a 2383, e esta deve ser usada pois cada named instance no SSAS gera uma porta dinâmica.

[]'s

domingo, 14 de setembro de 2008

Erro em cubos do SSAS depois de instalar o Source Safe

Nos deparamos aqui com um problema de não conseguir editar os membros calculados de um cubo depois de instalar o Source Safe. Meu colega Ricardo Ramos conseguiu achar uma solução:

Analysis Services - Error Calculations
Unexpected error ocurred:

This error is caused because an installation of the Office 2007 overwrites two particular files that are used by SSAS 2005:
- msmdlocal.dll
- msmgdsrv.dll
So the solution is to copy this two files from:
%programfiles%\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\
to:
%programfiles%\Common Files\System\Ole DB\

Só jogar esses arquivos na pasta citada e boa!

quinta-feira, 11 de setembro de 2008

Insert into

Um código simples e interessante para inserir somente registros únicos a partir de uma outra tabela de-para que é usada para comparar se o registro já foi inserido:

INSERT INTO TBDPPECA
(ID_PECA, CODFABRICANTE, NUM_MOL, DTPROCESSAMENTO)
(SELECT ID_PECA, NUM_CODFABRICANTE, NUM_MOL,CONVERT(VARCHAR(10), GETDATE(), 120) + ' 00:00:00'
FROM DIMPECA
WHERE ID_PECA >
CASE
WHEN (SELECT MAX(ID_PECA) FROM TBDPPECA) IS NULL THEN 0
ELSE (SELECT MAX(ID_PECA) FROM TBDPPECA)
END
)


Mais um update from:

UPDATE tbprod SET
ind_cestabasica = 'S'
FROM
tbcestabasica cb, tbprod p
where
cb.num_prod = p.num_prod

Lendo caracteres de uma string simulando um split com T-Sql

Este código simula um split, mas para um caso específico que eu enfrentei, onde precisava quebrar uma string em várias, mas sabia que sempre seria preenchida desta forma: '97 98 99 00'. Precisava pegar os dois caracteres quebrando pelo espaço.
Dá pra fazer isso mais dinamicamente, usando CharIndex por exemplo, fica ao gosto do freguês:

/*
Simulando Split
*/

print 'Segunda versão'
declare @stPos int
declare @size int
declare @var varchar(100)
set @var = '97 98 99 00'
set @size = len(@var)
set @stPos = 1
while @size > 0
begin
print substring(@var, @stPos, 2)
set @stPos = @stPos + 3
set @size = @size - 3
end

terça-feira, 9 de setembro de 2008

Usando GetDate() para retornar somente a data


SELECT CAST(CONVERT(VARCHAR(10), GETDATE(), 120) AS SMALLDATETIME)

Melhor que usar concatenação:

select CONVERT(VARCHAR(10), GetDate(), 120) + ' 00:00:00'

Verificando o código para configuração da data.