Переменная контекста API Salesforce Apex Trigger

Есть ли способ определить, выполняется ли триггер с помощью вызова API или через веб-интерфейс Salesforce?

Я хотел бы сделать что-то вроде этого:

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)


person Greg    schedule 19.09.2012    source источник
comment
Я думаю, что невозможно узнать, что ›› success.salesforce.com/ideaView?id= 08730000000BpsCAAS   -  person Martin Borthiry    schedule 19.09.2012
comment
@MartinBorthiry спасибо, я только что продвигал это, надеюсь, это будет доступно в будущем   -  person Greg    schedule 19.09.2012


Ответы (2)


В настоящее время не существует стандартного способа указать в триггере, что на самом деле вызвало обновление или вставку (API, стандартный макет страницы, страница и контроллер VF, некоторый другой код Apex и т. д.). Вот полный список переменных контекста триггера.

Для этого я бы предложил создать для объекта настраиваемое поле флажка, что-то вроде IsAPI__c (со значением по умолчанию false). Затем все, что вам нужно сделать, это передать true для этого поля с любым вызовом API, а затем проверить поле в своем триггере для каждой записи в пакете (только убедитесь, что вы не забыли сбросить его на false, когда вы это сделаете последующие вызовы из пользовательского интерфейса не рассматриваются как вызовы 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;
    }
}
person JCD    schedule 19.09.2012
comment
это та же самая ситуация несколько лет спустя? - person Vitaly Zdanevich; 03.06.2016

Если вы просто пытаетесь определить, была ли транзакция инициирована через пользовательский интерфейс или нет, использование метода System.URL.getCurrentRequestUrl() может дать вам указание.

person Jesper Bjerrum    schedule 07.08.2020