2011-04-05 23 views

Respuesta

13

Todos los campos están siempre presentes en el desencadenador independientemente de si están sucios o no, para determinar si un campo específico ha sido modificado, debe recuperar una versión anterior de la fila usando oldMap que es Map<ID, sObject> y comparar el valores en viejo y nuevo. Por ejemplo

trigger CaseOnParticularFieldUpdate on Case (before update) { 
    for (Case c: Trigger.new) { 
     Case oldCase = Trigger.oldMap.get(c.ID); 
     if (c.Field != oldCase.Field) { 
      // field was updated, do some magic here 
     } 
    } 
} 
+0

gracias Soy consciente de cómo comprobar si se modifican los datos de campo. mi pregunta, sin embargo, está relacionada con este escenario. Lista aclist = [seleccione id, nombre, correo electrónico__c de la cuenta]; for (Cuenta a: aclist) { \t a.email__c = a.name+'@gmail.com '; } aclist de actualización; ahora lo que sucedería cuando se ejecuta este disparador: gatillo en cuenta (antes de la actualización) { \t para (una cuenta de: trigger.new) \t { \t \t si (a.accountNumber == null) \t \t { \t \t \t a.accountnumber = 'NA'; \t \t} \t}} serán los campos ACCOUNTNUMBER para las cuentas que son se cambiará actualización? –

+1

Sí. Como dije, trigger incluye TODOS los campos sObject. No es como la extensión visualforce/apex que solo precarga los campos referenciados en VF. – mmix

1

El disparador incluirá todos los campos de ese objeto para el que se invoca. Puede verificar el valor anterior (antiguo) y el valor actual (nuevo) de cualquier campo en ese objeto y puede compararlo y puede realizar la operación en consecuencia.

Espero que te ayude.

Cuestiones relacionadas