Mar 232012
 

So, I thought I’d pass along this hint for Salesforce – I am not sure if it saves you time if you just live with the issue, but it certainly saves you time if you wanted to send templated emails without needing to know HTML!  Of course, many use email templates during their day to day use.  However, the HTML body size is locked to 550 pixels when you’ve set up a template using the HTML (using Letterhead).  This works fine if you create your letterhead to fit to 550 pixels or less.  What happens if you have a letterhead where the footer is longer than the body size though?  Your email ends up looking cut, and not quite great looking.

The text does not stretch to the full space of the header...

So, how can we get around this? With four quick steps, you can actually stretch the HTML size within this template.

1) Create an image: With this step, you can use your favourite online image editor – I personally use Online Image Editor. If you use this site, simply use the Create Canvas section to create a new image.  The width should be the same width as your header or footer (in this instance it is 700 pixels), and the width you can make as 5 pixels.  And finally, ensure that the colour matches the background colour of your email template (the body section of the email template).  Click the Create Canvas button, and then save your custom made image (don’t worry – you can’t see it that well, especially if it is white!) to your local computer.

2) Store your image in the Documents folder:  Now, in Salesforce you are going to go into the Documents folder, and store the image you just made as a file.  Store it in a shared folder, and ensure it is marked off as an externally available image.

3) Edit your Email template: Now, for the final step.  Go into the email template you made, and go to the bottom of the HTML body area (the area where your email body is written).  Click the image button on your HTML toolbar.  Add the image you just created to the end of your email template (in this case, I called the file white space filler).

So, now you’ve stretched your email body so that it is the same length as the header you utilized was.

Now, while there is some steps involved with this ‘timesaver’, it does allow you to reuse the filler image you have added in future templates, and of course lets you utilize the ease of the HTML (using Letterhead) template type, instead of having to use the Custom HTML template type, in which you need to know how to write HTML code.  Hope this helps some of you out there!

Nov 112011
 

Hey all,

So, on Twitter this week Jon Adams from Florida asked a question using the #askforce hash – “Is there a way to replicate the WORKDAY function in Excel in SFDC?”.  My first response was to send him as link to an answer on the Salesforce Community page which laid out how to calculate the number of business days between two date fields.  It’s a great formula to have in your back pocket, but it wasn’t exactly what he had in mind.  What if you had a Start Date, and knew that you wanted something to run for 26 business days which populated via a number field?

So, later that evening, I sat down to see what I could come up with.  The idea actually would save me a lot of time in the professional services field.  If someone from xLerate was going to be on a project for 13 days (business days), I wouldn’t have to play the calendar finger dance we do when we are attempting to figure this out.

To do this, I went on a custom object called Projects (you could easily use any native object you wanted as well…).  There is a field called Start Date, which I have used for the beginning date that we are attempting to calculate from.  There is also a field called “Number of Business Days” which has an API name of BizDays.  This is the number of business days you wish to count up to.

Next you will need to create a formula date field, which I have called End Date.  The formula would be as follows:

CASE(
MOD(Start_Date__c – DATE(1900, 1, 7), 7),
0, (Start_Date__c) + BizDays__c + FLOOR((BizDays__c-1)/5)*2,
1, (Start_Date__c) + BizDays__c + FLOOR((BizDays__c)/5)*2,
2, (Start_Date__c) + BizDays__c + FLOOR((BizDays__c+1)/5)*2,
3, (Start_Date__c) + BizDays__c + FLOOR((BizDays__c+2)/5)*2,
4, (Start_Date__c) + BizDays__c + FLOOR((BizDays__c+3)/5)*2,
5, (Start_Date__c) + BizDays__c + CEILING((BizDays__c)/5)*2,
6, (Start_Date__c) – IF(BizDays__c>0,1,0) + BizDays__c + CEILING((BizDays__c)/5)*2,
null)

From this, the End Date will be calculated to the amount of business days (Mondays through to Fridays) stated in the field Business Days using the Start Date.

Fields from the formula

A caveat though – each country has separate and distinct holidays, so no holidays are added in this formula.  I am sure this could be calculated using a custom object and Apex, but for clicks not code administrators, this should assist.

