terça-feira, 20 de dezembro de 2011

Business Connectivity Services (BCS) – Método Finder para External Content Types no SharePoint 2010



Mostrarei aqui como criar o método Finder, que faz com que você consiga fazer a visualização dos dados de seu External Content Type (ECT) do SharePoint 2010.

Neste exemplo, vamos criar uma nova conexão com a nossa base de dados para que em seguida possamos criar o método Finder para consumir os dados no SharePoint.

Vamos começar criando um banco de dados e uma tabela para que possamos testar se os dados foram importados.

Crie um banco de dados com nome “Development” e então crie uma tabela de nome “Funcionarios” com a estrutura abaixo e preencha alguns valores.


Conecte-se ao seu site com o SharePoint Designer 2010, no menu lateral esquerdo, clique em “External Content Types” em seguida clique em “External Content Type” no menu superior.


Altere o nome do seu ECT para “DevelopmentECT”. Em “External Content Type Operations” clique em “Click here to discover external data sources ...”.
Adicione uma nova conexão, selecione “SQL Server” e então informe os dados para a conexão.
Com a conexão criada, clique com o botão direito na tabela “Funcionarios” e então escolha “New Read List Operation”.

Agora basta seguir em Next, Next e Finish.
Com sua operação criada agora você somente precisa salvar e seu ECT estará criado com o método Finder.
Para verificar se os dados estão sendo lidos vamos utilizar o BCS buscar os dados.
Vá em uma página e adicione a seguinte web part.


 Faça a configuração da web part.



Se você tentar visualizar os dados você poderá ver o seguinte erro de acesso negado:


Para resolver este erro, você deve ir à Central Administration do SharePoint 2010.
Em “Application Management” clique em “Manage service applications”.
Procure “Business Connectivity Service”, clique em seu proxy e no menu superior clique em “Manage”.


Na página seguinte, basta selecionar “DevelopmentECT” e então clicar em “Set Object Permissions” na aba superior e adicionar seu usuário com suas devidas permissões.
Agora você poderá voltara à web part e verificar que os dados irão aparecer.

segunda-feira, 12 de dezembro de 2011

Manipulando arquivos e pastas do SharePoint 2010 com Visual Studio 2010



Neste post, mostrarei como realizar a manipulação de arquivos e pastas no SharePoint 2010 com o Visual Studio 2010, neste exemplo irei mostrar como realizar o check in e também o check out dos arquivos em uma determinada pasta programaticamente.

Para este exemplo vamos ao SharePoint e adicionar uma nova biblioteca de documentos.


Agora você poderá subir alguns documentos de exemplo para o nosso exemplo.

Com a biblioteca e documentos no SharePoint, agora vamos ao Visual Studio 2010.
Crie um novo projeto “Empty SharePoint Project”, selecione “Deploy as a farm solution”.

Clique com o botão direito no projeto, Add -> New Item.
Selecione “Web Part”, dê um nome à ela e então adicione ao projeto.

Vamos criar dois controles na web part:

- Label: Para exibir informações caso haja algum erro.
- Button: Para realizar a operação nos arquivos.

Primeiro declare os dois controles:

public Button button;
public Label lblAlert;


No método CreateChildControls adicione o seguinte código:

button = new Button();
button.ID = "btn1";
button.Text = "Executar";
button.Click += new EventHandler(button_Click);
Controls.Add(button);
Controls.Add(new LiteralControl("<br>"));

lblAlert = new Label();
lblAlert.ID = "lblAlert";
lblAlert.Text = "";
lblAlert.Visible = false;
Controls.Add(lblAlert);
Controls.Add(new LiteralControl("<br>"));


No código acima apenas criei e adicioneis os controles à web part. Também criei um EventHandler para o Click do botão, com isso você deve adicionar o código abaixo que implementará o Click do botão:


void button_Click(object sender, EventArgs e)
{
    try
    {
        SPWeb web = SPContext.Current.Web;

        SPSecurity.RunWithElevatedPrivileges(delegate
        {
            foreach (SPFolder folder in web.Folders)
            {

                if (folder.Name == "Documentos")
                {

                    foreach (SPFile file in folder.Files)
                    {
                        file.CheckOut();
                    }

                    break;
                }
            }
        });
    }
    catch (Exception ex)
    {
        lblAlert.Visible = true;
        lblAlert.Text = ex.Message;
    }

}


Bom, neste código criamos um SPWeb apontando para a web application onde está localizada a web part.
Utilizo também o método RunWithElevatedPrivilegies para evitar que ocorra algum tipo de erro quanto ao acesso as bibliotecas ou documentos.

