Salesforce:无法使用触发器更新查找字段值

时间:2015-03-08 01:13:37

标签: salesforce apex-code

我只是尝试使用触发器更新Account对象上的查找字段值(Campagna_Account__c),该触发器应该更新它从自定义对象获取值(Sottocampagna__c)。 我认为查询是正确的,因为它在Force.com Explorer上运行良好,所以我认为问题出在其他地方。

这是触发器触发时显示的错误行:

  

由Campagna字段的触发器更改的数据:id值不正确   键入:a06250000004FDNAA2

这是我的代码:

trigger PopolaCampagna on Account (before insert, before update) {

    Sottocampagna__c var = [

        SELECT Campagna__r.Id 
        FROM Sottocampagna__c
        WHERE Name='Segugio'

        ];

for (Account a: Trigger.new) {

        a.Campagna_Account__c = var.Id;
    }    
}

感谢您帮助我!

1 个答案:

答案 0 :(得分:0)

您正尝试使用此代码将Sottocampagna__c记录的ID分配到a.Campagna_Account__c中。你应该改为:

for (Account a: Trigger.new) {

    a.Campagna_Account__c = var.Campagna__r.Id;
}    

}

我建议的另一件事是将此查询更改为:

Sottocampagna__c var = [

    SELECT Campagna__r.Id 
    FROM Sottocampagna__c
    WHERE Name='Segugio' limit 1

    ];

如果有超过1条符合查询条件的记录,它将阻止例外。如果您对此行为不满意,并且可能有多条符合条件的记录,则最好使用List<>。如果有帮助,请告诉我。

还有一些关于命名约定的提示: https://salesforce.stackexchange.com/questions/890/what-is-a-good-set-of-naming-conventions-to-use-when-developing-on-the-force-com

实际上这也应该有效:

    for (Account a: Trigger.new) {

    a.Campagna_Account__c = var.Campagna__c;
}    

}

Sottocampagna__c var = [

    SELECT Campagna__c 
    FROM Sottocampagna__c
    WHERE Name='Segugio' limit 1

    ];