Friday, December 18, 2020

Salesforce Evolution and Challenges with lightning for service cloud implementation

Salesforce as a technology has been in constant flux since beginning and is always driven by latest technological innovation/security consideration. This certainly has its own challenges but also gives fair opportunity to implementation experts by resetting the base every 3-4 years. While key principals of CRM were always intact but changes in process be it s-control or classic (VF/Apex) or aura (lightning) or LWC (lightning) always brought new unlearning/learning opportunities. In spite of ever changing landscape Orgs are still upbeat as salesforce is always backward compatible e.g. S-controls (precursor to VF) are still supported in some form and so are all classic implementations (potential opportunity lies on transformation side for classic product built during first half of this decade).

While relatively smaller problem is classic to lightning migration where salesforce has provided accelerator and detailed framework for migration that start with need evaluation to gap analysis to post migration validation (probably topic for other time) but probably a bigger problem is limitations in lighting versus classic applicable for new implementation. As it happens with any large product some of the feature missed getting noticed, which results in effort estimate changes from solution design to technical development phase (at least for now) for greenfield product implementation or transformation product (non-salesforce-based product to salesforce product). This limitation list too is reducing in size with each salesforce release considering complete focus on lighting since past few releases. Having said this, some of the limitations will never be fixed for lightning. E.g. famous JavaScript buttons code which were used to override buttons in classic interface. Not because of feasibility but primarily because of security risks associated with JavaScript buttons (potential access by XSS to DOM and BOM which comes implicitly with JS).

Few simple but costly changes encountered during one of the implementation -

  • Salesforce support for lookup relationship on external object. Lookup search on external object is not available OOTB in lightning. This changes/increases the estimate drastically. Possible workaround could be creating a custom reusable lightning lookup field.
  • Feed based layout for case still doesn’t support task and activities tab in feed view. A simple workaround would be to add a related list for activities which will potentially eats the costly screen real estate but will save from custom page layout. Additionally, as far as feasible always pick the feed-based page layout for cases.
  • Feed and search are still not available in lightning. Probably this feature will get delivered in coming release taking into consideration high voting on idea exchange and there isn’t any workaround available as of now.
  • Contact roles on account. Recommendation from Salesforce is to use contact to multi account setting in lightning to address this issue
  • Close case layout has limited feature compared to full fledge setup available in classic. Possible workaround is to create a custom component to address the problem. 
  • Entitlement related list on contact and vice versa. Possible workaround could be to create a component for entitlement and add it on the flexi-page layout.
  • Top-down tab-key order support in lightning page. Typically top-down tab-key ordering helps to navigate to next field below previous field and grouping. Unfortunately, there is no workaround for this other than using default left-right tab-key order in page layout.
  • Another problem which has no workaround is phone number formatting. Phone number aren’t formatted properly for European number (or non-US countries) unless entered in specific sequence.

Last but not the least, some problems are lightning oriented and standard feature becoming nemesis for any custom development (as on date but may not be there in future). One such example is each lookup field give capability to create the record apart from search in create/edit screen. In case if you have created a custom action for creation, you must have to guide/train user not to use the inbuilt feature of creating new record directly from lookup if search doesn’t return any result. This also shows how salesforce wants everyone to stick to OOTB, but it goes without saying with scale and complexity of business scenario’s customization is inevitable. And that’s the fun part and keeps the playground exciting place. 

Moral of the story – While drop the hint how a feature can be achieved during the requirement/functional discussions but be careful not to overcommit if you have seen something working only in classic. Better approach - never switch to classic layout for anything even though it is the most tempting thing to do.

References -

  • Lightning vs classic gaps - https://help.salesforce.com/articleView?id=lex_gaps_limitations.htm&type=5
  • S-controls - https://help.salesforce.com/articleView?id=dev_about_scontrols.htm&type=5 
  • JavaScript button risks and challenges - https://trailhead.salesforce.com/en/content/learn/modules/lex_javascript_button_migration/lex_javascript_button_migration_intro 
  • Lightning roadmap - https://help.salesforce.com/articleView?id=lex_roadmap.htm&type=5 
  • Challenges with close case layout - https://trailblazer.salesforce.com/ideaView?id=0873A000000cMWbQAM
  • External object lookup issue in lightning - https://trailblazer.salesforce.com/ideaView?id=0873A000000CYrsQAG
  • Top-down tab key order issue - https://trailblazer.salesforce.com/ideaView?id=0873A000000cMf9QAE 
  • Case feed search limitation - https://trailblazer.salesforce.com/ideaView?id=0873A000000E3c8QAC 
  • Phone number formatting issue - https://trailblazer.salesforce.com/ideaView?id=08730000000hE5jAAE


