6

有没有办法确定触发器是通过 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)

4

2 回答 2

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;
    }
}
于 2012-09-19T14:18:02.533 回答
2

如果您只是想确定是否通过 UI 启动了事务,则使用该System.URL.getCurrentRequestUrl()方法可能会给您一个指示。

于 2020-08-07T20:36:40.250 回答