»
S
I
D
E
B
A
R
«
Delving into CMSForce
Aug 25th, 2009 by Jessie Grenfell

I’ve been working on a project that involves the use of CMSForce and since that’s a fairly new offering from Force.com Labs, thought I’d share my experiences so far.  The install itself is easy enough, but there are a few post-install instructions that need to be followed for it to work, so be sure to download the documentation available on the AppExchange and read through it.

To use CMSForce, you’ll either need to use one of the Page Templates that comes with the application, or create your own, which involves Visualforce.  The idea behind CMSForce, as with any CMS application, is that those templates can be created by someone more technical, and then anyone can go in and create new pages or adjust existing pages without needing a background in Visualforce, HTML, or style sheets.  CMSForce definitely accomplishes this, and anyone willing to spend half an hour to an hour getting up to speed on it should quickly be able to start making use of the Sites functionality now native in the Enterprise version of Salesforce.

For the graphic design of the Site I did, my client already had a non-Salesforce web portal whose style they wanted to mimic, so all I had to do was create a Zip file of the CSS and image files (maintaining the folder structure on the web server), upload that as a Static Resource and then refer to the style sheets in the Visualforce Template.  And the voila, standard HTML tags like <h1> (heading 1) now display with my client’s branding.

The Page Template is what it sounds like, it provides the styles and the frame for the page, which can include header, footer, menus, etc.  In the Visualforce for the Template, you can insert Content Block components which are the placeholders for the content that users will be able to provide.  From there you create Page records, which become individual pages in the site.  Users then have the ability to update the content in each Content Block within the Page using a GUI editor.  One page can be identified as the Home page and is the default when users go to your Site URL without specifying a specific page.

Once you have a Page Template and one or more Pages with Content Blocks created, you’re ready to set up a Site to go public.  Once again, just read through the CMSForce documentation for all the configuration that needs to be done.

I’ve hit 2 issues that I’m still trying to resolve in this process.  First, the content within the Content Blocks looks great in the preview but isn’t displaying in the public site.  This I’m sure is a permission issue, and fortunately one of the Sites PMs from Salesforce will be helping me resolve that tomorrow.  If this is a shortcoming in the documentation, I’ll be sure to post the resolution here.  The other is that I created Visualforce page to display data from Salesforce and used that as a Page Template, and it isn’t functioning as expected in Sites.  I suspect this has to do with the fact that my page is embedded as a component in another page, so once I figure that out I’ll post what I’ve learned here.
Revision 8/26: both of these issues were, predictably, due to user error- I hadn’t realized that CMSForce wasn’t deployed yet.  Once deployed, everything works as expected!

All in all, another solid application from Force.com Labs.

Managing by Metrics
Aug 10th, 2008 by Anand Sethupathy

One of the great promises of using CRM for nonprofit program management is the ability to manage by metrics. In theory, if we could track all efforts and all outcomes in a system, then we could uncover those predictive indicators that lead to desired outcomes. We could then make adjustments to the program operations itself to reach those desired outcomes. To a great extent, this is possible, however, it is much more complex than it sounds. One of the root causes of the complexity is the fact that we often are not looking at all of the variables and are only looking at a subset. Making decisions on a subset of variables can sometimes lead to incorrect conclusions. Since I have seen this logic trail unfold a few times, I thought I would share an abstracted example of such a situation.

Take for example, Acme Org, a human services organization that has implemented a robust CRM solution that tracks almost all aspects of it’s program operations. Below is one of the critical reports reviewed by the Executive Team each month:

Initial Management Metrics

The organization is considering the use of these metrics for determining promotions, salary adjustments, and bonuses. After initial review, the Executive team expressed concern about Jon’s performance to Jon’s manager. Jon’s manager on the other hand knew that Jon’s metrics were low because he was always thrown on to the toughest cases. Being on the toughest cases each month meant that Jon would have to spend more time with each client and would be responsible for defining new engagement processes for working through complex cases. Unlike the other client service reps Jon spent a lot of time researching and speaking to industry experts to identify best practices that could be used by Acme to help future clients. In short, Jon was expanding the organizational knowledgebase, capacity, and quality of service delivery. Unfortunately, none of this was being recognized in the monthly report. Jon’s manager decided to add a new metric into the monthly report that would help recognize Jon’s efforts. The revised report is below:

Post Review Metrics

The revised report gave the Executive Team more insight into Jon’s efforts and the demands placed on the Client Services staff.

The point of the example is to proceed with caution when using Metrics for Management level decisions. They can be a very powerful tool when well directed; however, there is usually a story behind every piece of data and it is critical that the entire story is understood before program level decisions are made.

Cross Object Formulas Have Changed the Game
Aug 3rd, 2008 by Anand Sethupathy

If you haven’t already done so, make sure you get deep into Cross Object Formulas. They have fundamentally changed how we think and work with Salesforce.Com configurations. A Cross Object Formula is a Formula field that can traverse object relationships and pull down data into an object.

