Páginas

segunda-feira, 25 de junho de 2012

Novo SharePoint Help

Galera, sejam bem-vindos ao SharePoint Help. Como podem perceber, há algo diferente: o site virou, de fato, um blog, focando nos problemas que os Desenvolvedores / IT Pros de SharePoint enfrentam nesta jornada de aprendizado, além de notícias sobre a plataforma da Microsoft. Pra que querer inventar e construir um portal enorme, cheio de seções, se não há braço pra cuidar de tudo, não é mesmo?

Todos os erros/problemas/soluções e artigos que constavam no site antigo estão aqui. Perderam a data de publicação, mas isto é um detalhe. O SharePoint Help está no ar desde 2010 visando lhe apoiar, e não servir de base para comprovação de nada. Estamos aqui para ajudar.

O SP Help terá algumas novidades neste ano, bem importantes. Mas isto nós vamos abordar depois.

Prometo agora, com o Blogger (que me traz uma experiência bem melhor nas postagens que o site que eu mesmo tinha construído), postar com uma frequência bem maior.

E vocês já sabem: dúvidas, elogios ou críticas, é via diego@sharepointhelp.com.br ou por aqui, via comentários. Estou aqui para ajudar. ;)

"SharePoint 15", codenome da próxima versão, deve ser anunciado oficialmente na SharePoint Conference 2012

(Notícia originalmente publicada em 15/11/2011 15:01 em nosso antigo blog).

A próxima versão do SharePoint, codenome "SharePoint 15"/"SharePoint vNext", poderá ser anunciada na versão 2012 do SharePoint Conference, evento oficial da Microsoft sobre a plataforma.

Durante os dias 12, 13, 14 e 15 de novembro de 2012, em Las Vegas (Estados Unidos), o evento deve trazer telas e os primeiros detalhes da próxima versão da plataforma. Comenta-se que haverá aprimoramentos nos recursos de BI e busca.

MIC Day neste sábado, em Olinda - PE. Estaremos lá!

(Notícia originalmente publicada em 27/05/2010 23:30 em nosso antigo blog.)

O mercado de TI em Pernambuco não foi mais o mesmo após a criação do Microsoft Innovation Center Pernambuco. O Centro balançou as estruturas do mercado, descobrindo talentos e os inserindo no mercado.

É com orgulho que participo, neste sábado, 28/05, do MIC Day, evento promovido pelo MIC em parceria com a minha empresa, a NGS - Novelty Green Solutions. Farei uma palestra de SharePoint 2010 logo no início do evento, que começa às 09h00 da manhã. Garanto que a apresentação vai fugir do comum...

O MIC Day será realizado na Faculdade AESO - Barros Melo, em Olinda - Pernambuco, durante todo o dia. As inscrições já se encerraram, mas vou trazer o que aconteceu de melhor no evento para o Help em breve. Se você não se inscreveu, entre na fila de espera para um possível novo MIC Day no site do MIC Pernambuco. Caso tenha se inscrito, nos vemos por lá!

Comentários sobre o exame 70-668 (PRO): SharePoint 2010, Administration

(Notícia publicada originalmente em 14/02/2011 13:29 em nosso antigo blog.)

Cansativo.

Não há termo melhor pra definir o exame 70-668, que, junto com o 70-667, garante à pessoa o título de MCITP no SPS 2010. Cinquenta questões, sendo mais da metade verdadeiras "redações".

Cada uma destas questões "cansativas", digamos assim, traz um caso real de uma empresa: sua política de segurança, requisitos para ajustes e novas soluções e também especificações do ambiente já existente. Parte dessas questões referenciam apenas trechos deste caso real - ou seja, se você leu tudo antes de ver o enunciado propriamente dito, perdeu tempo (experiência própria!). Mesmo assim, a prova é exaustiva.

Assuntos abordados? Upgrade (muito!) do MOSS 2007 para o SPS 2010, serviços (principalmente o Managed Metadata Services), BI, configuração de zonas, soluções sandbox... É o que eu lembro agora. Uma prova relativamente difícil, pois aborda alguns casos reais não muito comuns. Fui aprovado e considero esta a prova de configuração mais detalhista e difícil do SharePoint 2010 e 2007.

Conselho meu: deixe para fazer esta prova depois de tirar as outras três certificações do SPS 2010.

Comentários sobre o exame 70-573: SharePoint 2010, Application Development

