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

Trigger to create task
Hi All,
I am new to apex coding but took a shot at writing an opportunity trigger to create a case based off of certain criteria. The issue I am running into is that a requirement of the trigger is to create a task instead of a case if a field on the associated account called "Closed"(checkbox) is not checked. I am not sure how to code that logic, currently I have the trigger creating a case if the field "Closed" is checked but not sure how to do it the other way around. The trigger I have written is below and any help would be greatly appreciated.
trigger ImplementationCaseforIntegrationProducts on Opportunity (after insert, after update) {
string recordtype = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Implementation').getRecordTypeId();
/* List<Task> tasks = new List<Task>();*/
List<Case> cases = new List<Case>();
for (Opportunity opp: Trigger.New)
{ case newcase= new case();
if((trigger.isInsert && (opp.StageName.toLowerCase().equals('closed won'))&&((opp.Type.toLowerCase().equals('adjustment'))|| (opp.Type.toLowerCase().equals('additional sales')))&& opp.Integration_Product_Attached__c == True)||
(trigger.isUpdate && (opp.StageName != Trigger.oldMap.get(opp.Id).StageName && opp.StageName.toLowerCase().equals('closed won'))&&((opp.Type.toLowerCase().equals('additional sales'))||(opp.Type.toLowerCase().equals('adjustment'))) && opp.Integration_Product_Attached__c == True))
{
list<Account> acc = [select id, Closed__c from Account where ID=:opp.AccountId];
if (acc[0].Closed__c == TRUE)
{
system.debug('----------opp.AccountId---->'+opp.AccountId);
newcase.AccountId=opp.AccountId;
newcase.Opportunity__c=opp.Id;
newcase.Subject='New Implementation case for '+opp.Account_Name__c;
newcase.Status='New';
newcase.Origin='Sign Up Form';
newcase.Priority='Medium';
newcase.RecordTypeId=recordtype;
newcase.Billing_Email__c = opp.Billing_Email__c;
cases.add(newcase);
}
}
else
{
}
}
if(cases.size()!=0 && cases.size()!=null)
{
system.debug('----------cases.size()---->'+cases.size());
insert cases;
}
Thanks in advance!
Hi Bennettran,
I have modified your code to insert Tasks as well as Cases based on the Closed__c checkbox conditions that apply.
Try the following trigger now.
trigger ImplementationCaseforIntegrationProducts on Opportunity (after insert, after update) {
string recordtype = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Implementation').getRecordTypeId();
List<Case> cases = new List<Case>();
List<Task> tasksList = new List<Task>();
for (Opportunity opp: Trigger.New){
case newcase= new case();
if(opp.AccountId != null){
Account a = [select id,name,Closed__c from Account where id =: opp.AccountId limit 1]; //This line more than enough to check in common, because if account id in opportunity is not null means only one value going to be there.
if((trigger.isInsert && (opp.StageName.toLowerCase().equals('closed won'))&&((opp.Type.toLowerCase().equals('adjustment'))|| (opp.Type.toLowerCase().equals('additional sales')))&& opp.Integration_Product_Attached__c == True)||
(trigger.isUpdate && (opp.StageName != Trigger.oldMap.get(opp.Id).StageName && opp.StageName.toLowerCase().equals('closed won'))&&((opp.Type.toLowerCase().equals('additional sales'))||(opp.Type.toLowerCase().equals('adjustment'))) && opp.Integration_Product_Attached__c == True))
{
if (a.Closed__c == TRUE){
newcase.AccountId=opp.AccountId;
newcase.Opportunity__c=opp.Id;
newcase.Subject='New Implementation case for '+opp.Account_Name__c;
newcase.Status='New';
newcase.Origin='Sign Up Form';
newcase.Priority='Medium';
newcase.RecordTypeId=recordtype;
newcase.Billing_Email__c = opp.Billing_Email__c;
cases.add(newcase);
}
else{
user u = [select id,name from user where id = UserInfo.getUserId() limit 1]; //select user to give as owner of task
Task t = new Task(ownerId = u.id, Subject = 'Follow up', status = 'Not Started',
Priority = 'High', whatID = opp.id); //You can change values accordingly
taskList.add(t);
}
}
}
}
if(cases.size() > 0){
insert cases;
}
if(taskList.size() > 0){
insert taskList;
}
}
Hope so this helps you...!
Please mark this answer a Solution and please give kudos by clicking on the star icon, if you found this answer as helpful.