Take the following example. Let’s say you are using the Opportunities object to track Inbound Grants. Let’s say that you have a Payments object that has a Master/Detail relationship with Opportunities (Payments is the Detail).

You can setup the following Cross Object Formulas in the Payment object to reference elements from the Opportunity and Account.

Payment Made By (Account) = Opportunities__r.Account.Name
Payment For (Opp) = Opportunities__r.Name

The beauty of the Cross Object formulas is that it lifts many of the constraints we previously faced with Salesforce. We can now:
- Create more complex reports including more objects than we could in the past
- Avoid writing Apex for something as silly as replicating a parent or lookup field
- Ease data entry and report building for the end user by making data more accessible

There are some limitations to be aware of:
- Limit of 5 cross object relationships per object
- You can reference up (from detail to master) or sideways (lookup), however, for references from parent to child, you still need to use Summary Roll Ups.

If you haven’t already used these, you should definitely check them out as they can solve many common problems you may have faced in the past.

If you have any interesting use cases for cross object formulas, please post them in the comments.

CRM Sustainability
Jul 5th, 2008 by Anand Sethupathy

We have been engaging in a lot of interesting debates in the NPower office about what makes a CRM solution sustainable for an organization. After a typical CRM deployment project, we do our best to leave the nonprofit with enough knowledge and tools to keep them sustainable. Here is a list of a few of the things we do:

Documentation – We initially started with word docs, however, we are more recently moving towards the use of Help Tips, Recorded Screen Casts, and a Help Tab. The idea behind documentation is that it should be complex enough to educate someone on how to use the CRM; however, not so complex that the documentation cannot be maintained.

Training – This is perhaps the most important element for us. We typically provide our clients with two levels of training. We do an end user training session that lasts between 1 and 3 hours depending on the complexity of the client implementation. We also do an administrator training for the Sys Admin level users at a client site. We also encourage the Sys Admin level users at the client site to attend a formal Salesforce training class.

Community – For clients that are in cities where CRM user groups are held, we encourage them to join and attend. This allows them to learn from their peers and get new insights into what is possible with CRM. We also encourage Sys Admin level users to join the NPSF so they can learn through the engaging technical conversations of the online community.

One of the areas that continues to be a challenge for us is Custom Code. Salesforce (and other CRM tools) provide a variety of means to extend the base platform with Custom Code. In the case of Salesforce this would be Apex, VisualForce, S-Control, and API Code. We are always weary of dropping custom code into an organization that has no means of managing or modifying the code. We do our best to avoid code by using as much standard functionality as possible. When it comes to deploying custom code into an organization that is not able to support it, we work through a simple cost/benefit tradeoff. Is this Code performing a high value business function? Is there a high probability the Code will need to be changed within the next 3 years? If the code needs to be changed, can the organization afford the change? If there is HIGH value for the code, LOW probability of the code needing to be changed, and the organization will likely find the funds for a change, then this alleviates our concerns. Custom Code is not to be feared in a NPO CRM implementation; however, a plan needs to be in place to support it over its lifecycle.

Encrypted Fields in Salesforce
May 31st, 2008 by Anand Sethupathy

A colleague of mine (Lisa Glass) recently began using encrypted fields in Salesforce. It turns out they are fairly simple to use. Encrypted fields need to be requested through the “Feature Activations Team” at Salesforce. You can just open a Support Ticket and put in a request for this. As per the documentation, this feature is available to all Enterprise and Unlimited edition accounts, which means all NPO’s should be able to access this.

