Posted by Nik on Jun 28, 2010 in
Salesforce
Well, here we are folks – it’s been a couple of months, and it has been an extremely busy time with family (the kids are out of school for the summer) and xLerate (not to boast, but we’ve been at over 100 percent billable for the past two months, with the docket in July and August looking mighty full as well!). This has all led to the lack of a post for a while, and my apologies to those who follow my rants here. I promise to start up the timesavers again in September – the summer just looks too busy, and who wants to save time in the dog days! ;)
I do feel I need to comment on one area happening in salesforce.com land right now, and this is the patent lawsuits occurring between Microsoft and salesforce.com. In mid-May, Microsoft sued salesforce.com for 9 patent infringements. Now, reading these infringements were hilarious, but what part of law suits aren’t! And the fact that you could patent navigational bars on a website just made my ribs hurt with laughter. This lawsuit led Marc Benioff to characterize Microsoft as “patent trolls“, and comments have been flung back and forth for the past six weeks from both sides.
Now, we come to this past week and salesforce.com’s official rebuttal to the May 19th lawsuit. In turn, salesforce.com has counter sued Microsoft with patent infringements based around .net and SharePoint. Going one step further, salesforce.com has hired David Boies, the lawyer who represented the US Department of Justice in their antitrust case against Microsoft.
I am not going to say that I’m behind Team Cloud on this one, because I am not. I am also not behind Team Redwood either. The actual thought of these two competitors (and yes, they are going toe to toe right now in the midsized CRM space right now) taking the next two to five years and fighting this through to the end sickens me to no end. There are those that say the salesforce.com sued to try and bring Microsoft to the negotiating table. I ask you this, for those who have been part of the salesforce.com world for some time. Does Marc Benioff seem like the negotiating type to you? Really? I didn’t think so. On the flip side of the lawsuit coin, we have all heard of Microsoft’s treasure chest of moneys. They aren’t afraid of the time this lawsuit could take, and Steve Ballmer scares the living hell out of me.
One of the wonders of working exclusively with salesforce.com for the past many years has been watching the amazing growth of features and innovation that has come from the lads at salesforce.com. It has been absolutely astonishing to watch how much innovation and imagination can come to production in such a short time. SalesLogix, a popular CRM back in it’s day was on Version 6 for at least 7 years before Version 7 was released. However, will salesforce.com still have the focus, and premise to continue pumping out leading edge technologies for cloud computing and CRM with a large, drag out lawsuit hanging over 1 Embarcadero for the next little while. While one may think I may going overboard on this thought, I am simply looking at what the possibility (and when looking at the main players and companies, I think it is a good possibility) is. And any lawsuit will hurt us, the users. I quote Eric Von Hippel, an MIT professor in technology innovation -
“The net effect (of patent lawsuits) is that they decrease innovation, and in the end, the public loses out”.
Just my thoughts on the whole subject. And you have no idea how much I hope I am wrong…
Nik
Tweet This Post
Delicious
Digg This Post
Stumble This Post
Posted by Nik on Mar 26, 2010 in
Salesforce
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:
- Edit the Contact Button page layout
- Click the Properties icon on the Activity History list (the wrench icon on the list).
- 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.
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.
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
Tweet This Post
Delicious
Digg This Post
Stumble This Post
Tags: Custom Button, Time Saver
Posted by Nik on Feb 23, 2010 in
Salesforce
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
Tweet This Post
Delicious
Digg This Post
Stumble This Post
Tags: Salesforce, Time Saver
Posted by Nik on Jan 26, 2010 in
Salesforce
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.

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:

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
Tweet This Post
Delicious
Digg This Post
Stumble This Post
Tags: Salesforce, Time Saver
Posted by Nik on Dec 7, 2009 in
Development,
Salesforce
So, for the past year, one of the items on my list has been “get an introduction to Visualforce (also shortened to VF by many) and Apex”. As you have likely heard, these two development languages are slightly important in the cloud world known as salesforce.com – with these you can build all sorts of triggers, pages and even external websites for your clients, and your own company as a Salesforce user. Alas, like all great plans, this hit the backburner – either due to work, family, or everything combined, there just never seemed to be enough time.
Last week, I started thinking about Apex and VF again and while at Chapters (the Barnes and Noble of Canada for those unsure) I saw the Teach Yourself series. This got me thinking about my lack of drive to really delve in. That’s when it hit me. The documentation out there, right now, is all created for experienced developers. The 101 assumes you know your class from your variable, so to speak…and of course, I am in no way, shape or form, a developer!
While chatting with others on Twitter and facebook about this, David Schach (@dschach) confirmed my belief stated above, by saying:
IMHO, Java or C++ is essential for Apex. Before, could only modify others’ code.
My concern with this, however, is how it fits into the whole mantra and philosophy of “quicker, easier, cheaper”. Many of my clients have been absolutely blown away with the low cost of implementation and configuration using native salesforce.com – but when you think of the amount of marketing and discussion that has gone into such advances as Apex and Visualforce, or more importantly Sites, there has been little discussion to the end user about what is required. Now, for the administrators to really become the masters of their own domain, they need to learn a language such as Java, or C++, then take the books lovingly put together by salesforce.com on Apex and Visualforce, and learn the differences. If they do not, they are in the same boat as they were with their on-premise CRM applications of the past. They become slaves to consultants such as myself. And honestly, that’s not what I want!
Now, does this mean that I believe Apex and Visualforce should only be used by large enterprise clients who have development staff on hand who could learn the necessary quirks of a similar language? Of course not. One of the major advantages of salesforce.com’s multi-tennant architecture is the ability for small and medium businesses to have access to and the ability to use the same functionality as the big boys do, for the same price! Where I do think that salesforce.com (or a very industrious developer and writer) could really make an earth shattering advance in salesforce.com is in the creation of a “Teach Yourself Apex and Visualforce in 21 days” type book. In other words, write the manual that helps non developers get up to speed, without the need to learn Java or C++. Teach us about classes, methods and all the basic needs to begin, using Apex as the language to teach. Move into how to load Eclipse, the IDE, and how to develop, and finally finish some actual introductory programs for us to work out the basics, both with Apex and VF….even help people make their first sites page!
A book like this would do a couple of things, in my opinion. First and foremost, it would give a non-developer looking to advance their ability to utilize their Salesforce.com a single book to purchase, with a single path to follow in the quest to learn how to step into the force.com development world. In a second, and just as important to me – it allows small to medium companies who wish to move into the world of Apex and Visualforce a simple means to step up to the plate, and not become locked into a heavily configured salesforce.com without any ways or means to either take control themselves or monitor what is being done. I have, in the past seen CRM setups turned into a glass menagerie, only touched (at a very expensive price) by the handful of people who have created it. This is not what I ever dreamed salesforce.com to be, and don’t believe it ever should!
Is it a lofty idea? As the non-programming salesforce.com lover in the house, I don’t think so. But let me know what you think? Until then, enjoy the dream cover, and take care!
Nik
Tweet This Post
Delicious
Digg This Post
Stumble This Post
Tags: Apex, learning, Visualforce
Posted by Nik on Nov 26, 2009 in
Salesforce
So, it is Thanksgiving Thursday. Well, that would likely mean much, much more if I lived south of the border, but I still have been able to work while watching 3 absolute football blowouts, and the Senators hockey game on TV!
As it is Thanksgiving, it’s been fun to sit an watch Twitter, to see what people were talking of when they were tweeting about what they were thankful for. And, as I watched, it gave me an idea, especially with the previous post of all the Force.com applications. So, without further ado, here are five free force.com apps that I am thankful for.
1) Services Project Manager: While there are some really awesome applications for services companies using salesforce.com to utilize apex, visualforce, and all sorts of web wizardry to manage their business (which is projects!), the Force.com Services Project Manager makes great use of native functionality within salesforce.com to give you an easy, intuitive and scalable application to manage your work efforts. Many services-based clients have had this configured by xLerate for this, and it is what I have overhauled to run our business. Without a doubt, it is the most important application I use!
2) AppExchange Dashboard Pack: It amazed me how scared people are of reporting and dashboarding in Salesforce! It is like we’ve all been affected by years of the pains of Crystal Reports or something (grin…)! With each and every new client, I install this lovely application to give users an idea of what you can do. I have found that between the addition of custom reports and dashboards, and a training session on reporting and previous fears and conditionings disappear! Just a note, however – you need to have campaigns in your org to install this. If you do not, the application can be installed separately.
3) Auto Complete Lookups: As simple as it sounds. I am as lazy as the next person…the idea of having to click a lookup icon, type in some name, and click Go…well, it drives me batty. Enter the auto complete. Simply start typing in the object you wish to find, and….voila!
4) Opportunity Primary Contact Required: I absolutely believe that the Contact Role related list on the Opportunity is one of the most under-utilized lists in Salesforce. You may have an opportunity with an account (which is a required lookup), but you sell to people and the contact role list allows you to define this. I truly believe that all people should be forced to use the Contact Role – thus my love of this application. However, there seems to be a catch. After the critical update to the Opportunity save was released back in late summer, people cannot install this properly. I can tell you that you can deactivate the critical update, install the application and reactivate the critical update without issue. As of December 15, 2009, I am not sure what will happen.
5) PRM Home Page Components: OK, so this is not available publicly – you need to access it through the Partner Networks blog. But this application allows you to add a Lead Inbox table, Approval Request table and Channel Manager component to your PRM home page, and all of them are used by Visualforce!
So, there you have it – 5 apps that I am thankful for. And, in the spirit of Black Friday, the price is right for each one – they are absolutely free! Did I miss one you like? Let me know.
To end – Happy Thanksgiving, to all my American friends. I hope you had a safe, and filling holiday filled with family and friendship!
Nik
Nik
Tweet This Post
Delicious
Digg This Post
Stumble This Post
Tags: AppExchange, Salesforce
Posted by Nik on Nov 17, 2009 in
Salesforce
So, I just noticed that it has been over three months since the last blog posting. Bad Nik…bad bad Nik!
Of course, this week is Dreamforce ’09, and while I cannot be there in person, I plan on following vicariously through tweets and at www.dreamforce.com as much as possible. One of things I loved the most about the last two DF’s were walking around the exhibition floor and just talking with people about how they use Salesforce, and also meeting the vendors at the show (I know they are selling their wares, but make an effort to hit them – if not for any reason but to help them feel like the left arm they gave up to have the booth was semi-worth it) to see their applications to enhance Salesforce.
Which leads to another wandering thought of mine – the new AppExchange has been up for a while now, and one of the areas I loved the most before was the link on the last tab to all the applications a vendor had. This came in VERY handy, especially with Force.com Labs – a collection of applications created by developers at Salesforce (and FREE!). Now, with the next button taking forever to load, it is very hard to see all 175 applications force.com Labs has put out. So, for your viewing pleasure, here is a list – they should also link tho the actual appexchange detail page. Over the next bit, I will be pulling some of my favourite apps out, and detailing them a bit more for you.
So, there you have it – all 175 apps as of November 17th. Until next time – and for those in San Francisco, say hi for me! Even better, if in Foley’s, maybe even toast a pint to the northeast…I’ll return the favour here!
Tweet This Post
Delicious
Digg This Post
Stumble This Post
Tags: AppExchange, Dreamforce
Posted by Nik on Jul 30, 2009 in
Salesforce
A question came across Twitter today – how can I mass delete from a related object. A great, free little application on the Salesforce.com Appexchange – Mass Delete – helps out with this, but it only comes with standard objects. Also, with the increase of wonderful, popular appexchange apps, some are running into limits for the number installed. So what is one to do? Well, here is some javascript, and how to set up a button for your related lists so that you can mass delete in just a couple of clicks.
How Do I do this?
- First, go to the object you wish to create a list button for. If you wish to do this on accounts (or any standard object), click Setup, Customize, Accounts (or the standard object you wish to use), Buttons and Links. For a custom object, click Setup, Create, Objects and then click on the object you wish to.
- Under the Custom Buttons and Links related list, click the New button.
- Enter the following information for the button:
Label: Mass Delete
Name: Mass_Delete_Object (ie: Mass_Delete_Account)
Display Type: List Button, and check off “Display Checkboxes”
Behaviour: Execute Javascript
Content Source: OnClick Javascript

