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

Posted in C3 JS, Chart SharePoint, SharePoint 2013, Visual Studio 2015, WebPart | Leave a comment

Realizando SELECT no SQL Server + SharePoint Solution

Opá que post é esse, isso não é nada aconselhável… Muitos devem estar falando isso, mas isso necessidade surgiu desse post aqui -> Problemas com a proc_ListUrls. Da uma lidinha nele vocês entenderam o problema que tive, e um problema da biblioteca Microsoft.SharePoint, ela funciona perfeitamente para uma Library ou List que possua poucos itens, mas no meus caso eram cerca 1,5 mi, só tive problemas e dor de cabeça, dai então realizei querys diretamente no banco, e ainda tive que criar novos índices, pois os criados não estavam performando nada, lógico que tive a ajuda de um DBA, pois não são especialista em SQL Server.

Mas vamos lá, você ao tentar criar um ConnectionString em um projeto SharePoint, pode ser um Projeto App, ou uma Solution, terá problemas ao tentar se conectar a base de dados do SharePoint.

Mas usando o método que criei isso não será o problema.

Da uma olhadinha:

public static SqlDataReader SelectTo(SqlConnection connection)
        {
            SqlDataReader reader = null;
            SPSecurity.RunWithElevatedPrivileges(delegate ()
            {
                using (SPSite ElevatedsiteColl = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb())
                    {
                        try
                        {
                          
                            connection.Open();
                            SqlCommand cmdSelect = new SqlCommand(procGetItens, connection);
                            cmdSelect.CommandType = CommandType.StoredProcedure;
                            reader = cmdSelect.ExecuteReader();
                        }
                        catch (Exception ex)
                        {
                            reader = null;
                        }
                    }
                }
            });
            return reader;
        }

Realizando queries diretamente na base de dados consegui performar muito minha solução, antes o tempo para retorna uma busca era de 48 seg. com essa customização reduzi para 2 seg. é um ganho considerável.

Esse feature já esta no ar e o feedback dos usuários esta sendo muito positivo.

Abraços! Achei justo compartilhar esse case com vocês.

Posted in SharePoint, SharePoint 2007, SharePoint 2010, SharePoint 2013, WebPart | Leave a comment

SPFx – SharePoint Framework by GSD

Olá amigos,

Hoje vou falar um pouco da teoria do SPFx,  já foi divulgado pela Microsoft aqui no Brasil já tem uns 4 meses, mas só nessa última semana consegui criar alguns exemplos e estudar um pouco a respeito desse novo conceito, posts futuros já terão exemplos SPFx, podem acreditar, pois esta muito animador além de incentivar a aprender novas tecnologia .

Mas vamos falar um pouco do que é o SPFx, pessoal vou falar da minha visão e experiência que tive com essa novidade, o conceito não é muito inovador, pois no SharePoint Online já usávamos JS injetado na página e  SharePoint Add-in.

Para quem não mexeu ainda com SharePoint Online e também não tenha case dessa duas modalidades que citei acima vou falar brevemente um pouco de cada uma:

Adicionando Script no SP

É muito popular no SP Online a parte Web de editor de scripts que permite que colemos o código na página, o mesmo é executado quando a página é processada. É simples assim, chegar até ser rudimentar…Rs Convém lembrar que funciona muito bem. Ele é executado no mesmo contexto de navegador da página e está no mesmo DOM.

Modelo Add-in

É uma opção para sites NoScript, a para este tipo de site também usamos App-in. Esse modelo cria um _iFrame_where, ai que mora a desvantagem é difícil criar projetos responsivos e sei que é bem mais lento(experiência própria), mas não vou entrar nesse detalhe. Não poderia deixar de citar uma vantagem como é externa ao sistema e não tem acesso à  DOM / conexão, é mais fácil confiar e implementar.

SPFx 

Dei uma visão geral do atual cenário, agora vou falar da minha visão e o que o SPFx oferece para nós desenvolvedores.

O SharePoint Framework tenta construir  um sistema robusto de desenvolvimento em cima do SP local e SP On-line.

