LET'S LEARN TOGETHER. THE BEAUTIFUL THING ABOUT LEARNING IS NOBODY CAN TAKE IT AWAY FROM YOU.

Summer'16 New Feature || Create your own calendar from any object


Salesforce Summer'16 release is a milestone release for Salesforce as it is their 50th release. But apart from being the 50th release, there are many reasons for considering this release as the milestone release. In this release, Salesforce brings some of the really key features which are really awesome.

In this post, I am going to discuss about the new feature called - Creating Calendar from anything in Salesforce.

Really!! Yes, as the name suggests now you can create a calendar from any object in Salesforce. As long as you have some date fields present in the custom object, you can create calendar from that object. This feature is available in Lightning Experience only and available in Enterprise, Unlimited and Developer edition.

But to understand why we need calendar let's give you an example. Say you are working with opportunities. So from the list view - "All Opportunities", you can get the details about the closing date of the opportunities. But it's still in the list view showing the details in rows. But think if you can get a visual calendar representation of the same information, it will have more powerful impact as well as give you the information more quickly. From the calendar, you can easily identify which opportunities are closing this day, or this week, or this month. So yes, this is really a cool feature introduces by Salesforce.

So without any further delay, let's discuss about different options available while creating the calendar with some example. Follow the below steps to create calendar (in this example, I am creating calendar from Opportunity object showing the closing date of the opportunities).  

Step 1:
Once you are in Lightning Home Page, go to Calendar from Navigation Panel

Step 2:
Click on New Calendar Option as displayed below in the screenshot.
Step 3:
This is place where you can select the object for which you want to create the Calendar. So for our example, let's select Opportunity object and click next.
Step 4:
Now below screen is the most important one. Here you can select -
  • Calendar Name:  Very much self explanatory, the name of your calendar.
  • Field for Start:  This field will decide where to put the entry of your record in the calendar. Here you can choose either Date type or Date/Time type field. If you choose Date type field, calendar entry will show full day event whereas if you choose Date/Time type field, calendar entry will be exactly on the same date and same time.
  • Field for End: This is an optional field. This will decide how long the calendar entry should be like calendar entry end time. Here you have to select same type of field i.e. either Date or Date/Time type which you have selected in Field for Start.
  • Apply a Filter: This will decide your calendar will work on which list views. You can select available list views from the object.
  • Field Name to Display: This will decide what will be displayed in the calendar entry.
So for our example where we want to display Opportunity closing information in the Calendar, choose the below values as shown in the below screenshot -


We are done. Our calendar is ready. Let's see how it looks now -

Note - The color of your calendar will be same as configured in the object.

So now what do you think? Don't you think it is a great feature. 

There are few considerations while creating calendar also, but I would like to highlight one consideration here which is the limit of 150 calendar entry in day or week view including all your calendars and Salesforce events. If you have more than 150 calendar entries in the selected calendar, Salesforce Lightning system will show you an alert message and hides entries from other calendar.
 You can go through the other considerations here -
https://help.salesforce.com/apex/HTViewHelpDoc?id=calendar_create_limitations.htm&&language=en_US

I request you to try this out in your developer org. Please provide your comments. Thanks.
Share:

Salesforce Lightning Component - Application Event

In continuation to my previous post about component event in Salesforce Lightning, today I would like to discuss about the another type of event i.e. Application event.

Application event in Salesforce Lightning follows publish-subscribe model. An application is fired from an instance of a component. All components that provide a handler for the event will be notified once the event is fired. Below diagram will give you a more clear picture -

As the above diagram tells - Component 1 is firing the event and that information is getting passed to Salesforce framework. Now all the events - Component 2, 3, 4 & 5 are already registered as handler of this event. So it is now Salesforce framework who will notify all these components that the event has occurred. Here you can see that all the components are very much loosely coupled because when Component 1 is firing the event, it does not know or rather it does not care which component is going to handle that event. Similarly when Component 2 or 3 or 4 or 5 will get notified that the event has occurred, they really don't know which component has fired the event. This approach makes that component very much loosely coupled.

Now I will start with few basic and later I will give you an example to understand Application event.

CREATE CUSTOM APPLICATION EVENT:
To create Application event, you need to write the below code -
1
2
3
<aura:event type="APPLICATION">
    <aura:attribute name="name" type="String"/>
</aura:event>
The above code will create an Application event with name as an attribute to the event.

REGISTER APPLICATION EVENT:
A component needs to register for the event if the component wants to fire that event. Below code will be used to register for application event -
1
<aura:registerEvent name="applicationEvent" type="c:applicationEvent"/>
For application event name attribute is required, but not used for application event. The name attribute is only relevant for component event.

