首页 > 解决方案 > 比较记录的旧值和新值

问题描述

希望你们都做得很好!!!!

我只需要解决这个问题,然后我用谷歌搜索了逻辑,当我尝试时出现错误,然后我复制了在线代码并粘贴了它,但没有用。

以下代码的逻辑是:检查帐户的电话号码并比较电话号码的旧值和新值,如果它不是相同的值,那么我需要更新描述中的旧值。

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 到 Account 的非法分配。

请指导我。

提前致谢。

标签: salesforceapex

解决方案


我相信问题是这一行:

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

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

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

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

您可以执行以下操作:

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')which 适用于通用 sObject。


推荐阅读