Salesforce Task Manager Project Report
Salesforce Task Manager Project Report
of Computer Applications
Batch (2020-2022)
Submitted by
June -2022
CANDIDATE’S DECLARATION
This work has not been submitted elsewhere for the award of a
degree/diploma/certificate.
HOD
Acknowledgement
First and foremost, my sincere and heartfelt appreciation to my mentor for taking time
out of their hectic schedule to assist me in finishing the assignment.
Although the task was not part of their typical duties, their aid was crucial in assisting
me in completing everything in a timely way.
Their knowledge and passion were much appreciated during a trying moment for
everyone involved!
We are grateful for their efforts and also for sharing some of your schedule with
the project report.
References 61
List of Figures
Cloud computing is usually defined as storing and managing the data over the cloud, rather
than a local server. Cloud computing is easy to understand. All applications are developed and
run in the web browser. Using the internet connection, users and developers will have access to
whole applications thus eliminating the complexity and overhead of the maintain environment .
Unlike traditional business applications which are complicated, expensive and need experts to
install, run, update and secure, cloud computing can be accessed anywhere with an online
connection. In traditional systems, the entire infrastructure must work together. For such type
of seamless interaction, and for the smooth run of the system, a constant maintenance is always
required. With cloud computing, there is no necessity to invest money in acquiring and
supporting hardware and software infrastructure, thus decreasing the potential cost for users
and developers.
The main impact of cloud computing is on the responsiveness of IT systems. With the cloud
computing environment, we can add users and developers instantly, and the applications can be
deployed rapidly into the cloud which reduces the user request response time. As the
complexity of the of the internal systems is removed, the organization can speed up the entire
IT process .
The end user can access the application which is developed by the provider on a cloud
framework. The developed applications are available from different customer devices through
interfaces like a web program or a program interface. Cloud infrastructure, servers, networks,
storage and operating systems cannot be managed or controlled by the customer .
Cloud application services represent the increasing cloud market. Software as a service utilizes
the internet to deploy the applications overseen by the vendor and whose interface will be able
to access on the customer side. Many of the applications developed using SaaS will run in a
web browser by using some plugins. There will not be need of any download or
establishments.
The major applications which are developed using SaaS are healthcare related applications,
client relationship administrations, incorporate email, and collaboration. Some of the costly
ventures which are not able to considered as software vendors started using SaaS to get the
upper hand and gain income.
The Client can deploy onto the cloud infrastructure developed by the customers with the help
of libraries, tools, services and the programming languages which are supported by the client.
The underlying infrastructure of cloud and storage, servers, network or operating systems
cannot be managed or controlled by the Customer.
Cloud platform services can be utilized for applications and their advancements when cloud
segments are given to programming. Developers can be able to pick the structure using PaaS
where the applications can be expanded to create or modify. The testing and deployment of
applications become easy and fast if the PaaS is used .
Enterprise PaaS gives a self-service portal to programming engineers for overseeing computing
infrastructure from information technology operations. Scalability, Software as a service
enablement and multi-occupancy can be acquired by the applications using PaaS. The coding
fundamental measure will be decreased for the enterprises using PaaS and the application will
be converted to a hybrid model .
1.13 Infrastructure as a Service (IaaS)
The customer can arrange systems, storage, processing and other essential computing resources
in which the client can run and send arbitrary software like applications and operating systems.
The hidden cloud infrastructure is not controlled or overseen by the customer but rather he can
control over operating systems, storage, servers and network
Cloud infrastructure services, referred to as IaaS, are models beneficial for overseeing and
observing remote data center frameworks such as organizing, processing, stockpiling and
networking services. With the help of IaaS, clients will get utility billing and power benefits
Since Salesforce coordinates well with all the platforms and supports all major OS and mobile
devices, it is anything but difficult to utilize Salesforce outside of the workplace, thus helps to
improve productivity.
Figure 4: Multi-Tenancy
2.3 Salesforce Multiple View Controller (MVC)
MVC is a design pattern which separates business logic from interface logic i.e. it separates the
graphical interface displayed to the user with the code that manages the user actions.
In Salesforce, using SFDC visual force, we can write VIEW pages which are very similar to
java servlets page(JSP) pages. Each visualforce(VF) page is corelated with a controller. The
controller and model classes can be written using Apex language. In SFDC, controller part
comprises of workflows, triggers, Apex classes and model layer comprises of fields,
relationships, objects and View layer comprises of Tabs, page layouts, VF pages.
SFDC MVC mainly consists of three modules namely Model, View and Controller.
1) Model: Here we represent what schema and data the Salesforce used for the system
representation and Sobjects are a model, as every entity is mapped to some subject in
Salesforce.
2) View: Here we represent how data and schema and visual force are used to present
data to users.
3) Controller: Here we use controllers and interface actions to perform actions when the
user interacts with visual force
With Force.com, we can run business in the mobile using the Salesforce1 app. We can build
and optimize the apps for mobile using HTML 5 and UI framework and it supports all devices
with just one code base . Salesforce1 downloadable app can be installed from the App store or
Google play on a mobile device.
Due to its ease of access, ease of use, minimum licensing/proprietary issues, and per user cost,
Salesforce becomes a power system from small to large scale industries.
1) Apex
Integrated
● Apex provides built-in support for common Lightning Platform idioms, including:
● Data manipulation language (DML) calls, such as INSERT, UPDATE, and DELETE, that
include built-in DmlException handling
● Inline Salesforce Object Query Language (SOQL) and Salesforce Object Search Language (SOSL)
queries that return lists of sObject records
● Custom public API calls that can be built from stored Apex methods
● Warnings and errors issued when a user tries to edit or delete a custom object or field that is
referenced by Apex
Easy to use
Apex is based on familiar Java idioms, such as variable and expression syntax, block and
conditional statement syntax, loop syntax, object and array notation. Where Apex introduces
new elements, it uses syntax and semantics that are easy to understand and encourage
efficient use of the Lightning Platform. Therefore, Apex produces code that is both succinct
and easy to write.
Data focused
Apex is designed to thread together multiple query and DML statements into a single unit of
work on the Salesforce server. Developers use database stored procedures to thread together
multiple transaction statements on a database server in a similar way. Like other database
stored procedures, Apex does not attempt to provide general support for rendering elements
in the user interface.
Rigorous
Apex is a strongly typed language that uses direct references to schema objects such as object
and field names. It fails quickly at compile time if any references are invalid. It stores all
custom field, object, and class dependencies in metadata to ensure that they are not deleted
while required by active Apex code.
Hosted
Multitenant aware
Like the rest of the Lightning Platform, Apex runs in a multitenant environment. So, the
Apex runtime engine is designed to guard closely against runaway code, preventing it from
monopolizing shared resources. Any code that violates limits fails with easy-to-understand
error messages.
Easy to test
Apex provides built-in support for unit test creation and execution. It includes test results that
indicate how much code is covered, and which parts of your code could be more efficient.
Salesforce ensures that all custom Apex code works as expected by executing all unit tests
prior to any platform upgrades.
2) Aura
Lightning Component is a framework to build Salesforce applications faster. If you are using
Salesforce1, you already experiencing the Lightning. It is based on an open source project called
Aura framework. Aura is a UI framework for developing web applications for mobile and
desktop devices.
Before get started, it’s better to understand why we need the Lightning components? A
Lightning Component is nothing but bundles of resources and it can be shared across multiple
projects and it results in improved productivity. Lightning Components are classified as
Standard Components, Custom Components, and AppExchange Components.
Standard Component is nothing but the components built by Salesforce and has different
levels of features like Left navigation, Feed items, Tasks, and Publisher bar components.
Custom Component are the components built by developers. You can build and use your own
component. Some of the examples of Custom Components are Sliders, Multi-view charts, and
so on.
AppExchange Component is nothing but the components built by Salesforce Partners like
Dynamic Maps, Custom Charts, Custom data layout, and so on.
Basically, you create a component to render it on the screen (html). During the rendering, lot
of events occur, like Listening for Events, Configure Attributes, and Fire Events.
Listen for Events: It is an important aspect of the component. We can hook into these events
and make other things happen within the components.
1. Data updated
2. Screen tapped
4. Network offline
Configure Attributes: It always passes data into and out of components. It controls the behavior
the data that might be passed to your component:
1. Set color
2. Set object
3. Get user
Fire Events: We can fire events that other component can listen for and then react too.
1. Record saved
2. List scrolled
3. Save offline
4. Color changed
3) Lightning
Lightning is a component-based framework for the Salesforce1 mobile app which is built on an
open source Aura framework. With the lighting framework, responsive applications can be
built easily. The apps build on the Lighting framework is sold or brought on AppExchange .
Lightning App builder for Salesforce is a tool for quick application advancement of responsive
web interfaces. This interface takes into account distinctive screens to be assembled given
lightning segments. This can be layouts as formats for records or particular applications .
Lightning features:
Lightning App Builder, which provides drag and drop capacities to facilitate app creation
and customization.
Lightning Component Framework, which includes tools and extensions that enable the
development of reusable components and standalone apps and customization of the
Salesforce1 Mobile App.
AppExchange for Components, which makes over 50 partner components available in the
App Builder.
Design System, which offers style guides and user experience (UX) best practices for app
development.
Lightning Connect, an integration tool that makes it easier for Force.com apps to consume
data from any external source that conforms to the OData specification.
2.7 Benefits of Using Salesforce
With industry-specific third party apps, Salesforce can be spread to every division and
corporation. These apps are installed by millions of people and are reviewed by thousands. So
with trust on the apps, we can focus on extending the business .
Flows allow you to build complex business automation using clicks instead of code.
As an admin, Flows are going to be your best friend because you will be able to handle
the majority of complex business requirements without the help of a Salesforce
developer!
The benefit of Salesforce Flow is that they are easy to maintain because anyone (assuming they know
Flows) should be able to follow along with what you built.
Flows are accessible through the Setup menu. Simply enter ‘Flows’ into the Quick Find box, and create
a new Flow to get started.
There are 3 main “building blocks” of any Flow:
1. Elements are the individual building blocks of the Flow. These perform logical
actions such as assignments, decisions, or loops. There are also data elements that will
query the database or commit record changes.
2. Connectors determine which element leads to which. Winter ‘21 enables Auto-
Layout, and connects the Elements together automatically.
3. Resources are the individual variables of data that are to be used in a Flow – these can
be strings of text, numbers, records, formulae, or collections.
You can see these in action on the Flow Canvas below. This example Flow below is
a declarative replacement for a ‘before’ trigger. In the ‘Start’ element at the top you
can see that the trigger is when a record is created or edited, and it should run before
the record is saved.
A flow is the part of Salesforce Flow that collects data and performs actions in
your Salesforce org or an external system. Salesforce Flow provides two types
of flows: screen flows and autolaunched flows. To automate a business
process that collects data from people, use a screen flow.
On the left-hand side of your Flow Canvas, you’ll see the Toolbox.
Depending on the type of Flow that you’re working on (whether it’s a Screen
Flow,
Auto-Launched Flow, etc.) you’ll see a different set of tools.
Manager Tab
This is where your Resources are kept. Some examples of Resources are
Variables, Collections, Constants, Formulae, or Choices.
● Variables are where you can store data to use in the Flow. These can be
Text, Number, Record, Dates, Currency, Boolean, or Picklists just to name a
few.
● Constants are values you set once and never change. They are useful when
you want to refer to a single value multiple times through your Flow – if you
ever need to change that value, you just need to change it once and it is
reflected throughout the Flow.
● Formulae display a dynamic value depending on other values within your Flow.
If you need to calculate a future date based on when the Flow was run, a Formula
will be helpful. If you need to calculate and set a currency based on an interest
rate, a Formula can be used.
● Choices are used within Screen Elements to display an option to the user.
Next, you have the Elements screen. This is where you can create new Resources and
Elements in the Flow. In the screenshot below, you’ll see a ‘Screen’ element (because I
took the screenshot in a Screen Flow, which will not appear in a Flow type that doesn’t
support Screens, such as an Autolaunched Flow). There are a number of different
elements that will dynamically show up depending on the type of Flow you’re working
with.
● A Subflow element allows you to call another Flow within your current Flow –
this means that if you have another complex Flow set up, you don’t need to
replicate the logic in your new Flow. This also makes maintenance easier as
you only need to update your logic once if you design your Flows well enough!
Logic elements include Decisions, Assignments, and Loops.
● Decisions allow you to split your Flow depending on the data that’s being
sent through it.
● Assignments allow you to give a value to a variable.
● Loops allow you to handle multiple variables at once using collections.
Essentially, any time you want to edit a record in the Salesforce database, you’ll need
to use one of these Data elements. These will also dynamically display depending on
the type of Flow you’re running. If you’re running a ‘before triggered’ Flow, you’ll
only be able to use ‘Get’, for example.
How Do You Call a Flow in Salesforce?
To ‘call’ a Flow means that something happens in order to kickstart the Flow process.
This could be a Salesforce record change, from another process in Apex/Process
Builder, or automated on a recurring schedule.
When you create a new Flow, you’re prompted to select the type of Flow you wish
to create.
● Autolaunched Flows are called through Apex, Process Builder, or another Flow.
They can be used to perform actions automatically behind the scenes.
This is a question that I’ve been wondering about, each time Salesforce announcements
huge amounts of updates for Flow in every release. But my suspicious have been
confirmed. At Dreamforce ’21, Salesforce announced that Workflow rules & Process
Builders will be retired, and Flow will be the only declarative automation solution on the
platform.
Overall, I think this is inevitable. Salesforce has not updated the functionality of other
automation solutions in many years, and due to Flow having “Apex code” like
functionality, it’s by far the most powerful automation tool.
By learning and adopting Flow, you are able to help your business beyond what a
declarative Salesforce Admin would have been able to do before. This means you can
bring value faster to your business, without the need for expensive developers.
Developer Console
The Developer Console is an integrated development environment with a collection of tools you
can use to create, debug, and test applications in your Salesforce org.
The Developer Console is an integrated development environment with a collection of tools you
can use to create, debug, and test applications in your Salesforce org.
A trigger is an Apex script that executes before or after data manipulation language
(DML) events occur. Apex triggers enable you to perform custom actions before or after
events to record in Salesforce, such as insertions, updates, or deletions. Just like
database systems support triggers, Apex provides trigger support for managing records.
We should use triggers to perform tasks that can’t be done by using the point-and-click
tools in the Salesforce user interface. For example, if validating a field value or updating
a field on a record, use validation rules and workflow rules instead.
● before insert
● before update
● before delete
● after insert
● after update
● after delete
● after undelete
triggers:
● Before triggers are used to perform a task before a record is inserted or updated
or deleted. These are used to update or validate record values before they are
saved to the database.
● After triggers are used if we want to use the information set by Salesforce system
and to make changes in the other records. are used to access field values that are
set by the system (such as a record’s Id or LastModifiedDate field), and to affect
changes in other records. The records that fire the after trigger are read-only.
All triggers define implicit variables that allow developers to access run-time context.
These variables are contained in the System.Trigger class.
● isExecuting: Returns true if the current context for the Apex code is a trigger,
not a Visualforce page, a Web service, or an executeanonymous() API call.
● isInsert: Returns true if this trigger was fired due to an insert operation, from the
Salesforce user interface, Apex, or the API.
● isUpdate: Returns true if this trigger was fired due to an update operation, from
the Salesforce user interface, Apex, or the API.
● isDelete: Returns true if this trigger was fired due to a delete operation, from the
Salesforce user interface, Apex, or the API.
● isBefore: Returns true if this trigger was fired before any record was saved.
● isAfter: Returns true if this trigger was fired after all records were saved.
● isUndelete: Returns true if this trigger was fired after a record is recovered from
the Recycle Bin (that is, after an undelete operation from the Salesforce user
interface, Apex, or the API.)
● new: Returns a list of the new versions of the sObject records. This sObject list
is only available in insert, update, and undelete triggers, and the records can only
be modified in before triggers.
● newMap: A map of IDs to the new versions of the sObject records. This map
is only available in before update, after insert, after update, and after undelete
triggers.
● old : Returns a list of the old versions of the sObject records. This sObject list
is only available in update and delete triggers.
● oldMap: A map of IDs to the old versions of the sObject records. This map
is only available in update and delete triggers.
● size: The total number of records in a trigger invocation, both old and new.
A trigger should be able to handle single record and thousands of record. There are two
important point for bulkifying trigger:
Are you running multiple projects with many individual tasks? How do you manage visibility of all those
tasks?
If you’re like many businesses, you’ll have a team of ‘spreadsheet ninjas’ whose job it is to keep track of
tasks and the status of each task. It’s an unwieldy process, and to get full visibility, you need to use more than
one system.
With Mission Control and Salesforce, projects tasks are transparent, and easy to manage and update.
Mission Control for Salesforce offers a complete solution to manage your tasks, timing and collaboration.
With visual representations of all activities, you can see at a glance how your project is tracking and plan
resources according to need.
And with better visibility across projects and tasks and time spent, you can estimate, plan and deliver new
projects more quickly and accurately.
As Salesforce is a cloud-based platform, all it needs is a browser and internet connection. Once
a developer or user of force.com platform logs in into salesforce.com, he sees his name on the
top right corner of the page, and beside that, there is a setup button which we use mostly while
developing an app.
It will take us to the Salesforce customized company domain and it will look likes as shown
below.
After the Setup button in the header, we can see the Help button which will give detail
information about anything in this platform and lastly we can see a drop-down list showing
Task Manager , where we can see the list of apps available in this domain. By selecting the
Task Manager app, we can see all the data/ modules related to this app along with some
predefined standard data.
In Salesforce, creating an App is just a point and click away, to create a new app click on Setup
and locate Create, then click on Apps and then on New. As simple as shown below, enter the
name of the app as Inventory Management after clicking New.
Salesforce provides some predefined apps like sales which consist of standard objects and
standard fields. Now, we are creating our custom app which will consist of custom objects and
custom fields to hold the data.
3.2.2 Objects
Objects in Salesforce are database tables with information. The primary object in the
Salesforce data model represents accounts/companies and organizations involved in the
business, such as customers, partners, and competitors. A record is similar to a row in a
database table.
Objects already created by Salesforce are called standard objects. Objects we create in
organization are called custom objects
Created the custom object Brands in the following way,
In similar fashion, For the Task Managemer App, Three custom objects were created.
1. Project Name : List All the Project which are user are Work on them
2. Task : Tracks the task of the related project that they will do
3. TimeSheet : Tracks all the Task and project related Work of employee
The objects can be accessed by tabs in salesforce.com and menu items as in the salesforce1
platform which is a mobile platform.
3.2.3 Fields
Salesforce has provided many inbuilt fields called standard fields like “Name,” “Owner,”
“Created By,” “Last Modified By” etc. Every object in Salesforce has a set of standard fields
that may be applicable for capturing data for that type of an object.
Salesforce also allows users to create new fields in the system to capture additional
information. These fields are called as custom fields. Salesforce supports a variety of datatypes
for these fields like Text, Text Area, Rich Text Area, Number, Currency, Boolean, Email,
Phone, etc.
Administrators can then configure how these fields should be set (visible/read-
only/edit/mandatory).
Created some more custom fields to the object Brand in the following way,
3.2.4 Relationships
The Force.com platform supports two types of parent-child relationships between objects.
They are lookup relationships and master-detail relationships. These relationships connect
objects with other objects. These both work like a foreign-key relationship in a relational
database. These relations are the fields in the Salesforce. We can create them as we create
custom fields.
The lookup relationship creates a simple relation between two objects. With this relationship
field, we can navigate from records in one object to the related records in another object and
can create one-to-one and one-to-many relationships. Lookup relationships are appropriate
when a relationship between two objects is required in some cases, but not always. In scenarios
like to relate multiple parent records to the child record and to reference commonly shared
data, such as reference data, a lookup relationship is used.
Example:
In Figure 11, charity is the master of events object and donation is the child object of events.
So with the Master-detail relationship between them, we can see total money raised, in the
charity object which is a roll up a summary of the total donations of the events object.
Figure 11: An example of a Master-Detail
relationship.
In the Task Manager app, there is a master-detail relationship in between brand and manage
product object and in between manage category and manage product objects. The manage
product object is the parent of both manage category and brand objects. There is look up the
relationship between the delivery order and contact object and then the contact object with a
purchase order. The manage the product object have lookup relationship between the purchase
order and manage supplier object.
3.2.5 Tabs
Tabs are the primary way to access the main objects in the application for users in Force.com
platform apps. Just like standard objects/fields Salesforce also has the standard/custom tabs.
Tabs provide an interface to access records for that particular object. Most standard objects
have their tabs exposed. Users can also configure which tabs they would like to see and can
rearrange their order. Users can create custom tabs for the custom objects they create. Tabs can
also be used to open custom pages and links.
The Custom Tabs that were created for the custom objects are Brands Tab, Categories Tab,
Manage Stocks Tab, Manage Suppliers Tab, Products Tab, Purchase Orders Tab
The other Tabs that are used for visual force Pages Are Login Tab and Manage Product Tab
3.2.6 Securing and Sharing data
Salesforce provides a wide level of security and sharing of data in an organization. Some of
them are listed below.
The profile and the user permissions restrict what the user can see. The modifications made in
the desktop Salesforce site are reflected in the app even and mobile users to get their
Organization's data without special configuration.
Page Layouts can be used to control the visibility of the custom fields, button and links on the
Object record. We can rearrange the fields as per our convenience and by separate sections
also. We can make a field to be visible, required or read-only field to control the access for
different users, marks few fields as read only, mark few fields as mandatory, etc. Page layouts
can be created in the following way,
The Lightning Component framework is a UI framework for developing single page applications
for mobile and desktop devices.
As of Spring ’19 (API version 45.0), you can build Lightning components using two programming
models: the Lightning Web Components model, and the original Aura Components model. Lightning
web components are custom HTML elements built using HTML and modern JavaScript. Lightning
web components and Aura components can coexist and interoperate on a page.
Configure Lightning web components and Aura components to work in Lightning App Builder
and Experience Builder. Admins and end users don’t know which programming model was used to
develop the components. To them, they’re simply Lightning components.
3.2.9 Apex
Salesforce introduced Apex as the first cloud computing programming language. The syntax of
Apex is quite similar to Java. It is particularly intended for building business applications to
oversee Data and procedures larger ambiance of the Force.com platform. The Apex lets the
developers focus just on elements specific to their application by providing a productive
approach to creating functionality and logic, leaving the rest of work for Force.com Platform.
Usually, for every interactive VF page, Apex Class is associated. So more 10 Apex Classes are
used in the Application.
3.2.10 Chatter
Chatter is a standard Salesforce functionality which is very useful feed tracking system in
Salesforce where users can post to feed, comment on feeds, shares the information, attach files
and share. Also, the user can follow other users to get updates from that user. The user can
follow a particular field of an object and can get updates whenever its value changed or
updated. It reduces the mailing efforts for a user to update about things going on the
organization. Also, create groups who are working on an assignment and keep an update or
follow up with them by enabling chatter. It’s like a social network application for the work
environment to connect people with updates going in their organization.
3.2.11 Reports and Dashboards
As we know a company deals with lots of data, to check the data record by record is a very
lengthy and time taking process. A good application should provide the overview of the data
at a glance. For this purpose, Salesforce provided a tool called Reports. Using reports, we can
generate different formats of data resides in the company at a glance view. A dashboard is a
place where we can put all reports together to give the overview of the statistics. For
example, if the manager wants to know how many products are sold from the inventory, he
can create reports and find these statistics. Salesforce supports four different formats of
Reports which are,
● Tabular Reports: These give a simple list view of data with Grand totals. But these are not
used to create groups of data and graphs.
● Summary Reports: These give the summary of the data like subtotals with row-wise also.
These are used to create charts, graphs. These reports can be used in the dashboard.
● Matrix Reports: These give the groups of data both by row wise and column wise. These
are the most time consuming to generate a report or to set up, but can also be used in
the dashboard.
● Joined Reports: These allow to join the multiple reports of different types. These reports
can also be used to create charts so that can be used in dashboards.
A Dashboard can show the reports in a visual format like Charts, Gauges, Tables, Metrics, or
Visualforce pages. Force.com platform supports 20 components to be allowed in a dashboard
for an organization. For example, the reports which we created before, like Pie chart and
Vertical bar chart we can put up to 20 components in a dashboard. For the dashboard also we
created a folder and saved all the dashboards under Inventory Dashboards folder and shared
same as Reports folder. Dashboard can be created as,
The Lightning Component framework is a UI framework for developing single page applications
for mobile and desktop devices.
As of Spring ’19 (API version 45.0), you can build Lightning components using two programming
models:
Aura Components model, and the original Aura Components model. Lightning web components are
custom HTML elements built using HTML and modern JavaScript. Lightning web components and
Aura components can coexist and interoperate on a page.
Configure Lightning web components and Aura components to work in Lightning App Builder and
Experience Builder. Admins and end users don’t know which programming model was used to develop
the components. To them, they’re simply Lightning components.
Schema
The Store Manager can add, edit, delete and view the task in the database. The various
functions that a manager can do include updating new Task and projects, generating Task
(based on the Task, project, created date) and the access to see and edit the Employee details.
To administrate his inventory, Manager needs to log into Salesforce with his credentials.
Once the admin logs into the Salesforce, the log in page is redirected to home page. In the
home page, the manager finds Standard Page components like apps, tabs, menu and he will
also find custom modules like calendar, task to perform, etc., In the home page, the manager
can navigate between all the tabs, existing applications, and other components.
Home Page can be customized depending on the requirements. The layout of the page is fixed
while the components like tabs can be customized. In the inventory management app, home
page is customized.
1. Calendar,
2. Tasks to perform,
3. Dashboards
4. Record need his approval
5. Recent Activities
Admin can find the worklog app by switching to the lightning experience of Salesforce and by
clicking on the App launcher icon and searching for Worklog. User needs to do the following things
with the help of the setup tab
Note: Admin should try to do these changes. Changing the above settings can break the old timesheet
records.
● Admin can manage the labels for timesheet screens like Days, Date, Date with Days.
● Admin can choose the week start day like Monday, Sunday. He/she just needs to go to the setup
and select the day from the drop-down list.
● Admin can choose whichever task field he/she wants to show on the dropdown list in the timesheet.
● He can enable/disable submit for the approval button on the timesheet. He/she can go to the setup tab
and select or deselect the Approval Process checkbox. If admin selects it, the approval option is
disabled otherwise it will be enabled.
● The Default Project object is the package's Project object. In case the Admin wants to use their own
object, the admin can go to the setup screen and choose whatever sObject user wants to work with as a
project.
● Just like the Project sObject, The Default Task object is the package's Task object. You can go to
the setup screen and choose whatever sObject you want to work with as a Task but there must be a
relationship between selected task and selected project object.
● Admin can mark a particular task as required. He/she can go to the setup tab and select the
task required option. If the admin makes the task not required, the user can save a timesheet
without entering the task value.
● Admin can also choose whether he/she wants to show or hide the task option from the timesheet. If the
admin hides the tasks, the user will not be able to see the task picklist on the timesheet screen.
Setup Tab
A setup tab is provided for default setting for apps like week start day, which object uses a task
and project.
Project
The project object is an important part of the app. It stores information about the projects.
Create a Project
To create a project, click on the Projects tab then click on the new button and fill the
details about the project and finally click Save.
Task
The Task object is used to store different tasks related to a particular project. It is a
child object of a project object.
Create a Task
To create a task, click on the Tasks tab and then click on the new button and fill the details about
the Task and click Save. A task is for a specific project. A project must be selected when creating
a task.
Creating timesheets through the TimeSheets Tab
To create a timesheet, the user just needs to go to the timesheet object and
The ‘employee’ field shows the current logged in user, ‘Summary’ shows the total hour’s work
done by the current user. Click on the drop-down button to select the project and task and fill
the value in days.
You can see the setting button on the top right corner of the sheet where you can change the
settings at the user level.
Aura Code
<aura:component >
<aura:dependency resource="markup://c:ProjectTimesheetForm" />
<aura:attribute name="currentView"
type="String"
access="PRIVATE"
default="myTimesheets"
description="The currently active view" />
<!--
<aura:handler event="c:AllProjectsCmpRouter"
action="{!c.handleAllProjectsCmpRouter}"/>
-->
<aura:component controller="ProjectsHandler"
implements="force:appHostable,flexipage:availableForAllPageTypes">
<!--
<force:recordView recordId="a0024000008nAeZAAU" type="FULL"/>
<force:recordEdit aura:id="edit" recordId="a0024000008nAeZAAU"/>
<ui:button label="Save" press="{!c.save}"/>
<c:ProjectTimesheetForm />
-->
</aura:component>
<aura:component controller="ProjectTimesheetFormController"
implements="force:appHostable" >
<aura:attribute name="currentView"
type="String"
access="PRIVATE"
default="myTimesheets"
description="The currently active view" />
<aura:handler event="c:MyTimesheetsCmpRouter"
action="{!c.handleMyTimesheetsCmpRouter}"/>
</aura:component>
({
handleMyTimesheetsCmpRouter : function(component, event, helper)
{ var pageToOpen = event.getParam('pageToOpen');
console.log(pageToOpen);
switch (pageToOpen) {
case "viewRecord":
console.log("Need to hide the list of My
Timesheets"); var id = event.getParam('recordId');
console.log("Retrieve the id from the event: " + id);
console.log("Show the record in read mode");
helper.showRoute(component,"recordRoute");
helper.viewRecord(component, id);
break;
case "editRecord":
console.log("Need to hide the list of My
Timesheets"); var id = event.getParam('recordId');
console.log("Retrieve the id from the event: " + id);
console.log("Show the record in edit mode");
helper.showRoute(component,"recordRoute");
helper.editRecord(component, id);
break;
case "createRecord":
console.log("Need to hide the list of My
Timesheets"); console.log("There will be no id");
console.log("Show the create record component");
helper.showRoute(component,"recordRoute");
helper.createRecord(component);
break;
case "cloneRecord":
console.log("Need to hide the list of My
Timesheets"); var id = event.getParam('recordId');
console.log("Retrieve the id from the event: " + id);
console.log("Show the clone record component - includes the record data but no
id");
helper.showRoute(component,"recordRoute");
helper.cloneRecord(component, id);
break;
case "deleteRecord":
console.log("Need to hide the list of My
Timesheets"); var id = event.getParam('recordId');
console.log("Retrieve the id from the event: " + id);
console.log("Show the clone record component - includes the record data but no
id");
var resp = confirm("You want to delete this
record?"); if(resp) {
helper.deleteRecord(component, id);
helper.showRoute(component,"myTimesheets");
}
break;
case "refreshList":
var formData = event.getParam('formData');
console.log("Retrieve the formData from the event: ");
console.log(formData);
console.log('fire save controller function - callback destroys the current
component.');
console.log("Need to refresh the list of My Timesheets and show it");
console.log("Show the clone record component - includes the record data but no
id");
helper.showRoute(component,"myTimesheets");
var appEvent =
$A.get("e.c:ProjectTimesheetRefresh");
console.log("firing");
appEvent.fire();
break;
default:
helper.showRoute(component,"myTimesheets");
console.log("destroy current component - show the list component (change css
class)");
}
}
})
.THIS {
height: 100%;
}
.THIS .route {
display: block;
}
.THIS .route--off
{ display:none;
}
<aura:component controller="ProjectTimesheetsHandler"
implements="force:appHostable,flexipage:availableForAllPageTypes">
</aura:component>
({
doInit: function(cmp,event,helper){
helper.populateTimesheetList(cmp);
},
refreshList: function(cmp,event,helper){
helper.populateTimesheetList(cmp);
},
searchKeyChange: function(component, event, helper) {
var page = component.get("v.page") || 1;
component.set ("v.searchKey",
event.getParam("searchKey"));
console.log('searchKeyChange');
helper.populateTimesheetList(component, page);
},
pageChange: function(component, event, helper) {
var page = component.get("v.page") || 1;
var direction = event.getParam("direction");
page = direction === "previous" ? (page - 1) : (page + 1);
helper.populateTimesheetList(component, page);
}
})
ApexCode
{ @AuraEnabled
public static Project_Timesheet c getProjectTimesheet(String recordId) {
System.debug('recordId: ' + recordId);
if((recordId == '') || (recordId == null)) {
Consultant c c = [SELECT Id,Name,User_Name c FROM
Consultant c WHERE User_Name c = :userinfo.getName()];
return new Project_Timesheet c(
Consultant c = c.Id
);
} else {
return [SELECT Id,Name,Date_of_Work c,Project_Name c,
Project_Name_Text c,P_Opportunity_Name c,
Billable c,Consultant_Name c,Consultant c,Customer c,
Customer_Name c,Duration c,Project_Stage c,
Notes c,Description c, Date_of_Work_Text c
FROM Project_Timesheet c
WHERE Id = :recordId][0];
}
}
@AuraEnabled
public static Project_Timesheet c saveProjectTimesheet(Project_Timesheet c pt) {
System.debug('saving');
System.debug(pt.P_Opportunity_Name c);
if(pt.Project_Name c == null) {
System.debug('Need to get the Opportunity from the Project');
Project c proj = [SELECT Customer_Name c, Opportunity_Name c FROM
Project c WHERE ID = :pt.P_Opportunity_Name c];
pt.Project_Name c = proj.Opportunity_Name c;
pt.Customer c = proj.Customer_Name c;
}
if(pt.Consultant_Name c == null) {
Consultant c c = [SELECT Id,Name,User_Name c FROM Consultant c
WHERE id = :pt.Consultant c];
pt.Consultant_Name c = c.User_Name c;
}
upsert pt;
return pt;
}
@AuraEnabled
public static Project_Timesheet c cloneProjectTimesheet(Project_Timesheet c pt) {
System.debug('cloning');
System.debug(pt.P_Opportunity_Name c);
if(pt.Project_Name c == null) {
System.debug('Need to get the Opportunity from the Project');
Project c proj = [SELECT Customer_Name c, Opportunity_Name c FROM
Project c WHERE ID = :pt.P_Opportunity_Name c];
pt.Project_Name c = proj.Opportunity_Name c;
pt.Customer c = proj.Customer_Name c;
}
if(pt.Consultant_Name c == null) {
Consultant c c = [SELECT Id,Name,User_Name c FROM Consultant c
WHERE id = :pt.Consultant c];
pt.Consultant_Name c = c.User_Name c;
}
Project_Timesheet c pt_c = pt.clone(false, true);
insert pt_c;
return pt_c;
}
@AuraEnabled
public static void deleteProjectTimesheet(ID recordId) {
Project_Timesheet c pt = new Project_Timesheet c(id= recordId);
delete pt;
}
@AuraEnabled
public static List<Consultant c> getConsultants() {
return [SELECT Id,Name,User_Name c FROM Consultant c];
}
@AuraEnabled
public static List<Project c> getProjects() {
return [SELECT Id,Name,CreatedDate,Opportunity_Name c,Customer_Name c,
Account_ID c,Opportunity_Stage c,Client_Name c,
Time_Carried_Over_Hrs c,Estimated_Effort_Hrs c
FROM Project c
WHERE Opportunity_Stage c = 'Closed Won'
ORDER BY CreatedDate DESC, NAME ASC
];
}
@AuraEnabled
public static List<String> getDescriptionOptions() {
// this function builds the list of SelectOptions for the Department field
List<String> options = new List<String>();
// do describe here to get the Department c field picklist values
Schema.DescribeFieldResult deptDFR =
Schema.sObjectType.Project_Timesheet c.fields.Description c;
for (Schema.PickListEntry deptPickVal : deptDFR.getPicklistValues()){
// create a selectoption for each pickval
options.add(deptPickVal.getLabel());
}
return options;
}
@AuraEnabled
public static List<String> getProjectStages() {
// this function builds the list of SelectOptions for the Department field
List<String> options = new List<String>();
// do describe here to get the Department c field picklist values
Schema.DescribeFieldResult deptDFR =
Schema.sObjectType.Project_Timesheet c.fields.Project_Stage c;
for (Schema.PickListEntry deptPickVal : deptDFR.getPicklistValues()){
// create a selectoption for each pickval
options.add(deptPickVal.getLabel());
}
return options;
}
}
Salesforce Testing
A great thing about Salesforce is that many of the out of box features can be customized to suite a
company’s need.
Salesforce testing is a validation of the configuration and customization performed in vanilla SDFC.
SalesForce CRM is built on a platform development language called APEX. It also provides many built in
unit test case for developers to validate their code.
Manual Testing:
Manual software testing process includes the testing of Salesforce.com App by using traditional
methods. QA team can use manual testing can be used to execute functional testing, happy path testing,
integration testing, regression testing, and system testing.
Automated Testing:
Automated testing involves a computer program to test a Salesforce.com or Force.com app. Automated
testing tools like Selenium, Assure Click, QTP, etc. are used.
Levels of Testing in Salesforce
Unit Testing
● Unit testing process is conducted by Apex developers. It involves writing clauses in their
code which automatically tests its coverage
● It helps you to evaluates how many records of data are effected, so that the code would
successfully run on in that environment.
● To deploy Apex code into a Production environment your code coverage ratio should be
minimum 78%
System Testing:
UAT Testing:
Regression Testing:
● The main object of Regression testing is to test whether code and config releases is affecting
existing user processes of the system
● It will be conducted once a enhancement or a fix is deployed to production.
● The user provides a list of changes which may impact their current process
Should be able to conduct Smoke Testing to make sure all the major functionalities are functioning as
per requirement
Create both positive and negative Test Scenarios
Able to perform equivalence Partitioning and Boundary Value Analysis
Testers are also needed to work on the application and gain the understanding of its functionality to
create functional map
A tester should have an easy communication channel with the development team
He should understand the customizable features which can be built for the Salesforce app
The tester needs to execute role-based test cases to ensure the consistency of data
He should also perform compatibility test in case Salesforce integrated with third-party applications
A Salesforce tester should be familiar with load testing tools like JMeter to validate the complex flows which
can offer inconsistent results in Salesforce
Knowledge of Apex
Performing automated functional testing in SalesForce is a challenging task as most of the test web pages are
dynamic. Therefore, the tester needs to build robust automation framework to which should be useful not
only today but also in the future.
Below, given are widely used Salesforce testing tools:
1) Testim
Testim for Salesforce is the fastest way to create your most resilient UI tests for Salesforce applications and
ecosystems. Testim’s AI-powered self-healing and auto-improving Smart Locators keep your tests stable and
minimize maintenance.
Features:
● Customers can validate their complete end-to-end scenarios extending from their web application to
Salesforce and back.
● It integrates with your tools so you can stay in your workflow an get results on CI builds.
● Agile teams with mixed skill sets scale their testing operations efficiently with features to help
them control and manage the growth in tests and teams.
● Run Apex code in a test step to validate query results
● Integrate API tests
2) ACCELQ
ACCELQ is an AI-powered Codeless Test Automation platform on the cloud that seamlessly automates
Web UI, API, Mobile, and Desktop. ACCELQ customers are Fortune 500 enterprises across industry
verticals globally, and they have adopted ACCELQ to accelerate their automation objectives significantly.
ACCELQ is proven to speed up automation development by 3 times and bring down the maintenance by
70% that translates to over 50% of cost savings and enables alignment with Continuous Delivery.
Features:
1. https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_quickstart_i
ntro.htm
2. https://www.salesforceben.com/introduction-salesforce-flow/
3. https://help.salesforce.com/s/articleView?id=sf.code_dev_console.htm&type=5
4. https://www.sfdcpoint.com/salesforce/apex-trigger-in-salesforce/#:~:text=Triggers%20
in%20Salesforce-,What%20is%20Triggers%20in%20Salesforce%3F,insertions%2C
%20updates%2C%20or%20deletions.
5. https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_intro_
what_is_apex.htm#:~:text=Apex%20is%20a%20strongly%20typed,with%20calls%2
0to%20the%20API.
6. https://www.techtarget.com/whatis/definition/Lightning-Salesforce1-Lightning#:~:text
=Lightning%20(Salesforce%20Lightning)%20is%20a,do%20not%20have%20progr amming
%20experience.
7. https://intellipaat.com/blog/tutorial/salesforce-tutorial/creating-objects-tabs/#:~:text=
Salesforce%20objects%20are%20database%20tables,%2C%20reports%2C%20das
hboards%2C%20etc.
8. https://cloudanalogycom-38c-dev-ed.lightning.force.com/lightning/setup/ObjectMana
ger/Opportunity/FieldsAndRelationships/view
9. https://www.guru99.com/salesforce-testing-tutorial.html#:~:text=Salesforce%20testin
g%20is%20a%20validation,platform%20development%20language%20called%20A
PEX.