Problema na restauração de objetos antigos

Visão geral

Atualmente, ao criar um objeto no Latromi, é gerado um identificador global único (Global ID) de 38 caracteres.

Em versões anteriores, essa geração era feita através de um código GUID, que pode variar entre 32 a 38 caracteres, dependendo da formatação aplicada.

Exemplos de formatação para GUID:

  • 00000000000000000000000000000000 → 32 caracteres, sem caracteres especiais
  • 00000000-0000-0000-0000-000000000000 → 36 caracteres, com traços
  • {00000000-0000-0000-0000-000000000000} → 38 caracteres, com chaves

Simulando

Para a simulação deste erro é necessário usar um objeto que possui uma geração de ID Global no padrão GUID.

  1. Efetue alguma alteração no objeto, e commit a revisão.
  2. Na tela de ‘log de revisão’, busque pelo objeto
  3. Clique para restaurar o objeto em questão

Após esses passos poderá ser capturado a seguinte mensagem de erro:

Não foi possível restaurar o formulário: value ‘00000000-0000-0000-0000-000000000000’ violates the length restriction (38) of the ‘code’ parameter. Parameter name: code.

Causa

O erro ocorre devido a uma validação presente no core do sistema, que identifica o padrão de geração do código global (Global ID).

Mesmo quando o objeto utiliza o padrão antigo baseado em GUID, o sistema aplica a validação do novo padrão de 38 caracteres, ocasionando a falha.

Solução paleativa

Como o GUID pode ser reconhecido em múltiplos formatos e, independentemente da formatação, continuará sendo um GUID válido, é possível contornar o problema adicionando chaves à sua composição no upgrade code.

Exemplo de ajuste via SQL:

update wecdb.globalidmapping
set upgradecode = '{CÓDIGO_DO_OBJETO}'
where upgradecode = 'CÓDGIO_DO_OBJETO' -- Necessário garantir ser o mesmo que está sendo feito o update

Solução

A correção definitiva requer ajuste no core do sistema, mais especificamente no objeto Struct responsável pelo tratamento do upgradecode.

Será necessário revisar a lógica de validação para identificar corretamente, qual foi o padrão de geração do código global do objeto em questão.