SetPrimaryKey em MVC

Boa tarde!

Estou com uma dúvida quanto ao método SetPrimaryKey usado pela classe FwFormModel

Caso eu criar um formulário onde a tabela não possua X2_UNICO e informe a chave primária por esse método, o sistema não acata e continua permitindo o usuário informar cadastros duplicados.

Segue exemplo da definição do modelo:

Static Function ModelDef
Local oModel    := Nil
Local oStruct   := FwFormStruct(1, 'ZAB')

    oModel := MpFormModel():New('TMSA01MVC',/*PreValid*/,/*Valid*/,/*Commit*/)

    oModel:AddFields('ModelMaster',, oStruct)
    oModel:SetPrimaryKey({'ZAB_FILIAL', 'ZAB_ANOMES'})    
    oModel:GetModel('ModelMaster'):SetDescription('Custo de Frete e Logístico')

    oModel:SetDescription('Cadastro de Frete e Custo Logístico')

Return(oModel)

Sei que é possível definir uma validação para o campo ZAB_MESANO para que o campo faça essa validação, mas fiquei com dúvida quanto ao funcionamento desse método.

Alguém saberia me explicar por quê deu errado?


Cenário 1:

oModel:SetPrimaryKey({'ZAB_FILIAL', 'ZAB_ANOMES'})
SX2->X2_UNICO = ''

Sistema permite a inclusão de registros duplicados.

Cenário 2:

oModel:SetPrimaryKey({'ZAB_FILIAL', 'ZAB_ANOMES'})
SX2->X2_UNICO = 'ZAB_FILIAL+ZAB_ANOMES'

Sistema NÃO permite a inclusão de registros duplicados, gerando o error log: Cannot insert duplicate key row in object 'dbo.ZAB010' with unique index 'ZAB010_UNQ'. The duplicate key value is ( , 201910, 0)


Na documentação está descrito da seguinte maneira: Se a tabela do submodelo for um metadado e possuir chave primária informada no SX2, não é necessário fazer uso desse método pois o MVC irá considerar o que está declarado no SX2.

Minha dúvida é: Se a origem for metadado, a chave primária sempre irá considerar o campo X2_UNICO e irá ignorar esse método ou só irá considerar o campo X2_UNICO se o mesmo estiver preenchido?

Pois com base nesse teste, o sistema está considerando o campo X2_UNICO sempre, independente se está preenchido ou não. Ignorando o conteúdo do método.

Grato pela atenção.

compartilhar
  • Porque não preencher o X2_UNICO?

    Marcos Felipe Rezende Xavier   13 de Mar de 2020
  • Quando existe o X2_UNICO, qual o comportamento? Pois quando existe, o método chamado é mesmo.

    Daniel Mendes   13 de Mar de 2020
  • Bom dia! Quando existe o X2_UNICO, o sistema não permite a inclusão do registro duplicado. Quando o mesmo está em branco, o sistema permite incluir mais de um registro com a mesma chave.

    Giordano Trabach Xavier   16 de Mar de 2020
  • Mas como é essa parte que não permite, o que é apresentado? É exibido um help? Qual help?

    Daniel Mendes   16 de Mar de 2020
  • É exibido um error log: Cannot insert duplicate key row in object 'dbo.XXX010' with unique index 'XXX010_UNQ'. The duplicate key value is (XX,XXXXX).

    Giordano Trabach Xavier   16 de Mar de 2020
Mostrar todos os 7 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags advpl mvc ou faça a sua própria pergunta.