【问题标题】:Salesforce Apex Trigger "isAPI" Context VariableSalesforce Apex 触发器“isAPI”上下文变量
【发布时间】:2012-09-19 13:34:06
【问题描述】:

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

【问题讨论】:

标签: triggers salesforce apex-code force.com


【解决方案1】:

目前没有标准的方法来告诉触发器中实际导致更新或插入发生的原因(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;
    }
}

【讨论】:

  • 这也是几年后的情况?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    相关资源
    最近更新 更多