查询触发器?

时间:2013-11-25 11:59:50

标签: triggers salesforce apex-code apex

我有以下要求:

1)获取已更改个人资料的所有用户的列表。

2)然后查询FRUP(它是一个自定义对象)来检索与其配置文件被更改的用户相关联的所有记录。(FRUP对象将包含所有用户在所有用户创建的所有记录的列表对象说帐户,机会)

3)更新FRUP。

为了达到这个目的,我写了一个触发器,通过它我可以获取其配置文件已更改的所有用户的列表,如下所示:

Trigger UserProfileTrigger on User (before update) {

List<User> usr = new List<User>();
Map<String,String> userMap = new Map<String,String>();

   for(User u: Trigger.new){

   //Create an old and new map so that we can compare values
        User oldOpp = Trigger.oldMap.get(u.ID);    
        User newOpp = Trigger.newMap.get(u.ID);

   //Retrieve the old and new profile            
        string oldProfileId = oldOpp.profileId;
        string newProfileId  = newOpp.profileId;

   //If the fields are different, the profile has changed
       if(oldProfileId != newProfileId){
          System.debug('Old:'+oldProfileId);
          System.debug('New :'+newProfileId);
          usr.add(u);
          System.debug('User :'+usr);

       }
   }

}

以下是自定义对象FRUP上的字段: 1)用户 2)名称
3)记录ID
4)文件夹ID
5)创建人 6)最后修改者

任何帮助/建议??

1 个答案:

答案 0 :(得分:0)

我不确定FRUP上的哪个字段引用了它所涉及的用户ID,但你可以用这样的东西遍历FRUP对象:

List<FRUP> frupToUpdate = new List<FRUP>();
for (FRUP f : [
    Select
        OwnerId,
        Name, //etc.
        UserId //the field that references the user Id
    from FRUP
    where userId = : usr]) {
//update field on FRUP, e.g. f.Name = 'New Name';
frupToUpdate.add(f);
}

这将选择与更改了配置文件的用户相关的FRUP记录。然后,它会更新记录中的字段,并将记录添加到列表中以进行更新。请注意,这应该在您的循环for(User u: Trigger.new)之后。然后更新已更改的FRUP记录:     update frupToUpdate;