Como indexar guids utilizando Coveo e Sitecore mantendo o formato original – Parte 2

Agora que sabemos o que conversiontype é(ver parte 1 deste post), esta na hora de implementar um conversiontype. Seguem 6 passos para implementá-lo.

1- A primeira coisa que você precisa fazer é criar um novo tipo, e adicionar a propriedade ID do tipo Sitecore.Data.ID conforme abaixo:

public class CustomGuid
{
      public ID ID { get; set; }

      public CustomGuid(ID id)
      {
           ID = id;
      }
}

2- No arquivo Coveo.SearchProvider.Custom.config adicione um novo computed field na seção AddComputedIndexField:

<field fieldName=”guidid” >MyNamespace.GuidID, MyProjectAssembly</field>

3- Agora você precisa criar o tipo correspondente definido no passo 2, que deve implementar a interface IComputedIndexField:

public class GuidID : IComputedIndexField
{

      public string FieldName { get; set; }

      public string ReturnType { get; set; }

      public object ComputeFieldValue(IIndexable indexable)
      {
            Precondition.NotNull(indexable, () => () => indexable);

            IItem item = new ItemWrapper(new IndexableWrapper(indexable));

            return new CustomGuid(item.ID);
      }
}

Repare que o tipo de retorno é uma instancia de CustomGuid(definido no passo 1), passando o ID do item para o construtor.

4- Agora precisamos implementar o conversor. Esta classe deve herdar de System.ComponentModel.TypeConverter

public class CustomGuidConverter : TypeConverter
{
       public CustomGuidConverter()
       { }

       public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
       {
             if (destinationType == typeof(string))
             {
                   return true;
             }
             return base.CanConvertTo(context, destinationType);

       }

       public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)

       {

             return ((CustomGuid)value).ID.ToString();

       }
}

Repare o método ConvertTo e seus parâmetros. O tipo do parametro value é CustomGuid definido no passo 1, então sabemos que podemos fazer o cast para este tipo. Ainda, sabemos que na propriedade ID foi armazenado o ID do item de Sitecore, então é possível retornar o valor do ID como uma string.

5- No arquivo Coveo.Searchprovider.custom.config, precisamos realizar o mapeamento do conversor com o tipo definido no passo 1. Procure a seção indexFieldStorageValueFormatter e adicione o seguinte:

<indexFieldStorageValueFormatter type="Coveo.SearchProvider.CoveoIndexFieldStorageValueFormatter, Coveo.SearchProvider" >

       <conversionTypes hint="raw:AddConverter">

              <!--Converts Short guid format to guid regular format-->

              <conversionType inputType="MyNamespace.CustomGuid" type="MyNamespace.CustomGuidConverter, MyAssembly" patch:before = "*[1]" />

      </conversionTypes>

</indexFieldStorageValueFormatter>

Com esta configuração o Coveo vai realizar o mapeamento em tempo de indexação.

6- No painel de controle do Sitecore faça o build dos indices do Coveo.

7- Feito! Após a indexação, se você abrir o documento indexado você deverá procurar pelo field  guidid e você verá que o guid foi indexado com o seu valor original.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s