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.