Monday, December 30, 2013

Make Sure You Know Their Qualifications!

If you are looking for a Salesforce consultant or developer, I always recommend that you look first at your Salesforce User Group, which gives you the chance to learn about who is in your area either in person or online. (Nonprofit User Groups are linked here.)

No matter how you go about finding help, you should always verify that they actually have the certifications they claim.  Salesforce now offers an online database of certified professionals.  With  someone's first and last name or email address, you can find a list of their certifications and see if their claims are true. Be warned, spelling counts!  For the most accurate information on an individual, just ask them to send you a link to their verification page in case their name or email address may be entered in a slightly different fashion than you have for that individual.

Not all consultants are alike, verify their certifications before hiring.
For example, you can view my certifications by clicking here, or click the photo of me on the right side of the page.  Yet if you were to search for me using the more traditional spelling of my first name, "Bonnie", you would not find me at all.  Similarly, you might know him as "Mike Gerholdt", but you won't find him listed unless you search for him by his formal name, "Michael".

Verification makes finding the appropriate individual for a job even easier, but for the best accuracy, just ask for the link.  Since the data is maintained by Salesforce, you can trust that it is up to date.

Monday, December 23, 2013

IP Addresses And User Access

As a Salesforce administrator, have you ever wondered when and where your users are accessing their data?  A recent new feature gives you even greater information about user access through a list of IP addresses and browsers used.  If you run a really secure database, looking at the list of IP addresses where users have accessed data is a must for security review, but even administrators of more relaxed orgs can use this information to better understand their users' needs.

User Access History By IP and Browser

You can see where in the world your data has been.
 With the Activated Login List,   you can see every IP address users have used throughout their history with your org.  This view provides even more information than the user login history.  You can even review the access addresses for users you have deactivated.  And, if you have any concerns about an IP address in the list, you can just remove access for that address after talking to the user about where they may be when they access Salesforce data.

Before you remove any IP addresses and browsers from the Activated list, you may want to save the information for future reference.  You will not see the removed data in your recycle bin!  So if you want to keep a record of which users activated their accounts for which IP addresses and browsers, save before you remove. 

Note that Salesforce documentation states that removing a user's IP address activation may only trigger a new activation confirmation request for that address if you remove activations for both the address and the browser used for that access, which you can find in a second list on the Settings>Security Controls>Activations screen. 

Just below the Activated Login List, Salesforce, the browser list contains recently Activated Client Browsers and gives you a more clues about how your users access data. This can be useful when you review your mobile access policies since many mobile devices can be obvious according to the browser listed here.

Unfortunately, the browser and IP address lists don't always coincide.  The browser list does not go as far back in time as the IP address list, and for my own personal activations, I found an IP address I activated at a specific date and time and three different browser activations listed within an hour of activating that address as I used different Connected Apps.

Dynamic, Static, Fixed Or Sticky

If you are surprised by the number of IP addresses that individuals have used to access the database, keep in mind that an Internet Service Provider (ISP) and local hosts may provide dynamic IP addresses from a set list of addresses.  In that case, the last digits of the address may be different for one user on a single device. 

Learning about your user's IP addresses and browsers gives you a more complete picture of what is needed to provide or deny data access for users.  Combining the Activated Login List with the login history report gives you a more complete view of what your users have been doing in Salesforce and with mobile applications like Salesforce Touch and Salesforce1.

Monday, December 16, 2013

Advanced Data Manipulation With Flows

Salesforce Visual Flow provides a relatively easy means to design task-specific user interfaces for end users to interact with data.  But it is important to note that Flow data is not permanent and exists only during one user's execution of the Flow.  You easily can connect Flow data to your Salesforce database, Visualforce pages and Apex code as well.

See my previous posts for more information about how Flows can simplify difficult processes for Salesforce users and tips for styling Flows

Record Lookup

