You need to sign in to do that
Don't have an account?
Masie
Help Bulkify my apex trigger
Hi
I need some help with the following trigger- it creates a record in my asset history table should certain conditions be met. I need to add another condition and I am already running into apex governor limits when I do mass updates.
trigger AssetHistoryTracking on Asset(after update){
String AccId = null;
String AccName = null;
Integer index = 0;
String OldAccName = null;
//create a list to hold the new record(s) to create
List<Asset_History__c> historyObjList = new List<Asset_History__c>();
for(Asset ass : Trigger.New){
String OldAccId = Trigger.Old[index].AccountId;
AccId = ass.AccountId;
List <Account> acclist = [select name, id from Account where id = :AccId ];
Accname = acclist[0].name;
List <Account> oldacclist = [select name, id from Account where id = :OldAccId ];
OldAccname = oldacclist[0].name;
//If status changes
if(ass.Status != Trigger.Old[index].Status){
Asset_History__c objAssetH = new Asset_History__c();
objAssetH.Asset__c = ass.id;
objAssetH.Old_Value__c = Trigger.Old[index].Status;
objAssetH.New_value__c = ass.Status;
objAssetH.Date_Changed__c = system.today();
objAssetH.Field_Changed__c = 'Status';
objAssetH.Changed_By__c = UserInfo.getUserId();
//Trigger Action Logic
// Asset_History__c historyObj = new Asset_History__c(Old_Value__c = Trigger.Old[index].Status, New_value__c = ass.Status);
historyObjList.add(objAssetH);
// index++;
}
//when Account changes
if(ass.AccountId != Trigger.Old[index].AccountId){
Asset_History__c objAssetH = new Asset_History__c();
objAssetH.Asset__c = ass.id;
objAssetH.Old_Value__c = OldAccname ;
// objAssetH.Old_Value__c = Trigger.Old[index].AccountId;
objAssetH.New_value__c = AccName ;
objAssetH.Date_Changed__c = system.today();
objAssetH.Field_Changed__c = 'Company Name';
objAssetH.Changed_By__c = UserInfo.getUserId();
//Trigger Action Logic
// Asset_History__c historyObj = new Asset_History__c(Old_Value__c = Trigger.Old[index].Status, New_value__c = ass.Status);
historyObjList.add(objAssetH);
// index++;
}
//when install date changes
if(ass.InstallDate != Trigger.Old[index].InstallDate){
Asset_History__c objAssetH = new Asset_History__c();
objAssetH.Asset__c = ass.id;
objAssetH.Old_Value__c = String.valueof(Trigger.Old[index].InstallDate);
objAssetH.New_value__c = string.valueof(ass.InstallDate);
objAssetH.Date_Changed__c = system.today();
objAssetH.Field_Changed__c = 'Install Date';
objAssetH.Changed_By__c = UserInfo.getUserId();
//Trigger Action Logic
// Asset_History__c historyObj = new Asset_History__c(Old_Value__c = Trigger.Old[index].Status, New_value__c = ass.Status);
historyObjList.add(objAssetH);
// index++;
}
//when Usage End Date changes
if(ass.UsageEndDate != Trigger.Old[index].UsageEndDate){
Asset_History__c objAssetH = new Asset_History__c();
objAssetH.Asset__c = ass.id;
objAssetH.Old_Value__c = String.valueof(Trigger.Old[index].UsageEndDate);
objAssetH.New_value__c = string.valueof(ass.UsageEndDate);
objAssetH.Date_Changed__c = system.today();
objAssetH.Field_Changed__c = 'Usage End Date';
objAssetH.Changed_By__c = UserInfo.getUserId();
//Trigger Action Logic
// Asset_History__c historyObj = new Asset_History__c(Old_Value__c = Trigger.Old[index].Status, New_value__c = ass.Status);
historyObjList.add(objAssetH);
//index++;
}
//when Stock is For Show Devices
if(ass.Show_Device__c != Trigger.Old[index].Show_Device__c){
Asset_History__c objAssetH = new Asset_History__c();
objAssetH.Asset__c = ass.id;
objAssetH.Old_Value__c = String.valueof(Trigger.Old[index].Show_Device__c);
objAssetH.New_value__c = string.valueof(ass.Show_Device__c);
objAssetH.Date_Changed__c = system.today();
objAssetH.Field_Changed__c = 'Show Device';
objAssetH.Changed_By__c = UserInfo.getUserId();
//Trigger Action Logic
// Asset_History__c historyObj = new Asset_History__c(Old_Value__c = Trigger.Old[index].Status, New_value__c = ass.Status);
historyObjList.add(objAssetH);
index++;
}
}
if(historyObjList.size() > 0){
insert historyObjList;
}
}
I need some help with the following trigger- it creates a record in my asset history table should certain conditions be met. I need to add another condition and I am already running into apex governor limits when I do mass updates.
trigger AssetHistoryTracking on Asset(after update){
String AccId = null;
String AccName = null;
Integer index = 0;
String OldAccName = null;
//create a list to hold the new record(s) to create
List<Asset_History__c> historyObjList = new List<Asset_History__c>();
for(Asset ass : Trigger.New){
String OldAccId = Trigger.Old[index].AccountId;
AccId = ass.AccountId;
List <Account> acclist = [select name, id from Account where id = :AccId ];
Accname = acclist[0].name;
List <Account> oldacclist = [select name, id from Account where id = :OldAccId ];
OldAccname = oldacclist[0].name;
//If status changes
if(ass.Status != Trigger.Old[index].Status){
Asset_History__c objAssetH = new Asset_History__c();
objAssetH.Asset__c = ass.id;
objAssetH.Old_Value__c = Trigger.Old[index].Status;
objAssetH.New_value__c = ass.Status;
objAssetH.Date_Changed__c = system.today();
objAssetH.Field_Changed__c = 'Status';
objAssetH.Changed_By__c = UserInfo.getUserId();
//Trigger Action Logic
// Asset_History__c historyObj = new Asset_History__c(Old_Value__c = Trigger.Old[index].Status, New_value__c = ass.Status);
historyObjList.add(objAssetH);
// index++;
}
//when Account changes
if(ass.AccountId != Trigger.Old[index].AccountId){
Asset_History__c objAssetH = new Asset_History__c();
objAssetH.Asset__c = ass.id;
objAssetH.Old_Value__c = OldAccname ;
// objAssetH.Old_Value__c = Trigger.Old[index].AccountId;
objAssetH.New_value__c = AccName ;
objAssetH.Date_Changed__c = system.today();
objAssetH.Field_Changed__c = 'Company Name';
objAssetH.Changed_By__c = UserInfo.getUserId();
//Trigger Action Logic
// Asset_History__c historyObj = new Asset_History__c(Old_Value__c = Trigger.Old[index].Status, New_value__c = ass.Status);
historyObjList.add(objAssetH);
// index++;
}
//when install date changes
if(ass.InstallDate != Trigger.Old[index].InstallDate){
Asset_History__c objAssetH = new Asset_History__c();
objAssetH.Asset__c = ass.id;
objAssetH.Old_Value__c = String.valueof(Trigger.Old[index].InstallDate);
objAssetH.New_value__c = string.valueof(ass.InstallDate);
objAssetH.Date_Changed__c = system.today();
objAssetH.Field_Changed__c = 'Install Date';
objAssetH.Changed_By__c = UserInfo.getUserId();
//Trigger Action Logic
// Asset_History__c historyObj = new Asset_History__c(Old_Value__c = Trigger.Old[index].Status, New_value__c = ass.Status);
historyObjList.add(objAssetH);
// index++;
}
//when Usage End Date changes
if(ass.UsageEndDate != Trigger.Old[index].UsageEndDate){
Asset_History__c objAssetH = new Asset_History__c();
objAssetH.Asset__c = ass.id;
objAssetH.Old_Value__c = String.valueof(Trigger.Old[index].UsageEndDate);
objAssetH.New_value__c = string.valueof(ass.UsageEndDate);
objAssetH.Date_Changed__c = system.today();
objAssetH.Field_Changed__c = 'Usage End Date';
objAssetH.Changed_By__c = UserInfo.getUserId();
//Trigger Action Logic
// Asset_History__c historyObj = new Asset_History__c(Old_Value__c = Trigger.Old[index].Status, New_value__c = ass.Status);
historyObjList.add(objAssetH);
//index++;
}
//when Stock is For Show Devices
if(ass.Show_Device__c != Trigger.Old[index].Show_Device__c){
Asset_History__c objAssetH = new Asset_History__c();
objAssetH.Asset__c = ass.id;
objAssetH.Old_Value__c = String.valueof(Trigger.Old[index].Show_Device__c);
objAssetH.New_value__c = string.valueof(ass.Show_Device__c);
objAssetH.Date_Changed__c = system.today();
objAssetH.Field_Changed__c = 'Show Device';
objAssetH.Changed_By__c = UserInfo.getUserId();
//Trigger Action Logic
// Asset_History__c historyObj = new Asset_History__c(Old_Value__c = Trigger.Old[index].Status, New_value__c = ass.Status);
historyObjList.add(objAssetH);
index++;
}
}
if(historyObjList.size() > 0){
insert historyObjList;
}
}
I have remove the queries which are inside the for loop:
If this solves your problem, kindly mark it as the best answer.
Thnaks,
Vatsal
All Answers
I have remove the queries which are inside the for loop:
If this solves your problem, kindly mark it as the best answer.
Thnaks,
Vatsal
Firstly thank you very much for your help, I am getting an error on line 12 where it is expecting a semi-colon.
Thanks,
Vatsal