How could I see this being used? Well, from a PS standpoint, it would be great for working out an end date of a project knowing the number of days that someone was to be working.  Or what if you wanted to know the date where you should be finishing an opportunity stage (above and beyond a Close date – say you wanted an opportunity to be closed if it took more than 30 business days to get to a 50% probability or above.

Hopefully you find this of assistance – if you think of other ways this could be use, let me know!

Nov 092011
 

So, this past week, salesforce.com released a new feature within their core application called “Social Contacts”.  Those who happened to attend or watch Dreamforce this year know that the Social Enterprise and the social contacts function got some major airplay during the Keynote speech by salesforce.com CEO Mark Benioff (if you watch again, you can actually see me three different times in the first part of the keynote – I know because my kids counted…).

What is Social Contacts? Social Contacts “lets you view your contacts’ social network profiles directly in Salesforce. This social information gives you a better perspective on your customers’ needs and issues—information you can use to build deeper relationships and increase business connections” (from salesforce.com help page).  In other words, when you turn this function on, you have quick and easy access to the public profile that your contact within Salesforce has allowed.  What networks are available?  To begin with, Salesforce has (for free) a Twitter and a Facebook link, and for a fee (this is actually LinkedIn’s AppExchange application and not an add-on fee from salesforce.com) you can utilize LinkedIn.

So, what happens after your administrator enables Social Contacts (for those who have an org that wasn’t created after October 7th, 2011)?  First, you will notice that your contact page changes slightly.  Up by the name is a new placeholder box for an image, much like we have become used to with Chatter (for those who don’t wish to add pictures in your org, I refer to you as the greyskins, in honour of Whitley Streiber).  We also have three social network icons of which we have all become accustomed to.
Clicking on these icons brings you to a tab page where you can choose the person’s Facebook or Twitter profile, and after this see their latest tweets, their public Facebook profile, and have a quick link to open their actual Twitter or Facebook pages in a new tab (please note: I have not paid for the LinkedIn app, so I cannot comment on this portion).  And, you can decide to add their Twitter or Facebook profile picture to their Salesforce contact.  And that’s it.  Yes, there is no integration, or pulling information (technically, Salesforce is using public API from Twitter and Facebook, so pulling information from these social networks would not be possible at this time, and to be honest, I think two way integration would end up costing), but it is a time saver.
How, you ask?  Well, consider these points:

  • Prior to Social Contacts, if I was on a contact’s detail page within Salesforce, and wondered what was up with them via Facebook or Twitter, I would have had to open a new window and go to Facebook, or flip over to my TweetDeck and search for the user (or open their URL).  Now, I have one-click access to their recent Twitter stream (which is how I find myself talking to people more and more) AND can reply, view their Facebook profile, and open with one click (and in a new window).  Now, I’m not sure about you all, but the moment I open either Facebook or Twitter, this massive, time sucking vortex is opened and the fifteen minutes I lost just moments ago can prove it.  This is a massive time saver for me, as I can check when a contact last tweeted, and send them a reply to their last tweet, or open straight to their Facebook and reply and write on their Wall (now salesforce.com needs to close my Facebook window once I click the Submit button! LOL).
  • I love the simple addition of the Facebook or Twitter profile picture.  I am a very visual person, and seeing something that reminds me of the actual contact (whether it be a nice picture like others have, or some weird kaleidoscope picture like I currently have) allows me to quickly remember who the person is I am currently viewing within Salesforce.
  • Especially with the Twitter aspect, being able to see and reply to a contact’s latest tweet, whether it be 10 seconds ago or 10 hours ago could be huge for someone maintaining a relationship with Salesforce contacts.  Let’s put aside the fact that we all work trying to be successful, whether it be selling widgets, services, knowledge or advice.  This is 2011, and the Mad Men ideal of a split between business and homestead is dead.   You follow these people on Twitter or Facebook, so unless you have a completely separate corporate account (an idea I am both am philosophically against, and loathe like the plague), your contacts know that outside of work you may have a life (in my case, I am sure that any business contacts or colleagues who follow me on Twitter know of my love of my family, hockey, live music, and my mistrust of the current Conservative government of Canada along with my love of all things Salesforce).  So, be a human.  Reply with a personal remark to their child’s picture, or their latest tech gadget, or their tweet of an article.  Make that conversation, strike up a personal report with the clients you deal with.  Personally, your circle of friends and acquaintances grows, and professionally, people are more likely to remember you because you’ve made that personal connection.
Is it perfect?  No.  And understandable so.  This is a first pass at this with Salesforce, and their utilization has been limited by the public API limitations of both Facebook and Twitter.  Do I foresee an evolution of this product?  Definitely.  It may come at a price to Salesforce users (lest we forget that Facebook and Twitter are companies, and are in the business to make money), but we don’t know that for sure.  However, given how salesforce.com has evolved products previously (do you remember the day when customization meant making a custom object, then we could use S-Controls, followed by Apex and Visualforce and now Heroku?), part of the application’s allure is seeing how the evolution of a feature will occur.  It truly is the dangerous side of Salesforce – waiting with baited breath for the next release and the newest updates!
So, have you turned on Social Contacts yet?  Let me know if you agree with me or not!
 Posted by at 1:48 pm
Sep 162011
 

A couple of days ago, a good friend and fellow MVP, Becka who is also known as @SFDC_Nerd, put out a tweet using the AskForce hashtag. It was as follows:

“Any way to have a trigger fire before lead convert? Trying to force oppty creation on all leads. #askforce (yeah, I’m back to this again)”. Now, a few things on this tweet – first, I gathered from the tweet that she had been working on this issue for some time, and I had likely missed the first call for help due to an extremely noisy twitter stream. Secondly, I had a time saving validation rule for that.

To ensure that users HAVE to create an opportunity when converting a lead, you need to add a validation rule. The rule is as follows:

AND(IsConverted=true, ConvertedOpportunityId=”", ISPICKVAL(Status, “Qualified”))

What this validation does is check to see if the lead is being converted (IsConverted=true), there is no opportunity created (ConvertedOpportunityId=”") and that the status is set to qualified (the standard status for converted leads). As a converted lead without an opportunity would meet this requirement, and the rule would be equal to true (all three requirements are met), the the validation would kick in, and you would not be able to convert. I would highly recommend setting the error to the top of the page, and adding in a error message stating that an opportunity is required to convert.

Jul 182011
 

One interesting question came up a month or so ago on the Salesforce Success Community page, and it reminded me of some customizations I have done for some clients in the past.  And the time saver centres around measuring the time between a lead creation (first touch) and opportunity close.

With salesforce.com native, you can measure how long a lead was a lead until it was converted, and how long an opportunity was open before it closed.  But, for those opportunities that came directly from a lead, to determine the time from lead creation to opportunity close requires a couple of different reports to be merged outside of Salesforce.  The good news is, with two custom fields, you can fix this issue! To do this:

1.  Create a custom date field on the lead object called Lead Creation Date, and set the default value to Today(). (I know this is a redundant field from the native Created Date field, but bear with me…).  Also, remember that this will not automatically set for the leads that exist already.  To fix this situation, run the Data Loader (or Excel Connector if you are on Professional Edition) and do an export on Lead ID, CreatedDate, and Lead_Creation_Date__c, then simply update by setting Lead_Creation_Date__c to the original CreatedDate.

2. Create a custom date field on the opportunity object called Lead Creation Date.

3. Back on the Leads object, click the Map Lead Fields button on the Lead Custom Fields section, and set the Lead.Lead Creation Date field to write to the Opportunity.Lead Creation Date field, and save.

What this will do is when a lead is converted AND an opportunity is opened, the opportunity custom field will now be populated with the original lead creation date.  From this, you can:

  • create formula fields, determining the number of days open since lead creation
  • create formula fields, determining the pre-opportunity stage length of time (it took x days for this lead to convert into an opportunity)
  • create workflow rules or email alerts on opportunities that had a lead opened more than x days or months ago (to track stale opps)
  • create reports and dashboards on the opportunity cycle from lead creation (pre-opportunity) to opportunity close, from one report.

As always, hope this helps and hope you are having a great summer!

May 102011
 

Hey all,

So, one thing that has come up every once in a while are clients who want to see the comments, or part of the comments on an Activity History related list.  The comments field is a Long Text Field; as such, unfortunately you cannot just add that field to the related list and have it show.  However, a few quick steps and you can see some of your comments.

First – why?  Well, let’s look at the native Activity History list…

As we can see, we know that we have had 2 telephone calls and one email with this contact.  But to know what each is about, we’d either have to click into each activity to read, or print out an activity report.

How do we fix this?  Here we go….

Step 1: You need to make a custom field under Activity custom fields.  I call the field Summary – you can call it what you wish.  The important part is that you make the field a Text Area field (255) and you do not put it on the page layouts (your users will not need to look or play with the field).

Step 2: You need to create a workflow rule.  The information is as follows:

Name: Set Summary for Tasks
Object: Task
Evaluation Criteria: Every time a record is created or edited.
Rule Criteria: use formula, and enter true into the formula box.

The action will be a field update:

Name: Set Summary to Short Description
Field To Update: Summary (or whatever you named the field)
Formula: LEFT(Description,252)&”…”

Step 3: Add the new field to the related list view on the Contact.  You do this on the Contact Page Layout edit screen, click on the wrench beside the Activity History related list, and add the Summary field to where you wish to see them.

Now, with each time an activity is created, or a current one is edited, the Summary field will now be populated.  With this, your users will now see the following:

So, hope this one helps folks.  Don’t forget to check out the info on the Summer ’11 release for salesforce.com, coming in June!

Feb 092011
 

Hey all!  A while since I posted a time saver – not because I didn’t want to though!  Just been a busy six months.  Have a few time savers that people have told me I should pass along.  Here is the first…I’ll post the others as time allows!

Some clients we have use Account hierarchies extensively.  It’s a great way to break out the structure of large organizations you work with.  When teamed with the force.com labs Appexchange app Inline Account Hierarchy it is very powerful.  However, when you have more than one level of hierarchy, reporting can become an issue.  I had two clients in particular -where this became troublesome.  The two needs were:

1) Client A wanted a button that would list out all contacts for that company AS WELL as all the contacts with the other organizations in the account hierarchy.  The hierarchy level went four deep.

2) Client B wanted an opportunity report that will combine all the opportunities in a report, sorted by parent account.  Like Client A, they also had four levels of account hierarchy set up within salesforce.com.

Account hierarchy, visually displayed by Force.com app

Now, salesforce.com does have the “Parent Account” field.  This allows you to state who the actual account’s parent is.  However, in the case of my clients, this would not produce the desired results.  By reporting on Parent Account, you would not have a full picture of the whole hierarchy, only the level above you (especially if you happened to be a grandchild or a great-grandchild in the levels).

To fix this issue, I created a hidden formula field.  What I wanted to do is, on any account, figure out what the top level account was for the hierarchy it was part of.  To do this, it needed to look above until it found the account that did not have a Parent Account set.  To complete this, I created a formula field (text) called Top Level Account with the following formula:

IF (NOT(ISBLANK(Parent.Parent.ParentId)), Parent.Parent.Parent.Name, (IF (NOT(ISBLANK(Parent.ParentId)), Parent.Parent.Name, (IF (NOT(ISBLANK(ParentId)), Parent.Name, Name)))))

The formula is created for a hierarchy with a maximum of four levels – theoretically you could add more (NOT(ISBLANK(Parent.Parent.Parent.ParentId)) to the formula at the beginning to meet your needs (if you go to five, six or seven levels). And with this field now populated on the Account, the clients have easy access to the highest level account in the account hierarchy.  How did this help the clients?

1) Client A now could create a report which was a contact list, showing all the information they wanted (including account), and could summarize to list all contacts based on Top Level Account.  We then placed a custom button on the account page so they have quick and easy access to this contact list for whatever account they are on.

2) Client B could now do a simple opportunity report by Top Parent Account, showing the full opportunity amounts across the hierarchy in one fell swoop, giving their executive the information they were looking for in an instant!

