Many-To-Many

Esta funcionalidade apenas estará disponível na próxima versão da framework.

O padrão Many-To-Many passa a ser suportado ao nível das relações entre duas entidades, ou seja, passa a ser possível modelar entidades como tendo relação de muitos para muitos com outra qualquer entidade específica.

Isto significa que, ao nível da aplicação, ao aceder a uma entidade A é possível definir relações com entidade B e vice-versa.

Modelo de Entidades

É no modelo de entidades que são especificadas relações de Many-To-Many entre entidades.

Este tipo de relações pode ser efetuada entre:

  • Entidades Master -> Entidades Master (incluindo extensão “base” de outras entidades), Entidade Externa;
  • Entidade Externa -> Entidades Master (incluindo extensão “base”);

Para entidades do tipo Detail e Extensões (não base), este tipo de associações não é possível efetuar.

Além disso, não é possível definir relações Many-To-Many de uma entidade master do tipo extensão (base) para uma extensão dessa mesma entidade, bem como não é possível efetuar estas relações a uma entidade do tipo Value List.

Para efetuar uma associação deste tipo entre as entidades, basta selecionar as entidades pretendidas e criar uma associação do tipo Many-To-Many.

Seta de definição de relação Many-To-Many

Entidades com relação Many-To-Many entre si

Geração de Código

(em construção)

Base de Dados

Ao serem criadas relações de Many-To-Many no modelo de entidades, após transformar a solução irá ser criada uma tabela (tabela ponte para essas respetivas entidades), onde é feita a relação entre as mesmas.

Exemplo de tabela ponte da relação entre duas entidades

Esta tabela irá sendo populada à medida que, na aplicação ou via webApi, se efetue a criação de registos de uma dessas entidades e se relacione com um ou vários registos de outra entidade.

WebAPI (carece de atualização)

As operações disponíveis via webApi, devem estar suportadas para entidades com relações Many-To-Many, como:

  • Get (e get paginado) (GET): ao efetuar esta operação via webApi, são apresentados todos os atributos referentes à entidade à qual estamos a fazer o get, como também é devolvida a lista de atributos dos registos da entidade relacionada (com relação Many-To-Many), com os quais existem relações definidas.
  • Save (POST): Ao nível da criação de registo de entidade com relação de Many-To-Many para outra entidade, é necessário passar os valores para os atributos da entidade referente ao registo a criar. No caso de se pretender definir relações entre a entidade origem com a entidade relacionada Many-To-Many, é necessário também passar os respetivos valores para a criação da relação. Neste ponto, podem ser criadas relações do registo da entidade A, para um ou vários registos da entidade B.
  • Update (PUT): O update é idêntico ao create, mas apenas são passados os atributos que se pretendem alterar com os respetivos valores, e/ou a atualização de relações com registos da entidade relacionada do tipo Many-To-Many.
  • Delete (DELETE): um pedido de remoção de um registo de uma entidade leva à remoção de todas as relações previamente definidas para esse registo. Isto apenas é possível se, na modelação, a entidade estiver assinalada como sendo deletable.

Aplicação

Ao nível da aplicação, quando existe uma entidade A com relação Many-To-Many para uma entidade B, ao aceder à criação/update de um registo de uma dessas entidades (ex: Entidade A) o que é apresentado são, os campos referentes à entidade sobre a qual estamos a criar um registo (Entidade A), bem como a lista de registos da entidade relacionada do tipo Many-To-Many (Entidade B).

Quando é criada uma relação num registo de uma dessas entidades, automaticamente, a relação é também criada para o respetivo registo de outra entidade.

Quando é efetuada a remoção de um registo (se a entidade for do tipo deletable) com relação definida, a relação também é removida, sendo a tabela ponte atualizada.

Drafts

Os drafts são também suportados para registos de entidades Many-To-Many.

Quando se procede à criação de um registo, é criado o respetivo draft e, tal como acontece com os restantes registos, é guardada toda a informação previamente inserida aquando da criação, incluindo as definições das relações.