Depois disso faço um foreach para ler as pastas, um novo foreach para ler os arquivos dentro desta pasta.

Quando encontrado um arquivo na pasta Documentos é realizado o seu checkout.
Agora basta você realizar o deploy da solução, adicionar sua web part em uma página e clicar no botão para executar a ação.



domingo, 11 de dezembro de 2011

Utilizando o ULS do SharePoint 2010 com Visual Studio 2010


Mostrarei aqui como utilizar o ULS (Unified Logging Service) do SharePoint 2010 para registrar erros entre outras marcações para realizar tanto o log quanto o debug de sua solução.

Neste exemplo, vamos criar uma simples web part que reproduzirá um erro de conversão de tipos apenas para mostrar o funcionamento do Log.

Primeiro você deve criar um novo projeto “Empty SharePoint Project” no Visual Studio 2010, em seguida selecione “Deploy as a farm solution”. Agora crie uma nova web part clicando com o botão direito no projeto, Add-> New Item. Então selecione Web Part na lista que aparecerá, dê um nome a ela e adicione.

No método “CreateChildControls” adicione o seguinte código:

OBS.: Importante lembrar que você deve adicionar “using Microsoft.SharePoint.Administration;” ao topo do seu arquivo .cs para que o código abaixo funcione como está.


Label lbl = new Label();
lbl.ID = "label1";
Controls.Add(lbl);

try
{
    string n = "mm";
    int i = Convert.ToInt32(n);
}
catch(Exception ex)
{
    lbl.Text = ex.Message;
    SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("MatheusDev", TraceSeverity.Unexpected, EventSeverity.Error), TraceSeverity.Unexpected, ex.Message, ex.StackTrace);
}


No código acima, adicionamos um label e então o adicionamos aos controles da web part. Dentro do bloco try tento realizar a conversão de uma string (“mm”) em um int, no entanto esta conversão irá falhar entrando então no bloco catch que salvará o log do erro.

No método WriteTrace informamos todos os parâmetros necessários para a chamada.

Informamos um id para o registro, uma categoria do erro encontrado que neste exemplo informei “MatheusDev” somente para identificação no arquivo.
Através dos enumerators TraceSeverity e EventSeverity informamos os níveis de gravidade do erro.
Agora faça o deploy da solução no SharePoint 2010 e adicione a web part em sua página.

Você verá uma mensagem de erro em um label como abaixo:

“Input string was not in a correct format.”

Para verificar se o erro foi salvo no log, você deve acessar a pasta do SharePoint e então a pasta “LOGS”. Normalmente encontrada em “C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\LOGS”.

Procure o arquivo com a atualização mais recente e então abra-o e poderá ver seu registro de erro salvo.


sexta-feira, 9 de dezembro de 2011

Importando e publicando definições de site do SharePoint 2010 utilizando o Visual Studio 2010


Neste post, exemplificarei como importar modelos de site do SharePoint 2010 para o Visual Studio 2010, fazer modificações e publicar como um novo modelo para a criação de sites.

Vamos começar criando um site em branco que servirá de base para construirmos nosso modelo.



Abra o SharePoint Designer 2010 e conecte-se ao site em branco criado. Clique no menu superior à direita e clique em “Save as Template”.

Você será redirecionado para uma página onde você poderá escolher o nome do arquivo, nome do template, sua descrição e também se deseja importar o conteúdo do site.


Ao clicar em OK, você deve aguardar a criação do arquivo wsp, se concluído com êxito vá à Galeria de Soluções e baixe o arquivo para sua máquina.


 Com o arquivo .wsp copiado para sua máquina, abra o Visual Studio 2010 e crie um novo projeto “Import SharePoint Solution Package”.


 Selecione “Deploy as na sandboxed solution”.


 Agora selecione o arquivo wsp copiado para sua máquina.


 Você deve selecionar também os itens que deseja importar.


 Após o Visual Studio realizar o carregamento de todos os arquivos para a solução eu criei uma web part Hello World para poder ser adicionada ao modelo de site, somente como exemplo de customização que pode ser realizada.


Após isso, fiz o “Build” do projeto e também o “Package”.
Com o arquivo wsp gerado, subi a solução para a Galeria de Soluções e agora basta ativá-la.


 Com a solução ativada, você poderá fazer o teste ao criar um novo site, você verá como modelo o seu site criado e quando adicionado irá ver a web part criada já na Galeria de Web Parts pronta para ser adicionada ao site.

