Flickr Images

Pages

Banner 468

segunda-feira, 6 de junho de 2016

Search SharePoint Erro: Falha do pipeline de processamento de conteúdo ao processar o item.

0 comentários
 
Ou se o SharePoint estiver instalado em inglês “The content processing pipeline failed to process the item”.  Apenas para contextualizar: Tive este problema em um dos ambientes de desenvolvimento SharePoint. O serviço de pesquisa estava funcionando porém nenhum resultado era retornado. Ao olhar o log de rastreamento vi que muitos erros ocorriam:





E ao ver os detalhes dos erros a seguinte mensagem era exibida:

“Falha do pipeline de processamento de conteúdo ao processar o item. ( Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index; ; SearchID = B6D84DC0-C934-4881-9345)”.



Pesquisando na internet encontrei a seguinte postagem no blog "Kanithi's Professional Blog":

“In my case, the problem is with the improper Managed Property setting. I set the Allow multiple values to True of a Managed Property but the Site Column  does not accept multiple items.”
Ref: https://kanithi.wordpress.com/2014/08/26/sharepoint-search-the-content-processing-pipeline-failed-to-process-the-item/

Bom entendi que para resolver este problema teria que verificar qual propriedade no schema de pesquisa estava configurada de forma errada, aceitando multiplos valores. Agora precisava descobrir qual era essa propriedade. Para isso usei o Uls Viewer (https://www.microsoft.com/en-us/download/details.aspx?id=44020) para pesquisar no log filtrando pelo log da categoria “Content Processing”. E assim encontrei a seguinte mensagem de erro:



[Microsoft.CrawlerFlow-7322e6a3-f3ae-4453-80cd-7ab37fa16ea1] Microsoft.Ceres.ContentEngine.Processing.BuiltIn.AttributeMapperEvaluator+AttributeMapperProducer : Failed to map values to field Path.

Pronto propriedade encontrada! Ao ir no schema de pesquisa e procurar pela propriedade Path ela realmente estava mapeada para aceitar multiplos valores.





Apenas desmarquei essa opção e mandei executar a indexação completa. Problema resolvido!!!



Readmore...
quinta-feira, 24 de setembro de 2015

Trocando de usuário no SharePoint 2013

0 comentários
 

Olá a todos!

Então durante o desenvolvimento de web parts, application pages, workflows quase sempre precisamos trocar de usuário para testar permissões, visualizações, etc. Quando isso acontece você vai lá no seu nome de usuário no SharePoint, clica na seta e só existe a opção de logout…. Smiley triste.

ImagemLogout

Que triste…

Ai pesquisamos no Google e vemos que basta colocar a seguinte url “http://siteurl/_layouts/closeConnection.aspx?loginasanotheruser=true” que iremos conseguir trocar de usuário. Muito bom não é? Agora quero ver toda a sua alegria ao ter que trocar de usuário algumas dezenas de vezes durante o desenvolvimento….

Chato

 

Para isso eu desenvolvi uma pequena sandbox para podermos resolver este problema Alegre. O Código final pode ser encontrado para download aqui.

Vamos lá:

 

File > New > Project.

Selecione Templates > C# > Office/SharePoint > SharePoint Solutions > SharePoint 2013 – Empty Project.

01 - CriacaoProjeto

Selecione o tipo de projeto como Sandbox:

02 - TipoProjeto

Feito isso abra a Solution Explorer, expanda o projeto até a pasta Features, clique com o botão auxiliar e, em seguida, Add Feature:

03 - AdicionaFeature

Vamos trocar o nome da feature e colocar uma descrição legal:

04 - RenomearFeature

Bom agora vamos adicionar um módulo em nosso projeto.  Clique com o botão auxiliar no projeto e vá em Add > New Item:

05 - AdicionaNovoItem

Na tela que será apresentada procure por Module e dê o nome para este modulo:

06 - AdicionandoModulo

No Xml que será apresentado substitua o seguinte trecho:

07 - SubstituirXml

por:

08 - XmlSubstituido

O xml final irá ficar assim:

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns=
http://schemas.microsoft.com/sharepoint/>
  <CustomAction
    Id="ShpSandBoxTrocaDeUsuario"
    Location="Microsoft.SharePoint.StandardMenu"
    GroupId="PersonalActions"
    Sequence="0"
    Title="Trocar de Usuario"
    ImageUrl="/_layouts/images/URL32.GIF">
    <UrlAction Url="~site/_layouts/closeConnection.aspx?loginasanotheruser=true"/>
  </CustomAction>
</Elements>

Bom agora só fazer o deploy e ver se funcionou….

Bringh It

 

Resultado:

09 - OpcaoAparecendo

E ao clicar:

10 - Trocando

 

Bom por hoje é só! Qualquer dúvida/sugestão comenta ai! Smiley de boca aberta

 

 

Referências:

Readmore...
quarta-feira, 29 de maio de 2013

Visualizando atributos de entidades utilizando o DebuggerDisplay

0 comentários
 
Olá para todos! Como vão? Resolvi escrever este post pois existe uma coisa que me incomoda muito. Sabe quando criamos uma entidade qualquer. E depois adicionamos a entidade em uma coleção. Ai precisamos debugar e ver quais os valores que estão dentro da coleção. Quando ai vamos nós expandir item a item da coleção... Isso é algo realmente chato. Pesquisando sobre como melhorar isto acabei encontrando o DebuggerDisplay. Ele é responsável por exibir o valor de alguma propriedade na janela do debug. Bom agora vamos aos códigos:
Criei um projeto do tipo console application.
Crie uma Classe com o nome de AlunoEntity

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UsandoDebuggerDisplay
{
    
    public class AlunoEntity
    {
        public string Nome { get; set; }
        public int Matricula { get; set; }
        public DateTime DataMatricula { get; set; }
    }
}

Agora dentro da nossa class Program crio um List de alunos:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UsandoDebuggerDisplay
{
    class Program
    {
        static void Main(string[] args)
        {
            var alunos = new List();

            alunos.Add(new AlunoEntity() { Nome = "Pedro Marques", Matricula = 1, DataMatricula = DateTime.Now.AddDays(-4) });
            alunos.Add(new AlunoEntity() { Nome = "Adriana Freitas", Matricula = 2, DataMatricula = DateTime.Now.AddDays(-5) });
            alunos.Add(new AlunoEntity() { Nome = "Joana Almeida", Matricula = 3, DataMatricula = DateTime.Now.AddDays(-3) });
            alunos.Add(new AlunoEntity() { Nome = "Marcelo José", Matricula = 4, DataMatricula = DateTime.Now.AddDays(-6) });

        }
    }
}
Bom agora se formos debugar olha bem o que acontece:

Isso me irrita muito....

Agora vamos usar o DebuggerDisplay. Nossa classe AlunoEntity vai ficar assim:


using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UsandoDebuggerDisplay
{
    [DebuggerDisplay("Nome: {Nome} Matricula: {Matricula} Data de Matricula:{DataMatricula}")]
    public class AlunoEntity
    {
        public string Nome { get; set; }
        public int Matricula { get; set; }
        public DateTime DataMatricula { get; set; }
    }
}


Observe bem a linha:
[DebuggerDisplay("Nome: {Nome} Matricula: {Matricula} Data de Matricula:{DataMatricula}")]


Agora o resultado:



Show não é?

Bom por hoje é apenas isto. Qualquer coisa comentem e mandem as dúvidas e/ou sugestões!

Referência:
http://msdn.microsoft.com/en-us/library/x810d419.aspx
Readmore...
domingo, 17 de junho de 2012

Visualizador de notícias usando SharePoint Designer e Jquery

0 comentários
 


Olá pessoal tudo bom? A um bom tempo que não posto nada no blog, mas como hoje foi um dia calmo consegui escrever uma postagem. Vamos lá!
 Em quase todas os clientes que passei todos pediam uma especie de visualizador de notícias. Para isso sempre tinha uma web part pronta para isso. Contudo resolvi mudar um pouco a forma de fazer utilizando apenas algumas funcionalidades do SharePoint 2010 em conjunto com Jquery.

A ideia:

Criar uma visualização de notícias que será exibida a partir de dados de uma lista.

O que utilizarei?

  • REST Interface;
  • Jquery; 
  • Json; 

 Apenas um detalhe: Não sou um designer então desculpe o layout, prometo que quando puder converso com um amigo meu para deixar mais bacana o layout.

Bom ao trabalho:
Primeiro vou criar minha lista de Avisos:


Após criada a lista vamos nas configurações da lista e adicionar 2 colunas:

Mensagem: Coluna que irá conter o texto que será exibido na nossa página principal;


TipoMensagem: Coluna que irá informar se o aviso é uma noticia ou um anuncio;


Resultado final da nossa lista com alguns dados cadastrados:


Feito isso agora vamos na nossa biblioteca de estilos e adicionar a biblioteca do Jquery que pode ser baixada em http://docs.jquery.com/Downloading_jQuery. Aqui estou usando a versão 1.7.2. Apenas fiz o download no link informado e fiz o upload do arquivo jquery-1.7.2.js para a biblioteca de estilos.


Feito isso agora vamos a parte interessante: A nossa funcionalidade de notícias deverá ser atualizada a cada 10 segundos, exibindo sempre os últimos 3 avisos do tipo notícia. Dessa forma sempre que um uma notícia nova for cadastrada ela irá aparecer em nossa listagem. Para fazer isso utilizei o ajax "do" jquery para buscar  dados via rest (wcf?) da lista do SharePoint. Os dados são recebidos em formato Json. Logo abaixo do post colocarei todas as referências. Agora a pergunta: Porque utilizou Rest? Simples: Com ele consigo filtrar, ordenar, paginar, etc, os dados que vem da minha lista!!!! : )
Chega de conversar, vamos a funcionalidade:

  • Vá até a página onde as noticias deverão ser exibidas.  
  • Vá no menu: Ações do Site > Editar Página;
  • Na tela que será aberta seleciona a zona de web part onde você quer que as notícias apareçam e clique em Adicionar uma web part.


  • No menu que será exibido selecione: Mídia e Conteúdo > Editor de Conteúdo > Adicionar;

  • Após adicionar clique no link "Clique aqui para adicionar novo conteúdo".
  • Observe o menu superior e clique em HTML > Editar Origem HTML;