FIRE APPLICATION EVENT:
To fire an event, we need to first get the instance of the event in JavaScript and then use the fire() to fire the event. Here is the code -
1
2
3
var appEvent = $A.get("e.c:applicationEvent");
appEvent.setParams({ "name" : "Sudipta Deb" });
appEvent.fire();

HANDLING APPLICATION EVENT:
Use to handle the event. For example:
1
<aura:handler event="c:applicationEvent" action="{!c.handleApplicationEvent}"/>
When the event is fired, the client side controller method handleApplicationEvent will be called.

With this understanding now I will give you an example of application event communication. 
Here I will prepare two different components -
  • Component 1 - ButtonPressed - This component will contain the button and will fire the event on each button pressed.
  • Component 2 - ButtonCountPressed - This component will show how many times the button is pressed. This component will handle the event which will get fired from Component 1 on each button click.
APPLICATION EVENT - ButtonCountEvent:
To start with we need to first create the application event. Here is the code.
1
2
<aura:event type="APPLICATION" description="Fired when a Button is pressed">
</aura:event>

COMPONENT 1 - ButtonPressed:
The component code -
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes">
 <ltng:require styles="/resource/slds090/assets/styles/salesforce-lightning-design-system.min.css"/>
    <aura:registerEvent name="ButtonCountEvent" type="sudipta:ButtonCountEvent"/>
    
    <div class="slds-page-header" role="banner">
     <div class="slds-media__body">
        <p class="slds-page-header__title slds-truncate slds-align-middle" title="Click and Count">CLICK AND COUNT</p>
        <p class="slds-text-body--small slds-page-header__info">SUDIPTA DEB</p>
     </div>
    </div>
    <div class="container">
        <form class="slds-form--stacked">
         <div class="slds-form--element">
             <ui:button label="Click Here" labelClass="label" class="slds-button--neutral" press="{!c.countButtonClick}"/>
            </div>
        </form>
    </div>
</aura:component>
The controller code -
1
2
3
4
5
6
({
 countButtonClick : function(component, event, helper) {
        var clickEvent = $A.get("e.sudipta:ButtonCountEvent");
        clickEvent.fire();
 }
})
The style code -
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
.THIS .slds-button--neutral{
    padding: 10px;
    margin: 10px;
}
.THIS .slds-page-header__title{
    font-size: x-large;
    color: #097FE6;
}
.THIS .slds-page-header__info{
    padding-top: 10px;
    color: #5F9FD6;
}

COMPONENT 2 - ButtonCountPressed:
The component code -
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes">
 <ltng:require styles="/resource/slds090/assets/styles/salesforce-lightning-design-system.min.css"/>
    <aura:handler event="sudipta:ButtonCountEvent" action="{!c.incrementCount}"/>
    
    <!-- Aura Attributes -->
    <aura:attribute name="count" type="Integer" default="0"/>
    
    <div class="container stds-p-top-medium">
     <div class="slds-notify slds-notify--toast slds-theme--alert-texture">
         <p class="slds-title__title slds-truncate">No of click:</p>
            <ui:outputNumber class="slds-truncate" value="{!v.count}"/>
        </div>
    </div>
</aura:component>
The controller code -
1
2
3
4
5
6
7
8
({
 incrementCount : function(component, event, helper) {
        var count = component.get("v.count");
        count++;
  component.set("v.count", count);

 }
})

FINALLY THE APPLICATION - CountTheTotalClickApp
1
2
3
4
<aura:application >
    <sudipta:ButtonPressed />
    <sudipta:ButtonCountPressed />
</aura:application>

Note - "sudipta" is the namespace used by me. So you need to replace "sudipta" with your org namespace.

Here is the screenshot of the lightning app -

I hope the concept of application event and how to use it is clear now. Please provide your feedback. Thanks.
Share:

Salesforce Lightning Component - Component Event Bubbling Effect

Salesforce Lightning – The Future of Salesforce. Lightning is the collection of tools and technologies behind a significant upgrade to the Salesforce1 Platform. It includes Lightning Component Framework which is used to create reusable components, customize the Salesforce1 App, and also build Standalone apps.

The framework uses the event-driven approach communicate with different components. Event is a notification which will let the world/interested entity know that something happened and now they can take actions accordingly.

In Salesforce Lightning, the interested entity is the components that you develop. The components will register for the events they are interested and will fire if required. And at the same time there will be components who will handle the events when they are fired.

We have two different types of lightning events, as displayed below –
  • Application Event
  • Component Event
In this post, I will try to explain how Component Events are handled in Salesforce Lightning Framework.