How it works:

  • It creates a new field type in your instance called “Text (Encrypted)”. This is fairly similar to a regular text field, except that the data is encrypted.
  • In order to see data within an encrypted field, the user’s profile must have the “View Encrypted Data” option checked off
  • Any user that does not have this permission in their profile will see a value such as “***-**-****” when they view the encrypted field. (Note: You can specify whether you want the Mask to be either a “X” or a “*”. You can also leave a portion of a field unencrypted, such as the last 4 digits of an SSN.

Limitations:

  • Max length of 175 characters. (You can’t really use this to encrypt case notes.)
  • Field value can not be Unique, External ID, or have a Default Value
  • Can not search, filter, roll-up, query, or use the field value in a Formula
  • Can not use in workflows and assignments

Overall, this is a very powerful feature and you should consider leveraging it in your instance if your are storing any sensitive data such as Social Security Number, Credit Card Number, Medical Info, etc.

There is a lot more information on best practices and usage examples within Salesforce Help.

Understanding Vertical Response and Salesforce
Apr 3rd, 2008 by Steve Andersen

At ONE/Northwest we’ve been looking into Vertical Response (VR) as an emailing solution that is integrated with Salesforce.com. We’ve just completed our first implementations, and I wanted to share what we’ve learned about how VR behaves with Salesforce. I’m going to try to lay out what I know in as concise terms as possible. Some of this is already known to many of you, but it was surprisingly hard for me to get my head around. When I get something wrong please comment on this post and I’ll update as necessary!

First, VR for Salesforce.com is best thought of as an individual Salesforce user’s personal application for sending mass emails rather than a shared solution for an organization. Here’s why I say that:

  1. Each Salesforce.com user has their own VR account, and it is impossible for those accounts to share lists
  2. If one person starts a send, someone else can’t complete it
  3. If one person sends an email, they are the ones who will need to pull the stats back to Salesforce
  4. If a subscriber opts out, they are globally opted out of emails in Salesforce

Now that I’ve said that, let me say that VR accounts can share some important info:

  1. By creating your email Templates as Email Templates in Salesforce.com, they are available to all Salesforce/VR users.
  2. Salesforce Campaigns can be used to represent each send, and the stats get pulled back to them, so those are visible to all Salesforce/VR users. They can even be used for segmentation of future sends.
  3. You can pool send credits ($) between any number of users, you just have to email VR and tell them which users.

Read the rest of this entry »

Backing Up Your Data
Mar 26th, 2008 by Evan Callahan

Salesforce is so reliable and available, it is easy to forget to back up your data locally. Lately, I’ve was reminded that it is a good idea to back up your Salesforce data from time to time. Salesforce allows administrators to download a complete export up to once a week.

It isn’t that you have to fear for the Salesforce database crashing or being lost. I recommend downloading for a couple reasons:

  • It could help if you ever accidentally make unintended changes to data and want to return to an earlier state.
  • It could also be helpful in the event that Salesforce or your internet access ever goes “down” at a critical time – you’d have a way to access your data offline.

To download the backup, go to Setup (Administration) | Data Management | Data Export. Click the button – a while later you’ll get an email with a link to download your data file. Save it somewhere safe.

Alternatively, if you use Demand Tools, you can back up to a file as often as you like. I use this to create a copy of the database in a Microsoft Access file.

Microsoft Dynamics CRM – A first look
Mar 18th, 2008 by Anand Sethupathy

I recently spent some time learning more about Microsoft Dynamics CRM and I must admit the product looks very interesting! For those of you that are more familiar with Salesforce.Com, I will try and draw out some of the similarities and some of the differences. I haven’t had a chance to do a nonprofit implementation with Dynamics CRM, so this is very much just a first look based on information I have read and some online demos.

The first major difference between the two platforms is how they can be run. Salesforce is locked in to the On-Demand model. Microsoft offers the ability to run Dynamics CRM either as an Internal Application or as an On-Demand offering through their CRM Live service. At first glance, it appears as though Dynamics CRM would be more feature rich when run as an internal server based application. It derives its value from making the assumption that end users are most familiar with MS Office Suite of Products. It has very tight integration with MS Outlook and MS Excel. Below is a screenshot of how CRM Dynamics looks in a familiar MS Outlook Environment:
Read the rest of this entry »

Web to lead: requiring fields with Javascript validation
Mar 17th, 2008 by Evan Callahan

In a previous post, I talked about a few ways that I customize web-to-lead forms. One key change I make is to ensure that certain fields get filled in for every web lead. In a Salesforce page layout, you can require fields, but web-to-lead doesn’t allow you to do this – any web-to-lead form submission will create a lead, even if critical fields such as last name or email are left blank.

Most of our clients want to make sure their leads fill in a minimum amount of information, such as name and email. Moreover, you can catch spam by requiring sensible entries – since spammers don’t always fill in the fields.

Read the rest of this entry »

Web to lead: Javascript phone formatting
Mar 12th, 2008 by Evan Callahan

In a previous post, I talked about a few ways that I customize web-to-lead forms. One of the most important improvements you can make, I think, is to add Javascript functions to format phone numbers.

When you enter 10 digits into a phone number field in Salesforce, it gets formatted as (206) 555-1212. Web to lead forms don’t do this by default, so phone numbers show up in Salesforce with inconsistent formatting. This is the reason I first started fiddling with Javascript in web-to-lead forms.

Javascript lets you change data when a website user moves out of a field – you simply respond to the onblur event by calling a function such as my formatPhone function. In the web to lead form, your phone field tag will look like this:

<input  id="phone" maxlength="40" name="phone" size="20" type="text"
     onblur="formatPhone(this);" />

The Javascript code goes in a <script> block within the <head> section of the web page:

<script language="JavaScript" type="text/JavaScript">
<!--
    //Written by Evan Callahan, NPower Seattle
    function formatPhone(num) {
    var re= /\D/;
    var newNum=num.value;
     if (newNum != "") {
        while (re.test(newNum)) {
         newNum = newNum.replace(re,"");
        }
        if (newNum.length == 7){
           newNum = '(206) ' + newNum.substring(0,3) + '-' +
               newNum.substring(3,7);
           num.value = newNum;
        }
        if (newNum.length == 10){
           newNum = '(' + newNum.substring(0,3) + ') ' +
               newNum.substring(3,6) + '-' +
               newNum.substring(6,10);
           num.value = newNum;
        }
      }
    }
//-->
</script>

My function defaults 7 digit numbers to a 206 area code – if you aren’t fortunate enough to live in Seattle, you can replace this with a different default (or skip the whole section).

»  Substance: WordPress   »  Style: Ahren Ahimsa