Hope this time saver helps!  Enjoy the cold week, and keep safe!

Nik

PS: Spring ’11 rollout finishes this weekend.  You can read the release notes here!

Mar 262010
 

Today was meeting day for the Ottawa Salesforce.com User Group, and we had a wonderful presentation from Customer Success Manager Greg Curgenven who went through about 10 add-ons and shortcuts to help with the efficiency of your Salesforce. One he touched on was using custom buttons for common activities. This is a favourite of mine to do, and thought I would expand on it for this month’s time saver!

A real life example would be quickly listing the fact that you left a voice mail with a client or prospect. Out of the box, you would need to:

  • Click the Log A Call button
  • Find the account in the Account lookup
  • Enter in a short description
  • Enter in followup information
  • Set a due date for the follow up
  • Save the activity

That is a lot of clicks to complete an activity log for leaving a voice mail!  Now, how much of a time saver would it be if you could click a button and have all that done for you…

To do so, you would need to a) create a custom button which will create the task under a contact, b) add it to the related list for Activity History.

1. Create a Custom Button

Activity custom buttons are created under Setup, Customize, Activities, Task Button and Links.  The following information is the setup for the custom button:

Label: Left Voicemail
Display Type: List Button
Behaviour: Display in existing window without sidebar or header
Content Source: URL
Button URL:

