【问题标题】:Making APEX trigger from webservice - is it possible?从 web 服务触发 APEX - 有可能吗?
【发布时间】:2012-01-25 21:19:13
【问题描述】:

我正在尝试在 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。

我希望我的问题很清楚。

【问题讨论】:

    标签: php web-services salesforce apex-code


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 很好,但我可以自动创建自定义设置字段,还是我必须依赖 SalesForce 管理员?
    • 您必须依赖管理员 - 但如果您有登录名,则可以通过 API 进行操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多