(Notícia originalmente publicada em 06/12/2010 23:59 em nosso antigo blog)

Mais um dia de prova! Hoje, fiz o exame 70-573 (SharePoint 2010, Aplication Development). E... passei.

Antes de qualquer coisa: NOTA 10 PRA MICROSOFT! Prova muito bem elaborada, assuntos bem distribuídos, questões de código que não são cansativas. E o mais importante: um exame que realmente avalia seu conhecimento, e não a sua capacidade de prestar atenção em detalhes. Durante a prova, lembrei de diversas situações que encontrei no meu dia-a-dia "sharepointer".

Customização de ribbon, event receivers, REST, client object model (questões bem fáceis), debugging, páginas personalizadas, site definitions... Nota 10 pra Microsoft.

Com a carreira do WSS 3/MOSS 2007 completa, agora vou correr pra completar a do SPS 2010. Em relação ao nível de dificuldade, considero ela mais difícil que a 70-541 (WSS 3 App Dev), só que mais fácil que a 70-542 (MOSS 2007 App Dev). Tem experiência com SharePoint? Só revise alguns assuntos e você é um forte candidato a passar. ;)

Comentários sobre o exame 70-541: Windows SharePoint Services 3.0, Application Development

(Notícia originalmente publicada em 11/11/2010 07:25 em nosso antigo blog.)

Ontem, completei a carreira SharePoint 2007/WSS 3, com a aprovação no exame que faltava, 70-541, o Windows SharePoint Services 3.0, Application Development. Se algum de vocês vai fazer esta prova, eu já adianto: ela não é difícil.

Não estudei para a prova, fui confiando na minha experiência. Mas aí vai uma recomendação minha: nunca façam isso! Digo porque minha pontuação foi raspando na nota mínima pra obter aprovação. A partir do momento que confiei na minha experiência, deixei de estudar assuntos cobrados no exame que eu não tenho muita familiaridade, como os Web Services do SharePoint.

Esse exame não chega ao nível de dificuldade do 70-542, o Microsoft Office SharePoint Server 2007, Application Development. Mas não significa que a prova é fácil. Ela vai ser simples pra quem tem experiência com a ferramenta e ainda faz uma revisão dos itens com os quais não possui muita familiaridade.

Mais informações: Microsoft Learning.

Certificação de configuração do WSS 3.0 deixará de existir

(Notícia originalmente publicada em 24/10/2010 00:11 em nosso antigo blog)

A certificação Windows SharePoint Services 3.0 - Configuring, código 70-631, será descontinuada no dia 31 de março de 2011, segundo um anúncio da Microsoft.

A versão mais provável é a seguinte: como na versão 2010 do SharePoint a Microsoft não criou provas de certificação para a edição Foundation (novo nome do WSS), a versão 2007 do produto também não teria provas para a sua edição gratuita correspondente.

A prova 70-540 (WSS 3 - Application Development) não saiu de linha ainda porque conta com vários fundamentos da plataforma SharePoint que a prova de Desenvolvimento do MOSS 2007 (70-541, MOSS 2007 - Application Development) não aborda. Basicamente, a 70-541 é mais centrada em serviços. Por isso, é uma tendência que as duas de Desenvolvimento continuem juntas e apenas a de Configuração do WSS seja descontinuada.

Acessar um arquivo SPFile diretamente de uma URL.

Para instanciar um objeto SPFile correspondente a um arquivo que está armazenado no seu SharePoint local, através da URL, você pode usar o método GetFile, que tem como parâmetro a URL do arquivo.

SPFile arquivo = web.GetFile(urlDoArquivo);

Pra recuperar o ListItem, basta acessar a propriedade .Item do SPFile. (arquivo.Item) Lembre de tratar exceções sempre.

Manipulando anexos de um item de lista usando SPAttachmentCollection.

Conforme você acompanhou em um tutorial anterior, a classe SPAttachmentCollection é usada para incluir/apagar anexos de um item de uma lista no SharePoint. Como uma coleção, você pode até imaginar: então há vários objetos SPAttachment ou SPFile, e posso referenciar um a um diretamente, certo? Errado.

Coisas do SharePoint... Se você acessar um item de uma lista e então sua propriedade attachments, você terá um array de strings (!) com os nomes dos anexos. Você pode adicionar um arquivo através de um método desta classe, mas não poderá fazer muita coisa além disso...
Para referenciar um anexo do SharePoint, instancie um objeto SPFile. Há duas formas para referenciá-lo:

foreach (string nomeArquivo in item.Attachments)
{ 
 
SPFile arquivo = web.GetFile(item.Attachments.UrlPrefix + nomeArquivo);
//Operações com o arquivo aqui. 
 
}

SPFolder pasta = web.Folders["Lists"].SubFolders["TÍTULO DA LISTA"].SubFolders["Attachments"].SubFolders[item.ID.ToString()];
foreach (SPFile arquivo in pasta.Files)
{
 
//Operações com o arquivo aqui. 
}

Com a referência usando o SPFile, fica muito mais fácil. ;)

Recuperando dados de um usuário do SharePoint programaticamente, usando PeopleEditor e web.SiteUserInfoList.

Em algum momento, você já precisou acessar informações de um usuário do SharePoint? Informações como cidade, estado, endereço, escritório... Detalhes que podem ser introduzidos manualmente, bem como importados do Active Directory. Neste tutorial, mostrarei como é possível recuperar estas informações, através de um controle PeopleEditor e de uma lista oculta do SharePoint.

Vamos começar, então...

Suponho que você já registrou os assemblies do SharePoint (caso contrário, favor ver o tutorial do dia 30/11/2010, onde mostro como usar controles do SharePoint em uma application page). Desta forma, adicione um controle PeopleEditor em sua page:
<SharePoint:PeopleEditor ID="peopleEditor" AllowEmpty="false" ValidatorEnabled="true" MultiSelect="false" runat="server" SelectionSet="User" Width="300px" />
A propriedade AllowEmpty indica se este campo poderá ficar vazio. ValidatorEnabled permite a exibição de uma mensagem de erro, pedindo que o campo seja preenchido. MultiSelect torna possível selecionar mais de um usuário.

Buscando um usuário na lista oculta do SharePoint

Navegue até /_catalogs/users/detail.aspx e veja os registros de usuários no portal, com atributos como Imagem, Nome, Cargo, entre outros. Para acessar programaticamente estas informações através do usuário escolhido no PeopleEditor, podemos usar uma consulta CAML ou percorrer cada um dos registros da lista, "manualmente". Não deveria, mas escolhi a segunda opção. Veja o código abaixo:

string nome;
string departamento;
string cidade;
SPListItemCollection usuarios = web.SiteUserInfoList.Items;
foreach (SPListItem user in usuarios)
{
//se encontrou o usuário no SharePoint, recupera o nome, departamento e cidade dele.
if (user["Name"].ToString() == peopleEditor.CommaSeparatedAccounts)
{
nome = user["Name"].ToString();
departamento = user["Department"].ToString();
cidade = user["City"].ToString();
}
}

Lembrando que não tratei exceções no código acima. Caso uma das propriedades (nome, departamento ou cidade) esteja vazia no SharePoint, uma exceção será lançada, portanto, pense nesta situação.

Mais atributos dentro de um registro em web.SiteUserInfoList podem ser referenciados: Office (escritório), JobTitle (função na empresa), Address (endereço), Picture (imagem usada no perfil), entre outros. Lembre sempre de tratar possíveis exceções lançadas em uma consulta deste tipo.
Estas informações do usuário podem ser editadas no próprio SharePoint. Basta clicar no seu nome de usuário (no topo da página), e depois em "Minhas definições".

Críticas são muito bem-vindas. Aguardo sua opinião sobre o artigo no diego@sharepointhelp.com.br.

Usando o PeoplePicker (e demais controles do SharePoint) em uma application page (.aspx).

Para usar controles do SharePoint em uma application page customizada (.aspx), você precisará registrar os assemblies necessários do SharePoint. Adicione ao início da página, após a cláusula Page e antes dos Contents, as seguintes linhas:

<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
< %@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>


A partir disso, você pode colocar os controles do SharePoint normalmente. Um exemplo usando o PeoplePicker:

<SharePoint:PeopleEditor ID="pplEditor" AllowEmpty="false" ValidatorEnabled="true" MultiSelect="false" runat="server" SelectionSet="User" Width="300px" />

Como fazer o upload de um documento para o SharePoint programaticamente.

Em uma lista do SharePoint, você pode ter um ou mais anexos. A lista de anexos de um item é uma coleção do tipo SPAttachmentCollection. Neste exemplo, usaremos um controle FileUpload para carregar o documento.

