Processamento de dados em massa com Rules e Actions com o módulo Sitecore Rule Processor

Uma das coisas mais trabalhosas em qualquer CMS, e com Sitecore não poderia ser diferente, é o processamento e transformação de dados em massa. É especialmente marcante quando você perde um dia ou dois fazendo seleções e edições manuais de centenas de items, um a um, por qualquer razão. Na primeira vez que vivi isto, a experiência foi tão dolorida, que acabei ficando obcecado por uma ferramenta que pudesse minimamente automatizar este tipo de trabalho.

Um pouco de história

Surpreendentemente não consegui encontrar nada, as únicas opções que tinha eram sentar e esperar que algo fosse criado, ou criar minha própria ferramenta. Como todo ansioso nato, não poderia ficar parado e esperar para, cedo ou tarde, ser ejetado para meu próximo pesadelo. Não consigo dormir com isso!

ETL?

Quando comecei a procurar por opções, baseado em algumas das minhas experiências com outros sistemas, meu primeiro pensamento foi construir ou estender uma ferramenta de ETL. ETL (Extract Transform and Load – Extrair, Transformar e Carregar) é comumente usado em sistemas de data warehousing para massivamente obter, filtrar e modificar dados em diversas fontes de dados (SQL servers, arquivos XML, planilhas de Excel, webservices, etc).
Com tantas boas ferramentas no mercado, contruir uma nova ferramenta ETL do zero não seria muito inteligente. Minha melhor opção seria escolher uma ferramenta que pudesse estender e ensiná-la a ler e escrever em bancos de dados do Sitecore. A ItemWebAPI possibilitaria isto, mas ainda em um nível baixo. Isto também iria requerer um esforço significativo para criar as configurações, regras de negócio e interfaces para fazê-lo conectar e conversar com o Sitecore.
Isto ficou reverberando em minha mente…

Sitecore Rocks?

Também considerei criar uma extensão para o Sitecore Rocks. Pareceu uma boa ideia, já que o Sitecore Rock já gerencia uma porção considerável do que é necessario para conectar e interagir com bancos Sitecore. Também conta com construtores de XPath and requisições, cujas lógicas poderiam ser utilizadas pelo meu módulo para obter dados do Sitecore. Mas, por outro lado, vai precisar que do Visual Studio para rodar, o que limitaria a cobertura do módulo. Além do mais, uma parte da interface de usuário e implementações complexas ainda precisariam ser feitas.
E deixei isto reverberando em minha mente…

Um modulo de Sitecore?

Falando em abrangência, minha ferramenta seria preferivelmente um módulo de Sitecore do que qualquer outra coisa. Assim eu economizaria tempo conectando com o Sitecore, já que o código seria executado dentro dele. Também economizaria energia traduzindo dados a medida que fosse lendo e escrevendo no Sitecore, pois posso simplesmente usar a API do Sitecore normalmente. Isto também tornaria as coisas mais simples já que sou bem familiarizado com o ambiente, então não precisaria me aprofundar em tecnologias que não domino. Estava tentando ser pragmático no meu propósito de me proteger de um novo pesadelo, com um mínimo esforço. Estender uma funcionalidade existente do Sitecore seria a melhor opção.

Sitecore Buckets?

Minha primeira tentativa real foi estender a funcionalidade Sitecore Buckets (imagem abaixo). Ela tem uma interface legal para filtrar e listar itens, bem como algumas “Search Operations” que poderiam ser usadas para modificar os itens selecionados.
Sitecore Buckets

O sistema de Buckets nativo ainda teria que ser modificado para ser usado da forma que eu gostaria, mas parecia ser a melhor opção até aquele momento. Um pouco de investigação demonstrou que a mudança não seria trivial, mais estudo e investigação seria necessária. Eu também não estava muito satisfeito com o jeito que os itens são filtrados, as condições programadas, e o quão amigável é montar requisições.

Por algum tempo isto simplesmente ficou reverberando em minha mente…

O motor de Regras – Um insight do Marketing Digital