Salesforce documentation says, “A component event is always fired from an instance of a component. A component event can be handled by the component that fired the event or by a component in the containment hierarchy that received the bubble event.

I believe this is the best explanation of component event. Later in this post, I will give you an example to explain the bubble effect which I believe is little confusing at this point of time. Let’s wait for some time and I am quite sure once you go through the example below in the post, you will be clear with the component events.

With this agreement, let’s start with few basics:

HOW TO CREATE CUSTOM COMPONENT EVENT:
Below code will create a component event (name: sampleComponentEvent) having one attribute named Country of type String.
<!—Component Event Name: sampleComponentEvent -->
<aura:event type=”COMPONENT”>
 <aura:attribute name=”country” type=”String”/>
</aura:event>

Now to access the parameters of the event, you can use –
event.getParam(“country”);

HOW TO REGISTER CUSTOM COMPONENT EVENT:
A component needs to register for component event if it is willing to fire the event. Below code will register the event sampleComponentEvent.
<aura:registerEvent name=”mySampleComponentEvent” type=”sudipta:sampleComponentEvent />
Note: sudipta is the namespace here. So in your code, you need to replace “sudipta” with your namespace.

HOW TO FIRE CUSTOM COMPONENT EVENT:
To fire an event, you need to first get a reference of the event in JavaScript and then use fire() method to fire the event. Below is the code –
var compEvent = component.getEvent(“mySampleComponentEvent”);
compEvent.fire();

HOW TO HANDLE CUSTOM COMPONENT EVENT:
You need to use <aura:handler> tag to handle custom component event. Below is the code:

<aura:handler name=”mySampleComponentEvent” action=”{!c.handleComponentEvent}” />

Here handleComponentEvent is the name of the JavaScript controller function which will react when the event happens.
With all the above details, let’s go through the below example where I will try to explain the event bubbling effect.

Event – cmpClickEvent:
To start with, let’s create an event – cmpClickEvent.
<aura:event type="COMPONENT" description="Component Click Event" />

Component – clickEventGenerator:
Now the component – clickEventGenerator who will register the above component and also fire the event on button click.
<aura:component >
    <ltng:require styles="/resource/slds090/assets/styles/salesforce-lightning-design-system.min.css"/>
    
    <!-- Aura Event Registered -->
    <aura:registerEvent name="clickEvent" type="sudipta:cmpClickEvent"/>
    
    <div class="container">
     <form class="slds-form--stacked">
         <div class="slds-form-element">
                <ui:button label="GENERATE EVENT" labelClass="label" class="slds-button--neutral" press="{!c.fireEvent}"/>
            </div>
        </form>
    </div>
 
</aura:component>

And the JavaScript Controller contains the method –
({
 fireEvent : function(component, event, helper) {
             var cmpEvent = component.getEvent("clickEvent");
             cmpEvent.fire();
 }
})

Another Component – clickEventInnerMostComponent:
This component is the handler of the event. Here is the code –
<aura:component >
 <ltng:require styles="/resource/slds090/assets/styles/salesforce-lightning-design-system.min.css"/>
    
    <!-- Aura Event Handler -->
    <aura:handler name="clickEvent" event="sudipta:cmpClickEvent" action="{!c.takeActions}" />
    
    <div>
        <sudipta:clickEventGenerator />
    </div>
</aura:component>

And here comes JavaScript Controller code:
({
 takeActions : function(component, event, helper) {
          console.log("Event handled from Inner Most Component: " + event.getName());
 }
})

Another Component – clickEventMiddleComponent:
This is the component which is also a handler of the event. Here is the code:
<aura:component >
 <ltng:require styles="/resource/slds090/assets/styles/salesforce-lightning-design-system.min.css"/>
    
    <!-- Aura Event Handler -->
    <aura:handler name="clickEvent" event="sudipta:cmpClickEvent" action="{!c.takeActions}" />
    <div>
     {!v.body}
    </div>
</aura:component>

And here comes JavaScript Controller code:
({
 takeActions : function(component, event, helper) {
           console.log("Event handled from Middle Most Component: " + event.getName());
 }
})

Another Component – clickEventParentComponent:
This is the parent component as well as handler of the event. Here is the code –
<aura:component >
 <ltng:require styles="/resource/slds090/assets/styles/salesforce-lightning-design-system.min.css"/>
    
    <!-- Aura Event Handler -->
    <aura:handler name="clickEvent" event="sudipta:cmpClickEvent" action="{!c.takeActions}" />
    <div>
     <sudipta:clickEventMiddleComponent >
          <sudipta:clickEventInnerMostComponent />
     </sudipta:clickEventMiddleComponent>
    </div>

