Páginas

Mostrando postagens com marcador como fazer. Mostrar todas as postagens
Mostrando postagens com marcador como fazer. Mostrar todas as postagens

segunda-feira, 25 de junho de 2012

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);
} 

Quero acessar o estado de aprovação de um item em uma lista programaticamente, mas não consigo encontrar "Approved" (aprovado), "Rejected" (rejeitado) ou "Canceled" (cancelado). Como acessar esta coluna?

Ao usar o workflow de aprovação nativo do SharePoint 2010, o valor da coluna de status de aprovação é definido como um inteiro. 15 significa "Canceled", 16 representa "Approved" e 17 é "Rejected".

Como ocultar o Quick Launch (Início Rápido) da página

Solução: Para ocultar o Quick Launch (acesso rápido às listas e bibliotecas), aplique no CSS, ao #s4-leftpanel o atributo display:none. Para ocultar a div com os links All Site Content e Recycle Bin, aplique à .s4-specialNavLinkList o atributo display:none. Para puxar a div principal do conteúdo, aplique à .s4-ca o atributo margin-left:0px.