Technical Architect Certification

Written by ShamrockCRM on September 4, 2012 – 2:26 pm

I passed “Step 2” for the Technical Architect certification.  Step 1 was to take a self assessment to ensure that I had enough experience to go through this process.  Step 2 was a proctored exam with 60 questions in 120 minutes.  This test really put a lot of emphasis on security, identity management and single sign-on, integrations, and large data volumes.  As usual, the test was somewhat tricky, due to the “multi-answer, multi-choice” questions (e.g. 2 answers are correct), but overall it was pretty straight-forward and I finished it with a lot of time left over.

Step 3 should get interesting:

Review Board Presentation

  • Presentation and discussion of the architecture solution for a hypothetical scenario and a customer case study
  • 4 hours allotted to complete the exam
  • No hard-copy or online materials may be referenced during the exam

The Certified Technical Architect Review Board Presentation: The third and final step to earning the credential is to complete an in-person or video-enabled, proctored presentation and interview with a panel of judges, offered at scheduled times throughout the year. The review board presentation is comprised of:

  • Hypothetical Scenario Presentation and Discussion—A hypothetical scenario and instructions will be provided to the candidate upon arrival to the review board meeting. The candidate will be given an hour to read, evaluate, and document a high-level architectural solution for the hypothetical scenario.
  • Customer Case Study Presentation and Discussion—Detailed instructions for developing and presenting the customer case study for the review board will be provided to the candidate. The candidate will have a fixed amount of time to complete the customer case study presentation in advance of the scheduled review board presentation time. The case study presentation is completed at the candidate’s own pace and does not require working at a proctored site. However, the candidate will be required to submit the case study five business days prior to the scheduled review board session.

The case study presentation, in combination with the scenario discussion, will be evaluated and scored by the review board judges as the final step of the Certified Technical Architect certification program.

Posted in | Comments Off on Technical Architect Certification

Salesforce Mobile Dev Part 2 – APEX Controller

Written by ShamrockCRM on July 27, 2012 – 1:08 pm

Yesterday, I posted the VisualForce code for developing a mobile “insert user” page.  Today, I am posting the details on the APEX Controller required to perform the heavy lifting in Salesforce.

This APEX Class will perform a few tasks: 1) It will query the available Roles, User License types, and Profiles for population into the dropdown select lists. 2) Perform an “insert” of the new user into the database. 3) Return the DML error message if an error occurred (e.g. username already exists, etc.).

Currently, this code is only enabled to work with the “Salesforce” User License type. This could be enhanced to allow for platform licenses, Chatter licenses, etc.