Na janela que será aberta informe o seguinte código:





<div>

<style>

.geral {

        WIDTH: 500px; FONT-FAMILY: verdana; COLOR: #56564b; FONT-SIZE: 11px

    }

.mensagem {

    BORDER-BOTTOM: #73b5de 1px solid;

    BORDER-LEFT: #73b5de 1px solid;

    PADDING-BOTTOM: 1px;

    LIST-STYLE-TYPE: none;

    MARGIN: 3px 1px;

    PADDING-LEFT: 2px;

    PADDING-RIGHT: 1px;

    HEIGHT: 50px;

    BORDER-TOP: #73b5de 1px solid;

    FONT-WEIGHT: normal;

    BORDER-RIGHT: #73b5de 1px solid;

    PADDING-TOP: 2px

}

.tituloMensagem {

        MARGIN: 1px 1px 4px 4px;

        FONT-WEIGHT: bold

}

</style>

<script src="/Style%20Library/jquery-1.7.2.js" type="text/javascript"></script>

<script type="text/javascript">

function CarregarRss()

    {

        $("#dvProcessandoFeed").toggle('fast');

        $("#dvFeeds").toggle('slow');                                   

       

        var Url = "http://srv/_vti_bin/ListData.svc/Avisos?$filter=(TipoMensagemValue eq 'Noticia')&$orderby=ID desc&$top=3";

         $.ajax({

           url: Url,

           dataType: 'json',

           success: CallBack

           });

    }

    function CallBack(retorno) {

        $("#dvFeeds > div").remove();

        $.each(retorno.d, function (dado) {

            var elemento = $("#dvGeralFeed");

            $("#dvFeeds").append('<div class="mensagem"><div class="tituloMensagem">'+retorno.d[dado].Título+'</div>'+retorno.d[dado].Mensagem+'</div>');

        });

        $("#dvProcessandoFeed").toggle('slow');

        $("#dvFeeds").toggle('slow');   

    }

    setInterval(CarregarRss,10000);

    </script>

    <div id="dvProcessandoFeed" style="display: none">

        <img alt="Pesquisando feeds" src="/_layouts/images/loadingcirclests16.gif"/> Processando feeds

    </div>

