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

Triggers Salesforce Apex触发器“;isAPI“;上下文变量,triggers,salesforce,apex-code,force.com,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调用还是通过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)

目前没有标准的方法在触发器中说明是什么导致了更新或插入(API、标准页面布局、VF页面和控制器、一些其他Apex代码等)。这是一个完整的清单

为了实现这一点,我建议在对象上创建一个自定义复选框字段,类似于
IsAPI\uu c
(默认值为
false
)。然后,您需要做的就是通过任何API调用传入该字段的
true
,然后在触发器中为批处理中的每个记录检查该字段(只需确保在完成时将其重置为false,这样来自UI的后续调用就不会被视为API调用)


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

我想没有办法知道>>@MartinBorthiry谢谢,我只是“推广”了它,希望这将在未来可用。几年后也是这样吗?
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;
    }
}