Triggers Salesforce触发器:从自定义对象更新字段触发器

Triggers Salesforce触发器:从自定义对象更新字段触发器,triggers,salesforce,custom-object,Triggers,Salesforce,Custom Object,刚到apex,对编写触发器有疑问。本质上,我试图创建一个触发器,当另一个字段被更新时(在Salesforce中创建/插入一条记录之后),该触发器会更新给定字段 更具体地说,当更新自定义帐户查找字段(查找值是自定义对象记录)时,它应该使用与自定义对象记录不同的值更新另一个字段 i、 e.当我将高中名称更新为Elm高中时,它也将更新与该高中相关的收益率 以下是我迄今为止创建的代码: trigger UpdateYield on Account (before update) { Set<Str

刚到apex,对编写触发器有疑问。本质上,我试图创建一个触发器,当另一个字段被更新时(在Salesforce中创建/插入一条记录之后),该触发器会更新给定字段

更具体地说,当更新自定义帐户查找字段(查找值是自定义对象记录)时,它应该使用与自定义对象记录不同的值更新另一个字段

i、 e.当我将高中名称更新为Elm高中时,它也将更新与该高中相关的收益率

以下是我迄今为止创建的代码:

trigger UpdateYield on Account (before update) {
Set<String> HS = new Set<String>();
for (Account hsName : Trigger.new) {
    if (hsName.High_School_LU__c != null) {
        HS.add(hsName.High_School_LU__c);
}

List<High_School__c> y = [SELECT Name, Yield__c FROM High_School__c WHERE Name IN :HS];

Map<String, High_School__c> yLU = new Map<String, High_School__c>();
for (High_School__c h : y) {            
    yLU.put(h.Name, h);    
}

for (Account YieldU : Trigger.new) {
    if (YieldU.High_School_LU__c != null) {
        High_School__c a = yLU.get(YieldU.Name);
        if (a != null) {
            YieldU.Yield__c = a.Yield__c;
        }
    }        
}
}
}
trigger updatefield on Account(更新前){
Set HS=新的Set();
对于(帐户名:Trigger.new){
如果(hsName.High\u School\u LU\u c!=null){
HS.add(hsName.High__________________c);
}
列表y=[选择名称,从高中毕业,其中名称为:HS];
Map yLU=新映射();
(高中:y){
yLU.put(h.Name,h);
}
对于(帐户YieldU:Trigger.new){
如果(YieldU.High_________c!=空){
高中c=yLU.get(YieldU.Name);
如果(a!=null){
产量c=a.产量c;
}
}        
}
}
}
它保存,但是,当我更新字段时,它仍然不起作用


任何帮助都将不胜感激。提前感谢。

这里的问题是,查找字段的值实际上不是一个字符串(如UI中显示的那样),而是一个ID,因此,当您执行SOQL查询时,您将ID与名称字段进行比较,而没有得到任何结果

如果您将代码更改为以下内容,您应该会得到预期的结果

还应该注意,这个简单的用例也可以使用简单的工作流字段更新而不是触发器来完成

trigger UpdateYield on Account (before update) 
{
    Set<Id> HS = new Set<Id>();

    for (Account hsName : Trigger.new)
    {
        if (hsName.High_School_LU__c != null)
        {
            HS.add(hsName.High_School_LU__c);
        }
    }

    Map<Id, High_School__c> y = [SELECT Name, Yield__c FROM High_School__c WHERE Id IN :HS];

    for (Account YieldU : Trigger.new)
    {
        High_School__c a = y.get(YieldU.High_School_LU__c);
         if (a != null) 
         {
               YieldU.Yield__c = a.Yield__c;
         }
     }        
 }
trigger updatefield on Account(更新前)
{
Set HS=新的Set();
对于(帐户名:Trigger.new)
{
如果(hsName.High\u School\u LU\u c!=null)
{
HS.add(hsName.High__________________c);
}
}
Map y=[选择名称,从高中毕业,其中Id IN:HS];
对于(帐户YieldU:Trigger.new)
{
高中a=y.get(YieldU.High\u School\u LU\u c);
如果(a!=null)
{
产量c=a.产量c;
}
}        
}

感谢您的回复!您是对的,字段更新的工作流规则更简单,也更简单。我会投票给你,但是,Stand Exchange不会让我,直到我的声誉至少是15,所以认为这是一个大拇指。@ USER 338 5692你应该能够标记我的答案作为“接受”的答案,这给了我们两个有点声誉。很高兴我能帮上忙。宾果。再次感谢。