<div class="geral" id="dvFeeds" style="display: block">

</div>

</div>


Com relação ao código o maior destaque vai para a seguinte linha:


var Url = "http://srv/_vti_bin/ListData.svc/Avisos?$filter=(TipoMensagemValue eq 'Noticia')&$orderby=ID desc&$top=3";

Vamos explica-la com mais detalhes:

Estamos acessando a lista de Avisos via rest. nesse caso executamos um filtro para buscar apenas os avisos que são do tipo noticia:

$filter=(TipoMensagemValue eq 'Noticia')

Aqui temos uma pegadinha: quando efetuamos filtros por campos do tipo opção(choice) temos que adicionar a palavra Value no final. Logo nosso campo que se chamava TipoMensagem virou TipoMensagemValue. Em seguida fazemos a comparação se ele e igual (eq) a Noticia. 
Outro ponto importante é a ordenação. Como eu disse deveriamos exibir apenas as últimas 3 noticias, por isso ordenei pelo ID de forma decrescente e busquei apenas os 3 primeiros registros dessa consulta. Tudo isso apenas fazendo:

$orderby=ID desc&$top=3"

Legal não?

Outro "pulo do gato" é a linha:

setInterval(CarregarRss,10000);


Essa linha faz com que o código que busca os dados seja sempre executado a cada 10 segundos, dessa forma sempre pegamos as notícias mais atualizadas.