Segundo a idea inicial do SPFx ele se torna muito indicado, levantei alguns pontos consideráveis :

  • Ele é executado no contexto do usuário atual e conexão no navegador, e não em iFrames.
  • Os controles são processados no DOM de página normal.
  • Os controles são responsivos e acessíveis por natureza.
  • Há um ciclo de vida em que o desenvolvedor está envolvido.
    • Não é apenas renderizar , mas carregar , serializar _e _deserializar , alterações de configuração , etc.
  • A cadeia de ferramentas baseia-se em ferramentas comuns de desenvolvimento de cliente de código aberto, como npm, TypeScript, yeoman, webpack, gulp, etc.
  • Pode ser implantado em páginas web clássicas e de publicação, bem como nas páginas modernas.

Viram no penúltimo bullet apareceu algumas linguagem talvez não muito naturais para quem desenvolve em C# e Visual Studio.

Como disse que o SPFx se baseia em ferramentas de código aberto, esta uma boa oportunidade para desenvolver novas habilidades, acho que para desenvolvedores C#, typeScript é muito mais familiar, pelo menos no meu caso foi isso assim.

O modelo de dados não mudou absolutamente nada por isso elenco que TypeScript será uma transição quase nada traumática. Gente o REST continua a ser usado da mesma maneira também, se voce é acostumado a usar JSOM pode continuar usando, isso foi um exemplo para elucidar que nada alterou nesta parte também.

Não entrei em muitos detalhes pois o SPFx esta na primeira versão ainda, então falei um pouco da minha visão, espero ter ajudado neste ponto.

Que IDE usar ?

Como já esta envolvendo Open Source(Código Aberto) a escolha do IDE fica a critério do desenvolvedor, eu uso o VS Code, mas tem muitas opções.

Galera, acho que de uma maneira sucinta consegui exclarecer um pouco do SPFx SharePoint Framework. 

Posted in SharePoint Framework, SPFx, Visual Studio Code | Leave a comment

Customizando Web Part Properties

Olá Developer, este post explica  como customizar as propriedades da Web Part, antes de mais nada vou expressar de uma forma bem didática em qual classe essa customização acontece. Lembrando que este post é direcionado para quem sabe criar uma Web Part simples.

projectProperties

Agora veja como é fácil customizar as propriedades, vou citar 5 exemplo Boleano, Texto, Número, Data e ComboBox.

projectProperties1

A seguir colocarei o código que usei dentro da classe para obter este resultado.

// Visual Studio might automatically update this path when you change the Visual Web Part project item.
private const string _ascxPath = @"~/_CONTROLTEMPLATES/15/GSD.Viewer.PDF/WebPartViewerPDF/WebPartViewerPDF.ascx";

protected override void CreateChildControls()
{
Control control = Page.LoadControl(_ascxPath);
Controls.Add(control);
}

public static Boolean GSDBoolean;
[Category("Customizando Propriedades GSD"),
Personalizable(PersonalizationScope.Shared),
WebBrowsable(true),
WebDisplayName("Boleano"),
WebDescription("Exemplo Boleano")]
public Boolean _GSDBoolean
{
get { return GSDBoolean; }
set { GSDBoolean = value; }
}

public static string GSDText;
[Category("Customizando Propriedades GSD"),
Personalizable(PersonalizationScope.Shared),
WebBrowsable(true),
WebDisplayName("Texto"),
WebDescription("Exemplo Texto")]
public string _GSDText
{
get { return GSDText; }
set
{
//Validação
Regex oRegEx = new Regex("[a-zA-Z]+");
if (!oRegEx.IsMatch(value))
throw new Microsoft.SharePoint.WebPartPages.
WebPartPageUserException(
"Por favor entre com caracteres alfabéticos");
GSDText = value;
}
}

public static int GSDNumber;
[Category("Customizando Propriedades GSD"),
Personalizable(PersonalizationScope.Shared),
WebBrowsable(true),
WebDisplayName("Número"),
WebDescription("Exemplo Número")]
public int _GSDNumber
{
get { return GSDNumber; }
set { GSDNumber = value; }
}

