Criando WCF Service para SharePoint 2013 – Tutorial

        Este post descreve a criação de um WCF Service e o deploy  na Farm do SharePoint 2013, no meu caso uso um StandAlone.

        O WCF Services desempenha um papel importante no modelo de desenvolvimento baseado no SharePoint 2013 Apps, atuando como uma ponte entre o SharePoint Client Object Model e o SharePoint Client Object Model.

        O Server Side Object Model  não está disponível para SharePoint 2013 Apps, isso quer dizer que qualquer operação ou requisito de negócios em uma aplicação deve ser executado somente Client Side Object Model (Microsoft.SharePoint.Client).

        Quem desenvolve para SharePoint já esta acostumado com esse cenário  e tem esse conceito bem enraizado.

Criando um WCF Service estamos violando o conceito de Modelo de Desenvolvimento de Aplicativos (SDK). Mas em certos momentos é necessário porque não existe outra maneira,   por exemplo, o SocialRatingManager. Não existe nenhuma classe CSOM equivalente a classe SocialRatingManager.

        Depois dessa introdução vou explicar o passo á passo para a criação de um serviço, bem simples!

Vamos lá hands on.

Crie um projeto do tipo SharePoint 2013 – Empty Project, defina um nome para seu projeto.

WCF1

wcf2

Adicione as seguintes referências, vamos usar ela nas nossa classes.

wcf3

Feito isso vamos mapear uma pasta do SharePoint, a pasta em questão será o LAYOUTS, onde nosso .svc será implementado.

wcf4

Neste passo vamos criar uma sub-pasta e renomeá-la como Service, e dentro desta pasta vamos adicionar um novo item do tipo texto e remomeá-lo para Service.svc.

wcf5

Dentro no nosso .svc vamos adicionar o seguinte trecho de código.

<%@ ServiceHost Language="C#" Debug="true"
    Service="GSD.WCFService.Bussiness.Services"
    Factory="Microsoft.SharePoint.Client.Services.MultipleBaseAddressWebServiceHostFactory,
    Microsoft.SharePoint.Client.ServerRuntime, Version=15.0.0.0, Culture=neutral,
    PublicKeyToken=71e9bce111e9429c" %>

Esse trecho de código ainda não faz muito sentido…rs Para isso criar uma nova pasta chamada Bussiness onde colocaremos nossas classes responsável pela negocio do serviço. Dentro desta pasta vamos adicionar duas classes IServices.cs e Services.cs.

wcf6

Na classe IService iremos substituir tudo pelo código abaixo:

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Web;
namespace GSD.WCFService.Bussiness
{
    [ServiceContract]
    public interface IServices
    {
        [OperationContract]
        [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetAllLists()")]
        List<string> GetAllLists();
    }

}

Faremos o mesmo procedimento para a classe Services:

using System.Collections.Generic;
using System.ServiceModel.Activation;
using Microsoft.SharePoint;

namespace GSD.WCFService.Bussiness
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public sealed class Service : IServices
    {
        public List<string> GetAllLists()
        {
            List<string> list = new List<string>();
            using (SPSite site = new SPSite(SPContext.Current.Web.Url))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPListCollection colList = web.Lists;
                    foreach (SPList item in colList)
                    {
                        list.Add(item.Title);
                    }
                }
            }
            return list;
        }
    }
}

Antes de darmos continuidade vou explicar o que esse trecho de código faz, busco todas as lista da WebApp e adiciono em uma lista.

OK!

Agora vamos realizar o deploy de tudo isso que a gente fez até aqui, para isso selecione o projeto e vá em propriedades e mude o Deployment Target Property para  WebApplication.

Agora vamos testar no navegador para ser o que nosso serviço retorna.

http://wv2sbe02/axa/ecm/_layouts/15/GSD.WCFService/Services/Service.svc/GetAllLists()

Como havia mencionado acima este serviço ia retornar todas as listas da minha WebApp. Então seu retorno deve ser muito similar a este:
wcf8

Com essa simples explicação vocês já podem criar serviços e realizar o deploy na Farm do SharePoint.

Vlw por  hora é isso grande abraço!!

by GSD

CSC.EXE Parou de Funcionar

Galera,

Este post será um dica rápida, estou desenvolvendo uma aplicação MVC, e no momento do debug a aplicação web cai, e fica aparecendo essa tela nos demais debug que eu tento executar.  Veja imagem abaixo, se for essa mensagem que aparece para você, então neste post temos a solução.

CSCError

Lendo no fórum da MSDN descobri que esse erro pode ser atribuído a arquivos ausentes ou corrompidos, entradas de registro inválidas associadas ao Csc.exe, ou seja, um erro muito genérico.

Enfim, o que resolveu meu problema foi deletar todos arquivos da pasta /bin! Se seu cenário for similar isso realmente resolve.

CSCError1

Todas vez que o erro ocorre, executo esse procedimento, esqueci de citar também que realizo Rebuild, mas isso é default…rs

Um grande abraço!

Exportar GridView para Excel

Este post se baseia, no mei ultimo trabalho, onde a finalidade era fazer um exporte de um grid para uma planilha excel.Convém salientar que é muito simples implementar.

Vamos lá!

Crie um Novo Web Site.

Coloque um botão e um GridView.

A maneira que em que o grid será populado fica a critério.

No evento Click do botão, coloque o código abaixo.

 

codigo-1

 

isso ai moçada boa sorte!

Tipo String .Net

 

Introdução

 

O tipo string apesar de se comportar como um value type é na verdade um reference type. Apesar disso, devemos considerar que estamos trabalhando com um value type quando estamos manipulando strings, tendo em vista que este tipo de dado foi programado para funcionar como tal

 