And here comes JavaScript Controller code:
({
 takeActions : function(component, event, helper) {
     console.log("Event handled from Parent Component: " + event.getName());
 }
})

Now the final Lightning App – ComponentEventApp:
The app contains a very basic structure as –
<aura:application >
    <sudipta:clickEventParentComponent />
</aura:application>

Now when you will execute the app and click on the GENERATE EVENT Button, you will get the below output in the console:
Event handled from Inner Most Component: clickEvent
Event handled from Parent Component: clickEvent

Surprised, right? Why not the log is coming from Middle Component?

So now if you see the event cmpClickEvent is bubbled to clickEventInnerMostComponent and clickEventParentComponent. It is not bubbled to clickEventMiddleComponent. The reason behind is that component clickEventInnerMostComponent and clickEventParentComponent are the facet value provider of the event, but clickEventMiddleComponent is not the facet value provider.

A component can be a facet value provider if that component is the outermost component in the markup.

clickEventInnerMostComponent became facet value provider because it is the outermost component in the markup for the component clickEventGenerator which is generating the event. This is defined in the component code – clickEventInnerMostComponent.

Similarly clickEventParentComponent became facet value provider because it is the outermost component in the markup for the component clickEventGenerator which is generating the event. This is defined in the component code – clickEventParentComponent.

But the component clickEventMiddleComponent is not the facet value provider as the code for the component doesn’t contain any reference of the component clickEventGenerator which is generating the event.

Now if you change the code of clickEventMiddleComponent to make sure this component also contains the reference of the component clickEventGenerator which is generating the event like below –

<aura:component >
 <ltng:require styles="/resource/slds090/assets/styles/salesforce-lightning-design-system.min.css"/>
    
    <!-- Aura Event Handler -->
    <aura:handler name="clickEvent" event="sudipta:cmpClickEvent" action="{!c.takeActions}" />
    <div>
     <sudipta:clickEventInnerMostComponent /> 
    </div>
</aura:component>

The console output changes to –
Event handled from Inner Most Component: clickEvent
Event handled from Middle Component: clickEvent
Event handled from Parent Component: clickEvent

It indicates that now clickEventMiddleComponent is also the facet value provider of the event.

I hope you understood the event bubbling effect now as this concept is very important and developer should be very clear to the concept. In my next post, I will explain the Application type event.

If you have any feedback/question, please let me know. Your feedbacks are always welcome.
Share:

Sudden Gift from Salesforce Trailhead -- Feeling awesome

 
Share:

Another Important Step - Trailhead Module - Navigate the Salesforce Advantage


Aha!!!. This time I need to review a new Salesforce Trailhead module - Navigate the Salesforce Advantage. This time it is not any more battleship, rather it looks to me Pirate ship. This Pirate ship will navigate us through the sea – The Salesforce Advantage sea.

This trail is for beginners in Admin, Developer, Business User scope. Once you complete this trail, you will be aware of the key differentiator that makes Salesforce unique and successful. At the same time, you will understand Salesforce’s core values, innovative technology, and vibrant ecosystem.

The first module: Salesforce Success Model
This module comes with two submodules. The first submodule – “Getting to Know Salesforce” explains what is salesforce and how salesforce will be benefits for business. The second submodule – “Introducing our Four Core Differentiators” explains the importance of customer success in Salesforce. Here we are having the Salesforce’s 1-1 model of Giving back.

Once you complete this module, you will be awarded with the below badge:

The second module: Salesforce Cloud Benefits
Like the above one, this module also comes with two submodules. The first submodule – “Succeeding with a Complete CRM” explains a very basic questions – Whether Salesforce is an app or a platform? At the same time, this submodule explains how Salesforce’s Complete CRM evolves with customer’s requirements. The second submodule – “Propelling Your Business with the Cloud” explains the basic of cloud computing and why Salesforce decided to do operation in cloud. At the same time, this section explains the benefit that customer receives being in cloud.

Once you complete this module, you will be awarded with the below badge:

The third module: Salesforce Technology Basics
This module comes with 4 submodules. The first sub module “Getting behind the trusted cloud” talks about the trust which Salesforce built to become World’s most trusted cloud platform. Describes Salesforce’s security model and I believe this module is an inspiration to check out Salesforce’s security model implementation. The second sub module “Learning the Value of Multitenancy” explains about multitenancy and the advantages of having this in Salesforce. The third sub module “Understanding the Power of Metadata” explains one of my favorite topic i.e. Metadata. This explains the how flexible the Salesforce platform is due to availability of Metadata, how upgrades can be done seamlessly die to Metadata. The last sub module “Experiencing Fast App Development and Customization” talks about different paths of fast app development and also the components available during fast app development. At the same time, this section talks about the when to go for Customization rather than Configuration.