public static DateTime GSDDate;
[Category("Customizando Propriedades GSD"),
Personalizable(PersonalizationScope.Shared),
WebBrowsable(true),
WebDisplayName("Data"),
WebDescription("Exemplo Data")]
public DateTime _GSDDate
{
get { return GSDDate; }
set { GSDDate = value; }
}

public enum CityEnum { Itajubá_MG, Salvador_BA, Pedralva_MG, São_Paulo_SP };
public static CityEnum GSDDropDown;
[Category("Customizando Propriedades GSD"),
Personalizable(PersonalizationScope.Shared),
WebBrowsable(true),
WebDisplayName("ComboBox"),
WebDescription("Exemplo ComboBox")]
public CityEnum _GSDDropDown
{
get { return GSDDropDown; }
set { GSDDropDown = value; }
}

Para concluirmos, vou mostrar como podemos usar os parâmetros definidos ns propriedades da web part, veja a imagem abaixo:

projectProperties2

Essa estrutura eu aproveitei de um post anterior, e achei interessante explanar esse assunto, espero ter ajudado e elucidado qualquer dúvida.

Abraço, Developer!

Posted in WebPart | Leave a comment

WebPart – Viewer PDF

Galera, criei uma WebPart que renderiza um .pdf, vou disponibilizar a Solution.

Vocês posdem baixar e fazer bom uso, vou apenas explicar algumas coisas, na propriedade da WP voce pode definir o tamanho e largura da exibição e também definir a url do arquivo, ou simplesmente usar  QueryString.

Definindo url do arquivo:

notqs

Usando QueryString 

withqs

Simples assim, veja o resultado abaixo:

viewpdf

Segue o link para download da Solution (WSP):

GSD_Viewer

Caso alguém deseje o fonte, pode solicitar 🙂

project

Abraços, até o próximo.

Posted in PowerShell, SharePoint 2013 | Leave a comment

Adicionar, Instalar, Ativar, Desinstalar e Desativar uma Feature usando PowerShell – SharePoint 2013

Fala galera hoje vou divulgar alguns comandos bem uteis no que diz respeito a instalar e remover uma Solution -> WSP no SharePoint, visto que a Microsoft tem como objetivo descontinuar essa extensão no futuro, muita gente fala isso, eu acredito que não, mas concordo que as APPs são o futuro, na verdade já é uma realidade.

Usei como base o site da TechNet, uso bastante esses comandos alguns de tanto usar até já decorei, mas segue abaixo os mesmo para auxiliar vocês nas atividades diárias.

Adicionando

Add-SPSolution -LiteralPath c:\seuWSP.wsp

Instalando

Install-SPFeature -path "SuaFeature"  -CompatibilityLevel 15

Ativando

Enable-SPFeature -identity "SuaFeature" -URL http://seusite

Desabilitando

Disable-SPFeature -identity "SuaFeature" -URL http://seusite

Desinstalando

Uninstall-SPFeature -Identity "SuaFeature" -CompatibilityLevel 15

Isso ai galera espero ter ajudado, mas os créditos são todos do TechNet, abixo segue o link onde caso haja alguma duvida podem consultar os parâmetros e explicações caso possua.

créditos : PowerShell TechNet

Posted in PowerShell, SharePoint 2013 | Leave a comment

Configurando Search SharePoint 2013: Usando PowerShell

Como falei no post anterior que iria postar o meu script para configurar o Search do SharePoint, o script esta bem explicado da ua olhadinha, qualquer dúvida estou a disposição!

Abra o PowerShell ISE no seu servidor de aplicação, copie e cole os comando e tenta entender antes de rodar 🙂

Convém salientar se for rodar um servidor Stand-Alone, algumas coisas no script devem ser mudadas, não precisamos passar o servidor de Banco, etc…

Vamos la então segue o script:

Add-PsSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue # Add-PsSnapin SharePoint 🙂

