Thursday, June 13, 2013

Salesforce Communities Replaces Portals


Salesforce recently announced that Salesforce Communities will be replace Customer Portal and Partner Portal.  This would be great for the customers who currently can't get all the juice out of portals.  For some-time now (4 months), I have been playing around and using communities during the pilot and think that Salesforce finally found a way to make Portals as a true "social" platform for Salesforce's users to communicate with its customers and partners.  I believe there are several advantages for Salesforce communities to switch to the communities if they are already using Customer or Partner Portals. The current customers can readily take advantages for 
  • Chatter:  I have seen most of the times when customers hear about Customer or Partner portals, they ask if Chatter can be used.  With Customer/Partner Communities, this feature is available OOTB
  • Use of Permission Sets:  If you have used Permission Sets in Salesforce, you would love this features.  You can use profiles and permission sets to configure access to Salesforce objects and resources
  • Better Branding:  The branding of communities goes all the way from look and feel to email templates and also chatter.  Currently branding of portals (unless some serious customizations) is awful and needs some serious TLC. With communities, the look is somewhat similar to internal uses see and als the branding can really customized easily.  This will make the interface consistant with rest of Salesforce
  • Better Login & forgot password functionality:  No need to configure Sites which will make the login more simpler.  The forgot password functionality will be similar to how currently Salesforce.com sends out an email to uses to reset password.  In the customer portal, the email was sent out temporary password.  With Communities, this security hole is fixed, which means also reduces the need to write custom password reset functionality if you are too serious about sending user name and temp. password in the same email.
I'll add more features and "how-to" in future blogs.

Thursday, May 16, 2013

Version problems with Salesforce Lists and Ext.Js

Have you ever wondered, once you use javascript in your left side bar in Salesforce, your list pages just hang and see the ever ubiquitous, spinning wheel?
Well, today I have encountered this as we have been rolling out are beta release of a Appexchange product.

The issue is that when you are using Ext.JS for any development and JavaScripting, make sure that those are compatible with Salesforce Ext.JS libraries.  Otherwise, you will run into JavaScript version libary problems and Salesforce Lists will just not work.  Salesforce Lists usings Ext.JS libraries to pull the lists and this causes all the trouble

Monday, May 13, 2013

Leading Big Vision from Heart

I've borrowed this title Stanford University's Leadership series podcast from Justin Rosenstein  of Asana.  Everyone should hear this podcast to see how a small startup is able to lead a change in organizations to share resources and become more collaborative in solving complex problems.

We so often forget in daily pony-and-dog-show by leaders that how important it is for the employees to focus on vision of the organization.  It is primary job of the leaders to ensure that every decision taken by them are small steps is towards that vision.  This will enable employees who serve the customers understand how they can forward that greater vision.  While many may see this is all "text book" speak and does not happen in organizations  I would call as BS.  I had the privilege of working with some true leaders in their capacity who have followed the principle of leading through big vision and I'm very grateful for them for mentoring me.

The basic responsibility of a leader is to make sure, they let the employees understand the goal and purpose.  The leader is the captain of the ship. An organization may have performed well in the past and in near term, but without a goal and purpose, it is like a drunk captain who is enjoying the catch (s)he just had caught and not worried of the storms in the horizon.   The employees too will ignore what is in the horizon and just enjoy the party on-board, and think who caution on the impending storm are just people who don't understand how to party.  In these cases, the captain of the ship who does not take any responsibility and is happy to maintain the status-quo only to see in few years, they will be like 100s of organization buried by the storm on "change".

In this every changing world, technology is enabling competition a small 5 people company to compete with a large corporate.  The same technology if not adopted quickly is risking companies(For Example BMC Software) to go out of business is a telling tale of how leaders can really screw-up organization and employees from having a leaner, open and collaborative environments.


Sunday, April 14, 2013

Google's changing focus

Recently Google announced that it is pulling the plug on Google Reader on July 1st 2013.  It was a weird feeling I was reading about this in Google Reader itself.  I've been using Google Reader since past 4 years regularly.  I feel this is one tool that Google has produced that is simple, easy to use and meets the needs.

From Google's perspective I totally get it why they want to go away from Google Reader.

  • It is not an effective advertising revenue generator
  • Is not as "Social" as Google+
  • Standalone product and does not integrate with other Google's ecosystem 
  • Does not serve Google's enterprise push:  Google's focus is not on its enterprise than regular common users as its add revenue has reached a crest

Monday, February 4, 2013

Apex Mobile User License Explained

Last week, I was looking at the org. license details of one of our customers who wanted to see if they can use the mobile license.  They did not have mobile licenses or purchased any.  While looking Company Profile section of the Setup, I found that they had "Apex Mobile User" Licenses.  As this does not explain the difference between "Apex Mobile User" and "Salesforce Mobile" licenses, I contacted Salesforce and got a very clear and conscience explanation of these different type licenses

Apparently I was informed by SFDC that "Apex Mobile User" and "Salesforce Mobile" licenses are the one and same.  Apex Mobile User License have full support of mobile features of Salesforce.  This license can work on Visualforce, Page Layouts, Standard or Custom object of Salesforce.  Each users will have to enabled explicitly to enable them for mobile devices.