/00T/e?followup=1&title=Call&retURL=%2F{!Contact.Id}&tsk2_lkid={!Contact.Id}&tsk3_lkid={!Account.Id}
&tsk5=Left+Voice+Mail&tsk6=Left+a+voicemail+for+{!Contact.Name}
&tsk5_fu=Follow+Up+On+Voice+Mail&tsk4_fu={!TODAY()+2}&save=x

More on the format of the fields a little later…

2. Add The Custom Button to the Page Layout

To have the button available, you need to add the button to the Activity History related list on the  Contact page.  To do so:

  1. Edit the Contact Button page layout
  2. Click the Properties icon on the Activity History list (the wrench icon on the list).
  3. Click the + icon on the Buttons header, and move the Left Voicemail from the Available buttons to the Selected buttons.
Adding the button to the related list.

Adding the button to the related list.

What you have now is a custom button added to your Activity History related list on the far right.  Upon clicking this button, you get a new activity history record, as well as an open activity object, as in the picture below.

The new objects in one click.

The new objects in one click.

Notes on the URL Syntax

So, the URL is /00T/e?followup=1&title=Call&retURL=%2F{!Contact.Id}&tsk2_lkid={!Contact.Id}&tsk3_lkid={!Account.Id}
&tsk5=Left+Voice+Mail&tsk6=Left+a+voicemail+for+{!Contact.Name}
&tsk5_fu=Follow+Up+On+Voice+Mail&tsk4_fu={!TODAY()+2}&save=x

