2012-09-19 11 views
6

Gibt es eine Möglichkeit festzustellen, ob ein Trigger von einem API-Aufruf oder über das Salesforce-Webinterface ausgeführt wird?Salesforce-Apex-Auslöser "isAPI" -Kontextvariable

Ich möchte so etwas wie dies zu tun:

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(); 
     } 

    } 

} 

(Aktuell mit API-Version 25.0 wird jedoch bald auf 26,0 Aktualisierung werden)

+2

Ich denke, dass es keine Möglichkeit zu wissen, dass >> http://success.salesforce.com/ideaView?id=08730000000BpsCAAS –

+0

@MartinBorthiry Dank, ich habe gerade „befördert“ es, dies wird hoffentlich zur Verfügung in der Zukunft – Greg

Antwort

4

Es gibt derzeit keine einheitliche Art und Weise innerhalb der zu sagen, Auslöser, was tatsächlich zu einem Update oder Einfügen geführt hat (API, Standardseitenlayout, VF-Seite & Controller, einige andere Apex-Codes usw.). Hier ist eine vollständige Liste von Trigger Context Variables.

Um dies zu erreichen, würde ich vorschlagen, ein benutzerdefiniertes Kontrollkästchen Feld auf dem Objekt, etwa IsAPI__c (mit einem Standardwert von false) zu erstellen. Dann müssen Sie nur true für dieses Feld mit einem beliebigen API-Aufruf übergeben und dann das Feld in Ihrem Auslöser für jeden Datensatz im Stapel überprüfen (stellen Sie jedoch sicher, dass Sie es auf false zurücksetzen, wenn Sie fertig sind nachfolgende Aufrufe von der Benutzeroberfläche werden nicht als API-Aufrufe behandelt).

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

nicht, was ich gehofft hatte, aber eine gute Problemumgehung – Greg

+0

das ist die gleiche Situation ein paar Jahre später? –

Verwandte Themen