trigger MeetingTrigger on Meeting__c (before insert, before update) {
if (Trigger.isBefore && Trigger.isInsert) {
for (Meeting__c newMeeting : Trigger.new) {
// 選択リストの値(時と分)を数値型に変換する
Integer startTimeHour = Integer.valueOf(newMeeting.Start_Time_Hour_JST__c);
Integer startTimeMinute = Integer.valueOf(newMeeting.Start_Time_Minute_JST__c);
// 時間型のインスタンスを作成する。
Time startTimeJST = Time.newInstance(startTimeHour, startTimeMinute, 0, 0);
// JST(+09:00) から GMT(+00:00) に変換する
Time startTimeGMT = startTimeJST.addHours(-9);
// 時間項目を更新する
newMeeting.Start_Time__c = startTimeGMT;
}
} else if (Trigger.isBefore && Trigger.isUpdate) {
for (Meeting__c newMeeting : Trigger.new) {
// 更新の場合、選択リストが変更されている時にのみ、時間項目を更新する。
// 同時に時間項目が直接更新された場合は、選択リストの値で上書きされていますので注意
Meeting__c oldMeeting = Trigger.oldMap.get(newMeeting.Id);
if (newMeeting.Start_Time_Hour_JST__c != oldMeeting.Start_Time_Hour_JST__c ||
newMeeting.Start_Time_Minute_JST__c != oldMeeting.Start_Time_Minute_JST__c) {
newMeeting.Start_Time__c = Time.newInstance(Integer.valueOf(newMeeting.Start_Time_Hour_JST__c),
Integer.valueOf(newMeeting.Start_Time_Minute_JST__c),
0, 0).addHours(-9);
}
}
}
}