Создание триггера APEX от веб-сервиса - возможно ли это? - PullRequest
2 голосов
/ 26 января 2012

Я пытаюсь написать триггер в SalesForce Opportunity, который должен отправить обновленное имя StageName на внешний веб-сервис, используя предварительно заданные имя пользователя и пароль.

вот пример кода:

trigger isStageChanged on Opportunity (after update) {
    for (Opportunity o : Trigger.new) {
        Opportunity beforeUpdate = System.Trigger.oldMap.get(o.Id); 

        if(beforeUpdate.StageName != o.StageName) {
            // Call WS
        }
    }

}

«Call ws» означает использовать ссылку, например: http://mydomain.com/webservice/index.php?username=MY_USERNAME&password=MY_PASS&stage=opportunityNewStage

Вопрос заключается в следующем: где я могу хранить MY_USERNAME и MY_PASS, если я хочу использовать этот триггер для разных клиентов SalesForce и позволить им настроить их после установки? Когда я читаю Руководство по разработке кода APEX, я сообщаю, что я могу использовать API веб-сервисов для развертывания своего триггера, и таким образом я могу сохранить пользователя и передать его на свой сервер. Является ли это возможным? На моем сервере я использую php.

Надеюсь, я в своем вопросе ясен.

1 Ответ

3 голосов
/ 26 января 2012

Вам, вероятно, следует сохранить имя пользователя и пароль , используя пользовательские настройки .Это позволит их администратору легко настроить имя пользователя и пароль со значениями, которые они предоставляют.

Обратите внимание, что вы не можете сделать вызов изнутри триггера, так как он поддерживает операции с базой данных, вместо этого вам нужно поместить свой вызовв публичном / глобальном методе другого класса использование аннотации @future:

@future public void DoMyCallout(list<id> liOpportunities)
{
    // load your oppties if need be, then do the callout
}

@future указывает, что этот метод будет выполняться асинхронно, поэтому вы можете вызывать его из триггера, но он будет выполняться в другомнить и т. д. не задерживает выполняемую операцию базы данных.

...