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.

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.

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)