#Settings
$IndexLocation = "C:\Search_GSD" #Location must be empty, will be deleted during the process!
$SearchAppPoolName = "Search App Pool" # Criando Application Pool para esse serviço ou vc pode usar um existente.
$SearchAppPoolAccountName = "BlogGSD\GSD_Owner" #Usuário com privilegios pra rodar o serviço.
$SearchServiceName = "BlogGSD Search Service Application" # Nome do serviço.
$SearchServiceProxyName = "BlogGSD Search Service Application Proxy" # Nome do serviço proxy.

$DatabaseServer = "GSDBE01" #Servidor de Banco de Dados
$DatabaseName = "SharePoint_Search" #Banco de dados que será criado.

Write-Host -ForegroundColor Yellow "Verificando se o usuário Search Application Pool existe..."
$spAppPool = Get-SPServiceApplicationPool -Identity $SearchAppPoolName -ErrorAction SilentlyContinue

if (!$spAppPool)
{
 Write-Host -ForegroundColor Green "Criando novo Search Application Pool..."
 $spAppPool = New-SPServiceApplicationPool -Name $SearchAppPoolName -Account $SearchAppPoolAccountName -Verbose
}

Write-Host -ForegroundColor Yellow "Verificando se Search Service Application existe..."
$ServiceApplication = Get-SPEnterpriseSearchServiceApplication -Identity $SearchServiceName -ErrorAction SilentlyContinue
if (!$ServiceApplication)
{
 Write-Host -ForegroundColor Green "Criando Search Service Application..."
 $ServiceApplication = New-SPEnterpriseSearchServiceApplication -Name $SearchServiceName -ApplicationPool $spAppPool.Name -DatabaseServer $DatabaseServer -DatabaseName $DatabaseName
}

Write-Host -ForegroundColor Yellow "Verificando Search Service Application Proxy existe..."
$Proxy = Get-SPEnterpriseSearchServiceApplicationProxy -Identity $SearchServiceProxyName -ErrorAction SilentlyContinue
if (!$Proxy)
{
 Write-Host -ForegroundColor Green "Criando Search Service Application Proxy..."
 New-SPEnterpriseSearchServiceApplicationProxy -Name $SearchServiceProxyName -SearchApplication $SearchServiceName
}

$searchInstance = "GSDBE01" # Denifindo em que server irá rodar o Search Index Component
$InitialSearchTopology = $ServiceApplication | Get-SPEnterpriseSearchTopology -Active 
$SearchTopology = $ServiceApplication | New-SPEnterpriseSearchTopology

New-SPEnterpriseSearchAnalyticsProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance
New-SPEnterpriseSearchContentProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance
New-SPEnterpriseSearchQueryProcessingComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance
New-SPEnterpriseSearchCrawlComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance 
New-SPEnterpriseSearchAdminComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance

set-SPEnterpriseSearchAdministrationComponent -SearchApplication $ServiceApplication -SearchServiceInstance $searchInstance

Remove-Item -Recurse -Force -LiteralPath $IndexLocation -ErrorAction SilentlyContinue
mkdir -Path $IndexLocation -Force

New-SPEnterpriseSearchIndexComponent -SearchTopology $SearchTopology -SearchServiceInstance $searchInstance -RootDirectory $IndexLocation

Write-Host -ForegroundColor Green "Ativando a nova topologia..."
$SearchTopology.Activate()

Write-Host -ForegroundColor Yellow "Pode ignorar o erro a seguir :p !"
$InitialSearchTopology.Synchronize()

Write-Host -ForegroundColor Yellow "Deletando a topologia antiga..."
Remove-SPEnterpriseSearchTopology -Identity $InitialSearchTopology -Confirm:$false
Write-Host -ForegroundColor Green "Topologia velha deletada!"
Write-Host -ForegroundColor Green "Vamos rodar full crawl!!!!"

Tendo rodado o script, vamos ver o resultado, olhe as imagem seguintes para ver como ficou a configuração após a execução dos comandos.

fonte: https://social.technet.microsoft.com/wiki/contents/articles/32166.sharepoint-2013-configure-search-using-powershell-part-1-of-2.aspx
Posted in PowerShell, Search SharePoint 2013, SharePoint 2013 | 1 Comment