So, now that the customer has Apex Mobile licenses, their team can leverage these features.


Sunday, September 2, 2012

Working with JPlayer and Visualforce

I recently came across a need to have audio on a Visualforce pages.  While embedding a flash based audio would be easy enough to do, it would not solve the purpose as flash is not universal and compatible across.  I started off with HTML5 audio tag.

<audio> tag makes the life of a developer easy.  I tested in Firefox, Chrome and Safari and it was working grand.  Now comes the bummer IE9.  Even though it is written everywhere that IE9 supports audio tag, there is a catch.  IE9 supports only the events of Audio tag but no direct support as other browsers provide.  Moreover the older version of IE (IE8 and IE7) do not support so in a way there is no way you can use audio tag yet considering IE is still one the most users browsers in the market.

Other than the standard browser support, the VF page also had to work on mobile platforms.  jPlayer is on of the most widely used jQuery plugin that addresses this very issue of compatiblity at the same time providing a very nice UI elements to manipulate

Here is the visual force example of using jPlayer plugin with jQuery to make the pages audio enabled.  jPlayer provides nice documentation for events and properties of the plugin



1:  <!DOCTYPE html>  
2:  <apex:page showHeader="false" standardStylesheets="false" >  
3:    <head>  
4:    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  
5:    <apex:includeScript value="{!$Resource.jQuery14}" />  
6:    <apex:includeScript value="{!URLFOR($Resource.jPlayer,'jPlayer/js/jquery.jplayer.min.js')}"></apex:includeScript>  
7:    <apex:stylesheet value="{!URLFOR($Resource.jPlayer,'jPlayer/skin/blue.monday/jplayer.blue.monday.css')}"></apex:stylesheet>  
8:    <script type="text/javascript">  
9:      $(document).ready(function(){  
10:        alert(this.internal.flash.id);  
11:        $("#jquery_jplayer_1").jPlayer({  
12:          ready: function () {  
13:            $(this).jPlayer("setMedia", {  
14:              mp3:"{!$Resource.Q00000001mp3}",  
15:              oga:"{!$Resource.Q00000001ogg}"  
16:            }).jPlayer("play");  
17:          },  
18:          swfPath: "{!URLFOR($Resource.jPlayer,'jPlayer/js')}",  
19:          supplied: "mp3, oga",  
20:          solution: "flash, html",  
21:          wmode: "window"  
22:        });  
23:      });  
24:    </script>  
25:    </head>  
26:    <body>  
27:      <div id="jquery_jplayer_1" class="jp-jplayer"></div>  
28:      <div id="jp_container_1" class="jp-audio">  
29:        <div class="jp-type-single">  
30:          <div class="jp-gui jp-interface">  
31:            <ul class="jp-controls">  
32:              <li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li>  
33:              <li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li>  
34:              <li><a href="javascript:;" class="jp-stop" tabindex="1">stop</a></li>  
35:              <li><a href="javascript:;" class="jp-mute" tabindex="1" title="mute">mute</a></li>  
36:              <li><a href="javascript:;" class="jp-unmute" tabindex="1" title="unmute">unmute</a></li>  
37:              <li><a href="javascript:;" class="jp-volume-max" tabindex="1" title="max volume">max volume</a></li>  
38:            </ul>  
39:            <div class="jp-progress">  
40:              <div class="jp-seek-bar">  
41:                <div class="jp-play-bar"></div>  
42:              </div>  
43:            </div>  
44:            <div class="jp-volume-bar">  
45:              <div class="jp-volume-bar-value"></div>  
46:            </div>  
47:            <div class="jp-time-holder">  
48:              <div class="jp-current-time"></div>  
49:              <div class="jp-duration"></div>  
50:              <ul class="jp-toggles">  
51:                <li><a href="javascript:;" class="jp-repeat" tabindex="1" title="repeat">repeat</a></li>  
52:                <li><a href="javascript:;" class="jp-repeat-off" tabindex="1" title="repeat off">repeat off</a></li>  
53:              </ul>  
54:            </div>  
55:          </div>  
56:          <div class="jp-title">  
57:            <ul>  
58:              <li>Cro Magnon Man</li>  
59:            </ul>  
60:          </div>  
61:          <div class="jp-no-solution">  
62:            <span>Update Required</span>  
63:            To play the media you will need to either update your browser to a recent version or update your <a href="http://get.adobe.com/flashplayer/" target="_blank">Flash plugin</a>.  
64:          </div>  
65:        </div>  
66:      </div>  
67:    </body>  
68:  </apex:page>  

Monday, August 20, 2012

Working with 10 KB restriction with Portal Header and Footer

One of the restrictions (out of hundreds!) the Force.com platform places on Portal (Customer/Partner) is the footer and header size cannot be more than 10 KB.  While this may help to increase the speed at the same time, it inhibits the custom long headers and footers that some customers have.

One of the work arounds this issue is to minify the HTML, JavaScript and CSS that is there in the headers.  It really reduced the size of the Headers and Footers.  Will Peavy created this beautiful page to  minify HTML and all of its content.  The note of caution is see that the jQuery/JavaScript is well formed otherwise it becomes very difficult to debug.