You might be asking, where in heck did you get tsk6 to equal the Task comments?  In the salesforce help, there is a tonne of help files with these values.  Each standard field within Salesforce.com has one of these values.  You can click here to download a pdf of standard fields for the Lead, Campaign, Account, Contact, Opportunity, and Case object. For custom objects, you simply use the ID of the field (ie: &00N30000002U4Ut={!Contact.Status})

While this is a simple example (thanks again to Greg from Salesforce.com for giving the idea for this time server), this can be used in many different ways – populating information on a new opportunity, entering information to a new custom object based off of a contact are two other ways I can think of right off the bat!

Hope this helps!

Nik

Feb 232010
 

Web to leads are a wonderful tool – right from your blog/website, you can collect information from your visitors, and begin to nurture a relationship with them.  But one of the pains many people have is the fact that Country is a text field.  I think of our friends from the south, and I realize why this could be such a pain.  Dependant on what someone felt like typing, they could see a Country listed as:

  • USA
  • US of A
  • U.S.A
  • United States of America
  • The United States
  • US

And I am sure I could write about twelve more.  But you get the point.  There is no control of what they enter.  So all those nice validation rules, assignment rules, territory management configuration which could possibly use static Country information (such as 2-letter ISO Code) are rendered useless.

So, how can you save yourself time and effort in data quality coming in?  A simple change in your Web to Lead form can do this. We’ll use the Country field as an example.  After you generate the HTML from salesforce.com, your line which will collect information for the Country field is

<label for=”country”>Country</label><input id=”country” maxlength=”40″ name=”country” size=”20″ type=”text” />

As you see, it has a maximum size of 40 characters, and is a free form text field.  Now, to set this as a picklist, you need to know the data you wish to have your visitors choose from, and then set up the Country portion to look as follows (note: we are Canadian – thus Canada, and the US are at the top.  This can be easily changed to allow you whatever Countries you would like to have right at the top):

