Tuesday, July 14, 2015

Quick Tips : Salesforce : 10 ways to develop application without coding

Hi all, as evident from the topic, I'm hereby sharing a small list of configuration options available within Salesforce using which a non-programmer can also develop functionalities within salesforce. The best part of using these features is that you save time, save development/ testing effort, deploy and manage it easily.

Standard/ Custom Objects
Objects a.k.a. table (for database junkies) a.k.a. entity are used to store data within Salesforce. We can use out of the box objects for e.g. Account, Contact, opportunity, lead etc. (along with their powerful features) or create our own custom objects to store required information for e.g. invoice, purchase orders etc.

Custom fields
As with any entity, you need to store its attribute, similarly in salesforce an object can have fields. Out of the box objects have standard fields. Additionally, custom fields can be added to standard and custom fields. Following are few special types of fields that can be added to enrich product's functionality
  1. Formula fields:- these are automated fields which can calculate value at run-time and display it. For e.g. you want to calculate age of contact dynamically via his/her date of birth
  2. Relationship fields:- these are one of the most important types of fields. Relationship fields, as name implies, help you associate an object with other object. This further helps in screen designing, validations, automated workflows
Validation rules
Formula based rules to ensure that any data being entered within salesforce conforms to business rules. Validation rules can be very beneficial in ensuring that data within Salesforce is valid at all times and provides appropriate error messages to users when data doesn't conform to business rules.

Page layouts

Page layouts are the user interface of objects within Salesforce. Whether you want to add/ update/ view an entity you can customize its user interface by a simple yet powerful drag-drop interface.

Apps
A app is a collection of tabs (of custom objects, visualforce pages, other external urls) which are logically connected for business operations. In case of service cloud, we can configure apps for service cloud console and manage all settings from here for e.g. what options to display (knowledge management, live agent chat etc.), how to open tabs etc.

Listviews
Listviews can be simply explained as filtered lists of your records, to make sure you are looking at right data for e.g. My Accounts, Hot Leads, Top accounts etc. this helps in filtering view to show essential records only. Listviews can be created fairly easily and shared with other users.

Workflows and Approvals
Now, with all the above options, you can create objects, fields to store data and manage its user interface. But, what if you want to automate certain functions. This is where workflow and approvals help.

Workflows can help define specific actions for e.g. send email, update a field, create task or send message to external system whenever any record is updated/ created. Workflows can also be used to schedule an action for e.g. send an email after 5 days of case creation.

Approval processes help define a process wherein a request can be send to one or multiple reviewers for their approval. There can be multiple approval steps and actions (for e.g. send email, update a field, create task).

Lightning process builder
Process builder is comparatively new bullet in gun. It has advanced features to define process, rules and actions. It can also have a multi-step decision graph (something not possible in workflows). It can be understood as an advanced workflow mechanism.

Flow
At times, standard screens do not help when situation calls for a multiple screen scenario. In this case you can use Flows to create custom screens with ability to do CRUD operations (Create Read Update Delete) fairly easily.

Reports and Dashboards
Lastly, with all the functionalities in place, any business will want to report on their data. Salesforce provides standard reporting capabilities using which users can create reports and dashboards in minutes by mere drag and drop. It may not be as powerful as BI tool, but it is really effective and useful for transactional data. 

There are lot of cool things that can be done with combination of above options and create really powerful applications. So, start exploring all the different options available within above features to understand real power of configuration in Salesforce.

Wednesday, July 1, 2015

Quick Tips: Custom security settings (When to use Salesforce Custom Permissions?)

How often did each one of us get into a situation where we have to create custom security rules? For e.g.
  • Call center agents should not be able to give credits. Only Supervisors or Finance team can give credits
  • Only Finance and Account Manager can generate invoice.
And the most trivial way to achieve it is something like

if(profileName == 'Supervisor || profileName == 'Finance'){
     //business logic to give credits
}
else{
    //throw error message
}

Now, one of the best ways to handle this is by using "Custom Permissions". It allows you to leverage Salesforce security infrastructure and loosely bind that to your custom logic. This helps in making your code scalable and robust. You'll learn that below.

What are Custom Permissions?
Custom Permissions was made GA in Summer '15 (ver 34.0). It is a unique way of creating a custom permission which is required/ to be used by your custom logic. For e.g. in above example, if we create a custom permission "Can give Credits" then we have ability to provide this permission to user via profile/ permission set.

Apex code needs to be modified as (Helper class implementation shared later) :-
if(UserPermissionsHelper.doesUserHavePermission('CanGiveCredit')){
    //business logic to give credits
}
else{
    //throw error message
}

Now, the above code is flexible as it doesn't have hard-coded reference to the profile and hence, if in future there are new profile which need same ability to give credits, it can be achieved by simply giving custom permission to the new profiles.

How to use Custom Permissions?
  • In Formulas (easy):- In validation rules it can be simple used by using global variable "$Permission". For e.g.
 
  • In Visualforce (easy) - 
<apex:commandbutton action="{!save}"
rendered="{!$Permission.Can_Generate_Invoice}"
value="Create Credit"> </apex:commandbutton>
  • In Apex (bit tricky as of now) - This is a little tricky wherein data is to be extracted from multiple entities (refer below entity diagram) to evaluate user's access to custom permissions.
Custom Permission - entity diagram

So, in order to retrieve custom permissions via Apex, following queries can be used:-

  1. Query to retrieve all custom permissions and where ever that permission is assigned (profile / permission set)
    Select c.Id, c.DeveloperName, (Select ParentId From SetupEntityAccessItems) From CustomPermission c
  2. Retrieve all permission sets/ profiles assigned to current user (loop through all permissions to determine permission assigned to current user)
    Select SetupEntityId From SetupEntityAccess Where SetupEntityId in :mapCustomPermissions.keySet() AND ParentId in (Select PermissionSetId From PermissionSetAssignment Where AssigneeId = :UserInfo.getUserId())

Popular Posts