Once you complete this module, you will be awarded with the below badge:

The final module: Salesforce Ecosystem
This module again comes with two distinct sub modules. The first sub module “Leveraging our Community, Resources, and Events” talks about the success community that Salesforce is having. At the same time, it tells you to get connected to provide/share ideas, answers and collaborate with each other. Sharing is Caring. The second sub module – “Stopping, Collaborating, and Listening” tells about the how as an individual you can connect to Salesforce via a Salesforce MVP, or through a user group or any other mediums.

Once you complete this module, you will be awarded with the below badge:
After completing this trail, I can explain Salesforce in a much better way to my customers. Requesting others also to go through this trail and make yourself comfortable. Again a special big THANKS to Trailhead for this trail.


Share:

Service Console - How to open the detail page by clicking on hyperlink(formula field) in Sub-Tab

This post will explain how to open the detail page in a sub-tab after clicking on the hyperlink.

Recently I faced one problem where I need to open the details page of a record in sub-tab inside Service Console by clicking on the hyperlink.
Normally if you have any lookup field in service console layout, the field will appear as hyperlink and clicking on the link will open the detail record in sub-tab.
But in my case, I need to make a custom formula field with return type as Hyperlink. Making a formula field as hyperlink is very easy and if you add the field in the page layout, that field will appear as hyperlink. But the problem comes when you click on the link. Clicking on the link will open the page in another browser tab, which is a little odd. User may feel that they are thrown out of the service cloud console by clicking on a record.

So to improve this user experience, we need to open the detail page in the sub-tab of service console. Below is the formula field which display “Product Name” in the page layout as hyperlink and clicking on that link will open the product detail page in sub-tab by passing the product id.

HYPERLINK("javascript:
if(typeof(srcUp)=='function') {
srcUp('/" & Product2.Id & "?isdtp=vw');
}"+ " else {
window.location.href='/" & Id & "?isdtp=vw'
}",
Product2.My_Product_Name__c, "_self")

Sharing the information here so that it can help others. Please let me know if you have any better approach to achieve the same.


Share:

Trailhead brings more excitement with new modules and trails


Few days back, Trailhead released 1 new trail and 6 new trailhead badges. All the tutorials are awesome. Last night, I have completed few of them and I am really impressed with the contents of the tutorials. To me, Salesforce's Trailhead is the best online training material we can have to learn Salesforce.

I will explain what you will learn after completing these new modules.

Apex Integration Services -


While integrating Salesforce with other system, the key challenge for developers is the lack of knowledge regarding the different possibilities available to integrate force.com platform with external systems. 

This new module is providing the easy step by step approach to learn the options available. The exercises are really challenging and it is highly recommended to crack the exercises to make sure you understood he concept clearly.

Apex REST, SOAP and Web Services are explained in really great way. Though Trailhead is telling that it will take 2 hours to complete this module, but I recommend to understand the concept very clearly and crack the exercises even if it is taking longer than 2 hours for you.


Advance Formulas -
This module is truely amazing. I think once you complete this module, understand the concept, practice the examples and crack the exercises, you can mark yourself Salesforce Formula Expert. 

This module is part of the new Trailhead trail - Advanced Admin. As part of this module, you will write few cool validation rules and some complex formulas. This module comes with a very important thing - debugging the formulas, some really complex formulas.

Salesforce recommends a little less than 3 hours will be required to complete this module. Once you complete this module, you will have few complex but important formulas available to you, you know where to go in case of any help required, how to follow coding standard, how to debug formulas. 

I would recommend you to install a chrome extension "Salesforce.com Enhanced Formula Editor" which will automatically enhance the formula text area with the Edit Area code editor. This extension is developed by Kyle. You can install it from here.


Salesforce Lightning Modules -
Apart from above two modules, you can enhance your lightning knowledge with two new modules.
Lighting is the future of Salesforce. With these two new modules, you will get to know how chatter works in Lightning experience and how to import/export data using data loader/import wizard.

Battle Station App -
With this module, you will understand the basic of Salesforce platform by building an Battle Station App. There is another interesting part of this module. If you complete this module before 31st December'15, you can get cool prizes also. 
The project will teach you how to create apps, build custom objects and fields, write business logic using process builder and workflows, how to create reports and dashboards and finally how to use SF1 mobile app to expose the functionality for mobile devices.

I would request each of you to check these modules. Enjoy learning Salesforce through Trailhead. And please post your completed badges screenshot. Now you can link those with your LinkedIn profile also. Here is mine Trailhead profile -