global with sharing class usermanagerController {

    global static String insertUser(String firstName, String lastName, String email, String profile, String role, String sendEmail) {
        try {
            String alias = firstName.substring(0, 2) + lastName.substring(0, 2) + email.substring(0, 2);
            User u = new User(IsActive = true, FirstName = firstName, LastName = lastName, Email = email, Username = email, ProfileId = profile, UserRoleId = role, Alias = alias, DefaultGroupNotificationFrequency = 'D', DigestFrequency = 'D', EmailEncodingKey = 'ISO-8859-1', LanguageLocaleKey = 'en_US', LocaleSidKey = 'en_US', TimeZoneSidKey = 'America/Los_Angeles', UserPermissionsCallCenterAutoLogin = false, UserPermissionsMarketingUser = false, UserPermissionsOfflineUser = false);

            if (sendEmail == 'on') {
                Database.DMLOptions dlo = new Database.DMLOptions();
                dlo.EmailHeader.triggerUserEmail = true;
            insert u;
        } catch (DmlException e) {
            return e.getDmlMessage(0);
        return 'true';

    global static List < Profile > queryProfile() {
        //Only works for SFDC, enable later for with a dependent picklists in jquery
        ID salesforceUserLicense = [Select Id from UserLicense where Name = 'Salesforce'
        limit 1].Id;
        String profileQuery = 'Select Id, Name, UserLicenseId From Profile where UserType = \'Standard\' And UserLicenseId = :salesforceUserLicense ORDER BY Name ASC';
        List < Profile > p = Database.query(profileQuery);
        return p;

    global static List < UserRole > queryRole() {
        String roleQuery = 'Select Id, Name From UserRole where PortalType = \'None\' ORDER BY Name ASC';
        List < UserRole > r = Database.query(roleQuery);
        return r;

    global static List < UserLicense > queryUserLicense() {
        String ulQuery = 'Select Id, Name, LicenseDefinitionKey From UserLicense where Name =\'Salesforce\' limit 1';
        List < UserLicense > ul = Database.query(ulQuery);
        return ul;

Next, I will post details on the JavaScript.

Tags: , , , , , , ,
Posted in User Adoption, HTML5, Salesforce Mobile, | Comments Off on Salesforce Mobile Dev Part 2 – APEX Controller

Salesforce Mobile Development – Create New User Code

Written by ShamrockCRM on July 26, 2012 – 11:53 am

See below for code on how to implement a Create New User form in HTML5/VisualForce.

I recently released an HTML5/VisualForce mobile application recently on the AppExchange for managing adoption named Adoption Manager.  The purpose is to review users that have not logged in for long periods of time and quickly deactivate them.  It also allows the creation of new users, searching of users, and viewing inactive users.

Below is a screenshot of the Create New User form.  I will walk you through the code to implement something similar. mobile development new user

To build this, you need a VisualForce page, an APEX class, and a JavaScript component:


<apex:page showHeader="false" docType="html-5.0" standardStylesheets="false" cache="true" controller="usermanagerController">
            <title>Adoption Manager</title>
            <link rel="stylesheet" href="{!URLFOR($Resource.usermanager_jQuery, '')}"/>
            <apex:includeScript value="{!URLFOR($Resource.usermanager_jQuery, 'jquery.min.js')}"/>
            <apex:includeScript value="{!URLFOR($Resource.usermanager_jQuery, '')}"/>
            <apex:includeScript value="{!URLFOR($Resource.usermanager)}"/>
            <apex:includeScript value="{!URLFOR($Resource.forcetk)}"/>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
            <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;"/>
            <div data-role="page" data-theme="d" id="newuserpage">
                <div data-role="header">
                    <h1>Create New</h1>
                <div data-role="content">
                    <div class="content-primary">
                        <div id="errorMessageNewUserDiv">
                            <span style="color:red;" id="errorMessageNewUser"></span>
                            <span><strong>* All fields are required for user creation</strong></span><br/><br/></div>
                        <form action="javascript:alert('This user has been created');" id="newUserFormForm">
                            <div data-role="fieldcontain">
                                <label for="firstNameForm">First Name:</label>
                                <input type="text" name="firstNameForm" id="firstNameForm" value="" placeholder="First Name" data-mini="true" maxlength="40"/>
                            <div data-role="fieldcontain">
                                <label for="lastNameForm">Last Name:</label>
                                <input type="text" name="lastNameForm" id="lastNameForm" value="" placeholder="Last Name" data-mini="true" maxlength="80"/>
                            <div data-role="fieldcontain">
                                <label for="emailForm">Email (Username):</label>
                                <input type="email" name="emailForm" id="emailForm" value="" placeholder="" data-mini="true" maxlength="80"/>
                            <div data-role="fieldcontain">
                                <label for="userlicenseForm" class="select">User License:</label>
                                <select name="userlicenseForm" id="userlicenseForm" data-mini="true"></select>
                            <div data-role="fieldcontain">
                                <label for="profileForm" class="select">Profile:</label>
                                <select name="profileForm" id="profileForm" data-mini="true"></select>
                            <div data-role="fieldcontain">
                                <label for="roleForm" class="select">Role:</label>
                                <select name="roleForm" id="roleForm" data-mini="true"></select>
                            <div data-role="fieldcontain">
                                <label for="generatePassForm">Generate password and notify user?</label>
                                <select name="generatePassForm" id="generatePassForm" data-role="slider" data-mini="true">
                                    <option value="on">Yes</option>
                                    <option value="off">No</option>
                            <div class="ui-body ui-body-b">
                                <fieldset class="ui-grid-a">
                                    <div class="ui-block-b">
                                        <button type="submit" data-theme="d" data-mini="true">Create</button>
                <div data-role="footer" data-id="foomain" data-position="fixed"></div>

Notice that the userLicense, Profile, Role dropdown fields are not populated. They will be dynamically populated with JavaScript and using a query in the APEX Controller. Also notice the use of JQuery mobile components (e.g. email form fields, etc.).

Next article will be the APEX controller.

*And let me apologize in advance if any of the code is not the prettiest at the moment. :)

Tags: , , , , , ,
Posted in User Adoption, HTML5, Salesforce Mobile,, VisualForce | 1 Comment »

Summer 2012 – Salesforce Release

Written by ShamrockCRM on June 4, 2012 – 9:06 pm

Summer 2012

The Salesforce 2012 release is available for most everybody now and it brings some pretty useful features.  Let me provide an overview of my favorites.

Chatter Messenger – I like it, but it is just adding 1 more messenger to my huge list of messengers already open (Gmail, Facebook, Corporate IM, etc.)

Chatter Messenger in GA

Email Threads in Chatter – This is just an example of Chatter advancing as a modern social collaboration tool.  Think Google Docs and the ability to respond to comments from emails or Facebook.

Chatter Email Responses and Threads

Chatter Multi-File Upload – Much needed feature, but let’s hope that document storage limits start dramatically increasing or there might be problems in the near future.

Multi-file Chatter Upload

Advanced Relationship features – The ability to have Master-Detail relationships with the ability to detach a parent after a record is created.  This is really a beautiful thing.

Advanced Relationship Fields Master Detail
Read more »

Tags: ,
Posted in, Summer 2012 | Comments Off on Summer 2012 – Salesforce Release

Red Hot Chili Peppers at Dreamforce 2012!

Written by ShamrockCRM on June 4, 2012 – 7:08 pm

It is very hard to be Metallica from Dreamforce 2011, but the choice this year comes pretty close.  Red Hot Chili Peppers will be hosting a concert at the Dreamforce Gala this year.  This band defined my youth and I can’t wait to see them live.

I am also looking forward to Tony Robbins, but I don’t understand why the scheduled him for Friday.  This is a tough day for a lot of people, but maybe that’s why…to force them to stick around.

Dreamforce 2012

Tags: ,
Posted in | Comments Off on Red Hot Chili Peppers at Dreamforce 2012!

Salesforce Winter 2012 Features

Written by ShamrockCRM on December 21, 2011 – 11:27 am

Salesforce Winter 2012 features.  I know this is a little (very) late, but it is better than never.

There are a lot of big releases during this upgrade and a lot of new things for everyone to learn, like Siteforce and Visual Workflows.  Take a look below to see my platform overview

See the release notes in PDF form here.

Social Contacts

Salesforce Social Contacts – this feature sounds great, but I am not overly enthusiastic.  You can link your contacts to Twitter, Facebook, and LinkedIn.  You can add in their picture and see their posts.  Great!  The problem is that you need to do this contact by contact and social network by social network.  The system does not automatically scour the web and update all of your contacts.  Even worse, Salesforce searches the social networks by the contact’s name.  Have you ever tried searching Facebook for a common name?  You ALWAYS get 100 results. Have fun with that.

Chatter Customer Groups

Customer Chatter Groups – This is a great feature.  Create your own “customer portal” for collaboration and discussion.  Invite your customers into a Chatter group and chat with them, share documents, and more.  I like it.  Maybe try tying this in with an actual Salesforce customer portal?

Dynamic Dashboards

Dynamic Dashboard filtering – This is one of those features that should have been there since day 1.  Now, you can filter individual dashboards by criteria, such as region, industry, product line, etc.  For all of the large organizations out there that have SO many dashboards created in a specific (hokey) way, I wonder how difficult it will be for them to migrate 1000 dashboards into this format.

Case Flow

Case flows – Wow, Cases have become beautiful in the Service Cloud.  Everything seems very social.  It is very easy to add comments, send emails, log calls and more.  This is really a great UI makeover.

Case Flow

The Service Console has somewhat of a small overhaul as well and makes it very easy to find data quickly.

Pinned Lists

Pinned Lists – For the service console, you can now pin vital lists on the left side of the screen to always have the data available.  Very nice.  Time for everyone to invest in wide screen monitors.

Chatter Private Messages

Chatter Private Messages – This is another “should have been day 1” feature.  Very simple.  Send messages to 1 or many people in Chatter.

Chatter Approvals

Chatter Approvals – Integrating approval requests directly into Chatter feeds for the manager that does not like digging through many records to find an action he needs to take.

Chatter NOW

Chatter Now – Integrating instant messaging directly into Salesforce with Chatter Now.  How many instant messaging clients does everyone have now?  Well, here is one more.

Chatter for Microsoft SharePoint

Chatter for Microsoft SharePoint – Allowing for simple integration of Chatter functionality into Microsoft SharePoint.  This seems very useful for making all of your boring internal websites socially enabled.  Great idea.

Quick App Building

Admin quick links – This should make it a lot easier for the new SFDC admin.

Fast App Building

One-click App Creation – Salesforce is trying to make it a LOT quicker to create a new custom object, app, and tab.  Simply click the “Create App” button, fill in a few fields and you are ready to start.  A little bit easier than before.

Visual Workflow

Visual workflows – This is where I get excited.  Visual Workflows allow you to use a cloud designer tool to visually create VisualForce wizards.  So, instead of building a lot of VisualForce, it can all be drag and drop, point and click.  This is something everyone needs to spend a couple of hours learning over the next few months.


Siteforce – is generally available in Winter 2012.  It is essentially a web designer tool and content management system all in one, allowing you to utilize Salesforce as a backend database/admin console and build a dynamic front end website with nothing but point and click.

There are also several smaller features available, such as:
-Likes on Chatter comments
-Cloud designer for Visual Workflows
-Sharing Chatter files via email/IM inside and outside of SFDC (awesome!)
-Upload and Share Files at same time
-More Chatter filters
-Chatter Desktop
-Chatter for Android
-New Forecasts generally available
-Salesforce Mobile Beta for Android phones
-Presentations can no longer be assembled
-Enhanced reports tab (here’s to confused users that just got used to managing their reports)
-iPad mobile dashboards app
-Jigsaw is now
-Permission sets are now available – no longer need to create an infinite number of profiles to solve small needs!
-Just in Time provisioning for SSO portals

Tags: , , , , ,
Posted in Announcements, Chatter,, Winter 2012 | Comments Off on Salesforce Winter 2012 Features User Adoption – New AppExchange Application

Written by ShamrockCRM on August 16, 2011 – 8:00 am

I am excited to announce a new product created by Shamrock CRM built specifically for improving user adoption in and  Imagine having 1000 users and only 50% user adoption. @ $1000/license, this is $41,000 WASTED in licenses/month.

Welcome to the solution, AdoptionMax – User Adoption Management!


Try AdoptionMax on the AppExchange Here (Click View Screenshots to see More)

Take a look at my overview of AdoptionMax Here

With Adoption Max, you can send regular notifications to users and their managers/adoption champions based on certain levels of inactivity. Notify users by email, chatter posts, tasks, reports. Customize when to send messages, to whom, and how they should be sent. All of these notifications are customizable, reportable, and automatic. Turn the app on and forget about it. All notifications will be handled by the app.

Salesforce User Adoption

The best way to obtain user buy in is to establish a level of accountability. Users MUST know what you expect from them and they must be held accountable for their successes/failures. Adoption Max will provide them and their managers will visibility into their system usage or lack thereof.

We suggest establishing “Adoption Champions.” These would be power users that are responsible for the adoption success of a certain group of users, such as a region, an office, a product line, etc. These adoption champions would be assigned in Adoption Max and would have their own adoption reports to monitor. They would communicate with users to encourage usage of the system and regularly report to management about the level of adoption progress. e.g. A European Adoption Champion might be based in London and be responsible for all users in Europe. They would encourage usage, provide tips & training, help users when needed, and escalate to user management if there is lack of performance. The user, the user adoption champion, and the managers should all be held accountable for the adoption success. Adoption Max makes this VERY visible.

User Adoption Tracking


Read more about AdoptionMax and how it will improve your User Adoption here

Try out AdoptionMax on the Salesforce AppExchange

Let me know if you would like to try it out for FREE or if you would like more information.

Thanks for reading.  We have just found that SO many companies, big and small, have huge problems with user adoption management.  We want to help!

Tags: , , , , , ,
Posted in User Adoption,, User Adoption | Comments Off on User Adoption – New AppExchange Application

Dreamforce 2011 Site is Live

Written by ShamrockCRM on April 7, 2011 – 1:09 pm

Hey everybody, the Dreamforce 2011 website is now live with a listing of sessions and activities.

Take a look here for Dreamforce 2011

The dates are August 30 – September 2, 2011. This leads nicely into a holiday for most people.

Early bird price of $699 is supposedly available until April 14th.

Tags: ,
Posted in | Comments Off on Dreamforce 2011 Site is Live

Chatter Knowledge Portals

Written by ShamrockCRM on October 3, 2010 – 10:56 am

Chatter Chatter Chatter. All of the news lately is pretty much revolving around Chatter. There are multiple benefits, such as closer teams, better collaboration, passive tracking of data and now, Knowledge Portals.

Chatter Groups are a great way to segment your Salesforce users into different groups based on region, function, department, teams and more. This also allows you to have a communication platform specifically for them. For example, imagine you would like to rollout a new pilot group of users for customer complaint tracking, not sales like your existing users. What is the best way to form a community within amongst them for change notifications, training information, useful documents and more? Chatter Groups of course!

When rolling out a new set of users, I like to setup a Chatter group specifically for them. I create the group, add all of the users, and pick and assign a “champion” for the group. The champion will be the person on the team responsible for motivating user participation in the group and posting announcements.

Once all of the users are assigned to the group, they can ask questions directly within the group and have them answered by people in their same team as opposed to mass posting questions that would essentially not be important to the other sets of users (e.g. customer support rep process issues broadcasted to all sales and marketing people).

Once the group is setup, I also post all training documents and useful material directly in the group. I make all announcements and “useful tips” in this group. Any time anything is posted, it will show up directly on their home page.

What a great way to communicate to one subset of users without bugging everyone else! This is a very simple, easy way to form a knowledge portal directly in You can create as many of these groups as you need.

Posted in Best Practice, Chatter,, Training | Comments Off on Chatter Knowledge Portals Summer ’10 Release

Written by ShamrockCRM on September 29, 2010 – 10:55 am

Although this is a little behind, it is still worth summarizing some of the best features from the Summer 2010 Release of

Salesforce Chatter (obviously) – This is being enabled by default for all new organizations. Existing organizations must enable it. This has all of the typical aspects that I am sure most of you are already used to: Chatter Profiles, Groups, Feeds, etc.

Tips: Try fun things like using the API to force certain types of users to auto follow certain types of data, e.g. Automatically force users from territory A to auto follow all Opportunities selling Product XYZ.

Haven’t seen Chatter? Take a look

Out of curiosity, how are all of you handling the training of users on Chatter? I certainly think it requires some kind of “nudge” to truly explain the benefits and how to use it.

Cloud Scheduler – This is a great feature if you would like to schedule meetings out of You can propose meeting times and allow your customers to decide which time is best for you. Salesforce will generate a custom web page for them to visit. This can be done for Leads, Contacts, and Person Accounts. Salesforce can even propose the time for you and try to select the best time.

Quotes Template Editor – This is in beta. Instead of having to use Salesforce’s basic quote layout, they are now allowing you to create your own Quote templates, which is very necessary. This functionality is very basic, doesn’t allow you to preview what you are doing, but it is at least worth trying.

New Opportunity Page (Pilot) – I feel like this was originally announced SO long ago. I can’t believe it is now only being piloted. This puts the focus on key Opportunity fields that are used the most in a highlight panel at the top of the screen. It also focuses on Chatter and recommendations. Cool feature.

Salesforce Mobile Enhancements – Chatter in the mobile app is the biggest improvement. Hello Salesforce, where is the Salesforce for Android app?

Email Opt Out Warning – Finally. When sending a mass email, Salesforce will warn you if Email Opt Out is checked for any contacts. About time.

Multiple Email Addresses on Contacts and Leads – Now, you can specify multiple email addresses for these records, e.g. Work and Home email. When emailing them from within Salesforce, it will allow you to choose which email to send to. Nice.

CRM Content Available for all Editions – At no cost.

Salesforce Knowledge Enhancements – There are quite a bit of knowledge enhancements, making it so much easier to populate this database and easily help your customers, such as creating an article while closing a case and using suggested articles while solving a case.

Community Enhancements – Salesforce Answers can now be used in Sites. Great! Questions can be generated into Cases. Replies can be converted into articles. Just imagine the customer support database you can build with a community like this.

Dynamic Dashboards – Use the security settings of the current user to power the dashboards they visit. This is a great way of not having to create 100’s of duplicate dashboards for everyone. Make sure you have your role hierarchy in check! Also, take a look at the drag and drop dashboard builder. This saves a lot of time.

Dependant lookups and lookup filters (beta forever) – Why is this in beta? I feel like we have been waiting on this for years. ex. On an Account lookup on an Opportunity, you can set it up so that it will only show Accounts where Active = TRUE. This shrinks down the mess in the lookup windows quite a bit.

Well, these were my favorite updates. There are a lot of other changes related to Sites, VisualForce, Development as a Service, etc, but I don’t want to bore you with those :)

Posted in Announcements, Chatter,, Summer 2010 | Comments Off on Summer ’10 Release