You need to sign in to do that
Don't have an account?

need to break this into class
I want the following code which does 2 different things to be in class and want to write a trigger to call the class.
Can someone suggest best way to do it or how to do it.
thanks
trigger Checkcase on Case (before update) {
/*
On Update contact name field, update web email field.
On change of status to values given below, check case team is there, if not throw message.
*/
public Set<Id> setContactId = new Set<Id>();
public Map<Id,Contact> mapContact;
Public Set<Id> setCaseId = new Set<Id>();
Public Map<Id, CaseTeamMember> mapCaseWithteamMember=new Map<Id, CaseTeamMember>();
Id recTypename = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Escalation').getRecordTypeId();
for (Case c : Trigger.new)
{
if(c.Status != Trigger.oldMap.get(c.Id).Status && c.RecordTypeId==recTypename && (c.status == 'Active Engaged'
|| c.status == 'Active Wait' || c.status == 'Analysis'|| c.status == 'Closed'))
{
setCaseId.add(c.Id);
}
setContactId.add(c.ContactId);
}
// 1. on contact change, change the contact email
mapContact =new Map<Id,Contact>([SELECT id, email FROM contact WHERE Id IN: setContactId]);
if (!mapContact.ISEMPTY()){
for(Case c: Trigger.New){
if(mapContact.get(c.ContactId) !=null && mapContact.get(c.ContactId).Email !=null){
c.SuppliedEmail = mapContact.get(c.ContactId).Email;
}
}
}
if(setCaseId.ISEMPTY())
return;
// 2. Find case team, if empty, throw message before status change.
For(CaseTeamMember ct: [SELECT parentid FROM CaseTeamMember WHERE parentid IN :setCaseId]){
mapCaseWithteamMember.put(ct.ParentId,ct);
}
for(Case c: Trigger.New){
if(mapCaseWithTeamMember.get(c.Id) ==null && c.RecordTypeId==recTypename) {
c.addError('No case team is assigned, please assign a team member.');
}
}
}
Please use the following code for Trigger and its Apex Class:
// Trigger
trigger Checkcase on Case (before update) {
/*
On Update contact name field, update web email field.
On change of status to values given below, check case team is there, if not throw message.
*/
public Set<Id> setContactId = new Set<Id>();
Public Set<Id> setCaseId = new Set<Id>();
Id recTypename = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Escalation').getRecordTypeId();
for (Case c : Trigger.new)
{
if(c.Status != Trigger.oldMap.get(c.Id).Status && c.RecordTypeId==recTypename && (c.status == 'Active Engaged'
|| c.status == 'Active Wait' || c.status == 'Analysis'|| c.status == 'Closed'))
{
setCaseId.add(c.Id);
}
setContactId.add(c.ContactId);
}
UpdateCase u = new UpdateCase();
u. updateCaseRecord(setContactId, setCaseId);
}
// Apex Class
public class UpdateCase{
public Map<Id,Contact> mapContact;
Public Map<Id, CaseTeamMember> mapCaseWithteamMember=new Map<Id, CaseTeamMember>();
public UpdateCase(){
}
public void updateCaseRecord(set<Id> setContactId, set<Id> setCaseId){
// 1. on contact change, change the contact email
mapContact =new Map<Id,Contact>([SELECT id, email FROM contact WHERE Id IN: setContactId]);
if (!mapContact.ISEMPTY()){
for(Case c: Trigger.New){
if(mapContact.get(c.ContactId) !=null && mapContact.get(c.ContactId).Email !=null){
c.SuppliedEmail = mapContact.get(c.ContactId).Email;
}
}
}
if(setCaseId.ISEMPTY())
return;
// 2. Find case team, if empty, throw message before status change.
Id recTypename = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Escalation').getRecordTypeId();
For(CaseTeamMember ct: [SELECT parentid FROM CaseTeamMember WHERE parentid IN :setCaseId]){
mapCaseWithteamMember.put(ct.ParentId,ct);
}
for(Case c: Trigger.New){
if(mapCaseWithTeamMember.get(c.Id) ==null && c.RecordTypeId==recTypename) {
c.addError('No case team is assigned, please assign a team member.');
}
}
}
}
loop variable must be of typesObject for line where there is trigger.new in class.