
Learning Objectives
After completing this unit, you’ll be able to:
Define the Salesforce platform.
Describe the kinds of apps you can build with the platform.
Install the DreamHouse app.
Learning Objectives
After completing this unit, you’ll be able to:
Describe the benefits of the metadata-driven development model.
Define and give examples of the no-code and low-code development approaches.
After completing this unit, you’ll be able to:
Identify the benefits of Lightning components.
Describe how Visualforce is used in Lightning Experience.
Outline the ways Apex is used to support Lightning components and Visualforce.
Learning Objectives
After completing this unit, you’ll be able to:
List the Salesforce APIs.
Explain how Heroku and Salesforce are related.
Identify ways Salesforce interacts with IoT and bots.
YOUR CHALLENGE
Create an Apex class with a method that returns an array (or list) of strings.
Create an Apex class with a method that returns an array (or list) of formatted strings ('Test 0', 'Test 1', ...). The length of the array is determined by an integer parameter.
The Apex class must be called StringArrayTest and be in the public scope
The Apex class must have a public static method called generateStringArray
The generateStringArray method must return an array (or list) of strings
The method must accept an incoming Integer as a parameter, which will be used to determine the number of returned strings
The method must return a string value in the format Test n where n is the index of the current string in the array
Learning Objectives
After completing this unit, you'll be able to:
Use DML to insert, update, and delete records.
Perform DML statements in bulk.
Use upsert to either insert or update a record.
Catch a DML Exception.
Use a Database method to insert new records with the partial success option and process the results.
Know when to use DML statements and when to use Database methods.
Perform DML operations on related records.
YOUR CHALLENGE
Create a method for inserting accounts.
To pass this challenge, create an Apex class that inserts a new account named after an incoming parameter. If the account is successfully inserted, the method should return the account record. If a DML exception occurs, the method should return null.
The Apex class must be called AccountHandler and be in the public scope
The Apex class must have a public static method called insertNewAccount
The method must accept an incoming string as a parameter, which will be used to create the Account name
The method must insert the account into the system and then return the record
The method must also accept an empty string, catch the failed DML and then return null
Learning Objectives
After completing this unit, you'll be able to:
Write SOQL queries in Apex.
Execute SOQL queries by using the Query Editor in the Developer Console.
Execute SOQL queries embedded in Apex by using Anonymous Apex.
Query related records.
Learning Objectives
After completing this unit, you'll be able to:
Write SOQL queries in Apex.
Execute SOQL queries by using the Query Editor in the Developer Console.
Execute SOQL queries embedded in Apex by using Anonymous Apex.
Query related records.
YOUR CHALLENGE
Create an Apex class that returns contacts based on incoming parameters.
For this challenge, you will need to create a class that has a method accepting two strings. The method searches for contacts that have a last name matching the first string and a mailing postal code matching the second. It gets the ID and Name of those contacts and returns them.
The Apex class must be called ContactSearch and be in the public scope
The Apex class must have a public static method called searchForContacts
The method must accept two incoming strings as parameters
The method should then find any contact that has a last name matching the first string, and mailing postal code (API name: MailingPostalCode) matching the second string
The method should finally return a list of Contact records of type List that includes the ID and Name fields
Learning Objectives
After completing this unit, you'll be able to:
Describe the differences between SOSL and SOQL.
Search for fields across multiple objects using SOSL queries.
Execute SOSL queries by using the Query Editor in the Developer Console.
YOUR CHALLENGE
Create an Apex class that returns both contacts and leads based on a parameter.
To pass this challenge, create an Apex class that returns both contacts and leads that have first or last name matching the incoming parameter.
The Apex class must be called ContactAndLeadSearch and be in the public scope
The Apex class must have a public static method called searchContactsAndLeads
The method must accept an incoming string as a parameter
The method should then find any contact or lead that matches the string as part of either the first or last name
The method should finally use a return type of List<List< SObject>>
NOTE: Because SOSL indexes data for searching, you must create a Contact record and Lead record before checking this challenge. Both records must have the last name Smith. The challenge uses these records for the SOSL search
Learning Objectives
After completing this unit, you'll be able to:
Write a trigger for a Salesforce object.
Use trigger context variables.
Call a class method from a trigger.
Use the sObject addError() method in a trigger to restrict save operations.
YOUR CHALLENGE
Create an Apex trigger for Account that matches Shipping Address Postal Code with Billing Address Postal Code based on a custom field.
For this challenge, you need to create a trigger that, before insert or update, checks for a checkbox, and if the checkbox field is true, sets the Shipping Postal Code (whose API name is ShippingPostalCode) to be the same as the Billing Postal Code (BillingPostalCode).
The Apex trigger must be called 'AccountAddressTrigger'.
The Account object will need a new custom checkbox that should have the Field Label 'Match Billing Address' and Field Name of 'Match_Billing_Address'. The resulting API Name should be 'Match_Billing_Address__c'.
With 'AccountAddressTrigger' active, if an Account has a Billing Postal Code and 'Match_Billing_Address__c' is true, the record should have the Shipping Postal Code set to match on insert or update.
Learning Objectives
After completing this unit, you'll be able to:
Write triggers that operate on collections of sObjects.
Write triggers that perform efficient SOQL and DML operations.
YOUR CHALLENGE
Create an Apex trigger for Opportunity that adds a task to any opportunity set to 'Closed Won'.
To complete this challenge, you need to add a trigger for Opportunity. The trigger will add a task to any opportunity inserted or updated with the stage of 'Closed Won'. The task's subject must be 'Follow Up Test Task'.
The Apex trigger must be called 'ClosedOpportunityTrigger'
With 'ClosedOpportunityTrigger' active, if an opportunity is inserted or updated with a stage of 'Closed Won', it will have a task created with the subject 'Follow Up Test Task'.
To associate the task with the opportunity, fill the 'WhatId' field with the opportunity ID.
This challenge specifically tests 200 records in one operation.
Learning Objectives
After completing this unit, you’ll be able to:
Describe the key benefits of Apex unit tests.
Define a class with test methods.
Execute all test methods in a class and inspect failures.
Create and execute a suite of test classes.
Learning Objectives
After completing this unit, you’ll be able to:
Describe the key benefits of Apex unit tests.
Define a class with test methods.
Execute all test methods in a class and inspect failures.
Create and execute a suite of test classes.
Learning Objectives
After completing this unit, you’ll be able to:
Describe the key benefits of Apex unit tests.
Define a class with test methods.
Execute all test methods in a class and inspect failures.
Create and execute a suite of test classes.
YOUR CHALLENGE
Create a unit test for a simple Apex class.
Install a simple Apex class, write unit tests that achieve 100% code coverage for the class, and run your Apex tests.
The Apex class to test is called 'VerifyDate', and the code is available here. Copy and paste this class into your Developer Edition via the Developer Console.
'VerifyDate' is a class which tests if a date is within a proper range, and if not will return a date that occurs at the end of the month within the range.
The unit tests must be in a separate test class called 'TestVerifyDate'.
The unit tests must cover scenarios for all lines of code included in the Apex class, resulting in 100% code coverage.
Run your test class at least once (via 'Run All' tests the Developer Console) before attempting to verify this challenge.
Learning Objectives
After completing this unit, you'll be able to:
Write a test for a trigger that fires on a single record operation.
Execute all test methods in a class.
YOUR CHALLENGE
Create a unit test for a simple Apex trigger.
Install a simple Apex trigger, write unit tests that achieves 100% code coverage for the trigger, and run your Apex tests.
The Apex trigger to test is called 'RestrictContactByName', and the code is available here. Copy and paste this trigger into your Developer Edition via the Developer Console.
'RestrictContactByName' is a trigger which blocks inserts and updates to any contact with a last name of 'INVALIDNAME'.
The unit tests must be in a separate Apex class called 'TestRestrictContactByName'.
The unit tests must cover scenarios for all lines of code included in the Apex trigger, resulting in 100% code coverage.
Run your test class at least once (via 'Run All' tests the Developer Console) before attempting to verify this challenge.
Learning Objectives
After completing this unit, you'll be able to:
Create a test utility class.
Use a test utility method to set up test data for various test cases.
Execute all test methods in a class.
Learning Objectives
After completing this unit, you'll be able to:
Create a test utility class.
Use a test utility method to set up test data for various test cases.
Execute all test methods in a class.
Learning Objectives
After completing this unit, you’ll be able to:
Describe what Visualforce is and what it’s used for.
List three or more places where Visualforce can be used.
Learning Objectives
After completing this unit, you’ll be able to:
Explain what a Visualforce page is and describe its key attributes.
List and open existing Visualforce pages in your organization.
Create and edit a Visualforce page using the Developer Console.
Identify, add, and customize Visualforce tags and attributes in the editor.
YOUR CHALLENGE
Create a simple Visualforce page that displays an image
Create a Visualforce page without the standard Salesforce header and display an image using the Visualforce image component.
Challenge Requirements
The page must be named DisplayImage
It must NOT display the standard Salesforce header
It must use a Visualforce apex:image component to display this image - https://developer.salesforce.com/files/salesforce-developer-network-logo.png
Learning Objectives
After completing this unit, you’ll be able to:
Explain what a Visualforce expression is and describe where it’s used.
List three or more global variables available for use in Visualforce expressions.
Add a Visualforce expression to a Visualforce page.
Use a function in a Visualforce expression.
Learning Objectives
After completing this unit, you’ll be able to:
Explain what a Visualforce standard controller is and describe its key attributes.
Add a standard controller to a Visualforce page.
Display data from a record retrieved by a page’s standard controller.
Write an expression that uses dot notation to access fields on a related record.
YOUR CHALLENGE
Create a Visualforce page which shows a basic Contact record
Using the Contact standard controller, create a Visualforce page which displays a Contact's First Name, Last Name and the Email address of the Contact's Owner.
Challenge Requirements
The page must be named ContactView
It must reference the Contact standard controller
It should include three bound variables that use the standard controller to display the following Contact record information:
First Name
Last Name
Owner Email
Learning Objectives
After completing this unit, you’ll be able to:
Explain the difference between coarse-grained and fine-grained components, and why you might want to use one or the other.
Explain what an iteration component is and what it’s used for.
Use relevant coarse-grained components to display record details and related lists.
Use relevant fine-grained components to replace and customize coarse-grained components.
YOUR CHALLENGE
Create a Visualforce page which displays a variety of output fields
Create a page which displays a subset of Opportunity fields using apex:outputField components. Bind the Name, Amount, Close Date and Account Name fields to the apex:outputField components.
Challenge Requirements
The page must be named OppView
It must reference the Opportunity standard controller
It must have four apex:outputField components bound to the following Opportunity fields:
Opportunity Name
Amount
Close Date
Account Name of the Opportunity
Learning Objectives
After completing this unit, you’ll be able to:
Explain the essential requirements for a Visualforce form.
Distinguish Visualforce form elements using the platform visual style from those that don’t.
List four or more standard input form tags.
Create a Visualforce form to edit and save a record.
YOUR CHALLENGE
Create a Visualforce form which inserts a basic Contact record
Using the Visualforce apex:form component, create a page which will insert a Contact record based on First Name, Last Name and Email. After submitting the form, the user should be redirected to detail page of the new Contact record.
Challenge Requirements
The page must be named CreateContact
It must reference the Contact standard controller
It must use a Visualforce apex:form component
It must have three apex:inputField components bound to the following Contact fields:
First Name
Last Name
It must have an apex:commandButton component that uses the save method from the standard controller
Learning Objectives
After completing this unit, you’ll be able to:
Explain what a Visualforce standard list controller is and how it's different from a standard (record) controller.
List three actions provided by the standard list controller that are different from a standard controller.
Display a list of records using a standard list controller on a Visualforce page.
Define pagination, and be able to add it to a Visualforce page.
YOUR CHALLENGE
Create a Visualforce page which shows a list of Accounts linked to their record pages
Using a Standard List Controller, create a Visualforce page which displays a list of Accounts with links to their respective record detail pages.
Challenge Requirements
The page must be named AccountList
It must reference the Account standard controller
It must have a recordSetVar attribute equal to accounts
It must have a Visualforce apex:repeat component, with the following:
Use the var attribute set to a
Use the <li> HTML list tag
Use the apex:outputLink component to link to the respective record detail page
HINT: Record detail pages can be reached by placing a record ID at the root of the URL (e.g. <record id>)
Learning Objectives
After completing this unit, you’ll be able to:
Explain what static resources are and why to use them.
Explain the difference between individual and zipped static resources.
Create and upload a static resource.
Add static resources to a Visualforce page.
YOUR CHALLENGE
Use a static resource to display an image on a Visualforce Page
Upload a specified zip file as a static resource. The zip will have directories with images and you have to display a specific image on a Visualforce page.
Challenge Requirements
The page must be named ShowImage
This file must be uploaded as a Static Resource named vfimagetest
The page must have a Visualforce apex:image tag that displays the kitten1.jpg image from the cats directory of the static resource
Learning Objectives
After completing this unit, you’ll be able to:
Explain what a custom controller is and describe its key attributes.
Create a custom controller class.
Use a custom controller on a Visualforce page.
YOUR CHALLENGE
Create a Visualforce page displaying new cases
Create a Visualforce page that uses a custom controller to display a list of cases with the status of 'New'.
Challenge Requirements
The page must be named NewCaseList
The custom controller Apex class must be named NewCaseListController and include the following:
A publicly scoped method named getNewCases
Use the return type of List<Case>
Return a list of case records that includes the ID and CaseNumber fields
Filter the results returned to only have a status of New
The NewCaseList Visualforce page must use an apex:repeat component, which is:
Bound to newCases
Refers to the var attribute as case
With the component tags, bind an apex:outputLink component to the ID of the case. This will cause the the page to direct the user to the detail page of the respective case record.
Learning Objectives
After completing this unit, you’ll be able to:
Name several uses for the Developer Console.
Decide whether to use the Developer Console or a different developer tool.
Set up workspaces to organize your tabs.
Learning Objectives
After completing this unit, you’ll be able to:
Create an Apex class.
Execute Apex code.
Create a Lightning component.
Create a Visualforce page.
Create a Visualforce Page
Create a Visualforce page that your engineers can use to indicate that they’re at their stations and ready for takeoff. For now, just create the Visualforce page. Later, when you have some downtime in deep space, you can add an Apex controller and some more page components.
Create a Visualforce page named StationCheck.
Copy the code for the FlightSystemsChecklist page and paste it into your new StationCheck page.
Change the contents of the heading (<h1>) from "Checklist" to "Station Status".
Change the apex:form id from "engineReadinessChecklist" to "stationReadinessChecklist".
Change the pageBlock title from "Flight Systems Checklist" to "Station Readiness Checklist".
Delete all of the code from the line that contains "<!--First Section-->" to the last line that contains "</apex:pageBlockSection>".
Save your Visualforce page, and then click Preview and ensure that the page loads.
Learning Objectives
After completing this unit, you’ll be able to:
View debug logs in the Log Inspector or a text editor.
Set various log levels for your debug logs.
Manage and switch perspectives using the Log Inspector.
Learning Objectives
After completing this unit, you’ll be able to:
Set up checkpoints in your Apex code.
Analyze the objects in memory using the Checkpoint Inspector.
Set Checkpoints to Find Errors in Your Code
Set a checkpoint in the EmailMissionSpecialist class. Then, execute the class using a valid email address, and analyze the objects logged at the checkpoint. Make sure that line 12 of your EmailMissionSpecialist Apex class still contains this code:
Messaging.SendEmailResult[] results = Messaging.sendEmail(
If line 12 doesn't contain that code, find the original version of the EmailMissionSpecialist class in Unit 2: Navigate and Edit Source Code, and replace the contents of EmailMissionSpecialist.apxc with that version. Then, set a checkpoint on line 12 and execute the EmailMissionSpecialist class using the Execute Anonymous statement that you used earlier in this unit.
Set a checkpoint on line 12 of the EmailMissionSpecialist class.
Use Execute Anonymous to execute the EmailMissionSpecialist Apex class, using your email address.
Observe the checkpoint results and see the values of the objects in memory.
Learning Objectives
After completing this unit, you’ll be able to:
Execute a SOQL query using the Query Editor or in Apex code.
Execute a SOSL search using the Query Editor or in Apex code.
YOUR CHALLENGE
Write an Inline SOSL Search to Return Database Values
Now that you’ve successfully avoided collision with asteroid 2014 QO441, contact Mission Control at the Neptune Space Station to get cleared for landing so you can take a well-deserved break. Write an inline SOSL search to find and return the contact details of the Mission Specialist at the Neptune Space Station.
Using Execute Anonymous, like we did when we inserted records for the Control Engineers, insert the contact details for the Mission Specialist on Neptune.
Contact thisContact = new Contact( Firstname='Brian', Lastname='Dent', Phone='(619)852-4569', Department='Mission Control', Title='Mission Specialist - Neptune', Email='briandent@trailhead.com');
insert thisContact;
Search for the inserted record with an inline SOSL search, using Execute Anonymous. Instead of finding 'Crisis', like we did when we used Execute Anonymous to look for the Control Engineers' records, search for 'Mission Control'. Use the System.debug() method to display the contact's "lastname, firstname" in your debug log .
Make sure that you see the returned records in the debug log.
Learning Objectives
In this project, you’ll:
Learn what an integrated development environment (IDE) is.
Learn how to locally develop Salesforce code.
Use Salesforce Extensions for Visual Studio Code and Salesforce CLI to communicate with your org.
Learning Objectives
After completing this unit, you’ll be able to:
Explain when to create a customized search solution.
Describe the difference between SOSL and SOQL.
Identify which API protocols are available for search.
You are required to have successfully completed the following Udemy courses before you take this one:
Salesforce Trailhead 2021 - Admin Beginner
Salesforce Trailhead 2021 - Admin Intermediate
The Developer Beginner trail has modules that are covered in the two Admin courses above. Without completing the two courses above, your developer beginner trail will not be complete.
If you have completed the two Admin courses above, then you're ready to rock'n roll! It's development time!
This course is the starting ground of Salesforce Development.
My aim and final goal is to equip and guide you so that you are able to develop your own Salesforce Apps that are App Exchange ready.
This course is only the starting point for your salesforce development adventure. The final destination is for you to be able to distribute your own apps at the Salesforce App Exchange.
Hopefully make some serious money making apps that will change your world and the world around you.
To accomplish this goal, you and I will need to go through a few trails together, but, in the end, it's totally worth it.
This is the first trail.
Developer Beginner
Platform Development Basics
Meet the tools and technologies that power development on the Salesforce platform.
Get Started with Platform Development~15 mins
Develop Without Code~15 mins
Code with Salesforce Languages~20 mins
Extend the Salesforce Platform~15 mins
Data Modeling
Give your data structure with objects, fields, and relationships.
Understand Custom & Standard Objects~15 mins
Create Object Relationships~15 mins
Work with Schema Builder~15 mins
Data Management
Learn how to import and export data in Salesforce.
Import Data~30 mins
Export Data~10 mins
Data Security
Control access to data using point-and-click security tools.
Overview of Data Security~10 mins
Control Access to the Org~15 mins
Control Access to Objects~25 mins
Control Access to Fields~15 mins
Control Access to Records~15 mins
Create a Role Hierarchy~15 mins
Define Sharing Rules~15 mins
Formulas and Validations
Tailor your apps without writing code by using point-and-click logic.
Use Formula Fields~15 mins
Implement Roll-Up Summary Fields~15 mins
Create Validation Rules~15 mins
Salesforce Flow
Automate processes for every app, experience, and portal with declarative tools.
Choose the Right Automation Tool~10 mins
Automate Simple Business Processes with Process Builder~30 mins
Guide Users Through Your Business Processes with Flow Builder~30 mins
Combine the Power of Process Builder and Flow Builder~25 mins
Customize How Records Get Approved with Approvals~30 mins
Salesforce Mobile App Customization
Customize your mobile experience with the Salesforce app.
Get Started with the Salesforce Mobile App~15 mins
Customize Navigation~15 mins
Create Global Quick Actions~25 mins
Create Object-Specific Quick Actions~25 mins
Customize Compact Layouts~15 mins
Apex Basics & Database
Use Apex to add business logic and manipulate your data in Salesforce.
Get Started with Apex~45 mins
Use sObjects~15 mins
Manipulate Records with DML~45 mins
Write SOQL Queries~30 mins
Write SOSL Queries~30 mins
Apex Triggers
Write Apex triggers to perform custom database actions.
Get Started with Apex Triggers~30 mins
Bulk Apex Triggers~30 mins
Apex Testing
Write robust code by executing Apex unit tests.
Get Started with Apex Unit Tests~15 mins
Test Apex Triggers~15 mins
Create Test Data for Apex Tests~15 mins
Visualforce Basics
Use Visualforce to build custom user interfaces for mobile and web apps.
Get Started with Visualforce~10 mins
Create & Edit Visualforce Pages~10 mins
Use Simple Variables and Formulas~15 mins
Use Standard Controllers~15 mins
Display Records, Fields, and Tables~15 mins
Input Data Using Forms~20 mins
Use Standard List Controllers~20 mins
Use Static Resources~20 mins
Create & Use Custom Controllers~20 mins
hideHide 9 Units
Developer Console Basics
Get to know the Salesforce web-based integrated development environment (IDE).
Get Started with the Developer Console~15 mins
Navigate and Edit Source Code~20 mins
Generate and Analyze Logs~20 mins
Inspect Objects at Checkpoints~15 mins
Execute SOQL and SOSL Queries~15 mins
Quick Start: Visual Studio Code for Salesforce Development
Set up and integrate the recommended IDE for Salesforce development.
Get Started with Visual Studio Code~5 mins
Make Visual Studio Code Salesforce Ready~10 mins
Use Visual Studio Code for Salesforce Development~10 mins
Search Solution Basics
Learn how search works, navigate use cases, and optimize search results.
Choose the Right Search Solution~15 mins
Build Search for Common Use Cases~15 mins
Optimize Search Results~15 mins
Are you ready to explore a whole new world? New challenges? New opportunities? New heights?
Here we goooooooooooo!