• Arief Gunawan
  • NEWBIE
  • 0 Points
  • Member since 2018

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 0
    Likes Given
  • 3
    Questions
  • 2
    Replies
Hi, Im new in salesforce programming and need some help, or reference..
I want to make a mail reminder that automatically send the email to my sales user every h+7 h+10 and h+15 created date.. how do I code the scheduler? using IF?

for example, I want this mail reminder on case object send automatically to case owner every h+7 h+10 and h+15 created date..
global class SchReminderActivitytoOwner implements Schedulable  {


public static String CRON_EXP = '0 0 0 3 9 ? 2022';
global void execute(SchedulableContext ctx) {

List<Messaging.SingleEmailMessage> listmail = new List<Messaging.SingleEmailMessage>();
EmailTemplate et = [SELECT Id, Subject, HtmlValue FROM EmailTemplate WHERE developerName = 'ET_Case_Reminder_Test22'];

String subject = 'Testing Reminder';                            
String htmlBody ='';


map<string, list<case>> mapOwnerEmailtoCaseList = new map<string, list<case>>();
map<string, user> mapEmailtoUser = new map<string, user>();
for(Case objCase : [SELECT Id, Owner.Email, Status, Owner.Name, CaseNumber, CreatedBy.Name,Subject, OwnerId, SLA_Case_Closed_Days__c  FROM Case where Status != 'Closed' AND Owner.Type = 'User']){

    if(mapOwnerEmailtoCaseList.containsKey(objCase.Owner.Email)) {
        List<Case> lstCase = mapOwnerEmailtoCaseList.get(objCase.Owner.Email);
        lstCase.add(objCase);
        mapOwnerEmailtoCaseList.put(objCase.Owner.Email, lstCase);
    } else {
        mapOwnerEmailtoCaseList.put(objCase.Owner.Email, new List<Case> { objCase });
    }
}               

for(User objUser : [SELECT Id, Name, ProfileId, Profile.Name, isActive,Email FROM User 
                    WHERE Email =: mapOwnerEmailtoCaseList.keyset() and IsActive = TRUE]){

    mapEmailtoUser.put(objUser.Email, objUser);
}        

map<string, string> mapOwnerEmailtoEmail = new map<string, string>();        
for(string strOwnerEmail : mapOwnerEmailtoCaseList.keyset()){

    User objUser = mapEmailtoUser.get(strOwnerEmail);
    htmlBody = '<h1>***JANGAN DIBALAS/DO NOT REPLY***</h1><br>Dear {!Case.OwnerFullName}, <br>Mohon untuk menindaklanjuti pengajuan interaksi berikut ini sebelum melewati waktu SLA :<br><br><table border="1" style="border-collapse: collapse"><tr><th><b>Ticket Number</b></th><th><b>Subject</b></th><th><b>SLA Handling Time Target</b></th><th><b>Created By</b></th><th><b>Detail</b></th></tr>';
    list<Case> lstCase = mapOwnerEmailtoCaseList.get(strOwnerEmail);
    for(Case cs : lstCase){

        String TicketNumber = String.Valueof(cs.CaseNumber); if(cs.CaseNumber == null){TicketNumber = '[Not Provided]';}
        String Sbj = cs.Subject; if(cs.Subject == null){Sbj = '[Not Provided]';}
        String HandlingTimeTarget = String.Valueof(cs.SLA_Case_Closed_Days__c); if(cs.SLA_Case_Closed_Days__c == null){TicketNumber = '[Not Provided]';}
        String Link = cs.Id; if(cs.Id == null){Link = '[Not Provided]';}
        String PIC = cs.CreatedBy.Name; if(cs.CreatedBy.Name == null){PIC = '[Not Provided]';}

        htmlBody = htmlBody.replace('{!Case.OwnerFullName}', cs.Owner.Name);
        /*htmlBody = htmlBody.replace('{!Case.Ticket_Number__c}', String.Valueof(cs.CaseNumber));
        //htmlBody = htmlBody.replace('{!Case.Subject}', cs.Subject);
        //htmlBody = htmlBody.replace('{!Case.SLA_Handling_Time_Target__c}', String.Valueof(cs.SLA_Case_Closed_Days__c)); */        
        htmlBody += '<tr><td>' + TicketNumber + '</td><td>' + Sbj + '</td><td>' + HandlingTimeTarget + '</td><td>' + PIC + '</td><td><a href="https://cs72.salesforce.com/' + Link + '">Click Here</a></td></tr>';

            mapOwnerEmailtoEmail.put(strOwnerEmail, htmlBody);

        mapOwnerEmailtoEmail.put(strOwnerEmail, htmlBody);

    }
}

for(string strOwnerEmail : mapOwnerEmailtoCaseList.keyset()){

    if(strOwnerEmail != null){
    system.debug('===strOwnerEmail===='+strOwnerEmail);
    string strHTML = mapOwnerEmailtoEmail.get(strOwnerEmail);
    strHTML += '</table><br><br><br><p>Terimakasih,</p><br><p>System Administrator</p>';
    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); 

    List<String> sendTo = new List<String>();
    sendTo.add(strOwnerEmail);
    //mail.setTargetObjectId(sendTo);
    mail.setToAddresses(sendTo);
    mail.setSenderDisplayName('Administrator');
    mail.setSubject(subject);
    mail.setHtmlBody(strHTML);

    mail.setSaveAsActivity(false);
    listmail.add(mail);

    }
    }
    Messaging.sendEmail(listmail);
}
 }

 