Resultado:

Processando noticias:
Exibindo as notícias:



Alguns detalhes sobre a função $.ajax poderão ser encontradas nos links de referência.

Agora já pensaram nas possibilidades que isso pode fazer? Bem rápido e prático, com um bom designer para ajudar vai ficar show!!!!

E ai acharam legal? Qualquer dúvida ou sugestão postem ai!

Readmore...
sexta-feira, 7 de outubro de 2011

Validar formato de CPF e CNPJ em Lista

9 comentários
 
Olá para todos!!!
Bom vamos para mais um problema que tive que resolver e achei uma solução agradável:

Problema:

Em uma determinada lista do Sharepoint precisava validar se um campo o formato do CPF ou do CPNJ estavam corretos. Lembrando:
CPF: xxx.xxx.xxx-xx
CPNJ: xx.xxx.xxx/xxxx-xx

Observação:
Apenas validar se o formato está correto, não valido os dígitos verificadores.
Bom vamos lá, estrutura da lista:
Bom vamos agora nas definições da coluna CPF/CNPJ:
Observe que o tamanho máximo do campo é 18 caracteres. Feito isso agora vamos na opção de validação de coluna e colocamos a seguinte fórmula:
=OR(AND(MID([CNPJ/CPF];3;1)=".";MID([CNPJ/CPF];7;1)=".";MID([CNPJ/CPF];11;1)="/";MID([CNPJ/CPF];16;1)="-";LEN([CNPJ/CPF])=18);AND(MID([CNPJ/CPF];4;1)=".";MID([CNPJ/CPF];8;1)=".";MID([CNPJ/CPF];12;1)="-";LEN([CNPJ/CPF])=14))
Como ficou:
E agora vamos ao teste, lembrando que o cpf é falso!
Observe que quando esta mal formatado ele dispara o erro de formato inválido. Bom é isso qualquer coisa postem ai. Abraços!!!
Readmore...
quinta-feira, 29 de setembro de 2011

Filtro Usuário Corrente em Campo Texto

0 comentários
 
Olá para todos mais uma vez!!!! Após um tempo sem postagem resolvi falar um pouco sobre um problema que tive. Baseado nesse problema vou criar uma situação semelhante para poder exibir a funcionalidade.
Cenário:
Temos uma lista que tem o cadastro de projetos e seus responsáveis. O problema ocorre porque essa lista é alimentada por um outro sistema e o campo que guarda responsável é do tipo texto e não Pessoa ou Grupo, como deveria ser. Precisamos criar uma visão que filtre quais são os projetos que o usuário corrente é responsável.
Vamos lá, a estrutura da lista:
Alguns dados de exemplo:
Bom agora vamos ao que interessa: Abrimos o site com o Sharepoint designer a acessamos a lista de Projetos:
Na tela que irá aparecer selecione, na direita Views e o botão New e, em seguida, damos o nome da view de Meus Projetos e marcamos a opção de ser a view padrão:
Na página que é exibida role a barra de rolagem até encontrar a query da view:
Altere essa query da seguinte forma:
Salve essa view e acesse a lista pelo browse.


Visão todos os itens:


Observe que é a view Todos os itens e que está sendo exibido todos os itens. Observe também o usuário corrente. Agora selecionamos a view que criamos no sharepoint designer e observe o resultado:

Meus Projetos:
Pronto! Problema resolvido! Qualquer dúvida postem ai!
Readmore...