2012-09-19 27 views
6

¿Hay alguna forma de determinar si un desencadenador se está ejecutando mediante una llamada API o mediante la interfaz web de Salesforce?Salesforce Apex Trigger "isAPI" Variable de contexto

me gustaría hacer algo como esto:

trigger Update_Last_Modified_By_API on My_Object__c (before update) { 

    for (My_Object__c o : Trigger.New) { 

     if (isAPI) { 
      o.Last_Modified_By_API__c = datetime.now(); 
     } 

    } 

} 

(Actualmente el uso de la API de la versión 25.0, aunque pronto será la actualización a 26.0)

+2

Creo que no hay manera de saber que >> http://success.salesforce.com/ideaView?id=08730000000BpsCAAS –

+0

@MartinBorthiry gracias, solo "promovido" que, es de esperar que estará disponible en el futuro – Greg

Respuesta

4

Actualmente no existe una forma estándar para contar dentro de la desencadenar lo que realmente causó una actualización o inserción (API, diseño de página estándar, controlador de la página VF &, algún otro código Apex, etc.). Aquí hay una lista completa de Trigger Context Variables.

Para lograr esto, sugiero crear un campo de casilla de verificación personalizado en el objeto, algo así como IsAPI__c (con un valor predeterminado de false). Entonces, todo lo que tendría que hacer es pasar true para ese campo con cualquier llamada API, y luego verificar el campo en su desencadenante para cada registro en el lote (solo asegúrese de recordar restaurarlo a falso cuando haya terminado así las llamadas posteriores de la UI no se tratan como llamadas API).

trigger Update_Last_Modified_By_API on My_Object__c (before update) { 
    for (My_Object__c o : Trigger.New) { 
     if (o.IsAPI__c) { 
      o.Last_Modified_By_API__c = datetime.now(); 
     } 
     o.IsAPI__c = false; 
    } 
} 
+0

no es lo que esperaba, pero una buena solución – Greg

+0

esta es la misma situación algunos años atrás? –

Cuestiones relacionadas