Don't forget to save data if you need it!
If you intend for users to save the data, it can simply be written to Salesforce via the Flow data creation elements.  Similarly, there are elements for retrieving, updating, and deleting Salesforce

One of the important elements for connected Flow data to your Salesforce database is Lookup.  You can use the record lookup element to prevent duplicates when users enter data using Flow forms.  Note that the lookup will only return one record at a time.  If, for example, your form requests four fields for a Lead: first and last name as well as an email address and company, you can use all four to match the newly input data with existing data in Salesforce.  An exact match will be returned for Pat Smith with the same company name and email address.  It will not return matches with similar company names.

In addition, if there are already two Pat Smith leads with the same company and email address, currently only one of them will be returned.  At Dreamforce 2013, there was some talk about future releases returning a collection of records.

Once you have sorted out duplicates, you can determine whether the Flow data should be used with the Create element to create a new record in Salesforce or with the Update element to modify an existing record.  Make sure your Flow users have the appropriate object permissions to perform these tasks.

Error Messages

When you connect Flow data and Salesforce data, note that Salesforce might generate errors.  For example, because Flows respect user permissions and security settings as well as required fields, a user could try to save or retrieve data that is not appropriate for them.  In these cases, Salesforce will return an error.

Use a Decision Branch to process these "Fault" behaviors after linking to Salesforce.  For example, you can present error message Screens or send a user back to a previous Screen to start over.  

Accessing Flow Variables

If you need to use it in more complex processes, Visualforce and Apex can help.  As I mentioned, Flow data is not automatically retained and is unique to the specific user's current execution of the Flow.  Variables within the Flow can be made accessible to Apex and Visualforce by changing their settings from "Private", for use only in the specific Flow, to "Input", "Output" or "Input and Output".  These settings will also determine whether a Flow variable can be accessed by other Flows when one Flow contains another existing Flow as a subflow.

Note that the only way Visualforce by itself can access Flow variables is when it sends initial values to an Input variable.  For example, if your Visualforce page calls a Flow named JustSteps, it can pass a value to start at a specific step.  The code for passing a variable to specify step 3 might look like the following on the Visualforce page:

    <flow:interview name="JustSteps">
        <apex:param name="stepNumber" value="3"/>

The Flow would then need to incorporate a Decision element at the start to check the stepNumber Input variable.

Note that Visualforce cannot change the value of a variable after the Flow has been initiated, nor can it retrieve values from Output variables without the use of an Apex controller as well.

Apex & the Flow