Mass Delete button setup
- In the detail box, enter the following:
{!REQUIRESCRIPT(“/soap/ajax/15.0/connection.js”)}
var records = {!GETRECORDIDS( $ObjectType.ObjectAPIName )}
if (records[0] == null) {
alert(“Please select at least one record.”) } else {
var errors = [];
var result = sforce.connection.deleteIds(records);
if (result && result.length){ var numFailed = 0; var numSucceeded = 0;
for (var i = 0; i < result.length; i++){
var res = result[i];
if (res && res.success == ‘true’){
numSucceeded++;
} else {
var es = res.getArray(“errors”);
if (es.length > 0) {
errors.push(es[0].message);
}
numFailed++;
}
}
if (numFailed > 0){ alert(“Failed: ” + numFailed + “\nSucceeded: ” + numSucceeded + ” \n Due to: ” + errors.join(“\n”));
}
else {
alert(“Number of records deleted: ” + numSucceeded);
}
}
window.location.reload();
}
Now, the only part you need to change is the second line, where it says $ObjectType.ObjectAPIName. If you were doing this on accounts, you would use $ObjectType.Account. For a custom object, find the API Name on the top of the main object page (For a custom object called Projects, with an API Name of Projects__c, you would enter $ObjectType.Projects__c.
- Click the Save button. You will know have this button available on all lists.
- The final step is to add this to all your lists. To do so, you must edit the page layout for the object you would be on to see the list. As an example, if you wanted to delete projects from an account page, you would edit the Account page layout, go to the related list, edit the Project related list, and add the Mass Delete button. Save the layout change, and you are done.

Using the Mass Delete Button

Mass Delete Success Alert
When using the button, check off the checkbox beside the record(s) you wish to delete, and click the Mass Delete button. Upon it finishing, a pop up will alert you to the number of records which has been deleted, and then refresh your page.
Hope you find this useful – and one final caviat. Please delete with care…although the records will be in your recycle bin, make sure you know what you are deleting before doing so!
Enjoy the week!
Nik
Tweet This Post
Delicious
Digg This Post
Stumble This Post
Posted by Nik on Apr 15, 2009 in
Personal,
Salesforce
Wow – as I look at the calendar today, I realize the importance of the 15th of April… Today, xLerate turns one year old. And with that, I feel very proud. Looking at numbers and statistics (ah, how we love and loathe them all at the same time) people passed on to me when I first started down this venture, the numbers were astonishingly horrific. Thanks to an article in Entrepreneur Weekly, it was stated that 70 to 80 percent of all small businesses fail within the first year. (I would like to add that this magazine is no longer in publication as of today…). That is a massive number, albeit one that I always thought was slightly inflated…
Looking back over the year, I am extremely proud of what has been accomplished. We have been able to :
- assist over 40 companies with their Salesforce.com implementations, with a focus on the small to medium business sector.
- use our experience and expertise with the application to act as advocates in the Ottawa area through the user group and through emails/phone calls from people using the system and just wanting to ask a quick question.
- without much in the way of a marketing budget, been able to piece together a web presence, business collateral and local reputation for getting a quality job done for our clients.
Of course, making enough revenue to pay the bills, and continue to plan for the future also helps, and for that I thank my clientelle.
What’s next? Well, those who know me will let you know that I have a hard time keeping still. And this is the main drive for this year at xLerate. Over the next twelve months, planned actions will occur, to assist xLerate in bringing more quality to both our own clients and Salesforce.com users globally, as well as hopefully allow us as owners, professionals and people to grow as well.
As a first step, xLerate has applied for, and been accepted as a member of the Ottawa Centre for Research and Innovation, or OCRI as it is known locally. We hope that this membership will increase our visibility in the local business community, and personally, I hope to be able to learn much from executives who have successfully paved their own successes previously. We also will tie our commitment to the Salesforce Foundation through activities to charities that are tied to the Ottawa area (such as OttawaReads).
Of course, other plans are ‘perculating’ … as things become a reality, I will be sure to share them here! Until then, thank you to all of our clients, colleagues, friends and most importantly my wife Stephanie and kids for making this first year such a resolute success!
Tweet This Post
Delicious
Digg This Post
Stumble This Post
Posted by Nik on Apr 5, 2009 in
Salesforce
So, with the beginning of April comes a little spring cleaning from Salesforce.com. Received a couple of emails around some enhancements to the Salesforce application, one incorporated now, and another released on Monday, April 6.
1. – Changes to Email detail page in Customer and Partner Portal
Currently, there is no differentiation between the email message detail page, whether viewed through Salesforce.com or the Customer or Partner Portal. To fix this, Salesforce.com set the default on the email related list to be off. IF you wish for your clients or partners to have access to all emails through a case in one of the portal applications, simply edit your page layout and add the email related list. You can get here by clicking Setup | App Setup | Customize| Cases | Page Layouts.
2. Opportunity Save Change – affecting Workflow Rules and Triggers
With the Spring’09 edition of Salesforce.com, a change in the application “ensures that standard and custom opportunity save logic is triggered when updates are made to the Opportunity, Opportunity Products or Schedules that cause an update to the parent record”. Or, in laymans terms – changes to the products associated with an opportunity, or the revenue or product scheduling finally allow worfklow rules or apex triggers to fire on the parent opportunity record (as if the record was edited!).
This, however, could mean issue with existing workflows or triggers. If your organization uses:
- Opportunity/Opportunity Product Custom Validation Rule
- Opportunity/Opportunity Product Apex Trigger
- Opportunity/Opportunity Product Universally Required Custom Field
- Opportunity/Opportunity Product Unique Custom Field
- Opportunity/Opportunity Product Workflow Rule (Field Update/Email/Task)
then you may need to reassess the workflow/trigger, so that an endless loop workflow or trigger cycle doesn’t occur (and those are always bad things…). Good news is, Salesforce.com has given you an idea on whether or not your instance of Salesforce is affected or not. The email you receive will let you know whether or not they believe you are affected right under the How will this change impact me? header.
If the email your administrator receives says “Based on our analysis, the change will not affect your application.”, nothing needs to be done. The critical update will be installed and activated. However, if it says “Your organization has a customization that may be affected as a result of this update”, then the critical update will be available but deactivated.
If you need to test out your workflows, I would recommend the following:
- Click through to the Critical Updates page (Setup | App Setup | Critical Updates)and read the release notes on the critical update.
- If you have EE/UE, use a sandbox to test the existing workflows and triggers to ensure that nothing nefarious occurs when the update and your customizations play together.
- If you are on PE, I would work with the administrator and/or developer to ensure that the critical update and workflow or trigger work together.
There is some time before the critical update will be activated for all customers on December 15, 2009. So, hopefully eight months warning is is sufficient time for those affected to make any changes required.
Tweet This Post
Delicious
Digg This Post
Stumble This Post