从Web服务中触发APEX - 是否可能?

时间:2012-01-25 21:19:13

标签: php web-services salesforce apex-code

我试图在SalesForce Opportunity中编写一个触发器,它必须使用预定义的用户名和密码将更新的StageName发送到外部Web服务。

这是示例代码:

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代码开发人员指南时,我可以使用Web服务API来部署我的触发器,这样我就可以存储用户并传递我的服务器。可能吗? 在我的服务器上,我正在使用php。

我希望我的问题清楚。

1 个答案:

答案 0 :(得分:3)

您应该存储用户名和密码using custom settings。这将允许他们的管理员使用他们提供的值轻松配置用户名和密码。

请注意,您无法在触发器内部进行标注,因为它会占用数据库操作,而您需要使用@future注释将标注放入另一个类的公共/全局方法中:

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

@future表示此方法将异步运行,因此您可以从触发器调用它,但它将在另一个线程中运行,因此不会阻止正在进行的数据库操作。