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

Problemas com a proc_ListUrls

Olá galera,

Perdi uma semana de trabalho em virtude desta Procedure, vou fazer uma breve descrição do meu cenário.

  1. Tenho em torno de 1,5 Milhões de arquivos e junto seus metadados.
  2. Estou salvando esse arquivos em RBS e não em banco.
  3. Estou criando subpastas  para inserção de cada documento de acordo com seu metadado.

O meu case foi que quanto mais informações eu inseria na base de dados mais a performance do Console caia, depois de muitas analises, como citei no começo em torno de uma semana, analisando SQL e Código, percebi que essa Procedure proc_ListUrls estava demorando um tempo muito elevado para executar, então juntamento com meu  Visual Studio comecei a realizar o debug.

Ao executar o trecho de código abaixo:

  1. DocLib = web.Lists[“lista”];
  2. SPFolder SubFolder = DocLib.RootFolder.SubFolders[subPasta];

O atributo marcado em vermelho faz com que a execute a proc_ListUrls e isso realizada uma query sem where, ou seja, eu já tinha mais de 800k de itens cadastrados, em toda iteração que o meu Console vazia retornava os 800k itens. Isto gasta muito processador e memória.

Minha alternativa foi usar o trecho abaixo:

  1. SPFolder subFolder = srcFolders.Add(nomePasta);

Consegue criar uma nova subpasta e dar o get no SPFolder sem  usar DocLib.RootFolder.SubFolders   que é muito caro e esta onerando meu servidor de banco e App.

Espero que esse meu case possa ter ajudado quem vem passando pelo mesmo problema.

Isso ai amigos.

Até a próxima.

 

 

Posted in SharePoint 2013 | Tagged , | 1 Comment

Configurando RBS em uma Farm SharePoint 2013

Fala galera,

Hoje farei o passo a passo  para quem precisa configurar RBS em uma Farm  sem dar nenhum um erro.

Vamos começar!

Primeiramente você vai preparar o SQL para que ele use a função FILESTREAM.

  1. Entre no seu servidor de banco de dados e abra o SQL Server Configuration Manager.
  2. Selecione SQL Services e clica no botão direito em cima da instancia  SQL Server e vá em propriedades.
  3. Na janela de propriedades vá na aba FILESTREAM e selecione todos check boxes.filestreamblog
  4. Clique em apply e Ok.
  5. Feche o  SQL Server Configuration Manager.

Show agora o FILESTREAM  esta disponível na instancia do SQL.

Agora vamos abrir o SQL Management Studio e logar na instancia onde esteja seu content do SharePoint.

  1. Clique com direito em cima do content da sua aplicação e em segui New Query.
  2. Copie e cole a seguinte query:
    EXEC sp_configure filestream_access_level, 2
    RECONFIGURE
  3. Feito.

Provisionar o BLOB Store.

Eu usei a mesma janela que abri na ação acima

use WSS_Content_GSD_Blog if not exists (select * from sys.symmetric_keys where name = N'##MS_DatabaseMasterKey##')create master key encryption by password = N'Admin Key Password !2#4'
use WSS_Content_GSD_Blog if not exists (select groupname from sysfilegroups where groupname=N'RBSFilestreamProvider')alter database WSS_Content_GSD_Blog add filegroup RBSFilestreamProvider contains filestream
use WSS_Content_GSD_Blog alter database WSS_Content_GSD_Blog add file (name = RBSFilestreamFile, filename = 'C:\GSD_Blog') to filegroup RBSFilestreamProvider
  • Abra o diretório que definiu na sua query e veja se o diretório foi criado.

Instalando o RBS Provider

  1. Para começar vamos fazer download do RBS, clique no link a seguir RBS.msi .
  2. Execute o cmd como Administrador, essa ação você deve realizar em todos servidores da Farm.
  3. No Servidor de Aplicação copie e cole no CDM o comando a seguir:
    msiexec /qn /lvx* rbs_install_GSD_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true
    FILEGROUP=PRIMARY DBNAME="WSS_Content_GSD_Blog" DBINSTANCE="MSSQLSERVER" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1
  4. Vamos instalar o RBS agora nos Front End o comando é um pouco diferente mas o processo é o mesmo.
    msiexec /qn /lvx* rbs_install_GSD_log.txt /i RBS.msi FILEGROUP=PRIMARY DBNAME="WSS_Content_GSD_Blog" DBINSTANCE="MSSQLSERVER" ADDLOCAL="EnableRBS,FilestreamRunScript"
  5. Você pode acompanhar se a instalação ocorreu perfeitamente olhando o log que é gerado.

Para finalizar.

Habiltar o RBS (Remote BLOB Storage) no Content Database

  1. Abra o SharePoint 2013 Management Shell como Administrador e execute o comando a seguir:
    $cdb = Get-SPContentDatabase –WebApplication http://wvgsd:2030
    $rbss = $cdb.RemoteBlobStorageSettings
    $rbss.Installed()
    $rbss.Enable()
    $rbss.SetActiveProviderName($rbss.GetProviderNames()[0])
    $rbss

O resultado deve ser o seguinte:

result

RBS configurado e funcionando!!!!

Caso o Enable retorne false revise todos os passos.

Boa sorte!

Posted in SharePoint 2013 | Tagged , | Leave a comment