有没有办法确定API调用或Salesforce Web界面是否正在执行触发器?
我想做这样的事情:
trigger Update_Last_Modified_By_API on My_Object__c (before update) {
for (My_Object__c o : Trigger.New) {
if (isAPI) {
o.Last_Modified_By_API__c = datetime.now();
}
}
}
(目前使用API版本25.0,但很快将更新为26.0)
答案 0 :(得分:4)
目前还没有标准方法可以告诉触发器实际导致更新或插入的原因(API,标准页面布局,VF页面和控制器,其他一些Apex代码等)。以下是Trigger Context Variables的完整列表。
为实现这一目标,我建议在对象上创建一个自定义复选框字段,例如IsAPI__c
(默认值为false
)。然后您需要做的就是通过任何API调用传入true
该字段,然后检查触发器中批处理中每条记录的字段(只需确保您记得将其重置为false) “这样做,因此来自UI的后续调用不会被视为API调用。”
trigger Update_Last_Modified_By_API on My_Object__c (before update) {
for ( My_Object__c o : Trigger.New ) {
if ( o.IsAPI__c ) {
o.Last_Modified_By_API__c = datetime.now();
}
o.IsAPI__c = false;
}
}
答案 1 :(得分:1)
如果您只是想确定是否通过UI发起了交易,则使用slaveof <host> <port>
方法可能会提示您。