Finally wishing you all Very Happy and Prosperous New Year 2016


Share:

Another Powerful Trailhead module - Event Monitoring



Salesforce introduces Trailhead – a fun way to learn Salesforce. It doesn’t matter whether you are Salesforce Admin or Salesforce developer, there are bunch of modules available for your based on your career path. The more modules you complete, you will get more badges and those badges will be attached to your profile. So you can see yourself going stronger and stronger day by day. That is the primary goal of using Salesforce Trailhead – Make yourselves a better Salesforce Admin or a better Salesforce Developer.

To achieve your goal, Salesforce Trailhead team recently introduces three new admin modules –
Out of these above three modules, the module which really looks very interesting to me is the Event Monitoring module. I immediately jumped into it and completed the same. Once completed, I have realized the power of event monitoring. Monitoring event is so important to a Salesforce Admin. In my daily day to day to work, I normally receive so many requests which now I can answer quickly with the help of event monitoring.

Let me tell you what makes this module so interesting.

This module consists of three sub modules as shown below –



The first sub-module - Get Started with Event Monitoring –
This sub-module explains the basic like what is event monitoring, what are different types of events present, use cases where event monitoring should be used. But the key part of this sub-module is: the API first approach. This event monitoring is an API only feature. You will not get this feature inside setup area. It explains in which object event logs are stored and how you can retrieve the same.

Like any other modules in Trailhead, this module is also having an area – which I normally call – “Judge yourself”. You have to answer few multiple choice questions and if successful you will get 100 points.

Once I have completed this sub-module and earned my 100 points, it inspired me even more to go to the next sub-module Query Event Log Files

The second sub-module - Query Event Log Files –
This module is one for which I was waiting – how to query event log files. This module will explain what is API first approach. This module also explains how we can query an EventLogFile object using SOQL and REST explorer. Another important part of this sub-module is that it compares SOAP and REST APIs for querying event log files.

This sub-module also comes with multiple choice questions, but the questions are getting harder here. So you need to read the questions and answers very carefully to choose the right answer. At the end of this, you be awarded with 100 points.

The final sub-module - Download and Visualize Event Log Files   -
This module is having many information, so completing this module is not possible in 15 mins. At least it took 45 mins for me to complete this sub-module. This module describes the structure of the downloaded event log files, how to read the downloaded file. As downloaded event log file can have many information which may be you are not interested, so this sub-module will explain how to extract only the important information from downloaded log file. This sub-module comes with multiple choice questions (mainly programmatic questions) and same like other sub-modules, here also you will be awarded 100 point upon completion.

Finally – I received the badge on my profile. I would request all to complete this module and make yourself a better admin/developer. 


Share:

Book Review - “Salesforce Reporting and Dashboards” by Johan Yu


Recently I was reading the book – “Salesforce Reporting and Dashboards” by Johan Yu. 

Johan is a very familiar face within Salesforce community.
You can always reach Johan @simplysfdc, Linkedin and last but not the least his blog SimpleSFDC. I am a big fan of his blog.

The book - “Salesforce Reporting and Dashboards” contains a good selection of guides for solving reporting requirements. It started very well, I mean starting from very basic and then slowly moving towards more and more complex reporting requirements. When I started reading this book, I thought what makes this book different from Salesforce’s Trailhead session on reporting - Reports & Dashboards. And here is what I feel. When Trailhead session is good to make you comfortable with Salesforce’s Reporting concept, but still there are so many complex scenarios which you need to handle in your day to day work. And this book is definitely an answer to those complex scenarios. This book will make sure that you can call yourself a “Reporting and Dashboard Expert” once you have gone through the entire book. Yes you hear it correctly – It’s “Reporting and Dashboard Expert”.

I have experienced some difficulties during my career as Salesforce Administrator/Developer to provide solutions to some of my client’s reporting requirements. So when I was going through this book, I realized this book contains some effective remedies to many common problems. The solutions are provided in a very straightforward way – no unnecessary waffle – just straight to the point and explaining step by step how to implement the solution.

I personally love few sections from this book. Like
  • Hands-on – subscribing to a report – This really explains how to subscribe to a report and see the subscription in Salesforce1. Integration Salesforce1 in the hands-on is really a plus point to me.
  • Chapter 5 – Learning Advanced Report Configuration – This chapter is the jewel. Many important  configurations like bucket field, formula field, Grouping, Scheduling report etc. are explained here in a very simple way. To me this chapter is the one I need to refer again and again.
  • Chapter 8 - Accessing Historical Data – This is also a very important chapter. Accessing historical data over report is a very common requirements, but to implement the solution, one should have a very clear understanding on how it should be done, what can be done and what cannot be done. This chapter is a one stop shop for all these answers.
  • And finally Chapter 9 – Dashboard and Reports in Salesforce1 – Believe me this chapter is the differentiator. This chapter explains the concept and most important the limitations of Salesforce1 app. Understanding limitation is very important in the context of Salesforce and it will make the design more concrete.
