Salesforce Apex触发器"isAPI"上下文变量

Gre*_*reg 6 triggers salesforce force.com apex-code

有没有办法确定API调用或Salesforce Web界面是否正在执行触发器?

我想做这样的事情:

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

    }

}
Run Code Online (Sandbox Code Playgroud)

(目前使用API​​版本25.0,虽然很快将更新到26.0)

JCD*_*JCD 4

目前没有标准方法可以告诉触发器内实际导致更新或插入发生的原因(API、标准页面布局、VF 页面和控制器、其他一些 Apex 代码等)。这是触发上下文变量的完整列表。

为了实现这一点,我建议在对象上创建一个自定义复选框字段,例如IsAPI__c(默认值为false)。然后,您需要做的就是true通过任何 API 调用传入该字段,然后检查触发器中批次中每条记录的字段(只需确保记住在完成后将其重置为 false 即可)来自 UI 的调用不被视为 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;
    }
}
Run Code Online (Sandbox Code Playgroud)