so there`s custom object named term_of_payment__c, has a look up to opportunity.. I want to make a trigger that will automatically insert term of payment on opportunity.. this is what i`ve tried so far.. sry im new on salesforce need some teaching
 
trigger autoAddTOP on Opportunity (after insert, after update) {
   
        for (Opportunity opp : Trigger.new) {
        //get opportunity data
        List<Opportunity> oppList = [SELECT Id, Interval__c, Amount, Quantity__c FROM Opportunity WHERE Id = :opp.Id];
        List<Term_of_Payment__c> terms = [SELECT Id FROM Term_of_Payment__c WHERE Opportunity__c = :opp.Id];        
        //get all products from opportunity
        List<OpportunityLineitem> products = [SELECT Id, Quantity, TotalPrice, Name, UnitPrice
                                              FROM OpportunityLineitem
                                              WHERE OpportunityId = :opp.Id];
        
        List<Term_of_Payment__c> termsToInsert = new List<Term_of_Payment__c>();
        Integer seq = 1;
          
        //loop the term of payment based on frequency each product
        for (Opportunity oppty : oppList) {
            Decimal freq = 0;
            if (oppty.Interval__c != null) {
                freq = Decimal.ValueOf(oppty.Interval__c);
            }

            if (freq > 0) {
                Decimal amountTod = (oppty.Amount / freq).setScale(2);
                
                for (Integer i=1; i<=freq; i++) {
                    if (i == 1 && seq == 1) {
                    Term_of_Payment__c newTOP1 = new Term_of_Payment__c();
                    newTOP1.Sequence__c = 1;
                    newTOP1.Amount__c = amountTOD;
                    newTOP1.Document_Date__c = date.parse('02/05/2018') + 30;
                    termsToInsert.add(newTOP1);
                    
                    }
                    seq++;
                    
                }
            } 
        } insert termsToInsert;
    }
 }

 
