Skip to main content
Dave The Rave (Orange) が「#Apex」で質問
After a record is created, I would like to update several number fields based the the date value on fields from 2 different objects. I tried this in the process builder but it did not work.

Attached is an image with object & field names, the list is also at the end of this message. In the Schema Builder the Master-Detail relationship is Meeting__c to RegistrationLayer__c and a Lookup Relationship Meeting__c to RegistrationLayer__c.

After a record on the Meeting__c object is created a process needs to be initiated to update the value of PointsYR1__c, PointsYR2 etc.. (on the RegistrationLayer__c  object) with Points__c (on the Meeting__c object). The YEAR on the two date fields of the two objects much match in order for PointsYR1__c etc.. to be updated.

The logic should be:

IF YEAR(datemeeting__c) = YEAR(certregfrom__c) AND freepoints__c =TRUE THEN  PointsYR1__c = (PointsYR1__c + Points__c)

IF YEAR(datemeeting__c) = YEAR(certregfrom__c +1 ) AND freepoints__c =TRUE THEN  PointsYR2__c = (PointsYR2__c + Points__c)

IF YEAR(datemeeting__c) = YEAR(certregfrom__c +2 )  AND freepoints__c =TRUETHEN  PointsYR3__c = (PointsYR3__c + Points__c)

IF YEAR(datemeeting__c) = YEAR(certregfrom__c +3)  AND freepoints__c =TRUETHEN  PointsYR4__c = (PointsYR4__c + Points__c)

IF YEAR(datemeeting__c) = YEAR(certregfrom__c +4) AND freepoints__c =TRUE THEN  PointsYR5__c = (PointsYR5__c + Points__c)

IF YEAR(datemeeting__c) = YEAR(certregfrom__c +5) AND freepoints__c =TRUE THEN  PointsYR6__c = (PointsYR6__c + Points__c)

Fieldname Field Type

Meeting__c (Object)

Points__c 

datemeeting__c 

freepoints__c

Registration__c (object)

CertRegFrom__c

 PointsYR1__c

 PointsYR2__c

 PointsYR3__c

 PointsYR4__c

 PointsYR5__c

 PointsYR6__c

 
3 件の回答
  1. 2018年7月31日 18:25
    Hi there,

    Try this:

     

    Trigger TrgOnMeeting on Meeting__c (before insert, before Update){

    if(Trigger.isInsert || Trigger.isUpdate) {

    Set<Id> regIds = new Set<Id>();

    for(Account meeting : Trigger.new) {

    if(meeting.RegistrationLayer__c != null)

    regIds.add(meeting.RegistrationLayer__c);

    }

    Map<Id, RegistrationLayer__c> mapReg = new Map<Id, RegistrationLayer__c>([SELECT Id, CertRegFrom__c, PointsYR1__c, PointsYR2__c, PointsYR3__c, PointsYR4__c, PointsYR5__c, PointsYR6__c

    FROM RegistrationLayer__c WHERE Id IN: regIds]);

    for(Account meeting : Trigger.new) {

    if(meeting.datemeeting__c.Year() == (mapReg.get(meeting.RegistrationLayer__c).CertRegFrom__c.Year()) && meeting.freepoints__c) {

    mapReg.get(meeting.RegistrationLayer__c).PointsYR1__c += meeting.Points__c;

    } else if(meeting.datemeeting__c.Year() == (mapReg.get(meeting.RegistrationLayer__c).CertRegFrom__c.Year() + 1) && meeting.freepoints__c) {

    mapReg.get(meeting.RegistrationLayer__c).PointsYR2__c += meeting.Points__c;

    } else if(meeting.datemeeting__c.Year() == (mapReg.get(meeting.RegistrationLayer__c).CertRegFrom__c.Year() + 2) && meeting.freepoints__c) {

    mapReg.get(meeting.RegistrationLayer__c).PointsYR3__c += meeting.Points__c;

    } else if(meeting.datemeeting__c.Year() == (mapReg.get(meeting.RegistrationLayer__c).CertRegFrom__c.Year() + 3) && meeting.freepoints__c) {

    mapReg.get(meeting.RegistrationLayer__c).PointsYR4__c += meeting.Points__c;

    } else if(meeting.datemeeting__c.Year() == (mapReg.get(meeting.RegistrationLayer__c).CertRegFrom__c.Year() + 4) && meeting.freepoints__c) {

    mapReg.get(meeting.RegistrationLayer__c).PointsYR5__c += meeting.Points__c;

    } else if(meeting.datemeeting__c.Year() == (mapReg.get(meeting.RegistrationLayer__c).CertRegFrom__c.Year() + 5) && meeting.freepoints__c) {

    mapReg.get(meeting.RegistrationLayer__c).PointsYR6__c += meeting.Points__c;

    }

    }

    update mapReg.values();

    }

    }

     
0/9000