Category Archives: Salesforce

Salesforce Schedulable Apex Test Class

Batch Class:

global class AccountBatch implements Database.Batchable<sObject> {
    global Database.QueryLocator start(Database.BatchableContext BC){
        String query = 'SELECT Id, Name, Industry FROM Account';                
        return Database.getQueryLocator(query);     
    global void execute(Database.BatchableContext BC, List<Account> accList){        
        for(Account acc : accList){          
            acc.Industry = 'Banking';        
        update accList;       
    global void finish(Database.BatchableContext BC) {

Schedulable Class:

global class AccountBatchScheduled implements Schedulable {
    global void execute(SchedulableContext sc) {
        AccountBatch objBatch = new AccountBatch(); 

Test Class:

private class AccountBatchScheduledTest{
    static testmethod void schedulerTest(){
        String cronexpression = '0 0 0 15 3 ? *';

        Account acc = new Account();
        acc.Name = 'Test Account';
        Insert acc;
        String jobId = System.schedule('ScheduleBatchApexClass',  cronexpression, new AccountBatchScheduled());
        CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, NextFireTime FROM CronTrigger WHERE id = :jobId];
        System.assertEquals(cronexpression, ct.CronExpression);
        System.assertEquals(0, ct.TimesTriggered);

Send Email From a Custom Button in Salesforce

Sample Code:


var mail = new sforce.SingleEmailMessage();

mail.targetObjectId = "{!Contact.Id}";
mail.toAddresses = "{!Contact.Email}";
mail.templateId = "00X28000000Utjy";
mail.whatId = "{!Case.Id}";

var result = sforce.connection.sendEmail([mail]);

if (result[0].success == 'true') {
    alert("Email sent successfully.");
} else {
    alert("Email sending failed.");

Note: Only User, Contact, Lead, or Person Account objects are allowed for targetObjectId.

If you need to refer specific attributes then download Partner WSDL and refer complexType SingleEmailMessage.

<?xml version="1.0" encoding="UTF-8"?>
<complexType name="SingleEmailMessage">
      <extension base="tns:Email">
            <element name="bccAddresses" minOccurs="0" maxOccurs="25" type="xsd:string" nillable="true" />
            <element name="ccAddresses" minOccurs="0" maxOccurs="25" type="xsd:string" nillable="true" />
            <element name="charset" type="xsd:string" nillable="true" />
            <element name="documentAttachments" minOccurs="0" maxOccurs="unbounded" type="tns:ID" />
            <element name="entityAttachments" minOccurs="0" maxOccurs="unbounded" type="tns:ID" />
            <element name="fileAttachments" minOccurs="0" maxOccurs="unbounded" type="tns:EmailFileAttachment" />
            <element name="htmlBody" type="xsd:string" nillable="true" />
            <element name="inReplyTo" minOccurs="0" type="xsd:string" nillable="true" />
            <element name="optOutPolicy" type="tns:SendEmailOptOutPolicy" nillable="true" />
            <element name="orgWideEmailAddressId" minOccurs="0" maxOccurs="1" type="tns:ID" nillable="true" />
            <element name="plainTextBody" type="xsd:string" nillable="true" />
            <element name="references" minOccurs="0" type="xsd:string" nillable="true" />
            <element name="targetObjectId" type="tns:ID" nillable="true" />
            <element name="templateId" type="tns:ID" nillable="true" />
            <element name="templateName" minOccurs="0" type="xsd:string" nillable="true" />
            <element name="toAddresses" minOccurs="0" maxOccurs="100" type="xsd:string" nillable="true" />
            <element name="treatBodiesAsTemplate" type="xsd:boolean" nillable="true" />
            <element name="treatTargetObjectAsRecipient" type="xsd:boolean" nillable="true" />
            <element name="whatId" type="tns:ID" nillable="true" />

Salesforce Apex Design Patterns

  • Singleton: Minimizing object instantiation for improved performance and to mitigate impact of governor limits.
  • Strategy: Defining a family of algorithms, enscapsulating each one and making them interchangeable and selectable at runtime.
  • Decorator: Extending the functionality of an sObject in Apex.
  • Facade: Simplifying the execution of classes with complex interfaces (e.g. web service callouts).
  • Composite: Treating a group of objects in a similar manner to a single instance of that object.
  • Bulk State Transition: Efficiently tracking the change of a field value in a trigger and executing functionality based on this change.