Hi.
im newbie here. My boss gave me a training task which is to make a trigger that prevent user skip the opportunity process.. i`ve done this using formula but how to use "CASE" in trigger? *sry for my english
Hi, Im new in salesforce programming and need some help, or reference..
I want to make a mail reminder that automatically send the email to my sales user every h+7 h+10 and h+15 created date.. how do I code the scheduler? using IF?

for example, I want this mail reminder on case object send automatically to case owner every h+7 h+10 and h+15 created date..
global class SchReminderActivitytoOwner implements Schedulable  {


public static String CRON_EXP = '0 0 0 3 9 ? 2022';
global void execute(SchedulableContext ctx) {

List<Messaging.SingleEmailMessage> listmail = new List<Messaging.SingleEmailMessage>();
EmailTemplate et = [SELECT Id, Subject, HtmlValue FROM EmailTemplate WHERE developerName = 'ET_Case_Reminder_Test22'];

String subject = 'Testing Reminder';                            
String htmlBody ='';


map<string, list<case>> mapOwnerEmailtoCaseList = new map<string, list<case>>();
map<string, user> mapEmailtoUser = new map<string, user>();
for(Case objCase : [SELECT Id, Owner.Email, Status, Owner.Name, CaseNumber, CreatedBy.Name,Subject, OwnerId, SLA_Case_Closed_Days__c  FROM Case where Status != 'Closed' AND Owner.Type = 'User']){

    if(mapOwnerEmailtoCaseList.containsKey(objCase.Owner.Email)) {
        List<Case> lstCase = mapOwnerEmailtoCaseList.get(objCase.Owner.Email);
        lstCase.add(objCase);
        mapOwnerEmailtoCaseList.put(objCase.Owner.Email, lstCase);
    } else {
        mapOwnerEmailtoCaseList.put(objCase.Owner.Email, new List<Case> { objCase });
    }
}               

for(User objUser : [SELECT Id, Name, ProfileId, Profile.Name, isActive,Email FROM User 
                    WHERE Email =: mapOwnerEmailtoCaseList.keyset() and IsActive = TRUE]){

    mapEmailtoUser.put(objUser.Email, objUser);
}        

map<string, string> mapOwnerEmailtoEmail = new map<string, string>();        
for(string strOwnerEmail : mapOwnerEmailtoCaseList.keyset()){

    User objUser = mapEmailtoUser.get(strOwnerEmail);
    htmlBody = '<h1>***JANGAN DIBALAS/DO NOT REPLY***</h1><br>Dear {!Case.OwnerFullName}, <br>Mohon untuk menindaklanjuti pengajuan interaksi berikut ini sebelum melewati waktu SLA :<br><br><table border="1" style="border-collapse: collapse"><tr><th><b>Ticket Number</b></th><th><b>Subject</b></th><th><b>SLA Handling Time Target</b></th><th><b>Created By</b></th><th><b>Detail</b></th></tr>';
    list<Case> lstCase = mapOwnerEmailtoCaseList.get(strOwnerEmail);
    for(Case cs : lstCase){

        String TicketNumber = String.Valueof(cs.CaseNumber); if(cs.CaseNumber == null){TicketNumber = '[Not Provided]';}
        String Sbj = cs.Subject; if(cs.Subject == null){Sbj = '[Not Provided]';}
        String HandlingTimeTarget = String.Valueof(cs.SLA_Case_Closed_Days__c); if(cs.SLA_Case_Closed_Days__c == null){TicketNumber = '[Not Provided]';}
        String Link = cs.Id; if(cs.Id == null){Link = '[Not Provided]';}
        String PIC = cs.CreatedBy.Name; if(cs.CreatedBy.Name == null){PIC = '[Not Provided]';}

        htmlBody = htmlBody.replace('{!Case.OwnerFullName}', cs.Owner.Name);
        /*htmlBody = htmlBody.replace('{!Case.Ticket_Number__c}', String.Valueof(cs.CaseNumber));
        //htmlBody = htmlBody.replace('{!Case.Subject}', cs.Subject);
        //htmlBody = htmlBody.replace('{!Case.SLA_Handling_Time_Target__c}', String.Valueof(cs.SLA_Case_Closed_Days__c)); */        
        htmlBody += '<tr><td>' + TicketNumber + '</td><td>' + Sbj + '</td><td>' + HandlingTimeTarget + '</td><td>' + PIC + '</td><td><a href="https://cs72.salesforce.com/' + Link + '">Click Here</a></td></tr>';

            mapOwnerEmailtoEmail.put(strOwnerEmail, htmlBody);

        mapOwnerEmailtoEmail.put(strOwnerEmail, htmlBody);

    }
}

for(string strOwnerEmail : mapOwnerEmailtoCaseList.keyset()){

    if(strOwnerEmail != null){
    system.debug('===strOwnerEmail===='+strOwnerEmail);
    string strHTML = mapOwnerEmailtoEmail.get(strOwnerEmail);
    strHTML += '</table><br><br><br><p>Terimakasih,</p><br><p>System Administrator</p>';
    Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); 

    List<String> sendTo = new List<String>();
    sendTo.add(strOwnerEmail);
    //mail.setTargetObjectId(sendTo);
    mail.setToAddresses(sendTo);
    mail.setSenderDisplayName('Administrator');
    mail.setSubject(subject);
    mail.setHtmlBody(strHTML);

    mail.setSaveAsActivity(false);
    listmail.add(mail);

    }
    }
    Messaging.sendEmail(listmail);
}
 }

 
so there`s custom object named term_of_payment__c, has a look up to opportunity.. I want to make a trigger that will automatically insert term of payment on opportunity.. this is what i`ve tried so far.. sry im new on salesforce need some teaching
 
trigger autoAddTOP on Opportunity (after insert, after update) {
   
        for (Opportunity opp : Trigger.new) {
        //get opportunity data
        List<Opportunity> oppList = [SELECT Id, Interval__c, Amount, Quantity__c FROM Opportunity WHERE Id = :opp.Id];
        List<Term_of_Payment__c> terms = [SELECT Id FROM Term_of_Payment__c WHERE Opportunity__c = :opp.Id];        
        //get all products from opportunity
        List<OpportunityLineitem> products = [SELECT Id, Quantity, TotalPrice, Name, UnitPrice
                                              FROM OpportunityLineitem
                                              WHERE OpportunityId = :opp.Id];
        
        List<Term_of_Payment__c> termsToInsert = new List<Term_of_Payment__c>();
        Integer seq = 1;
          
        //loop the term of payment based on frequency each product
        for (Opportunity oppty : oppList) {
            Decimal freq = 0;
            if (oppty.Interval__c != null) {
                freq = Decimal.ValueOf(oppty.Interval__c);
            }

            if (freq > 0) {
                Decimal amountTod = (oppty.Amount / freq).setScale(2);
                
                for (Integer i=1; i<=freq; i++) {
                    if (i == 1 && seq == 1) {
                    Term_of_Payment__c newTOP1 = new Term_of_Payment__c();
                    newTOP1.Sequence__c = 1;
                    newTOP1.Amount__c = amountTOD;
                    newTOP1.Document_Date__c = date.parse('02/05/2018') + 30;
                    termsToInsert.add(newTOP1);
                    
                    }
                    seq++;
                    
                }
            } 
        } insert termsToInsert;
    }
 }