Extensibilidade - Entidades de Utilizador

A extensibilidade tem como objetivo a personalização dos produtos Primavera para que estes se adaptem às necessidades específicas de cada negócio.

As Entidades de Utilizador permitem ao utilizador criar entidades - às quais podem ser associados atributos de utilizador - de modo a armazenar informação personalizada e relevante para o seu negócio.

Do ponto de vista técnico, uma entidade de utilizador apenas difere de uma entidade modelada por fazer uso de uma tabela de base de dados única (uma entidade modelada utiliza uma tabela por entidade). Os restantes elementos que compõem uma entidade (TFV's, listas, operações, etc) são criadas em runtime mas de forma a copiar a lógica atualmente existente na modelação.

Arquitetura

Modelo de dados

O modelo de dados não se distingue consideravelmente do modelo utilizado na modelação, mas ainda assim existem subtis diferenças que aqui se documentam.

Definição das entidade de utilizador

À semelhança de uma entidade modelada, uma entidade de utilizador é definida através de uma entrada na tabela Corepatterns.SchemaEntities, no entanto foi adicionada uma nova coluna UserEntityDefinition onde são guardados metadados adicionais em formato JSON. Também foi adicionado a coluna IsCompanyDependent que não é persistida.

SchemaEntity-CustomEntityDefinition

Figura 1: Alterações efetuadas à entidade SchemaEntity.

De momento a coluna UserEntityDefinition guarda as labels dos campos key e description da entidade e também a indicação se a entidade de utilizador é companyDependent ou não.

SchemaEntity-UserEntityDefintion

Figura 2: UserEntityDefinition.

Persistência das entidades de utilizador

Persistência de registos

Em contraste a uma entidade modelada - onde normalmente existe uma tabela por entidade - todos os registos de todas as entidades de utilizador existem na mesma tabela CorePatterns.CustomEntityRecords, sendo possível distinguir a que entidade pertence cada registo através da coluna CorePatterns.CustomEntityRecords.SchemaEntityId.

Database-CustomEntityRecords-Modelo

Figura 3: Entidade CustomEntityRecords.

Persistência de Vistas e Rotinas

Numa entidade modelada, as vistas (views) e rotinas (TVF's, stored procedures, etc) que a suportam existem no schema que corresponde ao módulo da entidade (ex: sales, shipping, etc). Visto uma entidade de utilizador não pertencer a nenhum módulo, foi criado o schema CustomEntities onde são guardar as vistas e rotinas de base de dados.

Database-CustomEntities-Schema

Figura 3: Schema CustomEntities.

Controlo de acesso

As funcionalidades aqui descritas apenas são ativadas no produto de acordo com as seguintes condições:

  • Presença da claim claim_allow_extensibility_custom_entities na subscrição;
  • O utilizador autenticado possuir um role cujo menu possui link para a lista da entidade de utilizador em questão.

Modelos

Por forma a possibilitar a criação e gestão de entidades de utilizador foram modelados entities, services, operations, resources e views.

Entidades

Foi modelada uma nova entidade CustomEntityRecord, à qual corresponde a tabela CorePatterns.CustomEntityRecords, que tem como objetivo guardar todos os registos de todas a entidades de utilizador. Esta nova entidade possui uma foreign key para SchemaEntity por forma a ser possível distinguir a que entidade pertende cada registo.

Entity-CustomEntityRecord.

Figura 4: Entidade CustomEntityRecord.

Serviços

Abaixo estão descritas as alterações feitas ao serviço SchemaEntity, bem com a explicação do novo serviço CustomEntityRecords.

Serviço SchemaEntity

O serviço SchemaEntity foi expandido de forma a suportar uma nova ListOperation (CustomEntities) e Resource (CustomEntity), que dão suporte a entidades de utilizador.

Service-SchemaEntity

Figura 5: Nova ListOperation CustomEntities, e nova Resource CustomEntity.

Serviço CustomEntityRecord

Uma nova ListOperation e serviço CustomEntityRecords foram modelados por forma a que entidades de utilizador suportem todas as operações que qualquer entidade modelada suporta.

Service-CustomEntityRecord

Figura 6: Nova ListOperation e Service CustomEntityRecords.

Apresentação

Para finalizar as alterações aos modelos, foram criados os recursos visíveis na imagem seguinte no modelo de apresesentação. É também possível visualizar na seguinte imagem a estrutura do formulário de criação de nova entidade de utilizador.

Presentation-CustomEntities

Figura 6: Novos recursos do modelo de apresentação.

View definition

A persistência das view definitions das entidades de utilizador é conseguida através da reutilização do mecanismo dos atributos de utilizador. A view definition é gerada em runtime e guardada uma azure table da extensiblidade, ao lado dos atributos de utilizador.

Estrutura

Modelação

A ativação das entidades de utilizador e gestão de permissões relacionadas é feita recorrendo à modelação. Todos os aspetos dos vários modelos estão descritos em seguida.

Modelo de menu

Modelo de produto

Codigo gerado

A ações demonstradas acima em Modelação têm os impactos descritos neste capítulo.