<label for="country">Country</label>select  id="country" name="country" title="Country">
  <option val<option value="">--None--</option>
  <option value="CA"  >CANADA</option>
  <option value="US"  >UNITED STATES</option>
  <option value="">-----------------------------</option>
  <option value="AF"  >AFGHANISTAN</option>
  <option value="AL"  >ALBANIA</option>
  <option value="DZ"  >ALGERIA</option>
  <option value="AS"  >AMERICAN SAMOA</option>
  <option value="AD"  >ANDORRA</option>
  <option value="AO"  >ANGOLA</option>
  <option value="AI"  >ANGUILLA</option>
  <option value="AQ"  >ANTARCTICA</option>
  <option value="AG"  >ANTIGUA AND BARBUDA</option>
  <option value="AR"  >ARGENTINA</option>
  <option value="AM"  >ARMENIA</option>
  <option value="AW"  >ARUBA</option>
  <option value="AU"  >AUSTRALIA</option>
  <option value="AT"  >AUSTRIA</option>
  <option value="AZ"  >AZERBAIJAN</option>
  <option value="BS"  >BAHAMAS</option>
  <option value="BH"  >BAHRAIN</option>
  <option value="BD"  >BANGLADESH</option>
  <option value="BB"  >BARBADOS</option>
  <option value="BY"  >BELARUS</option>
  <option value="BE"  >BELGIUM</option>
  <option value="BZ"  >BELIZE</option>
  <option value="BJ"  >BENIN</option>
  <option value="BM"  >BERMUDA</option>
  <option value="BT"  >BHUTAN</option>
  <option value="BO"  >BOLIVIA</option>
  <option value="BA"  >BOSNIA AND HERZEGOVINA</option>
  <option value="BW"  >BOTSWANA</option>
  <option value="BV"  >BOUVET ISLAND</option>
  <option value="BR"  >BRAZIL</option>
  <option value="IO"  >BRITISH INDIAN OCEAN TERRITORY</option>
  <option value="BN"  >BRUNEI DARUSSALAM</option>
  <option value="BG"  >BULGARIA</option>
  <option value="BF"  >BURKINA FASO</option>
  <option value="BI"  >BURUNDI</option>
  <option value="KH"  >CAMBODIA</option>
  <option value="CM"  >CAMEROON</option>
  <option value="CV"  >CAPE VERDE</option>
  <option value="KY"  >CAYMAN ISLANDS</option>
  <option value="CF"  >CENTRAL AFRICAN REPUBLIC</option>
  <option value="TD"  >CHAD</option>
  <option value="CL"  >CHILE</option>
  <option value="CN"  >CHINA</option>
  <option value="CX"  >CHRISTMAS ISLAND</option>
  <option value="CC"  >COCOS (KEELING) ISLANDS</option>
  <option value="CO"  >COLOMBIA</option>
  <option value="KM"  >COMOROS</option>
  <option value="CG"  >CONGO</option>
  <option value="CD"  >CONGO, THE DEMOCRATIC REPUBLIC OF THE</option>
  <option value="CK"  >COOK ISLANDS</option>
  <option value="CR"  >COSTA RICA</option>
  <option value="CI"  >COTE D'IVOIRE</option>
  <option value="HR"  >CROATIA</option>
  <option value="CU"  >CUBA</option>
  <option value="CY"  >CYPRUS</option>
  <option value="CZ"  >CZECH REPUBLIC</option>
  <option value="DK"  >DENMARK</option>
  <option value="DJ"  >DJIBOUTI</option>
  <option value="DM"  >DOMINICA</option>
  <option value="DO"  >DOMINICAN REPUBLIC</option>
  <option value="EC"  >ECUADOR</option>
  <option value="EG"  >EGYPT</option>
  <option value="SV"  >EL SALVADOR</option>
  <option value="GQ"  >EQUATORIAL GUINEA</option>
  <option value="ER"  >ERITREA</option>
  <option value="EE"  >ESTONIA</option>
  <option value="ET"  >ETHIOPIA</option>
  <option value="FK"  >FALKLAND ISLANDS (MALVINAS)</option>
  <option value="FO"  >FAROE ISLANDS</option>
  <option value="FJ"  >FIJI</option>
  <option value="FI"  >FINLAND</option>
  <option value="FR"  >FRANCE</option>
  <option value="GF"  >FRENCH GUIANA</option>
  <option value="PF"  >FRENCH POLYNESIA</option>
  <option value="TF"  >FRENCH SOUTHERN TERRITORIES</option>
  <option value="GA"  >GABON</option>
  <option value="GM"  >GAMBIA</option>
  <option value="GE"  >GEORGIA</option>
  <option value="DE"  >GERMANY</option>
  <option value="GH"  >GHANA</option>
  <option value="GI"  >GIBRALTAR</option>
  <option value="GR"  >GREECE</option>
  <option value="GL"  >GREENLAND</option>
  <option value="GD"  >GRENADA</option>
  <option value="GP"  >GUADELOUPE</option>
  <option value="GU"  >GUAM</option>
  <option value="GT"  >GUATEMALA</option>
  <option value="GN"  >GUINEA</option>
  <option value="GW"  >GUINEA-BISSAU</option>
  <option value="GY"  >GUYANA</option>
  <option value="HT"  >HAITI</option>
  <option value="HM"  >HEARD ISLAND AND MCDONALD ISLANDS</option>
  <option value="VA"  >HOLY SEE (VATICAN CITY STATE)</option>
  <option value="HN"  >HONDURAS</option>
  <option value="HK"  >HONG KONG</option>
  <option value="HU"  >HUNGARY</option>
  <option value="IS"  >ICELAND</option>
  <option value="IN"  >INDIA</option>
  <option value="ID"  >INDONESIA</option>
  <option value="IR"  >IRAN, ISLAMIC REPUBLIC OF</option>
  <option value="IQ"  >IRAQ</option>
  <option value="IE"  >IRELAND</option>
  <option value="IL"  >ISRAEL</option>
  <option value="IT"  >ITALY</option>
  <option value="JM"  >JAMAICA</option>
  <option value="JP"  >JAPAN</option>
  <option value="JO"  >JORDAN</option>
  <option value="KZ"  >KAZAKHSTAN</option>
  <option value="KE"  >KENYA</option>
  <option value="KI"  >KIRIBATI</option>
  <option value="KP"  >KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF</option>
  <option value="KR"  >KOREA, REPUBLIC OF</option>
  <option value="KW"  >KUWAIT</option>
  <option value="KG"  >KYRGYZSTAN</option>
  <option value="LA"  >LAO PEOPLE'S DEMOCRATIC REPUBLIC</option>
  <option value="LV"  >LATVIA</option>
  <option value="LB"  >LEBANON</option>
  <option value="LS"  >LESOTHO</option>
  <option value="LR"  >LIBERIA</option>
  <option value="LY"  >LIBYAN ARAB JAMAHIRIYA</option>
  <option value="LI"  >LIECHTENSTEIN</option>
  <option value="LT"  >LITHUANIA</option>
  <option value="LU"  >LUXEMBOURG</option>
  <option value="MO"  >MACAO</option>
  <option value="MK"  >MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF</option>
  <option value="MG"  >MADAGASCAR</option>
  <option value="MW"  >MALAWI</option>
  <option value="MY"  >MALAYSIA</option>
  <option value="MV"  >MALDIVES</option>
  <option value="ML"  >MALI</option>
  <option value="MT"  >MALTA</option>
  <option value="MH"  >MARSHALL ISLANDS</option>
  <option value="MQ"  >MARTINIQUE</option>
  <option value="MR"  >MAURITANIA</option>
  <option value="MU"  >MAURITIUS</option>
  <option value="YT"  >MAYOTTE</option>
  <option value="MX"  >MEXICO</option>
  <option value="FM"  >MICRONESIA, FEDERATED STATES OF</option>
  <option value="MD"  >MOLDOVA, REPUBLIC OF</option>
  <option value="MC"  >MONACO</option>
  <option value="MN"  >MONGOLIA</option>
  <option value="MS"  >MONTSERRAT</option>
  <option value="MA"  >MOROCCO</option>
  <option value="MZ"  >MOZAMBIQUE</option>
  <option value="MM"  >MYANMAR</option>
  <option value="NA"  >NAMIBIA</option>
  <option value="NR"  >NAURU</option>
  <option value="NP"  >NEPAL</option>
  <option value="NL"  >NETHERLANDS</option>
  <option value="AN"  >NETHERLANDS ANTILLES</option>
  <option value="NC"  >NEW CALEDONIA</option>
  <option value="NZ"  >NEW ZEALAND</option>
  <option value="NI"  >NICARAGUA</option>
  <option value="NE"  >NIGER</option>
  <option value="NG"  >NIGERIA</option>
  <option value="NU"  >NIUE</option>
  <option value="NF"  >NORFOLK ISLAND</option>
  <option value="MP"  >NORTHERN MARIANA ISLANDS</option>
  <option value="NO"  >NORWAY</option>
  <option value="OM"  >OMAN</option>
  <option value="PK"  >PAKISTAN</option>
  <option value="PW"  >PALAU</option>
  <option value="PS"  >PALESTINIAN TERRITORY, OCCUPIED</option>
  <option value="PA"  >PANAMA</option>
  <option value="PG"  >PAPUA NEW GUINEA</option>
  <option value="PY"  >PARAGUAY</option>
  <option value="PE"  >PERU</option>
  <option value="PH"  >PHILIPPINES</option>
  <option value="PN"  >PITCAIRN</option>
  <option value="PL"  >POLAND</option>
  <option value="PT"  >PORTUGAL</option>
  <option value="PR"  >PUERTO RICO</option>
  <option value="QA"  >QATAR</option>
  <option value="RE"  >REUNION</option>
  <option value="RO"  >ROMANIA</option>
  <option value="RU"  >RUSSIAN FEDERATION</option>
  <option value="RW"  >RWANDA</option>
  <option value="SH"  >SAINT HELENA</option>
  <option value="KN"  >SAINT KITTS AND NEVIS</option>
  <option value="LC"  >SAINT LUCIA</option>
  <option value="PM"  >SAINT PIERRE AND MIQUELON</option>
  <option value="VC"  >SAINT VINCENT AND THE GRENADINES</option>
  <option value="WS"  >SAMOA</option>
  <option value="SM"  >SAN MARINO</option>
  <option value="ST"  >SAO TOME AND PRINCIPE</option>
  <option value="SA"  >SAUDI ARABIA</option>
  <option value="SN"  >SENEGAL</option>
  <option value="CS"  >SERBIA AND MONTENEGRO</option>
  <option value="SC"  >SEYCHELLES</option>
  <option value="SL"  >SIERRA LEONE</option>
  <option value="SG"  >SINGAPORE</option>
  <option value="SK"  >SLOVAKIA</option>
  <option value="SI"  >SLOVENIA</option>
  <option value="SB"  >SOLOMON ISLANDS</option>
  <option value="SO"  >SOMALIA</option>
  <option value="ZA"  >SOUTH AFRICA</option>
  <option value="GS"  >SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS</option>
  <option value="ES"  >SPAIN</option>
  <option value="LK"  >SRI LANKA</option>
  <option value="SD"  >SUDAN</option>
  <option value="SR"  >SURINAME</option>
  <option value="SJ"  >SVALBARD AND JAN MAYEN</option>
  <option value="SZ"  >SWAZILAND</option>
  <option value="SE"  >SWEDEN</option>
  <option value="CH"  >SWITZERLAND</option>
  <option value="SY"  >SYRIAN ARAB REPUBLIC</option>
  <option value="TW"  >TAIWAN, PROVINCE OF CHINA</option>
  <option value="TJ"  >TAJIKISTAN</option>
  <option value="TZ"  >TANZANIA, UNITED REPUBLIC OF</option>
  <option value="TH"  >THAILAND</option>
  <option value="TL"  >TIMOR-LESTE</option>
  <option value="TG"  >TOGO</option>
  <option value="TK"  >TOKELAU</option>
  <option value="TO"  >TONGA</option>
  <option value="TT"  >TRINIDAD AND TOBAGO</option>
  <option value="TN"  >TUNISIA</option>
  <option value="TR"  >TURKEY</option>
  <option value="TM"  >TURKMENISTAN</option>
  <option value="TC"  >TURKS AND CAICOS ISLANDS</option>
  <option value="TV"  >TUVALU</option>
  <option value="UG"  >UGANDA</option>
  <option value="UA"  >UKRAINE</option>
  <option value="AE"  >UNITED ARAB EMIRATES</option>
  <option value="GB"  >UNITED KINGDOM</option>
  <option value="UM"  >UNITED STATES MINOR OUTLYING ISLANDS</option>
  <option value="UY"  >URUGUAY</option>
  <option value="UZ"  >UZBEKISTAN</option>
  <option value="VU"  >VANUATU</option>
  <option value="VE"  >VENEZUELA</option>
  <option value="VN"  >VIET NAM</option>
  <option value="VG"  >VIRGIN ISLANDS, BRITISH</option>
  <option value="VI"  >VIRGIN ISLANDS, U.S.</option>
  <option value="WF"  >WALLIS AND FUTUNA</option>
  <option value="EH"  >WESTERN SAHARA</option>
  <option value="YE"  >YEMEN</option>
  <option value="ZM"  >ZAMBIA</option>
  <option value="ZW"  >ZIMBABWE</option>
  </select></td>

