Versionamento de Conteúdos

Objetivos

  • Como versionar conteúdos.
  • Como acessar versões de um conteúdo
  • Como criar serviços com versionamento de conteúdo

Referências complementares

  • DOUI
  • Content
  • Desenvolvimento de serviços e interfaces DOUI

Introdução

Antes de abordar o versionamento de conteúdo, é necessário conhecer os conceitos envolvidos no desenvolvimento de serviços do tipo Content.

O Content é um framework que estende o DOUI agregando funcionalidades de gestão de conteúdos.

A definição de um serviço content é equivalente à definição de um serviço DOUI, mas há configurações em servicedefinition.xml e douidefinition.xml que podem ser utilizadas apenas para serviços que utilizem o Content framework.

Um serviço pode ser definido como um serviço content colocando no nó service, o atributo type com valor "lum_content". A implementação de um serviço content é feita pela classe ContentService. Portanto se for desejado implementar uma classe para um serviço content, é necessário que ela estenda a classe ContentService. O ContentService estende o DouiService acrescentando funcionalidades específicas de content.

Content Framework

O Content Framework estende as classes do DOUI Framework, agregando aos serviços, funcionalidades de gestão de conteúdo, entre elas:

  • Publicação;
  • Versionamento;
  • Workflow;
  • Associação por idioma;
  • Associação de conteúdo;
  • Comentários;
  • Armazenamento automático de metadados como data de criação, data de modificação, usuário responsável pela criação e atualização;
  • Título, Introdução e palavras-chave (keywords);

Os serviços de gestão de conteúdo podem contemplar uma ou várias dessas funcionalidades.

O Lumis considera um conteúdo como aquele pertencente a uma instância de um serviço, onde as instâncias de um serviço possuem obrigatoriamente repositório de dados isolados. Logo, quando a instância é removida do portal, os seus conteúdos também são removidos.

Neste documento será explanado o uso da funcionalidade de versionamento de conteúdo.

Versionamento de Conteúdo

Esta funcionalidade permite que versões do mesmo conteúdo sejam automaticamente criadas a cada alteração do mesmo.

Um conteúdo pode ter vários idiomas. Por sua vez, cada conteúdo em um determinado idioma possui comentários, múltiplas versões, uma versão ativa e pode ter uma versão publicada.

A versão ativa é aquela corrente e disponível na interface de administração de conteúdos. A versão publicada é aquela que está disponível nas interfaces de listas e que obedece às regras de publicação, tais como período de publicação e período de destaque (se houver). A visibilidade do conteúdo também é determinada por alguns estados do workflow. Quando há workflow, a versão publicada é atribuída à versão salva com um estado publicado (estado aprovado, por exemplo). Quando há transição para um estado arquivado (ou para outro estado customizado), o conteúdo deixa de ter versão publicada.

Se o conteúdo possui versionamento, a versão ativa e a publicada podem ser distintas. Não necessariamente a versão ativa é igual à versão publicada. Isso ocorre porque o Lumis permite que um conteúdo aprovado seja revisado sem que seja retirado de publicação. Isso significa que a versão do conteúdo publicado não é necessariamente a mesma do conteúdo.

Versionamento na estrutura de dados de conteúdos

  • Para cada conteúdo criado, é gerado automaticamente um registro na tabela de Content, esta tabela armazena os identificadores da instância de serviço e source, lista de Content Locale etc.
  • O ContentLocale é responsável por armazenar a lista de todas as versões de um conteúdo, tal como a versão ativa e a versão publicada.
  • Um conteúdo pode possuir um ou mais ContentLocale. Assim como o ContentLocale pode ter um ou mais contentVersion.
  • Por sua vez o ContentVersion, obrigatoriamente pertence a um único ContentLocale, que também é de um Content específico.
  • O ContentVersion possui o numero da versão do conteúdo, suas publicações, ItemId e etc...
  • O itemId da tabela de ContentVersion, refere-se ao identificador do registro inserido na tabela definida no source no momento em que o conteúdo é editado. Logo, em cada edição é gerado um novo ContentVersion com um novo itemId. Porém, o ContentLocale é sempre preservado por ser ele quem possui o Content.
  • Com isso, a tabela definida no source pode conter vários registros, porém a lista de conteúdos irá exibir somente os conteúdos ativos e publicados.
  • Quando um conteúdo é excluído, com ele são removidos todas a suas versões, mantendo íntegro o Banco de Dados.

Front-end padrão de administração de conteúdo com versionamento

É possível consultar as versões de um conteúdo, através da interface de administração padrão da sua instância de serviço.

imagem1.jpg

Ao selecionar um conteúdo e clicar em “Versões”, é exibida uma interface com o histórico de versões daquele conteúdo, incluindo indicação das versões ativa e publicada.

imagem2.jpg

Editando a partir de versão específica

Para editar o conteúdo a partir de uma determinada versão que não seja a ativa, basta selecioná-la no checkbox e, logo em seguida, clicar em Editar. A janela de edição do conteúdo será exibida para que o editor possa realizar alterações. Ao clicar em OK, uma nova versão, com base nas eventuais edições feitas pelo administrador, será criada e marcada como ativa.

Desenvolvendo serviços com versionamento

Para que um serviço possa utilizar versionamento, basta que o mesmo seja do tipo lum_content, assim como suas interfaces.

Configuração de um source de conteúdo com versionamento

Para configurar o uso do versionamento no source, é preciso inserir no nó source o seguinte código:


<metaData >
  <versioning/>
</metaData>

Com isso, ao renderizar um interface, serão incluídos os controles referentes ao versionamento de conteúdo. Se tratando de uma interface de administração, seria incluído o botão com o link para a interface de versões de conteúdo.

Caso os controles da interface, estiverem sendo implementados manualmente. É preciso incluir o controle


<control:lum_autLayoutMetadadosInformation/>

Este é o controle responsável por inserir nas interfaces as funcionalidades de Content, disponibilizadas no source.

Referência a conteúdos versionados

Ao versionar um conteúdo, é preciso fazer referência ao contentId como identificador e não mais à chave primária da tabela especificada no source.

A cada versão de um conteúdo criada é gerado um novo registro do conteúdo. Sendo assim, o Lumis só consegue recuperar as versões de um conteúdo através dos relacionamentos que o levam a primeira versão do conteúdo

Relacionamento entre sources com versionamento

Ao criar um relacionamento entres sources com versionamento, também é necessário fazer referência ao contentId pois, apesar dos sources se relacionarem através de uma chave estrangeira, no momento em que um conteúdo é versionado o Lumis passa a usar o contentId para identificar o conteúdo.

Autor: André Andrade (Lumis)