A classe string possui uma série de métodos estáticos e não estáticos, que são utilizamos para formatação, concatenação, desmembramento, substring, etc. Vamos analisar alguns destes métodos da classe string.

 

 

 

O método Substring

 

O método substring é um método não estático que permite pegarmos uma porção de uma string. Para utilizarmos o método substring, basta chamar o método a partir de uma variável string ou mesmo de uma string literal, conforme o exemplo.

 

string nome = “Testando da Silva”;

 

string sobreNome = nome.Substring(12,5);

 

O método substring aceita como parâmetro a posição inicial que queremos obter e quantos caracteres devem ser extraídos. Caso não seja informado o número de caracteres a ser extraído, a função retornará o restante da string a partir da posição inicial informada.

 

O método IndexOf

 

O método IndexOf é utilizado para localizar uma determinada palavra dentro da string. Este método retornará a posição da string desejada. Caso a string não seja encontrada, será retornado o valor -1.

 

string nome = “Testando da Silva”;

int pos = nome.IndexOf(“Silva”);

//A partir do índice 5

int pos2 = nome.IndexOf(“Silva”, 5);

 

Conforme vimos no exemplo, é possível informar a posição inicial para busca como um parâmetro adicional.

 

Funções ToUpper e ToLower

 

As funções ToUpper e ToLower permitem colocar uma string em letra minúsculas ou maiúsculas, conforme o exemplo a seguir.

 

string nome = “Maurício”;

 

nome = nome.ToUpper();

nome = nome.ToLower();

Funções StartsWith e EndsWith

As funções startswith e endswith verificam se a string começo ou termina com uma determinada palavra ou caracter. Estas funções retornam um valor booleano (true ou false).

string arquivo = “comctl32.dll”;

if(nome.StartsWith(“com”))

Console.WriteLine(“Começa com COM!”);

if(nome.EndsWith(“.dll”))

Console.WriteLine(“É uma dll!”);

Funções TrimStart, TrimEnd e Trim

As funções de Trim servem para remover espaços em branco das strings. A função TrimStart remove os espaços em branco do início da string, já a função TrimEnd remove os espaços em branco do final da string. A função Trim remove os espaços em branco do inicio e do fim da string.

string nome = ” MAURICIO “;

nome = nome.TrimEnd();

nome = nome.TrimStart();

nome = nome.Trim();

Funções PadLeft e PadRight

As funções PadLeft e PadRight servem para preencher uma string a esquerda ou a direita com um caracter especificado. Os exemplos a seguir mostra o uso das funções PadLeft e PadRight.

string nome = “Mauricio”;

nome = nome.PadRight(10, ‘ ‘);
// “Mauricio ”

string codigo = “123”;

codigo = codigo.PadLeft(6, ‘0’);

// “000123”

Funções String.Join e String.Split

A função Split serve para quebrar uma string em um array de strings de acordo com um separador. Ao contrário da função split, a função Join concatena um array de string inserindo um separador.

string linha = “Teste, 10, 20, 10/06/2007”;

string[] campos = linha.Split(‘,’);

string linhaNova = String.Join(‘;’, campos);

A Função String.Format

A função String.Format é uma das funções mais versáteis da classe string. Esta função permite a criação de uma string baseada em um padrão. Podemos colocar dentro do padrão da string de formatação alguns tokens que poderam ser substituídos por variáveis passadas por parâmetro no comando format.

string teste = String.Format(“Vou colocar o {0} aqui.”, “parâmetro”);

No exemplo acima, o padrão da string (primeiro parâmetro) contém um token {0}. Este token indica que este valor deve ser substituido pelo segundo parâmetro passado para a função (neste caso a palavra “parâmetro”).

sTeste = String.Format(“Formatação de string com {0} parâmetro. “,

“Agora são {1}. Valor numérico: {2}”, 1, Now(), 15.5);

No exemplo acima, temos o padrão da string com mais de um token, com números de 0 à 2. A função também recebe 3 parâmetros adicionais que correspondem aos valores que serão substituídos na string. Além de informarmos os tokens, podemos informar regras de formatação que serão utilizadas de acordo com o tipo de dado passado por parâmetro, conforme o exemplo,

sTeste = String.Format(“Custom Format: {0:d/M/yyy HH:mm:ss}”, dtHoje);

sTeste = String.Format(“Formatação do número inteiro: {0:D}.”, iNumero);

sTeste = String.Format(“Formatação do número inteiro: {0:D4}.”, iNumero);

A classe StringBuilder

Apesar da versatilidade da classe string, operações com string podem consumir muitos recursos e causar perda de desempenho. Isto ocorre porque a cada operação o framework cria um novo buffer para a string resultante da operação, ao invés de aproveitar o buffer que está sendo utilizado. Isto é mais aparente em operações de concatenação.

Para não criar este tipo de problema, podemos utilizar a classe StringBuilder, do namespace System.Text. Esta classe permite a criação de strings aproveitando o buffer utilizado, o que torna o código mais eficiente.

No exemplo a seguir temos um trecho de código com uma operação feita de forma ineficiente e outra mais eficiente usando o stringBuilder, veja a diferença.

// Codigo ineficiente

string sql;

sql = “SELECT * FROM Products”;

sql += ” WHERE CategoryId=1 AND”;

sql += ” AND UnitPrice>10″;

 

// Codigo Eficiente

StringBuilder sb =

new StringBuilder();

sb.Append(“SELECT * FROM Products”);
sb.Append(” WHERE CategoryId=1 AND”);

sb.Append(” AND UnitPrice>10″);

sql = sb.ToString();