Sequences

Uma sequência é definida por um conjunto de segmentos, que podem ser de um dos seguintes tipos:

Entity: um segmento associado a um atributo da entidade que pertença a uma entidade relacionada.

  • Attribute: qual dos atributos da entidade relacionada é usado no preenchimento do segmento.
  • Number of characters to use: quantos caracteres do atributo devem ser usados no preenchimento.
  • Mandatory field: caixa de seleção que indica se este segmento é obrigatório.
  • Prevent user from changing this value: caixa de seleção que indica se o utilizador pode alterar este valor “manualmente”, isto é, sem alterar a entidade relacionada. (Nota: não suportado na FW 3.00, o utilizador não pode alterar este campo manualmente.)
  • Group sequential number by this value: caixa de seleção que indica se este segmento influenciará o número sequencial da sequência.

Static Text: um segmento com texto livre. - Text: texto sugerido neste segmento. - Mandatory field: caixa de seleção que indica se este segmento é obrigatório. - Prevent user from changing this value: caixa de seleção que indica se o utilizador pode alterar este valor.

Separator: segmento com um caracter fixo, que inclui as seguintes opções: “-“, “_”. Este segmento pode ser usado como separador entre segmentos.

Sequential number: segmento com um número sequencial. Apenas um segmento deste tipo pode ser usado na sequência. - Start counting from: valor inicial. - Number of fixed digits: número fixo de dígitos reservados. E.g.: “0000”.

Exemplo

O seguinte exemplo demonstra a utilização deste mecanismo: Na chave da entidade Party foram definidos os seguintes segmentos: - Static Text - Entity: Country. Attribute: CountryKey - Separator: - - Sequential Number

O resultado será este:

Exemplo Sequences

Sempre que o utilizador alterar o país do registo que está a criar, será preenchido o segmento correspondente e alterado o número sequencial correspondente.

Inicialização

A sequência é inicializada no construtor da entidade. O serviço das sequências é responsável por devolver a definição da sequência para a entidade/atributo fornecido.

A definição é composta por um conjunto de segmentos. Inicialmente é construído o objeto da entidade com três propriedades preenchidas:

  • nome do Atributo Key: Preenchido inicialmente com a concatenação dos segmentos sugeridos da definição.
  • nome do Atributo SequenceId: id da definição da sequência ativa para esta entidade.
  • nome do Atributo Segmentos: Lista de segmentos da sequência. Estes não são persistidos na base de dados com esta entidade.

Serviços gerados

Com a utilização de uma sequência num campo, são gerados os seguintes endpoints:

  • id/< Nome do Atributo >Segment. (PUT)
  • id/< Nome do Atributo >Segments. (PUT)

O primeiro método é responsável pela atualização dos segmentos da sequência do tipo Entity. Este tipo de segmentos pode ser preenchido pelo valor de um qualquer campo de uma entidade relacionada. O serviço espera receber qual a propriedade que alterou para que seja obtido o valor do campo definido, para a entidade selecionada.

O serviço ISequencesService é responsável por devolver os valores dos campos definidos para este tipo de segmentos através do método RefreshSequenceSegments. É também carregado o valor sugerido para o segmento do número sequencial (caso este exista na definição).

O segundo método é responsável pela atualização do campo (no Draft), em que foi ativado o mecanismo de sequências. Este método recebe a lista de segmentos e concatena os valores recebidos, atualizando o campo gerido por sequências.

Persistência

Aquando da gravação da entidade na base de dados (método Insert) é chamado o método do serviço ISequencesService, GenerateSequenceValue.

Este método é responsável por garantir a correta geração do número sequencial, influenciado, ou não pelos segmentos do tipo entidade, garantindo assim a sua correta sequência.