Now, the above uses Countries (which seems to be a large area of possible difference) – however, this could be used for many fields which are not set as picklists natively through salesforce.com, such as Number of Employees, Annual Revenue or State/Province.

Hope this helps!

Nik

Jan 262010
 

That old adage – “it’s the little things that kill” can be oh so true.  I’ve decided that a blog entry each month will be based around a time saver that some people may know, but it is one that can be a time saver, and be one of those little Salesforce.com customizations that can be a killer for the end user.  The first one is a time saver I create for the highland dance association here in Ottawa – how to make an email link on a record so that it uses a template.

Previously, they were using the Send An Email button, choosing the template that had been created, and then completing any further personalization before pressing the send button.  The email was a confirmation registration for dance competitors in an upcoming dance.  This is a very easy process, but to send the email it was 4 mouse clicks.  Not too many, however when you receive a dozen entries a day, it can get tedious.

To speed up the process, I created a custom page link, which would in one click open the Send An Email page, fill out the Contact detail (the who), the Association to the custom object (the what), and use the template for registration confirmation.  How?  Quite simple, actually…

The syntax for the link is as follows -

/_ui/core/email/author/EmailAuthor?p2_lkid={WHO_ID}&p3_lkid={WHAT_ID}&template_id=TEMPLATE_ID&rtype=003&retURL=%2F{RECORD_ID}

The WHO_ID is the ID of the contact you wish to send it to, while the WHAT_ID is the object you wish to associate the email to.  The Template ID is likely the hardest ID to find, as you have to go to the URL of the template in the admin side to find it.  You can find the template ID by clicking Setup, Admin Setup, Communication Templates, Email Templates, then clicking on the template itself.  In the image below, the template ID is highlighted.

Screen shot 2010-01-26 at 10.11.01 AM

Once you have all this information, you can use the ID’s you have to create the link on the object.  Below the image shows the setup for the email link I created on a custom object:

Screen shot 2010-01-26 at 9.54.39 AM

Other uses for this type of link?  A follow up email to a main contact for an account you haven’t spoken to in a month or two.  A reply you typically send at the onset of an opportunity.  A thank you email for your prospects time after a lead qualification call.  Any email you send out, and have a template for you could use a link to – and the more you send it the more help the link could be.  I know with the highland dance association, the link cut the time spent in sending confirmation emails out by over 50 percent!

Hope this simple time saver helps!

Nik