比较记录的新旧价值

时间:2020-08-11 01:45:35

标签: salesforce apex

希望你们一切都很好!!

我只需要修复此错误,然后我搜索了逻辑,当尝试执行时遇到错误,然后我复制了在线代码,也粘贴了该代码,但没有用。

以下代码的逻辑是:检查帐户的电话号码,并比较电话号码的旧值和新值(如果该值不相同,那么我需要更新说明中的旧值。< / strong>

public class CheckOldAndNewValueonAccount {
public static void accNewOldValues(List<Account> accList){
    for(Account acc: accList){
        Account oldAcc = Trigger.oldMap.get(acc.Id); 
        if(acc.Phone != oldAcc.Phone){
            acc.Description = 'Old Phone number this account is :'+oldAcc.Phone;
        }
    }
}

}

错误:从SObject到帐户的非法分配。

请对此进行指导。

预先感谢。

1 个答案:

答案 0 :(得分:0)

我认为问题是此行:

Account oldAcc = Trigger.oldMap.get(acc.Id);

我相信旧地图的类型是Map<String, sObject>

sObject是一种类型,它是Salesforce对象(任何一个),但没有一个具体类型。

因此,您尝试将sObject分配给要声明为帐户类型的变量。

您可以执行以下操作:

sObject oldAcc = Trigger.oldMap.get(acc.Id);

除非您特别想尝试将sObject强制转换为Account(具体)类型。我认为这样做没有太大的好处。让我们知道这是否是问题所在,并且问题是否已经解决。

编辑:请参见此线索:

https://trailhead.salesforce.com/en/content/learn/modules/apex_database/apex_database_sobjects

部分:将通用sObject强制转换为特定的sObject类型

您可以轻松地投射到“帐户”。那里有一个片段。

点表示法不适用于通用sObject类型。

或者您也可以使用.get('fieldname'),它也适用于通用sObject。