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

New-SPEnterpriseSearchServiceApplication : Value cannot be null. Parameter name: indexLocation

Tive esse problema quando estava configurando o Search em uma Farm, onde optei rodar o Search em outro servidor, e não no de aplicação principal .

Estava realizando essa configuração via PowerShell, no próximo post coloco o script que estou usando -> Configurando Search SharePoint 2013: Usando PowerShell

No primeiro momento optei por roda esse script no servidor onde ia rodar o Search, mas sempre dava o seguinte erro :  

New-SPEnterpriseSearchServiceApplication : Value cannot be null.

Parameter name: indexLocation

Realizei algumas pesquisa e o link abaixo me ajudou muito!
https://social.technet.microsoft.com/Forums/en-US/f6b338ea-92cc-424a-9547-eb651fbeaf2c/sharepoint-2013-rtm-powershell-newspenterprisesearchapplicationservice-error-about-nonexistent
A solução no meu caso foi fazer a configuração  da seguinte forma, fiz um desenho pra que fique bem claro como rodar o script e ter exito!

FullSizeRender.jpg

Qual foi o caminho rodei o scritp no servidor de aplicação e rodou sem erro, como disse acima no próximo post coloco o script, estou dando uma melhorada nele.[link lá em cima :)]

Não esqueçam de verificar se o serviço do Search esta ativo, caso não rodo esse script no servidor usando PowerShell:

Get-SPEnterpriseSearchServiceInstance -Local | Start-SPEnterpriseSearchServiceInstance
fonte: https://technet.microsoft.com/en-us/library/ff607852%28v=office.15%29.aspx?f=255&MSPPError=-2147217396

Abraços,

Espero ter ajudado.

Posted in SharePoint 2013 | Tagged , | Leave a comment