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!

Usando C3 JS + SharePoint 2013

Galera, já tinha muito tempo que queria compartilhar com vocês uma solução usando SharePoint e C3.JS. Acho essa api sensacional é muito valido usarmos ela para geração de gráfico, além de ser totalmente free e muito fácil de usar.

Vamos criar uma WebPart, muita gente fala mas solução nesse formato de .wsp irão sumir, não se usa mais, mas agora temos outro conceito de reutilizar e bla..bla…bla… kkkkkk

Concordo com todos comentários a este respeito, mas atualmente uso muito .wsp, por questão de politica da área de gerenciamentos de projetos na companhia que atuo como arquiteto.

Mãos a obra, primeiramente uma observação, quando código JS roda antes da página do SharePoint terminar o load, precisamos garantir que o JS seja carregado antes de executar no DOM, então usei esta função.

  function onReady(selector, callback) {
        var intervalID = window.setInterval(function () {
            if (document.querySelector(selector) !== undefined) {
                window.clearInterval(intervalID);
                callback.call(this);
            }
        }, 500);
    }

 

Agora vamos criar um WebPart, presumo que todos já saibam criar um WP no VS, caso não podem olhar esse link https://msdn.microsoft.com/en-us/library/ee231546.aspx.

Vejam como ficou meu meu projeto.

Chart_Solution

Segundo passo vamos adicionas as referências:

Chart_Reference

Como exemplo criei uma lista chamada projetos, onde vou mostrar os projetos -> Mês x Horas.

blogLista

Legal, agora vou explicar como fiz para manipular as informação de forma dinâmica, ou seja, como o JS conversou com nosso código C# localizado no UserControl.

A imagem abaixo é o .ascx, nele coloquei o c3 js, mas para que os valores fosses atualizado usei HiddenField.

Vejam que usei o c3 dentro da função onReady, para nosso gráfico renderizar sem problemas :).

blogCode

A seguir o ascx.cs, criei um código bem sim, pode ficar tranquilo que vou disponibilizar o fonte, no final.

blogCode1

É simples assim mesmo, vejam o resultado que bacana:

c3Blog

Bar

blogChart

Line

É isso pessoal, este post criei meio rápido, se ficou alguma dúvida pode deixar no comentários que logo responderei.

PS.:Não me esqueci do fonte segue o link:

GSD.ChartWithC3_JS

Error: feature with ID is not installed in this farm and cannot be added to this scope

Fala galera hoje vou falar de um problema recorrente no Visual Studio 2015, quando se esta desenvolvendo  para SharePoint,  o caso que vou expor é na criação de uma Visual WebPart.

Problema

Tudo funciona perfeitamente até na hora que se deseja Debugar ou da um simples Deploy.

veja a imagem abaixo:

vs

Isto acontece na versão 2015 do Visual Studio, e pelas pesquisas que realizei acontece na versão 2010 e 2013 😦 , perdi quase um dia por causa desse bug do VS.

Razão 

Vamos lá, Visual Studio usa o método Microsoft.SharePoint.Administration.SPSolution.DeployLocal () que só pode implantar/ativar recursos na máquina local quando é o único servidor(StandAlone), ou seja, se tiver mais de uma servidor na Farm(App, Front, Data), o VS não faz a implantação.

Depois de perder tanto tempo, decidi realizar essa implantação de forma manual, pesquisei no MSDN e consegui, tive muito sucesso.

Solução

Primeiramente tem que ter certeza que seu path não possua espaço.

  • C:\Projects\GSDelfino.com\GSDelfino.com

Próximo passo criei um script usando o PowerShell, usei ele porque como já estava criando o script já conseguia testar, mas esse passo pode ser pulado. Este script eu adaptei ele a minha necessidade. Para facilitar colocarei o script para download.

InstallActiveFeature.ps1

Após o download do script, adicione o mesmo na raiz do projeto como a imagem abaixo.

vs1

O passo final é simples, como meu VS esta em inglês e isso é  quase uma totalidade colocarei os próximos passos em ingles :D.

  • Go to project properties -> SharePoint tab
  • Set Active Deployment Configuration to “No Activation”
  • Copie e colo o código abaixo na caixa Post-Deployment Command Line.

%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell “start-process powershell.exe -ArgumentList ‘$(ProjectDir)InstallActiveFeature.ps1′”

  • Salve o projeto.
  • Build e Deploy.

Boa Sorte! Qualquer dúvida conte comigo. (Y)

 

The primary reference could not be resolved because it has an indirect dependency on the framework assembly

Estou realizando a migração de pouco mais de 2TB de arquivos para dentro de bibliotecas do SharePoint, e tem toda uma regra de negócio a ser respeitada.

Resolvi criar um Console Appllication para tal tarefa, mas me deparei com o seguinte erro:

The primary reference “Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL” could not be resolved because it has an indirect dependency on the framework assembly “System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a” which could not be resolved in the currently targeted framework. “.NETFramework,Version=v4.0”. To resolve this problem, either remove the reference “Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL” or retarget your application to a framework version which contains “System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”.

Estou usando o Microsoft.SharePoint na versão 14 e Framework 4.

No meu caso o único Assemblie que esta dando esta incompatibilidade é o Microsoft.SharePoint.dll, mas a solução abaixo pode ser usando em outras dll’s.

Solução:

Adicionar a tag abaixo:

<SpecificVersion>True</SpecificVersion> 

Esta tag deve ser adicionado dentro da sua solução do projeto, que é o arquivo CSPROJ.

Abri o arquivo usando notepad, veja abaixo como é a versão padrão.

<Reference Include=”Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL” />

Depois da adição da tag:

<Reference Include=”Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL” >
<SpecificVersion>True</SpecificVersion>
</Reference>

Para mim funcionou perfeitemente, acredito que para vocês também vai funfar.

Segue a fonte, é de um tópico de 2010.

 

 

 

 

 

SharePoint: Criando um projeto do Visual Studio sem o SharePoint instalado localmente

Galera estou em um projeto, mas a empresa não permite que instalemos Visual Studio no servidor de DEV, até então nunca criei um projeto sem o SharePoint estar instalado localmente.

Historias a parte mas a verdade é a seguinte: Se você não tiver o SharePoint instalado localmente, o Visual Studio não permitirá que você crie um projeto do SharePoint.

sp-not-installed

Mas conseguimos contornar isso com duas passos bem simples:

  1. No registro adicione a seguinte chave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\15.0\SharePoint

E adione dois valores string : Location=C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\ e SharePoint=Installed

Veja imagem abaixo:

reg

2. Copie as dlls abaixo de uma maquina onde o SharePoint esta instalado  e cole no seguinte diretorio: (C:\Windows\Microsoft.NET\Assembly\GAC_32)

  • Microsoft.SharePoint.dll
  • Microsoft.SharePoint.Client.dll
  • Microsoft.SharePoint.Client.Publishing.dll
  • Microsoft.SharePoint.Client.Runtime.dll
  • Microsoft.SharePoint.Client.ServerRuntime.dll
  • Microsoft.SharePoint.Library.dll
  • Microsoft.SharePoint.Linq.dll
  • Microsoft.SharePoint.Portal.dll
  • Microsoft.SharePoint.Publishing.dll

Pode precisar de mais alguma dll.

Boa sorte.

fonte: https://weblogs.asp.net/ricardoperes