Archive for June, 2006

Interesting conversations

Thursday, June 29th, 2006

I was hanging out in the Salesforce.com nonprofit developers IRC channel today and ran into Eugene Chan. We talked a bit about some interesting things he thinking about for modeling grant making in Salesforce.com. Mark, Rem, and Eric stopped by–check out the transcript to see if anything of interest to you was chatted about.

Everyone Should Recycle

Thursday, June 29th, 2006

I was helping a client of mine deal with a data import error yesterday. He accidentally imported 153 Contacts to the wrong Appeal Campaign, and he wanted help pulling them out. There isn’t an easy way to modify this data in a big batch in Salesforce.com, but the Data Loader is a great tool for the job.

I set up a quick web conference so he could watch me wield the Data Loader to get this job done and I promptly screwed things up. Rather than deleting the Contact’s memberships in the Campaign, I deleted the Contacts. 153 of his major donors were gone, just like that. Yikes.

So we had to go to the last backup and restore and then try to figure out what changes had been made since…oh wait, we would have had to do that with most nonprofit CRM databases, but with Salesforce.com we were back up and running in 2 minutes with no lost data. Because Salesforce.com recycles.

Each user has a Recycle Bin. It stores the last 5000 things they’ve deleted from Salesforce.com in the last 30 days, and allows you to restore them with the click of a button. We put the Contacts back, and all their relationships to Opportunities and Campaigns were put back as well. No sweat.

It sure saved my butt yesterday when I wasn’t paying attention while wielding a powerful tool. It will probably come in handy for you and your users at some point–so remeber to always recycle…

Nonprofit Salesforce.com on IRC

Wednesday, June 28th, 2006

Sonny Cloward has set up an IRC channel for discussion of all things relating to developing the Salesforce.com platform for nonprofit use. If you don’t know, an IRC channel is basically a chat room that’s open 24 hours a day.

Here are the details of the channel:

Server: irc.freenode.net
Channel: #npo-sfdc-dev

Sonny’s thinking that the room will be open for drop-in discussions of Salesforce.com for nonprofits, but will also have scheduled meeting times primarily supporting an idea we’re hatching for periodic conference calls with folks implementing Salesforce.com for nonprofits.

Sonny and I have committed to logging into the channel whenever we’re available, so feel free to drop by. We’ll be logging what goes on in the channel and posting those transcripts on the web.

If you’re new to IRC, GAIM is a great chat client with support for IRC. It will also support AIM, Yahoo!, MSN, Jabber, etc. You can download GAIM and add an IRC Account pointing to irc.freenode.net. Then Join a Chat, and point that at #npo-sfdc-dev.

I hope to see you there sometime soon!

Deduping with Excel

Tuesday, June 27th, 2006

One of the big challenges with CRM is keeping it filled with high-quality data. This means taking the time to enter data for your consituents, making sure all members of your team are doing the same, and making time to periodically look at your data, cleaning out duplicates as you find them.

One of the most powerful tools for analyzing and working with data is Excel. You can export an Salesforce.com report to Excel, and you can use the power of Excel formulas to make data cleaning easier. Here are a few tips:

Put the Id fields on your report
Always bring over Contact Id and Account Id to your reports if your going to do data cleaning. These Id’s are very helpful in the process as you’ll see.

Use Excel’s sort
You can do more powerful sorting in Excel than you can in Salesforce.com. Deduping by matching first and last name is easier if you sort by those two fields.

Use a simple formula to highlight duplicates
To quickly find duplicates, start by sorting on the fields that you want to search for dupes. I’ll use email in this example.
In a new column in your exported report, add a formula that compares the email for this row with the emails on the row s above and below it.

=IF(OR(A3=A4,A3=A2),"Duplicate Email","")

This formula will print out the word Dupe if the value in cell A3 is the same as that is A4 or A2. You can now quickly scan this new column to see duplicates.

To look for duplicates that have the same first and last name, the formula is slightly more complicated:

=IF(OR(AND(C4=C5,D4=D5),AND(C4=C3,D4=D3)),"Duplicate Contact Name","")

C4 is first name, D4 is last name for the Contact in question. If the name exactly matches the row below or above, it will print the text.

Have fun with hyperlinks
Create hyperlinks back into Salesforce.com for acting on duplicates. To get to a Salesforce.com object like Contact or Account, use a formula like this:

=HYPERLINK("https://na3.salesforce.com/" & B2,"View Contact")

B2 is the Contact Id–a clickable hyperlink is generated that will take you directly to the contact’s record. This will work with any Salesforce.com Id–Contact, Opportunity, Account, etc.

Salesforce has a powerful Contact merge fuction that will combine up to 3 Contacts into one record, preserving any related items like Opportunities. It’s a great way to deal with duplicates. You can link to the wizard from Excel, just pass in the Account Id of the Contacts you want to merge:

=HYPERLINK("https://na3.salesforce.com/merge/conmergewizard.jsp?id=" & B2,"Merge Contacts")

You’ll get dropped in the Merge wizard saving a couple clicks. Just select the contact to merge and you’re off.

Excel formulas can really speed up your data duplication work. If you use these simple tips you can keep your Salesforce.com data as clean as possible, resulting in more successful CRM.

dotproject and Salesforce hookin’ up

