You need to sign in to do that
Don't have an account?
how can i call this class from Apex trigger..?
i have written a class for Case merge functionality , But the problem is when ever i call this class from trigger it shows error .... can anybody help me how can i call this class from trigger....? and this this is my class please send me how can i call this class from trigger..
public with sharing class casemerge{
public void mergecases(Case dupcase,Id mastercaseid){
System.debug('*************dupcase records**************'+dupcase);
//--------Duplicate all attachments
List<Attachment> AttachmentsToBeCreated = new List<Attachment>();
for (Attachment a : [SELECT Name, IsPrivate, Description, Body FROM Attachment WHERE ParentId = :dupCase.Id AND IsDeleted=false]){
AttachmentsToBeCreated.add(new Attachment(ParentId = masterCaseId,Name = a.Name,IsPrivate = a.IsPrivate,Description = a.Description,Body = a.Body));
}
//-------Duplicate all comments
List<CaseComment> CommentsToBeCreated = new List<CaseComment>();
for (CaseComment cc : [SELECT IsPublished, CreatedDate, CommentBody FROM CaseComment WHERE ParentId = :dupCase.Id AND IsDeleted=false]) {
CommentsToBeCreated.add(new CaseComment(ParentId = masterCaseId,IsPublished = cc.IsPublished,CommentBody = 'This case comment was originally created on ' + cc.CreatedDate +' and was merged into this case.\r\r' + cc.CommentBody));
}
if (!CommentsToBeCreated.IsEmpty())
insert CommentsToBeCreated;
//-------Change the whatid for all tasks
List<Task> allTasks = [SELECT Id, WhatId FROM Task WHERE WhatId = :dupCase.Id AND IsDeleted=false];
if (!allTasks.isEmpty()) {
for (integer i = 0; i < allTasks.size(); i++)
allTasks[i].WhatId = masterCaseId;
update allTasks;
}
//-----Change the whatid for all Events
List<Event> allEvents = [SELECT Id, WhatId FROM Event WHERE WhatId = :dupCase.Id AND IsDeleted=false];
if (!allEvents.isEmpty()) {
for (integer i = 0; i < allEvents.size(); i++)
allEvents[i].WhatId = masterCaseId;
update allEvents;
}
// duplicate all the attachments (of the case and related emails)
if (!AttachmentsToBeCreated.IsEmpty())
insert AttachmentsToBeCreated;
// delete the original case and all it's related items
delete dupCase;
}
}
@Ganeeesh,
What is the error that you are getting? Create an instance of that class and invoke it.
the error is "System.SObjectException: DML statment cannot operate on trigger.new or trigger.old: Class.casemerge.mergecases: line 38, column 1"
And my trigger is ...................
trigger trgoncase2 on Case (after insert) {
Case cs=trigger.new[0];
System.debug('************this is new case****************'+cs);
list<Case> lstcs=[select id,casenumber from Case where accountid =: cs.accountid AND contactid =: cs.contactid AND casenumber !=: cs.casenumber];
for(Case c:lstcs){
System.debug('**********existing case*************'+c);
Casemerge cm=new Casemerge();
cm.mergecases(cs,c.id);
}
}
how can i call that class from this trigger can you please tell me...........
@Ganeeesh,
Apex does not allow you to perform DML on the records being triggered through the trigger itself. You can use @future method to solve this. Once your trigger is complete, this class will be called
how can i use @future can you please show me once..? is this mention boefore the method rignt..?
If i use @future annotation it show an error at a method parameter and this is my method "public static void mergerecords(Case dupcase,id masterrecordid)" in this method it shows error like "un supported parameter type sobject: case". i got this error how can i rectify this error.....? can u please explain me.......
@Ganeeesh,
Find details about future annotation here
then how can i calll that method from trigger ........... please tell me...
Hi Ganeeesh,
Just Simple ,
trigger trgoncase2 on Case (after insert) {
CaseInserUpdate.MergeCases(trigger.new);
}
class CaseInserUpdate
{
public static void MergeCases(List<Case> lstCase)
{
//Implementaion
}
}
If you face any problem feel free to contact me.
it is also throws this type of Error "Error: Compile Error: Unsupported parameter type LIST<Case> at line 3 column 20"