Disclaimer - What may be limitation/challenge today may not be a limitation/challenge tomorrow. Safe Harbor. Intent was not to highlight limitation or how salesforce evolved over the years as that is too big task. What are the salesforce help portal meant for :-)

Wednesday, November 11, 2020

Heroku a primer

What it Heroku? 

Heroku is cloud platform (platform as a service - PaaS) that lets companies build, deliver, monitor and scale apps. It is a polyglot platform and thereby gives option to developers to write code in language of their choice (viz. node, python, java, etc. or even a custom buildpack). A typical journey from code to app goes like this - 
build system receives the code (which can be on any language) > buildpack is fetched (specific to coding language) > language runtime is fetched (specific to coding language)> address dependencies > a slug (buildpack + code) is produced which is injected into a dyno to run the app
Dyno is heart of Heroku which is virtualized Linux containers that are designed to execute code based on a user specific command so that app can scale based on its resource demand. It is ephemeral in nature. It does have option for private dyno (available with enterprise edition) which gets its own dedicated virtual network (private space). Dynos can be scaled both horizontally (additional dyno) as well as vertically (dyno size - 512 mb, 1024 mb). This scalability mode gives adequate redundancy and reliability/uptime needed for high frequency portal (e.g. Ecommerce portal) and private mode ensure that data transactions are secure. 

Similarity with Salesforce Ecosystem

Like Salesforce AppExchange marketplace, Heroku offer element market to get addons/buildpacks from where readily deployable code and feature can be fetched and run it in plug and play mode.

Features - Heroku Data Services

Heroku offers fully managed data services which are designed to work together e.g. - Postgres (Managed Relational DaaS), Redis (Managed Key-Value Store as a Service - To distribute the job order or queuing) and Kafka (Managed Kafka as a Service - To manage continuous train of messages. Producer and Consumer are handled via the broker where topic-based entries are split into partitions) which are natively supported.

One interesting feature which comes with Postgres is - follower and fork feature which enables up-to-date read-only copy and snapshot of master database respectively. Followers comes handy for scenario to reduce load on master DB while Forking enables validating/testing the schema migration. Heroku Postgres hobby instance can be useful for stub/simulation-based development where data can be hosted on Postgres and accessed in Salesforce development via ODATA or plain integration (leverage dataclips as an API)

Features - Heroku Enterprise

Heroku Enterprise gives and added level of security feature by giving option to private spaces (topping with shield as addon). Typically, common runtime allows to run and manage dynos in single multi-tenant network in isolated setup with an option to receive communication only from routing layer. But on other hand private space has its own network, routing layer and control plane that aren't shared with other application outside the space and thereby giving additional benefit on top of common runtime. Dyno in private space can communicate with each other directly over private network unlike common runtime.

Features - Continuous Delivery/Deployment (Heroku Flow)

It brings together Heroku pipelines, review apps, Heroku CI and GitHub integrations into an easy-to-use structured workflow for continuous delivery. This close loop setup gives a near-real-time view of application followed by GitHub commit thereby other coding patterns capability to Salesforce to see the changes immediately followed by changes in configuration.

Where Heroku can be used?

Simple answer could be for any custom application for any purpose – be it to extend CRM functionality or to create industry defining B2C UX, or to do data transformation and cleansing, or data analytics or high capacity storage or transportation. But typically, while extending CRM feature or salesforce capability a typical question can come on utility of communities over Heroku. Salesforce Community cloud also give rich user experience and UI but depending on complexity of the use case or primary focus area one option over other can be chosen (e.g. if the application is primarily focused on core functionality coving UI/API then communities is preferred approach but if there is heavy dependency on public content, usage, large data storage or processing then Heroku based application is more preferred approach.)

Where from now?

This was just a tip of the iceberg to get started with Heroku and its utility. To get started with Heroku, signup for a free Heroku account here - https://signup.heroku.com/. Like Salesforce development edition trial org, Heroku trial instance is also available free of cost.


Additional Resources : -
  • Refer to Heroku documentation @ https://devcenter.heroku.com/categories/reference 
  • Heroku Success stories can be found @ https://www.heroku.com/customers/case-studies
  • Partner resources are available @ https://partners.salesforce.com/_ui/core/chatter/groups/GroupProfilePage?g=0F93A0000004nd8
  • 12 Factor App (Design consideration in containerized world) - https://prezi.com/8uldpq91vm4e/the-twelve-factor-app/

Friday, August 21, 2020

