我试图在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。
我希望我的问题清楚。
答案 0 :(得分:3)
您应该存储用户名和密码using custom settings。这将允许他们的管理员使用他们提供的值轻松配置用户名和密码。
请注意,您无法在触发器内部进行标注,因为它会占用数据库操作,而您需要使用@future注释将标注放入另一个类的公共/全局方法中:
@future public void DoMyCallout(list<id> liOpportunities)
{
// load your oppties if need be, then do the callout
}
@future
表示此方法将异步运行,因此您可以从触发器调用它,但它将在另一个线程中运行,因此不会阻止正在进行的数据库操作。