Foi durante a preparação de um curso de treinamento Sitecore para Editores de Conteúdo, voltado às ferramentas de Marketing Digital, a primeira vez que considerei utilizar o Motor de Regras do Sitecore para meus propósitos. Apesar de ser originalmente usado para outras coisas, como Personalização de Conteúdo ou tarefas customizadas disparadas por determinados eventos, a experiência era muito próxima do que estava pensando. O modo que as condições e ações são encadeadas é perfeito para ser flexível e também muito amigável.

Rules

É na verdade perfeito para meus objetivos:

  • Rules (Regras) seriam agora a forma de salvar padrões de filtragem e transformação de dados
  • Conditions (Condições) serão usadas para selecionar e filtrar conteúdo
  • Actions (Ações) seriam responsáveis pelo processamento e transformação de dados
  • Eles também são muito fáceis de codificar

Então a ideia começou a fluir para fora da minha mente e se transformar em uma ferramenta real…

The Sitecore Rule Processor

Disponível no Sitecore Marketplace, Sitecore Rule Processor é o resultado dos meus esforços para automatizar a transformação de dados com Sitecore. Depois de instalado, quando uma Regra é selecionada no Content Editor, um ícone é exibido.

Processor Icon

Quando clicado ele traz uma janela para processar a regra, onde o usuário pode facilmente filtrar os itens que batem com as condições da regra, e então executa as ações em todos ou alguns destes itens:

Set Root and Bring Results

Assim, qualquer usuário pode visualmente montar consultas para obter itens e configurar ações para transformá-los.
O módulo vem com uma série de Ações customizadas, para aumentar o número de coisas que o usuário pode fazer para processar e modificar itens, tais como:

  1. Adicionar uma versão ao item em um certo idioma;
  2. Alterar a template do item;
  3. Copiar, Mover ou Clonar itens em um certo caminho;
  4. Deletar itens;
  5. Limpar um campo do item;
  6. Registrar uma mensagem no Log da aplicação com informações do item;
  7. Publicar o item;
  8. Substituir uma string em um campo do item;
  9. Substituir uma string no nome do item;
  10. Executar uma script;
  11. Serializar o item;
  12. Estabelecer o valor de um campo do item;
  13. Estabelecer o valor de um campo do item como o valor do campo de outro item;
  14. Estabelecer o valor de um campo do item como o ID de outro item;
  15. Alterar o estado de workflow do item.

Ainda tenho algumas ações úteis em meu backlog, que irão expandir ainda mais o valor do módulo.

Experiência na vida real: com uma ação existente

Então finalmente aconteceu: o próximo trabalho pesado estava à espreita nas núvens, pulando de para-quedas no meu colo sem aviso prévio. Um dos meus projetos veio com a demanda: um template de “artigo de notícias” teve um pouco de sua aparência alterada, o que impôs a necessidade de substituir conteúdos em um campo Richtext, em todos os itens desta template (tínhamos por volta de 200 itens no repositório). Tivemos que substituir todas as ocorrências de class=”old-style” para nossa nova class=”new-type”.

Minha regra então foi composta de:

  • Condições
    • Onde template=’News Article’
  • Ações
    • Substituir string em um campo do item
      • Substituir class=”old-style”
      • Por class=”new-style”
      • No campo “Body”

Experiência na vida real: com uma ação customizada

O que mostrei acima cobriu parte de nossas necessidades, infelizmente algumas substituições não eram tão simples e diretas. Por exemplo, um pouco do markup tinha que ser substituído por tags diferentes. Em nosso caso, algumas tabelas inseridas pelo cliente tiveram que ser substituídas por uma melhor formada tag <figure>
Isto exigiu a criação de uma ação customizada, que faria a análise do HTML e aplicaria a lógica de modificação utilizando o DOM (Document Object Model), e salvar o novo valor no item. Para aprender como criar uma ação customizada, por favor verifique este artigo de John West.

Minha regra acabou ficando bem similar à anterior:

  • Condições
    • Onde template=’News Article’
  • Ações
    • Minha ação customizada para substituição usando DOM

Por favor, fique à vontade para fazer download e testar o módulo (disponível na Sitecore Marketplace neste link), também para expandí-lo conforme sua necessidade. E claro, fique à vontade para fazer qualquer pergunta ou me passar suas impressões sobre ele!

Publicado em Actions, Rules, Sitecore Rule Processor

Leave a Reply

Your email address will not be published. Required fields are marked *

*

  Am Not Spammer

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>