Salesforce External Object and Limitations

Note - Another attempt to dilute my blog page and also to keep it revived. Justifies the blog title of a random post :-)

I was evaluating the Salesforce external object, OData 2.0 based connector and its limitations for one of my engagement. While a lot of information was available but it was scattered with nothing concrete available to decide when to choose what. This is an attempt consolidate some key limitations and pointers to choose between the two options. 

On side note - I love writing and making stories out of everything (only when it is in writing)


Evaluation Area

Custom Object

External Object

Data Model

Needs explicit column and data type details for every field for which information needs to be captured

External object data model gets auto created as soon as the external data source is created and synced. Additional columns if created on external object within Salesforce will not get populated unless external system sends that detail.

This will be an advantage as there is no additional information needed from market/requirement other than ODATA connector information and authentication details

Data visibility and sharing

Visibility can be controlled and customized as per requirement.

Visibility and sharing are “all or nothing”. Either all records are available in read-only mode or none of the records are visible. All external object data across the world will be visible to everyone. This might be a concern from requirement/legal perspective.

Record creation/editing/deletion

Record creation, editing and deletion permission can be defined as per requirement.

Records cannot be created/edited/deleted from salesforce and only read-only copy of data will be available. External object records can’t be created if user is not able to search the external id. Search will also be limited to 200 records at a time. Search filters will be limited to External Id (demo org has this limitation, but this needs to be cross checked). May be a concern from requirement perspective. Having said this there is a provision to write via custom route but will be having own limitations. Refer to salesforce link here for additional information on writable external object and additional license requirement.

Connectivity Constraints

Considering data will be inhouse there isn’t any concerns on external system availability.

Depends on external system availability/up-time for data visibility in search results. Row that gets returned can be relatively slower compared to search directly in external system. In case if external system connectivity is not working, user will keep on getting error about connectivity and will not be able to link external object record. May be a concern from requirement perspective. Search outcome will also be prone to system delays.

Storage Constraints

Considering data will be inhouse this will take consume available space. Each record takes almost 2KB and thereby total space consumed by roughly 60 Mn record is 12 GB of space

Storage is never counted against salesforce storage limit. Advantage as space consumed is 0 technically.

Validation and requirement rule on external object, reporting

Data is within salesforce and all salesforce-based features are available.

External object maps data from external system and thereby limitations of external objects are applicable. Activity, Attachment, Field tracking, notes, record level security, validation rule, workflow not available. Reporting record limit is 2K. Einstein analytics will be needed for reporting on entire data set. There is also limitation on custom fields. Entire list of limitation available in salesforce link here.  In case if there is a need for audit requirement, reporting or requirement validation on external object, those won’t be available. May be a concern from requirement perspective.

Call out limit (OData)

No such limit as record is stored within application

Each time user clicks on external object tab, view external object record, open a parent record to which external object is linked, search, access via apex will be counted against the limit. Limit is 20K OData call out per hour. Each time a parent record is opened with an external object record linked, will consume the limit. May be a concern from requirement perspective if application has a global footprint and high volume. Refer to additional details in salesforce link here.


Friday, April 24, 2020

Corona Talkies - Day 31

Third post in corona talkies. None of the post has anything to do with a movie or theatre but instead can be passed as a random note. With Lockdown 2.0 announcement by PMO India, what started as a 21 day confinement has turned into a 40 day no-outdoor-activity/no-social-gathering event. This also gave opportunity to observe and ponder over few aspects - 

  • I was talking with few of my friends who happen to stay at their workplace which is far away from places (well any place within city itself is too far considering lockdown but worry had higher intensity with city, state and country boundary based distance) where their parents are staying during lockdown. I am sure worries will be at both the end at the moment but for a change child's also started worrying about parents which was only parent's past time earlier. Probably, extra time at hand at each end to think how possibly things can go wrong brought those worrying feelings at forefront. 
  • I have tagged myself during lockdown with an old couple who happen to stay in apartment block so as to ensure that they get their daily grocery needs sorted without them being stepping out of apartment premise. While I wasn't really going out specifically for any of their asks but instead clubbing their request along-with items which I had to buy anyways. But interestingly, during each visit to handover something, I get to hear that how much trouble I am taking for them and how thankful they are for this gesture. It's good feeling nonetheless to assist someone but repeated thank you note is certainly embarrassing.
  • This lockdown gave opportunity to listen to constant chatter from kid and also closely observe their behaviour. Noticed kid mimicking my own action and behaviour at each point and also helped to understand why they do what they do. This creates an additional burden (yes, burden) to do the right thing or guide them to do right thing keeping aside your own insecurities and lack of confidence to do that task. Probably, a leader role where leader themselves aren't really capable to do the thing on own at first instance (or they never achieve) but then convert their fears into confidence to get many more those who are following him/her achieve the tasks for greater good. Life is really interesting
  • For some reason there is an increased emphasis on learning during lockdown. Why not all the time and what stops people during regular time? Or this is just the IN thing, that one thing to show-off?