Thursday, June 22nd, 2006

I have continued to work on the dotproject and Salesforce.com integration I talked about earlier. Here’s what I have now:

  • Salesforce is the truth for Accounts and Contacts
  • dotproject is the truth for project information
  • Accounts are created in Salesforce.com and pushed to dotproject
  • Projects (and Tasks and Tasklogs) are created in dotproject and pushed to Salesforce.com

Main benefits of doing this:

  • We want one source of truth for CRM data, and Salesforce.com is where we want that data. Now we have that.
  • We have two years of project and time tracking data in dotproject, and we want to continue using it for project tracking
  • My power users can now do cool reports and dashboards on our project and tasklog data

The nuts and bolts

When an Account is created in Salesforce.com, it has a link for creating a dotproject Company:

If you follow that, you land on the Company add form, with basic data filled in for you, including the Salesforce.com Account id.

You save the Company and it’s linked to the Salesforce.com Account and vice versa.

I then have a nightly batch that pulls Projects, Tasks, and Task logs into Salesforce.com via the webservices API and the PHP toolkit. All projects and task logs are available as related lists on the Account. Here is a list of projects for a Salesforce.com Account, with a lot of summary numbers I calculate when I pull the projects over:

We’re now in a position to use Salesforce.com as the UI for navigating to all Accounts and Projects. We are essentially deep linking to dotproject projects, and not really using the dotproject UI for a lot of our navigation. This is great because the Salesforce.com search functionality and recent items list is a much better UI for digging through CRM data.

Oh, and it took me 2 mintues to add a Web Tab for dotproject’s Timecard, so we can add time without “leaving” Salesforce.com.

I’m pretty excited about this integration. It’s not super complicated but it’s going to radically simplify our lives, and hopefully allow us to be more efficient. We’re utilizing the individual strengths of two tools with different core competencies. Thats what we shoot for in our consulting work, so it feels good to implement that strategy in our back office work.

Thanks again to the folks who made dotproject what it is, and to the Salesforce.com Foundation for the donation!

Staying up on Appexchange listings

Wednesday, June 21st, 2006

There are a couple hundred packages on the Salesforce.com Appexchange right now. How could you possibly know all that is there and stay up on new things? Well, the only way to know what is there is to take some time and check them out. But staying up on what is new is really easy. Point your RSS reader (Bloglines is the easiest if you’re new to RSS) to the Appexchange’s new listing feed. You’ll get pinged each time a new listing goes up.

This is where RSS really shines–it lets you know what’s just been published. It’s the best way to stay on top of what’s new, and has dropped a few Appexchange gems in my lap lately.

Using On Demand Software is like Having Kids

Tuesday, June 20th, 2006

When I had my first kid, I realized that I had to stop my life periodically to help him get through trying times. When he has a cold, I have to get up at night with him, hold him all day, and cancel anything scheduled. While not a relatively large percentage of my time, his needy times really knocks my wife and I out of our normal routine, and we have very little control over when it happens.

When I had my second kid, I quickly realized that she has her own periods of need, and they hardly ever coincide with the needy times for my first kid. So, we’re up all night with her and then the next week we’re at home with him, and then she starts getting up at 5 AM and he starts going to bed at 10 PM.

Because their needs are completely independent, they don’t overlap, and we end up being knocked out of our routine a lot more than we had expected based on our experience with one kid. And it always happens at an inconvenient time.

When you integrate web-based software services, their outages usaully don’t overlap. When your CRM is down, your email marketing service is up. When your event registration system is having a problem, your website is up, and vice versa. Your work becomes dependent on multiple systems, each with their own downtime–it isn’t a huge percentage of time, but it sure knocks you off your work routine. And it always happens right before a deadline.

As I start integrating more systems together into a cohesive system, I look at those exhausted parents with 4 kids I see at the park and I wonder what the hell I’m doing. The only saving grace is that if my CRM service is down, I don’t have to stay up all night nursing it back to health…

Fremont Solstice Parade

Saturday, June 17th, 2006

Fremont Solstice Parade

Strawberry Season

Friday, June 16th, 2006

strawberries

Converted Lead data isn’t lost forever…it’s just hard to find

Thursday, June 15th, 2006

I got a distress email from a user of my Rapid Lead Converter the other day:

In my excitement I converted a lead into a new contact, and a second later realized that I converted a lead…which is using a number of new custom lead fields for which I had not yet created an equivalent contact custom field. For example, they had a lead custom field “spanish level” that I had not yet created in as a custom contact field. Since I converted the lead into a contact, that field’s info is now lost?

Good news is the data isn’t lost. But you can’t get to the Lead record in Salesforce.com. You can’t find it with a search, and if you go to the Id directly, it tells you that it’s been converted to a Contact. But the data’s not gone.

The trick is to view the Lead data through one of the many tools for exploring the Salesforce.com schema. There is one written by the Salesforce.com folks in .Net, and you can install this HTML as an S-Control for viewing the schema inside Salesforce.

Install one of these tools, then create a manual query of the Lead table and find the lead record you’re looking for. Grab the data from the fields you care about. It’s manual, but it will potentially save your butt sometime.

Update: Scott pointed out in the comments that I’m making things way harder then they are. Salesforce has a report set for just this issue. It’s called Leads with converted lead information. Thanks Scott!