Quando é gerado um valor de numeração automática
Eu preciso usar um Auto Numbercampo para definir o valor do Namecampo para um valor composto deAUTO_NUMBER - NAME - DOB
Eu tenho um Auto_Number__ccampo e um before insertgatilho que obtém o valor máximo:
private List<Opportunity> getMax() {
return [SELECT Auto_Number__c FROM Opportunity ORDER BY Auto_Number__c DESC NULLS LAST LIMIT 1];
}
E o incrementa.
Mas isso nem sempre funciona.
As condições da corrida fizeram com que os recordes terminassem com o mesmo número.
Gostaria de saber quando o novo Auto Numbervalor está realmente disponível para um determinado registro, então posso usá-lo para renomear o registro. já que a documentação Triggers e Order of Execution não menciona isso.
Além disso, eu estaria aberto a quaisquer outras soluções sugeridas para esse problema.
Respostas
A numeração automática é atribuída no mesmo momento em que o ID é atribuído, ou seja, na etapa em que ocorre o primeiro commit e o registro é recarregado do banco de dados. No entanto, isso significa que as coisas podem estar em andamento quando você tenta obter o valor máximo. Use FOR UPDATE se quiser forçar uma espera para garantir a sincronicidade:
private List<Opportunity> getMax() {
return [SELECT Auto_Number__c FROM Opportunity ORDER BY Auto_Number__c DESC NULLS LAST LIMIT 1 FOR UPDATE];
}
Observe que isso pode causar falha na inserção de alguns registros e exigir outro salvamento se demorar mais de 10 segundos.