Salesforce 如何在附件对象上使用Apex触发器在PHP页面上运行调用

Salesforce 如何在附件对象上使用Apex触发器在PHP页面上运行调用,salesforce,apex-code,Salesforce,Apex Code,我希望在任何时候添加/删除/修改附件对象时触发apex触发器。当触发此触发器时,我希望通过一个apex类传递附件的父ID,该类将该ID传递给外部网站上的PHP页面(使用GET很好) 我不需要显示PHP页面,我只需要运行PHP页面。php页面只是将ID存储在MySQL数据库中。我也不需要知道附件发生了什么(如果它被添加/删除/修改) 非常感谢您提供的任何帮助。我尝试过几种不同的方法,但每次我都会遇到很多错误,我无法找出答案。我认为我的任何尝试都不值得在这里分享 多谢各位 为了让调用在触发器内工作,

我希望在任何时候添加/删除/修改附件对象时触发apex触发器。当触发此触发器时,我希望通过一个apex类传递附件的父ID,该类将该ID传递给外部网站上的PHP页面(使用GET很好)

我不需要显示PHP页面,我只需要运行PHP页面。php页面只是将ID存储在MySQL数据库中。我也不需要知道附件发生了什么(如果它被添加/删除/修改)

非常感谢您提供的任何帮助。我尝试过几种不同的方法,但每次我都会遇到很多错误,我无法找出答案。我认为我的任何尝试都不值得在这里分享


多谢各位

为了让调用在触发器内工作,您需要多做一步:@future调用。 这意味着,必须从触发器中收集插入/更新/删除的所有ID。然后,您必须创建一个实现带有@future注释的静态void的类(因此,此函数始终异步执行)。最后,从触发器调用此函数,并在函数中运行callout

trigger Attachment_AfterAll_Callout on Attachment (after insert, after update, after delete) {
    Set<Id> ids = new Set<Id>();
    //collect your ids here
    //you might get away with just using ALL ids: ids = Trigger.newMap.keyset()
    //call @future Function
    WebserviceHandler.attachmentCall(ids);
}
触发附件\u毕竟\u附件上的标注(插入后、更新后、删除后){
集合ID=新集合();
//在这里领取您的身份证
//您可能只需要使用所有ID即可:ids=Trigger.newMap.keyset()
//调用@future函数
attachmentCall(ID);
}
在类文件中:

public class WebserviceHandler {
     @future(callout=true)
     public static void attachmentCall(Set<Id> ids) {
         //make your WS Callout here. 
         //Note, this is not guaranteed to run inline with the trigger,
         //execution may be delayed!
     }
}
公共类WebserviceHandler{
@未来(callout=true)
公共静态void attachmentCall(设置ID){
//在此处进行WS标注。
//注意,这不能保证与触发器内联运行,
//执行可能会延迟!
}
}

请注意,您可能有多少@future呼叫是有限制的,因此,您应该批处理执行。

我唯一的问题是删除附件时,我得到以下错误:
attachMngr:AfterDelete的执行由以下原因引起:System.NullPointerException:尝试取消引用空对象触发器。attachMngr:line 5,column 1
第5行是:
ids=Trigger.newMap.keyset()我尝试将删除后更改为删除前,但也没有帮助。没关系,我用以下方法修复了它:
if(Trigger.isInsert){ids=Trigger.newMap.keyset();}else if(Trigger.isUpdate){ids=Trigger.newMap.keyset();}else if(Trigger.isDelete){ids=Trigger.oldMap.keyset();}
注意删除时的“Trigger.old”而不是.new!谢谢你的帮助!哦,是的,我忘了测试,你说得对<代码>删除
是您希望使用
触发器.oldMap
的唯一事件。