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.
Porque não preencher o X2_UNICO?
— Marcos Felipe Rezende Xavier 13 de Mar de 2020Quando existe o X2_UNICO, qual o comportamento? Pois quando existe, o método chamado é mesmo.
— Daniel Mendes 13 de Mar de 2020Bom 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 2020Mas 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 2020Hum... Deixa eu ver se eu entendi, se você faz o SetPrimaryKey na "mão", ele permite incluir registros duplicados, caso exista o X2_UNICO, ele permite mas gera um error.log?
— Daniel Mendes 16 de Mar de 2020Efetuei uma melhoria na minha explicação inicial, mas seria isso mesmo.
— Giordano Trabach Xavier 16 de Mar de 2020