Salesforce Apex触发器“isAPI”上下文变量

时间:2012-09-19 13:34:06

标签: triggers salesforce apex-code force.com

有没有办法确定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();
        }

    }

}

(目前使用API​​版本25.0,但很快将更新为26.0)

2 个答案:

答案 0 :(得分:4)

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

为实现这一目标,我建议在对象上创建一个自定义复选框字段,例如IsAPI__c(默认值为false)。然后您需要做的就是通过任何API调用传入true该字段,然后检查触发器中批处理中每条记录的字段(只需确保您记得将其重置为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;
    }
}

答案 1 :(得分:1)

如果您只是想确定是否通过UI发起了交易,则使用slaveof <host> <port>方法可能会提示您。