domingo, 4 de dezembro de 2011

Event Receivers no SharePoint 2010 com Visual Studio 2010


Mostrarei neste post como manipular alguns eventos do SharePoint 2010 utilizando os Event Receivers. Em nosso exemplo, mostrarei a manipulação dos eventos de adição e remoção de itens de uma lista customizada no SharePoint.


Primeiro devemos criar nossa lista customizada que será usada para exemplificação.
Criei uma lista com o nome de “Funcionarios”.



Agora vamos criar outras colunas em nossa lista customizada.

A estrutura de campos da lista ficou como a imagem abaixo:


Troquei o nome da coluna “Title” que é criada automaticamente pelo SharePoint por “Nome”, que irá armazenar o nome do funcionário.

Também criei mais duas colunas, “Salario” do tipo número e “Data Fim do Contrato” do tipo data, ambas existem para que possamos criar uma regra para o cadastro de funcionários e também para remoção.

Bom, agora com o Visual Studio 2010 crie um projeto “Empty SharePoint Project”.

Com o projeto criado clique com o botão direito no projeto Add-> New Item. Na janela que aparecerá selecione “Event Receiver”, informe um nome para ele e adicione ao projeto.

Agora selecione as opções como na imagem abaixo:


-List Item Events: Com este item informamos que queremos manipular eventos de itens de lista.
-Custom List: Utilizamos este item pois a lista que utilizaremos não é uma lista nativa do site do SharePoint.
-An item is being added: Evento disparado ao iniciar o procedimento de adicionar um novo item, o procedimento ainda não foi concluído.
-An item is being deleted: Evento disparado ao iniciar o procedimento de remover um item, o procedimento ainda não foi concluído.

Agora insira o código abaixo nos métodos adicionados:


public override void ItemAdding(SPItemEventProperties properties)
{
    double Salario;


    if (properties.ListTitle == "Funcionarios")
    {
        if (properties.AfterProperties["Salario"] != null)
        {
            Salario = Convert.ToDouble(properties.AfterProperties["Salario"].ToString());

            if (Salario < 300)
                properties.Cancel = true;
        }
    }
}

/// <summary>
/// An item is being deleted.
/// </summary>

public override void ItemDeleting(SPItemEventProperties properties)
{

    DateTime DataFimContrato;

    if (properties.ListTitle == "Funcionarios")
    {
        if (properties.ListItem["Data Fim do Contrato"] != null)
        {

            DataFimContrato = Convert.ToDateTime(properties.ListItem["Data Fim do Contrato"].ToString());

            if (DateTime.Now > DataFimContrato)
                properties.Cancel = true;
        }
    }
}



O código é simples, a única diferença é quanto ao properties.Cancel onde definimos o cancelamento do procedimento.

A regra utilizada é simples: Para inserir um novo funcionário na lista, o salário deve ser maior que 300, caso contrário ele não será inserido.

Quanto à exclusão, somente poderá ser excluído o funcionário da lista caso a data atual seja maior que a data do fim do contrato, se a data do fim do contrato for maior que a data atual, o funcionário não será excluído da lista.

Agora basta realizar o deploy da solução e verificar a regra.

quarta-feira, 30 de novembro de 2011

Desenvolvendo Connectable Web Parts para o SharePoint 2010


Mostrarei aqui como desenvolver web parts para o SharePoint 2010 através do Visual Studio 2010 que comuniquem entre si, ou seja, enviem e recebam informações de umas para as outras que estão contidas na mesma página.
Começaremos criando um novo projeto “Empty SharePoint Project”, escolha “Deploy as a farm solution”.

Vamos agora criar a interface quem iremos utilizar para definir os valores que iremos enviar e receber.

Aqui vamos criar uma interface básica com uma simples string.

public interface IWPInterface02
{
    string Text { get; set; }
}



Com a interface criada, vamos agora adicionar duas Web Parts ao projeto (botão direito no projeto -> Add - > New item -> Web Part):

Obs.: Neste exemplo não estou utilizando “Visual Web Part”.



-WPConsumer: Web part que irá receber o valor e exibir através de um TextBox.

-WPProvider: Web part que irá enviar um texto digitado em um TextBox e será enviado ao clique de um Button.

Com as duas web parts devidamente criadas, vamos agora adicionar o código necessário para realização da funcionalidade.

No arquivo .cs da WPProvider adicionamos o seguinte código:

//Devemos adicionar a interface "IWPInterface02" pois faremos a implementação dela abaixo
[ToolboxItemAttribute(false)]
public class WPProvider : WebPart, IWPInterface02
{

    //Declaração dos controles utilizados
    private Label lbl;
    private TextBox txt;
    private Button btn;
    public String _text = String.Empty;

    //Implementação de get e set
    [Personalizable()]
     public string Text
    {
        get
        {
            return _text;
        }

        set
        {
            _text = value;
        }
    }


    protected override void CreateChildControls()
    {

        //Criação dos controles na web part

        Controls.Clear();

        lbl = new Label();
        lbl.ID = "lbl";
        lbl.Text = "Digite um texto:";

        Controls.Add(lbl);


        txt = new TextBox();
        txt.ID = "txt";
        txt.Text = "";

        Controls.Add(txt);

        Controls.Add(new LiteralControl("<br>"));


        btn = new Button();
        btn.ID = "btn";
        btn.Text = "Enviar texto";
        btn.Click += new EventHandler(Button1_Click);

        Controls.Add(btn);

    }


    //Conexão
    [ConnectionProvider("Provider for String From TextBox", "TextBoxStringProvider")]
    public IWPInterface02 TextBoxStringProvider()
    {
        return this;
    }


    //Evento Click do botão que fará o envio do texto digitado para a propriedade Text
    void Button1_Click(object sender, EventArgs e)
    {

        if (txt.Text != String.Empty)
        {
            Text = txt.Text;
            txt.Text = String.Empty;
        }
    }

}



Agora vamos adicionar o código abaixo no arquivo .cs da WPConsumer.

[ToolboxItemAttribute(false)]
public class WPConsumer : WebPart
{
    private IWPInterface02 provider02;

    //Declaração do controle
    private TextBox txt;

    protected override void CreateChildControls()
    {
        //Criação dos controles na web part
        Controls.Clear();
        txt = new TextBox();
        txt.ID = "txtConsumer";
        txt.Text = "";

        Controls.Add(txt);
    }

    //Conexão
    [ConnectionConsumer("String Consumer", "StringConsumer")]
    public void TextBoxStringConsumer(IWPInterface02 Provider)
    {
        provider02 = Provider;
    }



    protected override void OnPreRender(EventArgs e)
    {
        EnsureChildControls();

        if (provider02 != null)

        {
            //Atribui o valor presente no provider para o TextBox
            txt.Text = provider02.Text;
        }
    }

}



Os códigos acima adicionados estão todos comentados a respeito da funcionalidade de cada bloco.
Agora basta realizar o deploy através do próprio Visual Studio 2010 e adicionar as duas web parts em uma mesma página e ver o resultado.

Desenvolvimento e deploy de sandboxed web parts no SharePoint 2010



Mostrarei aqui como realizar o desenvolvimento  e o deploy de uma web part como sandboxed solution.



Começaremos criando um novo projeto do tipo “Empty SharePoint Project” em SharePoint -> 2010.

Na tela que aparecerá selecione “Deploy as a sandboxed solution”.

Com o nosso projeto criado agora devemos adicionar uma web part, clicando com o botão direito do mouse sobre o nosso projeto e no menu que irá aparecer clicar em Add-> New Item.

Na janela que aparecerá selecione “Web Part”. Agora vá até o .cs de sua web part e no método CreateChildControls adicione o seguinte código:

base.CreateChildControls();

try
{

    Label label = new Label();
    label.ID = "lblTexto";
    label.Text = "Sandboxed web part deployed !";
    label.Visible = true;

    this.Controls.Add(label);

}
catch (Exception ex)
{
    throw ex;
}


No código acima apenas adicionei um label à web part e alterei sua propriedade Text para podermos visualizar a web part adicionada em uma página do SharePoint.
Com isso agora basta você dar um Build (clique com botão direito no projeto -> Build) e em seguida um Package (clique com botão direito no projeto -> Package) no projeto para gerar o .wsp que iremos realizar o deploy no servidor.

Com seu arquivo .wsp gerado com sucesso vá até o site do SharePoint 2010 onde deseja utilizar a solução.

Clique em Site Actions -> Site Settings na próxima página clique em Solutions em Galleries.

Na aba Solutions clique em Upload Solution e selecione o arquivo .wsp gerado que se encontra na pasta bin/Debug do seu projeto do Visual Studio 2010.

Agora, na janela que irá aparecer com as informações de sua solução, clique em Activate.
Pronto, sua web part estará pronta para utilização. Basta adicionar a sua web part na página onde desejar.