¿Cuándo se genera un valor de número automático?
Necesito usar un Auto Numbercampo para establecer el valor del Namecampo en un valor compuesto deAUTO_NUMBER - NAME - DOB
Tengo un Auto_Number__ccampo y un before insertdisparador que obtiene el valor máximo:
private List<Opportunity> getMax() {
return [SELECT Auto_Number__c FROM Opportunity ORDER BY Auto_Number__c DESC NULLS LAST LIMIT 1];
}
Y lo incrementa.
Pero esto no siempre funciona.
Las condiciones de la carrera han provocado que los récords terminen con el mismo número.
Me gustaría saber cuándo el nuevo Auto Numbervalor está realmente disponible para un registro determinado, para poder usarlo para cambiar el nombre del registro. ya que la documentación de Triggers and Order of Execution no menciona esto.
Además, estaría abierto a cualquier otra solución sugerida para este problema.
Respuestas
El número automático se asigna en el mismo momento en que se asigna la ID, es decir, en el paso donde ocurre la primera confirmación y el registro se vuelve a cargar desde la base de datos. Sin embargo, esto significa que las cosas pueden estar en vuelo cuando intentas obtener el valor máximo. Use FOR UPDATE si desea forzar una espera para garantizar la sincronicidad:
private List<Opportunity> getMax() {
return [SELECT Auto_Number__c FROM Opportunity ORDER BY Auto_Number__c DESC NULLS LAST LIMIT 1 FOR UPDATE];
}
Tenga en cuenta que esto puede hacer que la inserción de algunos registros falle y requiera otro guardado si demora más de 10 segundos.