quarta-feira, 30 de dezembro de 2009

SharePoint: Acesso negado ao acrescentar um servidor na farm

Ao rodar o Assistente de Configuração de Produtos e Tecnologias do SharePoint para acrescentar um servidor a uma farm, recebi o erro "Acesso Negado":

Task configdb has failed with an unknown exception
Exception:
System.Security.SecurityException: Access Denied.

Achei num post perdido no site da M$ que uma possível causa disto é versões diferentes de service packs entre os servidores. E realmente o primeiro servidor da farm estava com o SP1, e o servidor que eu estava acrescentando estava com o SP2. Instalei o SP2 no primeiro servidor, executei novamente o Assistente para acrescentar o segundo servidor à farm, e o erro não voltou a ocorrer. Algumas observações importantes no processo:
  • Para instalar o SP em um servidor com o MOSS, você tem que instalar o SP de mesma versão do WSS. O SP do MOSS *não* é cumulativo.
  • Para descobrir qual a versão do SharePoint instalado, no Painel de Controle selecione Adicionar/Remover Programas, selecione o produto (MOSS ou WSS), e clique no link Click here for support. Não encontrei no site da Microsoft uma lista de números de versões (tem aos quilos por aí), mas basta verificar se eles são iguais ou não.

terça-feira, 29 de dezembro de 2009

Windows Virtual PC: Onde está?

O Windows Virtual PC é a nova versão do Microsoft Virtual PC. Roda no Windows 7, mas não vem no Windows 7 - você tem que baixar uma atualização para instalá-lo. A página de download é http://www.microsoft.com/windows/virtual-pc/download.aspx, apesar de o título da página ser "Download Windows XP Mode". Você preenche as duas dropdowns com edição e idioma do seu Windows 7 e, caso você não queira o Windows XP Mode, selecione o segundo link para instalar só o Windows Virtual PC.

Antes de instalar o Windows Virtual PC, você tem que saber se o seu processador suporta tecnologia de virtualização de hardware (dê uma olhada nos links da Intel e AMD no artigo). A maioria dos processadores já tem VT, ou virtualization technology. Alguns não, como p.e. o T6670 do meu Vostro 1310 da Dell :-P. A Microsoft publicou uma ferramenta chamada Hardware-Assisted Virtualization Detection Tool que detecta se o seu processador suporta VT. Se ele não suportar, use o Virtual PC 2007, a versão anterior ao Windows Virtual PC. Tem menos funcionalidades, mas os discos das VM's criadas no Virtual PC 2007 tem o mesmo formato dos discos do Windows VPC.

quarta-feira, 23 de dezembro de 2009

Virtual PC: Acesso ao disco do host

Estou mexendo com máquinas virtuais no Windows 7, que vem com uma nova versão do Virtual PC: o Windows Virtual PC. Um recurso interessante, que não sei se havia na versão anterior, são os "Recursos de Integração", que permitem você capturar vários hardwares da máquina host, mas o mais legal é a possibilidade de estabelecer uma conexão com o HD do host:


[clique na imagem para o tamanho original]

Isto permite que você acesse o HD do host para, p.e., rodar instaladores de software na máquina virtual, sem ter que configurar a rede entre VM e host.

sexta-feira, 18 de dezembro de 2009

SELECT * FROM Tabela JOIN ListBox

Essa foi legal. Tava correndo num projeto de ASP.NET e me deparei com a seguinte situação: tenho uma ListBox que permite a seleção de várias linhas (propriedade SelectionMode = Multiple). Ela mostrava as linhas de uma tabela de domínio (lado 1 de um relacionamento 1-N). Quando o usuário selecionasse algumas linhas na listbox, eu tinha que carregar as linhas relacionadas aos valores selecionados na listbox. P.e., trabalhando no banco Northwind (um dos bancos de exemplo do SQL Server), na listbox aparecem todas as categorias; quando o usuário seleciona algumas categorias, temos que mostrar en um grid todos os produtos das categorias selecionadas:


O projeto usado é uma ASP.NET Web Application do Visual Studio 2010 Beta 2. Criei um Entity Data Model em cima do banco Northwind e importei as tabelas Products e Categories. A listbox carrega a tabela de categorias. O botão de carregar tem o seguinte código:

1    Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles LinkButton1.Click

2 Dim dados As New NorthwindEntities

3 Dim produtosDasCategoriasSelecionadas As New List(Of Products)

4 produtosDasCategoriasSelecionadas = _

5 (From linha As Products In dados.Products

6 Join item As Integer In (From x In ListBox1.Items Where x.Selected = True Select x.value)

7 On linha.CategoryID Equals item
8 Select linha).ToList()
9 GridView1.DataSource = produtosDasCategoriasSelecionadas

10 GridView1.DataBind()
11 End Sub

Olha só que MASSA é esse tal de Linq:
  • Linha 5: defino que a consulta vai retornar objetos da classe "Products", ou seja, produtos da tabela Products (a classe Products foi gerada pelo Entity Data Model do banco Northwind).
  • Linha 6, parte 1: Join item As Integer - faço um join entre a tabela Products e uma lista de inteiros que conterá as chaves das categorias selecionadas na listbox. Legal, né? Linq vê uma lista e faz as consultas em cima, não interessa se as listas são conjuntos de registros em uma tabela no banco, ou conjuntos de inteiros em memória.
  • Linha 6, parte 2: item As Integer In (From x In ListBox1.Items Where x.Selected = True Select x.value) Digo que a lista de inteiros (item As Integer) vai vir da listbox chamada ListBox1 (ListBox1.Items), mas só quero os inteiros para as opções selecionadas (Where x.Selected = True), e digo que estes inteiros corresponderão aos valores das opções da listbox (Select x.value). Em resumo, fiz um SELECT em cima dos itens de uma listbox, com cláusula WHERE e tudo!!!

  • Linha 7: é a condição de ligação do join, que filtra os produtos pela lista de chaves produzidas pela consulta à ListBox.

Poizé! Uma consulta Linq que traz dados de uma tabela, mas só para as linhas da tabela "relacionadas" com as opções selecionadas em uma listbox. Ou seja, um join entre uma tabela e uma listbox... :-) esse Linq é muito divertido mesmo...