In summary, if you are a Salesforce Admin looking to explore some of the advances concepts of Salesforce Reporting and Dashboard, then “Salesforce Reporting and Dashboards” is a must have. I am now encouraging all of my admin colleagues to read this book and challenge their solutions – because I believe by challenging ourselves, our best will come out.

You can buy this book from Amazon, PACKTPUB.


Share:

INTEGRATE MAPBOX WITH VISUALFORCE TO CREATE BEAUTIFUL MAP - Part III

In continuation with my previous two posts -
today, I will explain how you can fetch geographic data from Salesforce and accordingly show them in Salesforce.

To start with let me first create an object - Household where I can store geographic information. Below you can find the object details - 
Now the Visualforce page - Mapbox Click here

Now when you will open the page you will see the three locations plotted.

In this example, I am using apex:repeat to prepare the GeoJSON data. To understand what is GeoJSON data, below is what Wikipedia stating -

Once the GeoJSON data is ready, I am adding the same with featurelayer -

L.mapbox.featureLayer(geojson).addTo(map);

Finally, I am using the click event to show the Household name when user clicks on the points inside map. The code for that - 

//Show popup with information on mouse click
myLayer.on('click',function(e){
     e.layer.openPopup();
}); 

In my next post, I will explain how you can draw geographic areas inside map using Mapbox. Please provide your feedback. Thanks.
Share:

INTEGRATE MAPBOX WITH VISUALFORCE TO CREATE BEAUTIFUL MAP - Part II

In continuation to my previous post - INTEGRATE MAPBOX WITH VISUALFORCE TO CREATE BEAUTIFUL MAP - Part I, today, I will play with few attributes from Mapbox to make the map more interactive.

Below are the things I will do -
  • I will add different layers and explain how to toggle between layers.
  • I will add scale control
  • I will add attribution control
  • I will set the location in the map
To understand what is layer and how Mapbox works, I would request you to go through the official Mapbox tutorial @ https://www.mapbox.com/guides/how-mapbox-works/. Since from this post, we will go into deep with Mapbox, so it is better to have your basic clear in terms of how Mapbox works and what are the terminologies they use.

Let's go directly to the Visualforce Page Mapbox_2 click here

Now if you open the Visualforce page, you will see - 
Clicking on Layer icon, you will see -
Choosing Sudipta First Map, you will see different map like -

Cool!!. There are many more attributes available which you can check from Mapbox Developer resource @ https://www.mapbox.com/mapbox.js/api/v2.2.1/

In my next post, I will explain how you can retrieve geographical data from Salesforce object and show them in map with Mapbox API. Sounds interesting, right!! I am working on this now, very soon I will share the information with you all.

Till then, if you have any feedback, please share with me. Thanks.
Share:

Never miss a post. Subscribe to get latest blog posts, right into your email box.

* indicates required

Labels