You can gain even more control over Flow behavior by using an Apex controller with your Flow.  The most basic controller provides your Visualforce pages access to output variables.  For example, a simple controller might look like the following:

   public class FlowClass {
    public Flow.Interview.JustSteps myflow { get; set; }

Note that the  Flow name is the same in the class and in the Visualforce page that refers to the class. 
In this case the Visualforce page that uses the controller and retrieves values for a Flow Output variable called "stepsRemaining" might look something like this:

   <apex:page controller="FlowClass">

    <flow:interview name="JustSteps" interview="{!myflow}" />
    <apex:outputText value="Remaining steps: {!myflow.stepsRemaining}  "/> 


Another way to get more out of your Flow is through the use of an Apex plug-in.  Note that plug-in code needs to have a particular bit of code in use in order to implement the Apex Process.Plugin Interface.  An Apex plug-in can then be incorporated like any other element directly into your Flow and can assist with more complex data processing such as creating and saving attachments or converting Leads.

Once you start delving deeply into Apex and Visualforce for use with your Flow, you will probably want to reconsider managing the process.  If your process is very code intensive, you might then decide to bypass Flow and create what you need with just Visualforce and Apex.  For those who prefer not to code any more than they have to, Flow is a great alternative.

Monday, December 9, 2013

User Interface Improvements With Salesforce Flow

Flow gives administrators the opportunity to offer users a custom interface for interacting with Salesforce providing as much help as you think they may need to get their jobs done, from simplifying data entry to providing insight to help users complete forms, all without the need for code.

Last week, I defined some use cases for Flow and offered a presentation to introduce you to various features of Flows for data input and Salesforce record creation.  This week we look at ways to improve the user experience with Flows.

You can access the demonstration Flow I created at


Cascading Stylesheets offer control.
Each Flow Screen has its own Help Text area, which you can use to add an extra bit of information  that may not be needed by all users.  In my example Flow, the lead form Screen includes a link to Help, located with the "Next" and "Previous" buttons, to let users know that their information will not be shared.  Other Screens offer more in-depth information in their Help.  And Screens that don't have Help text do not show a link at all.

Because Help text is defined per Screen, your Flow can provide context-sensitive help to your users.

Branding & Style

Flows offer two ways to format output display text and Help text.  Toggling to the Rich Text Editor while editing text, you can select formatting option buttons for bold, italics, font, etc.  But you can also enter HTML tags directly without toggling to the Rich Text Editor.  For example, "Not Bold and <b>Bold</b>"  will display the following: 
Not Bold and Bold

You can also use HTML tags to add an image directly to your Flow.  For example, adding the following to display text will display the Bay Area Nonprofit User Group logo: "<IMG SRC="" WIDTH="100" ALT="SNUGSFBay">"

For even more control over the look and feel of your Flow, define a cascading stylesheet (CSS) and incorporate both the Flow and CSS into a Visualforce page.  Among the tags particular to Flow are FlowContainer and FlowPageBlockBtns.

Special Tip

One undocumented CSS tag that you will want to know about if you change the background color of your Flow is interviewFormHeaderCell.  If you see a random underline character at the top of every Flow Screen, it comes from a bit of code automatically inserted by Salesforce, and is a known bug.  To get rid of the stray text use the following code in your Visualforce page or adapt it for your CSS file:

    <STYLE type="text/css">
        .interviewFormHeaderCell {border-bottom:0px;}

According to technical support, this is the only way to get rid of the unwanted character as of Dec. 9, 2013.

Next week's blog post will describe some of the more complex data handling options currently available with Salesforce Flow.

Friday, November 29, 2013

Why Should Every Admin Learn To Use Flow In Salesforce?

Flow, it is one of those under-appreciated features in Salesforce.  Many of us aren't even sure what to call it since it is known as Visual Flow, Visual Workflow, Flow, and sometimes the slight misnomer of Workflow.  I presented a session at Dreamforce '13 on Using Visual Flow for Cleaner Data, but the topic of Flow warrants even more attention than that!  And so, I offer part 1 of a three part series on using Flow in Salesforce.

Like Workflow rules, Flow can help your org conform to defined business processes.  Unlike Workflow, which lets you define rules and outcomes to operate fairly automatically and behind the scenes, Flow can interact with users in addition to conducting automated processes behind the scenes and so it is more flexible in its uses.  Some examples of use cases for Flow include:
  • Stepping users through the data entry process with detailed instructions
  • Providing a call-script for anyone who interacts with customers or donors
  • Enforcing naming conventions by employing formulas in record names
  • Ensuring data consistency with formulas for data validation and constants
  • Simplifying the process of data entry for multiple objects such as parent and child related data
  • Creating presentation and training materials
My Dreamforce presentation was created as a Flow and can be found online here:
Flow diagram illustrates Lead and child record creation.

I created the Flow with several goals.  Foremost, I wanted to walk Salesforce administrators through the basic steps required to create a Flow.  When you step through the presentation, you will see videos, instructions and help related to designing and creating a Flow to gather data from a user and save that data to Salesforce. In my example, the Flow creates a new Lead record if a matching record is not found; it also allows for any number of Lead Notes to be added to a new or existing Lead.  All of this is illustrated in the presentation videos.

The presentation also includes information about incorporating decision branches into a Flow and using formulas for data consistency, for example the Lead Note child records are named though the use of a formula.  It offers instructions for making a Flow available to users along with the most basic code needed to create a Visualforce page to display the Flow as well.  The related videos demonstrate each of the steps involved in creating this Lead and Lead Note data entry Flow.

In creating this presentation, I also wanted to demonstrate the customizable user interface Flows offer.  Part 2 of my Flow blog posts will describe how to style your Flow and improve the user experience.

Monday, November 25, 2013

The Most Important Thing I Learned About Salesforce1 And Connected Apps At Dreamforce

The big news at Dreamforce this year centered around Salesforce1 as a new way of accessing your Salesforce data via mobile devices.  With APIs, you can expect to see a lot of new mobile apps taking advantage of this as well, and you may be surprised to learn that some of your existing Installed Packages from the AppExchange can be monitored more closely now as connected apps.

New Settings to Consider

Restricting access to mobile apps with
For administrators, Salesforce1 and the mobile APIs require new attention to security settings.  If you have IP restrictions on your Salesforce org, they are automatically applied to mobile apps.  With IP restrictions on user profiles, you can ensure that data is only accessed through your company WiFi by specifying the appropriate address range for Salesforce user profiles.

But, if you are trying to limit the devices from which users can access Salesforce data, IP restrictions may not be enough.  Make sure mobile devices cannot access your WiFi by limiting access based on a device's MAC address or similar security controls that
allow you to selectively allow devices to connect to your WiFi.

To provide access to acceptable mobile devices when they are outside the range of your company WiFi, install a Virtual Private Network (VPN) to give the device access from any location.

Login and Authorization Settings

Mobile and connected apps provide even more opportunities to specify security settings.  In addition to limiting IP addresses based on user profile, you can define how frequently users are required to login from a mobile device and whether users can automatically authorize their own mobile access. To do this, go to Setup | Manage Apps | Connected Apps  Select the application to edit access settings.

Salesforce also provides a means for reviewing who is able to use mobile and connected apps and blocking access for a specific app or revoking any user's access via a specific app.  For example, you may want to revoke access to Salesforce 1 for certain users while leaving it available to others.  Or you may want to block the app altogether.  This option is available through  Manage Apps | Connected Apps OAuth Usage

More Connected Apps Than You Might Think

In addition to Salesforce1, other apps may appear in your Connected Apps list.  For example,  SalesforceA for administrators all appear in the list after it has been accessed in your org.  The list of connected apps extends beyond mobile with the following apps likely to appear among others your users have accessed:
  • Saleforce Help and Training, 
  • Community, 
  • Power of Us Hub, 
  • Salesforce for Outlook, 
  • AppExchange and 
  • Workbench.  

You may also find older mobile applications such as Chatter Mobile, Salesforce Touch and even Mobile CRM.  As administrator, you may want to monitor the apps that have access to your data and consider Blocking some of the older apps or revoking access from selected users.

Installed Packages and Mobile Administration Changes

Administrators will likely also notice another recent change to their org under Installed Packages that is related to Salesforce1 and the APIs.  "Salesforce Connected Apps" along with "Salesforce1 and Chatter Apps", both managed packages, likely have been installed in your org by "Automated Process". This change relates to users accessing the org via any of the connected or mobile apps and is pushed out automatically by Salesforce.

One final consideration for setting up Salesforce1 is whether users should have access to the new mobile interface via the browser on their mobile device, as opposed to via an app.  By default, Salesforce has enabled access to Salesforce1 through the browser.  To edit this so that mobile browsers go directly to the full site instead, use the Mobile Administration options: Setup | Mobile Administration | Salesforce1

Even for administrators who were not planning to roll out Salesforce1, consider looking into the new settings available for connected apps and Salesforce.

Monday, November 18, 2013

Tools You Won’t Find On The AppExchange

I love the AppExchange, but there are a few tools worth looking into that you don't find on the official marketplace for Salesforce applications.  


A patchwork approach combines features from different cloud tools.
If you haven’t heard of this one, it lets you create “If This Then That” relationships to connect your favorite cloud applications. It allows you to create a 'recipe' describing specific situations and what you would like to have happen when those situations are found. One obvious non-Salesforce recipe sends you an email when rain is in the forecast for your area. On the Salesforce side, there are a lot of publically available recipes that work with Chatter. For example, you can check the Trust Salesforce site for messages about your instance and have them sent to Chatter. There are also recipes connecting Dropbox and Evernote with Chatter.  

Browser Extensions

Check out the Chrome Extension Gallery for tools that can make any administrator’s life easier. Two nice ones from the folks at Appirio include the Utility Belt and Logins.  


Some interesting tools can be created with Heroku as well. I recently heard great things about Perm Comparator for comparing permission sets and profiles. This application was created as an open-source side project by Salesforce employee John Brock.

Basic Integrations

Keep in mind that cloud applications and services that have an API may have plug-ins or integrations with Salesforce available through their own support sites. Check out WordPress and MailChimp for examples of this or search for your own favorite Salesforce integration to see if one exists.

Explore these tools with caution, unlike the AppExchange, these do not necessarily go through the same sort of review process for performance and security. Also, with different release schedules, sometimes these tools can get out of sync with the latest Salesforce release and stop working well. Buyer beware, even when the purchase is free.

Sunday, November 17, 2013

How to Find A Salesforce Genius At Dreamforce

Did you know that the Salesforce MVPs will be entertaining questions at their on-going ‘genius bar’ setup at Dreamforce?  Running each day of the show, you can find a selection of MVPs to help you solve your most vexing Salesforce questions.

What is a Salesforce MVP

The MVP program recognizes Salesforce customers and consultants who contribute to the Salesforce Community by sharing what they’ve learned about the product.  Bloggers, user group leaders, developers, folks who actively answer online questions, any of these may be candidates for the MVP program.  The program pools the knowledgeable and enthusiasm of a lot of individuals.

At Dreamforce this year, you can find these folks gathering at the Success Community Zone in the Hilton.  Tables are set aside for you to bring them the issues that have you flummoxed.   Look for the it at the Hilton Grand Ballroom in downtown San Francisco.

Why do so many people choose to make themselves available to answer the questions of strangers?  We enjoy working with Salesforce and want to share that enjoyment.  We believe the Salesforce platform has a lot to offer its users if we all help each other.  We love to learn more about Salesforce by investigating what others are pondering.  We recognize that a lot of administrators and developers may be working alone or in small teams and so can benefit from having other folks to act as resources.  And, as Steve Molis famously put it on the Salesforce answers board: “it's just the right thing to do and the right way to treat someone.”  

My Road To Dreamforce -- Certification Splurge!

Leading up to Dreamforce this year, I decided to finally get certified.  After about 9 years with Salesforce, it was about time.  I knew I could sign up for a discounted certification exam during Dreamforce, but I decided that I needed to stop putting it off.

Once I signed up for the first Administrator Certification, I asked around to find out which of the certifications might be attainable in the few weeks remaining before Dreamforce.  All of them, other than Advanced Developer and Technical Architect!  Considering training requirements, self-study, review, prerequisites, etc., I was really only hoping to hear which one other certification I could or should try for in a short time, but the answer I got was more general, indicating which of the tests could be scheduled and completed within a few weeks time.  Any of them could be attainable, but all of them?

Nine years of procrastination is long enough.  I have worked with a variety of companies solving specific business problems with Salesforce customizations over those years.  So I decided to try to rise to the challenge and go for five certifications in five weeks.  Okay, really it is more like five certifications in nine years and five weeks.  When I look at it that way, it seems so much more manageable.   

Why Not Make It Six?


The, um, facilities at the Salesforce Training facility.
With each new certification, I received more support from other Salesforce administrators, consultants and developers.  Their feedback encouraged me to keep working toward my goal of five before Dreamforce.  I even looked into the Advanced Developer certification, which would have made number six, but that process takes months.  After passing a multiple choice test like the other five certifications require, successful applicants are invited to take a programming assignment and essay test at least two months later.  The programming assignment is only offered every few months, and the November test was already full.  That one was definitely unattainable in my self-imposed five week time frame. 

Salesforce Instructor certification is for people already teaching, and the Salesforce Technical Architect certification process is even more rigorous than Advanced Developer.  So the fifth would have to be the last, for now.  

Salesforce Training


Coincidentally, I received my fifth certification right around the time that Salesforce held an open house for its new training facilities in San Francisco.  The place is beautiful and made for a great venue for me to celebrate my certifications among an enthusiastic crowd!  I’ve taken Salesforce training in the past and recommend you look into their offerings in-person or online through Premium Support.

And now that I am finished with the five certifications recommended to me, I have my release exams to look forward to.  And I've promised to bring cookies for my local Salesforce Nonprofit User Group if I ever wind up getting that sixth certification!

Friday, November 15, 2013

First Time At Dreamforce As A Speaker

I am addicted to Dreamforce!  As you can tell from my bag collection, I have already been to a few of these events over the years (unfortunately, I cannot locate the 2008 and 2009 bags), but this is the first year I will be attending as a speaker.

Oh no!  I can't find my bags from 2008 and 2009!
If you are interested in learning more about my sessions, I’ve got them summarized here:

Join User Group Leaders with nearly 25 years of combined experience running user groups, many of whom are also Salesforce MVPs, as they debunk the myth that user groups are nothing more than social groups. They will answer questions such as: What is a user group, what kinds are there, and who runs them? Where can I find them and how do I join one? And most importantly, What's in it for me? Find your local user group at ... And keep the Dreamforce excitement going all year long! Community-Led Session
Time & Location
Hilton San Francisco Union Square, Imperial A | Monday, November 18th: 11:45 AM - 12:40 PM

Pro-bono MVP Office Hours for Non-profits

Are you a non-profit user with questions about donation management, campaign management, reports & dashboards, or using Communities in Salesforce? Join this hands-on, community office hours to get help from Community MVPs. Bring your laptop or tablet to access your Salesforce org.

Time & Location

Hilton San Francisco Union Square, Foundation HUB | Tuesday, November 19th: 1:30 PM - 3:30 PM

Answers Live # 1 - Nonprofit HUB

When Nonprofit users and administrators have questions, they know that the Power of Us Hub is the place to get answers from the Salesforce nonprofit community. Join us, bring your questions, and work through your greatest challenges at this live Q&A session with our all-star team of experts. By drawing on their 25+ years of nonprofit-focused Salesforce experience, you will gain multiple perspectives on your most pressing issues, and everyone from new users to seasoned veterans is guaranteed to learn something new. Community-Led Session

Time & Location

Hilton San Francisco Union Square, Yosemite A / B | Wednesday, November 20th: 9:00 AM - 10:00 AM

Using Visual Flow

Visual Flow can help with data consistency and offers you the ability to walk users through each data entry process. Learn how to create them yourself! This session is held in the Success Community Zone Mini-Theater at the Hilton Grand Ballroom.

Time & Location

Hilton San Francisco Union Square, Success Community Zone | Wednesday, November 20th: 10:00 AM - 10:45 AM

AppExchange Speed Dating: 20 Hot Apps You Might Fall in Love With

Are you looking for that perfect set of apps to complete your nonprofit or higher ed institution? With so many to choose from, it can be hard to find the ones that will help you the most. Join us as we review 20+ AppExchange products that are nonprofit-friendly and take you out on a very short coffee date with our favorites.

Time & Location

Hilton San Francisco Union Square, Imperial B | Wednesday, November 20th: 1:00 PM - 2:00 PM