On side note - 78 episode (35 minutes each) of Ramayan got over but Corona didn't and looks like stop loss set with 96 episode (60 minutes each) of Mahabharat too will go for toss. Corona waiting for Shaktiman (450 episode of 30 minutes each) to get over will probably be catastrophe far beyond negative crude futures price or Franklin templeton 6 debt funds going dry. Later actually reminded me about Third curve lecture shared by Mansoor khan during PGSEM inauguration.

To end - encountering daily with below statements and not necessarily in office conference calls - 
  • Are you guys able to see my screen? 
  • Is my screen visible?
  • hellooooo! am I audible? 
  • Can everyone go on mute please? 
  • Those who are not talking kindly go on mute?
On last 2 points - people are most likely doing this just for fun part of it. Else, how come they keep their line unmute even after explicit muting by the host. It is comedy to see how host struggles in each call to get people muted explicitly and work through comments thrown on corrective measures by some of the participants in chat window. ;-)

P.S. - Another incoherent and random post. This post was supposed to go live on Lockdown day#25 but for some reason or other I couldn't put the content after starting with it. Not that it makes any difference to reader but for me to remind that I keep pushing few things forward. Ideally those items should be closed then and there.

Wednesday, April 15, 2020

Life at time of corona

As saying goes - hard time teaches the most valuable lessons and brings us together. This pandemic and resulting lockdown brought entirely new perspective on community living, family, colleagues, friends. While nothing really changed from deliverable's/work perspective as if world is still the same but how we communicate with each other did changed. On side note, received a quote from whatsapp university which says - "If you would like to know how it feels to be a IT Employee during the Novel coronavirus pandemic… Remember when the Titanic was sinking and the band continued to play? - We’re the band". Interestingly, similar kind of customised quotes were being forwarded for bank,  healthcare, hospitality, police, retailer employee's, etc. Which made me think probably all of us were part of band and no one was taking care of ship which led to sinking of the ship. Few might have watched Titanic followed by these forwards, if they have not watched in past. Some extra revenue for streaming portals. ;-)

On professional front, each touch-points with colleagues/team/client typically started with small talk on - how everyone is doing and whether all was OK at their end unlike pre-lockdown phase where meetings mostly started with set agenda. On personal front, realisation of fact that movement is blocked intracity itself, forget about intercity/state/country was worrying with parents away. Those familial concerns became prominent which I didn’t observed before came in forefront. Similar worries of friends/office colleagues for their siblings/parents were noticeable too.

Me and my wife being at home at same time during day meant weekend for my preschooler kid, there was constant nudge during initial days from his end to go out to his cousin's house as per the usual routine for each weekend. It was a challenge to make him understand that it's a regular work day and we can't go out anywhere because there are no transport means. Obviously, incessant calls/meetings for both my wife and mine made it easy and helped him to understand the fact that it is working day and parents are not going out as something wrong outside. He too gradually found new ways to engage himself and thankfully with daily traffic game (queued toys) which he played, I don't think I have missed Bangalore traffic at all.



Once adjusted to new normal, predictability returned in day and had some free time to listen to son's chatter and reasoning’s that why I should be playing with him more or even write something on blog page which was crying for some posts since past many years. I have become more appreciative of efforts which my wife put at work/home (well, it was mutual and will probably help in future) and made an attempt to distribute house chores among ourselves to avoid anyone burning out. Now we are truly 'maid' for each other. Took some master class on blockchain, enterprise architecture and Heroku when had opportunity to take them. Last but not the least, rearranged the bookshelf and placed books at key locations to get ample cues to pick and read those half read books which certainly helped.

To end, taking multiple perspectives into consideration’s Dicken’s quote is certainly relevant now - It was the best of times, it was the worst of times..

P.S. - This is unabridged version of writeup which I shared with for my unit newsletter. 

Sunday, April 5, 2020

Corona Talkies - Day 12

This is second post in corona talkies. While no one is reading my blog page with me being away for more than 2 years still want to highlight standard disclaimer. Kindly don't take any of content personally and there isn't any intention to hurt any religious/political sentiment (or any sentiments which are larger than life).

