Triggers Salesforce检查值是否更改(触发器处理程序)

Triggers Salesforce检查值是否更改(触发器处理程序),triggers,salesforce,apex-code,Triggers,Salesforce,Apex Code,我试图检查帐户字段是否从特定值更改 如果旧帐户的标志为“打开”,而新帐户的标志为“未打开” 然后进行一些检查 private void doCheck(map<Id, Account> oldAccounts, map<Id, Account> newAccounts){ List<Account>newList= new List<Account>(); List<Account>oldList= new List<

我试图检查帐户字段是否从特定值更改

如果旧帐户的标志为“打开”,而新帐户的标志为“未打开”

然后进行一些检查

private void doCheck(map<Id, Account> oldAccounts, map<Id, Account> newAccounts){
   List<Account>newList= new List<Account>();
    List<Account>oldList= new List<Account>();

    oldList= oldAccounts.values();
    newList= newAccounts.values();

 //check if old account flag changed from "open" 
}
private void doCheck(映射旧帐户、映射新帐户){
ListnewList=新列表();
ListoldList=新列表();
oldList=oldcounts.values();
newList=newAccounts.values();
//检查旧帐户标志是否从“打开”更改
}
私有void doCheck(映射旧帐户,映射新帐户){
对于(Id i:oldAccounts.keyset()){
Account old=oldcounts.get(i).Flag\uuu c;
if(old.Flag\uuuu c=='Open'&&old.Flag\uuuu c!=newAccounts.get(i.Flag\uu c)){
//在这里施展你的魔法
}
}
}
如果要为此运行一些查询,则不应在循环中进行查询。一些助手
设置
,您可以在其中放置Id,然后对该集中的所有帐户Id运行查询,这可能是最好的主意。。。很难说你到底需要什么

Apex帮助中介绍了
Map
集合中的
keyset()和
get(someKey)
方法:

private void doCheck(map<Id, Account> oldAccounts, map<Id, Account> newAccounts){

    for(Id i : oldAccounts.keyset()){
       Account old = oldAccounts.get(i).Flag__c;
       if(old.Flag__c == 'Open' && old.Flag__c != newAccounts.get(i).Flag__c){
          // do your magic here
       }
    }
}