//faz o upload do arquivo desejado
if (fUpload.PostedFile != null && fUpload.HasFile){
Stream fStream = fUpload.PostedFile.InputStream;
byte[] conteudo = new byte[fStream.Length];
fStream.Read(conteudo, 0, (int)fStream.Length);
fStream.Close();
fStream.Dispose();
SPAttachmentCollection attachments = item.Attachments;
string nomeArquivo = Path.GetFileName(fUpload.PostedFile.FileName);
attachments.Add(nomeArquivo, conteudo);
} 

Error when debugging: "Could not load web.config file. The given key was not present in the dictionary."

Could not load the Web.config configuration file. Check the file for any malformed XML elements, and try again. The following error occurred: The given key was not present in the dictionary.”

If your configuration file is well-formed, possibly this error is happening due to your public URL set on Central Administration, on Alternate Access Mappings. The Site Url property of your project in Visual Studio needs to match the public URL on AAM. Check it on Central Administration > Configure alternate access mappings > Edit public URLs.

Erro ao depurar código: "Could not load web.config file. The given key was not present in the dictionary."

Could not load the Web.config configuration file. Check the file for any malformed XML elements, and try again. The following error occurred: The given key was not present in the dictionary.”

Se o seu arquivo de configuração está bem-formado, possivelmente a causa deste erro é a URL usada pelo seu site nos Mapeamentos Alternativos de Acesso (Alternate Access Mappings). A propriedade Site Url do seu projeto no Visual Studio precisa ter o mesmo valor da URL pública do site. Confira em Central Administration > Configure alternate access mappings > Edit public URLs.

When updating data inside a collection: "Collection was modified; enumeration operation may not execute".

When trying to update some data in a collection, you will find this error:
 foreach (SPListItem item in list.Items){
item["column"] = "New title";
item.Update();
}
You can´t update read-only collections. The solution: keep the ID of the ListItem you want to modify in some kind of object (like a generic list, for example), and modify this item in one-way, out of any collections, getting it by its ID.
SPListItem item = list.GetItemById(idItem);
item["column"] = "New title";
item.Update();

Ao atualizar programaticamente uma coleção: "Collection was modified; enumeration operation may not execute"

Ao tentar atualizar uma informação diretamente em uma coleção de dados, você pode encontrar este erro, como no caso abaixo:
foreach (SPListItem item in lista.Items){
item["coluna"] = "Novo titulo";
item.Update();
}
Ao invés disto, salve o identificador dos ListItems que você deseja modificar em um objeto à parte (pode ser uma lista genérica, por exemplo), e acesse diretamente este item depois através do identificador, não modificando em uma coleção.
SPListItem item = list.GetItemById(idItem);
item["coluna"] = "Novo titulo";
item.Update();

When running psconfig (Products Configuration Wizard), and providing database server name, the following error appears: SQL Server at [server name] has an unsupported version".

See the minimum versions of SQL Server required to the SharePoint 2010 installation on same farm:

•SQL Server 2008 Express Edition Service Pack 1, version number 10.0.2531;
•SQL Server 2005 Service Pack 3 cumulative update package 3, version number 9.00.4220.00;
•SQL Server 2008 Service Pack 1 cumulative update package 2, version number 10.00.2714.00.

It´s very important to remember that SQL Server SP1 is necessary on SQL Express. If SQL version is paid (Professional or higher), it´s needed the SP1 Cumulative Update 2 too.

Ao rodar o psconfig (Products Configuration Wizard), e informar o servidor de banco, o erro: SQL Server at [nome do servidor] has an unsupported version".

Verifique a versão do SQL Server mínima necessária:

•SQL Server 2008 Express Edition Service Pack 1, version number 10.0.2531;
•SQL Server 2005 Service Pack 3 cumulative update package 3, version number 9.00.4220.00;
•SQL Server 2008 Service Pack 1 cumulative update package 2, version number 10.00.2714.00.

É importante lembrar que o SP1 do SQL Server é necessário no caso do SQL Express. Em uma versão paga (Professional ou superior), é necessário também instalar o Cumulative Update 2 do SP1.

While using Windows Server: "Your client does not support opening this list with Windows Explorer".

On Server Manager, enable the "Desktop Experience" feature. Then, enable the "WebClient" Windows service, on services.msc.

Usando o Windows Server: "Your client does not support opening this list with Windows Explorer"

Habilite o recurso (feature) do Windows Server "Desktop Experience", no Server Manager, e então habilite o serviço do Windows (em services.msc) "WebClient".