We are living in world were few people have lost sense of what is right and what is wrong. And at same time we have animation series giving interesting perspective. As rubble from paw patrol quotes when his TV show is not coming because of faulty satellite which fell out of orbit and heading towards adventure bay to destroy the life - "I feel bad as I was only thinking about my TV show when entire adventure bay is in trouble". And at same time here we have few folks who were thinking only about their rituals and customs during such hard times which had impact on entire country. If it was not intentional then nothing worse than this and if it was intentional then guess it is state matter which they will handle anyways after appropriate investigation.

Disease which is not looking for country/religion/affluence boundaries and treats everyone equally to destroy and devastate life should be handled with utmost care. Follow every thing which you believe but only from boundary of your home in these hard times. As each person stepping out is increasing the risk of exposure to many other people over the period because of its contagious nature. 

Migrants were another problem but with no work work, no money and no access to food topping it with risk on life with no roof on head - they hardly had any options until govt took notice of this problem and did arrangement for them. Obviously at heavy advertisement cost to spread the awareness but what was other option? [Couldn't find news link from moneycontrol which had an interesting perspective on this]. And if picked your interest and know bhojpuri/hindi you can listen to comment from Ravish Kumar an Indian journalist. Analyzing content will F your mind but always good to hear each side of stories. 

Leaving aside all negative points, positive things that has happened with Corona lockdown from my perspective. 

- Stock market are at sensible number upto some extent. I personally believe anything below 7K for NSE is at Sale which will be bigger than big billion sale. And as it happens during all sale, I end up not buying anything and story may not be different here as well - paisa nahin hai bhai.

- Kids and families are having some quality time provided they are together after settling down during past 10-12 days. First week may have been hard with lot of arguments (probably). After all, while adjusting with work colleagues during long work hour we had little time to argue back at home and probably forgot how to adjust for longer duration while being at home. 

- Unprecedented order level for online grocery platform that they aren't taking any further orders. Only unfortunate part is they are constrained for delivery with reduced movement and lesser delivery folks(migrants?)

- Human side of people are visible (up to some extent) - be it paying their maid/house help even when they aren't coming home to work, or understanding that resources are scarce and limit the wastage and coming together to support our neighbors and society.

- Last but not the least pollution which unfortunately will be back once business as usual resumes. But it is unbelievable to see note that people that they are seeing himalayan range from Jalandhar and Burj Khalifa from Noida. Pollution hin kam huwa hai bhai, eye sight or bich ke opque item nahin gayab huwe hain. Will wait to hear soemone saying they are seeing Eiffiel tower from bangalore and statue of liberty from patna. Statue of unity nahin dikh raha tha kya bhai Noida se? Left mein thoda sar ghumate to dikh jaata.

Note - All links are copied from google search top result. Kindly don't assume those link to contain fact and can be considered as that person's/media house perspective only.

P.S. - Leaving it to your interpretation but remembered a sanskrit sloka from  7th Class NCERT Book (Obviously it is from Geeta) but had to share the source as always. 


Yada Yada Hi Dharmasya Glanirva Bhavathi Bharatha,
Abhyuthanam Adharmaysya Tadatmanam Srijami Aham.

Praritranaya Sadhunam Vinashaya Cha Dushkritam
Dharamasansthapnaya Sambhavami Yuge-Yuge.

Meaning in link here. Jai ho!

Friday, April 3, 2020

Corona Talkies - Day 10

New attempt to dilute the blog page once again and none other than coronavirus (or is it china virus as POTUS mentioned?) should be blamed if you happen to bump into my blog page.

Few observations at time of corona.

1) One should watch sansani at 11 PM at ABP news. The guy is so loyal to channel without an iota of care towards people watching TV that he end the show with comment "I will meet you again tomorrow afternoon till that time keep watching ABP news". Koi daaku makeup mein aaye anchor bhai saheb ko batao ki subhratri (good night) karke bhi koi cheez hoti hai jo raat ko 11:30 PM pe bol sakte hain. 

2) Dish service providers might have seen some spike in network load as quite a few people with whom I interacted recently have recharged their long dead setup box. For uninitiated - Your internet service won't be able to take load of Ramayan, Mahabharat, Saktimann and Sansani (chain se sona hai to jaag jaao - aur dekh ke sona bhul jaao)


More to come till one between corona or ..... doesn't end.

First post for 2019 and 2020 for not so happy new year. But as one great person named Andy Dufresne once said - Hope is a good thing, maybe the best of things, and no good thing ever dies. So I hope this new year too to be a good new year like how it had been for past so many eon's for human race and earth as a whole.