Salesforce (105) Apex (52) admin (28) visualforce (21) ADM (20) dev 501 (19) lightning (19) integration (18) learn salesforce (18) 501 (16) javascript (14) SOAP (13) tutorial (11) Advanced Apex (10) Certification. (10) Kitchener Developer Group (8) Trigger (8) test class (8) Certification (7) flow (7) security (7) unit testing (7) Advanced Admin (6) Lightning Experience (6) SOQL (6) Sharing and Visibility (6) design pattern (6) developer (6) report (6) salesforce release (6) service cloud (6) trailhead (6) use case (6) Lightning Feature (5) New Features (5) css (5) dashboard (5) debug (5) formula (5) mobile (5) solution management (5) JSON (4) Kitchener User Group (4) Knowledge Management (4) Lightning Web Component (4) New Feature (4) Sales Cloud (4) Salesforce DX (4) Tips (4) WebSphere (4) best practice (4) cast iron (4) component (4) deployment (4) event (4) github (4) html (4) map (4) polymer (4) profiles (4) release (4) responsive (4) tdd (4) ui (4) visual studio code (4) Architect (3) Article (3) Live Chat (3) Online Event (3) Opportunity (3) Performance (3) Products (3) REST (3) Role (3) SOSL (3) Salesforce Certification (3) Scratch Org (3) Spring 20 (3) Study Notes. (3) Summer15 (3) VS Code (3) Web Technology (3) Winter21 (3) automation tool (3) configuration (3) dynamic apex (3) license (3) mapbox (3) singleton (3) version controlling (3) AppExchange (2) Asynchronous Apex (2) Asynchronous callout (2) Aura Framework (2) Bulkify (2) Community (2) Data Architecture and Management Certification (2) Devops (2) Distributed Version Controlling (2) ES6 (2) Eclipse (2) Einstein (2) Enhancement (2) Enterprise Territory Management (2) Financial Services Cloud (2) Force.com IDE (2) Governor Limit (2) Groups (2) IBM (2) Implicit Sharing (2) JourneyToCTA (2) LWC (2) Lightning Design System (2) Live Agent (2) Metadata (2) PD II (2) Price Book (2) Queueable (2) SFDX (2) Sharing (2) Spring 15 (2) Summer17 (2) Territory (2) Virtual Event (2) ant (2) basic (2) chatter (2) code coverage (2) coding (2) communication (2) console (2) controller (2) documentation (2) dreamforce (2) git (2) jquery (2) logging (2) object (2) permission (2) process builder (2) salesforce1 (2) strategy (2) visual workflow (2) xml (2) Action Plan (1) Action Plan Template (1) Activity Timeline (1) Advanced Currency (1) Agent Productivity (1) Analytics (1) Apex Sharing (1) Arrow (1) Batch (1) Bots (1) Browser (1) Bulk data load (1) CTA (1) Calendar (1) Canon (1) Case Management (1) Celebration (1) Cheat Sheet (1) Classic (1) Compare (1) Confetti (1) Constructor (1) Contact Center (1) Continuation (1) Continuous Integration (1) Convert (1) Cookie (1) CumulusCI (1) Custom Metadata (1) Custom Object (1) Custom Permission (1) Customer (1) Data Model (1) DataCategories (1) DataGrid (1) DataTable (1) Dated Exchange Rate (1) Decorator Design Pattern (1) Dev Hub (1) Development (1) Diwali (1) EDA (1) ESLint (1) Education Cloud (1) Email (1) FSC (1) Function (1) Future (1) Global Gathering (1) Goals (1) Guest Access (1) Guest Profile (1) Guest User Sharing Rule (1) Guide (1) HEDA (1) Higher Education (1) Household (1) Husky (1) IDE (1) Ideas (1) Improvement (1) Invocable (1) KPIs (1) Knowledge (1) Large Data Volume (1) LastModifiedDate (1) Lightning Knowledge (1) Manage Currencies (1) Manual Sharing (1) Metrics (1) Multi Currency (1) New (1) OOPS (1) OWD (1) Omni-Channel (1) Optimize (1) Partner (1) Permission Set (1) Person Account (1) Photo (1) Pipeline (1) Platform Developer I (1) Platform Developer II (1) Presentation (1) Prettier (1) Product Schedule (1) Profile (1) Promise (1) Prototype (1) Public Site (1) Query Plan (1) QuickReference (1) Related records (1) Reports (1) Retrieve (1) Role Hierarchy (1) SAL (1) Salesfor (1) Salesforce Advisor Link (1) Salesforce Labs (1) Salesforce Optimizer (1) SalesforceDx (1) Schedule (1) Session (1) Sharing Rule (1) Sharing Sets (1) Site (1) Skills (1) Snap-ins (1) Spring 17 (1) Summer14 (1) Summer16 (1) Summer19 (1) Switch (1) SystemModStamp (1) Tile (1) Timeline (1) Unauthorized Access (1) User License (1) Users (1) Validation Rule (1) Web (1) Webservice (1) Winter'15 (1) Winter'17 (1) access (1) actionFunction (1) actionPoller (1) actionRegion (1) actionSupport (1) agile (1) app (1) approval process (1) aura (1) awesome (1) backup (1) bitbucket (1) book (1) campaign (1) change set (1) cli (1) code (1) csv (1) custom button (1) custom settings (1) customization (1) data loader (1) database (1) delegate Admin (1) describe (1) dom (1) duplicate (1) dynamic (1) dynamic form (1) email template (1) email-to-case (1) equals (1) error (1) field-level security (1) folder (1) ftp (1) generic (1) gift (1) global describe (1) hashcode (1) import wizard (1) jenkins (1) keynote (1) long running requests (1) monitoring (1) mysql (1) page layout (1) personal (1) power of one (1) record type (1) relationship (1) request (1) review (1) solution (1) sub-tab (1) survey (1) tab (1) username (1) workflow (1)

Popular Posts

Total Pageviews

Contact Me

Name

Email *

Message *