Archive for May, 2006

Create Your Own Salesforce.com Buttons

Tuesday, May 23rd, 2006

Easily create your own button-like images for Salesforce.com with my new Salesforce.com-ish Button Creator! Put any text you want into an image that looks just like a Salesforce.com button (examples).

Use your button images to fire off S-Controls and fool your users into believeing they’re using Salesforce.com standard functionality!

Button images for Salesforce.com

Tuesday, May 23rd, 2006

I’ve been converting all my text hyperlink fields in Salesforce to image based hyperlinks so they look more like buttons. Here’s my current set of button images. Feel free to use them!

Households

sf button

sf button

Gifts for Contacts

sf button

sf button

sf button

Gifts for Accounts

sf button

sf button

sf button

Opportunity Cloning

sf button

sf button

Campaign Member Reports

sf button

sf button

Holly on APIs and Nonprofit Technology

Monday, May 22nd, 2006

Holly Ross has a nice piece on the changes that Salesforce.com has brought to the nonprofit technology landscape. She covers the history of the software landscape nicely, and I think correctly identifies the new things that are now possible because of fully open APIs, like Salesforce.com has.

I’m really excited about the possibilities opening up to the nonprofit sector because of open APIs like Salesforce.com’s. Thanks to a $25K grant from the Salesforce.com Foundation, we’re currently working on an integration between the Plone open source CMS and Salesforce.com. In October, anyone who is using Plone for their website and Salesforce.com for their database can link them so that new website signups drop into your database. What Holly is talking about is real and very possible.

I would add that a major reason this is all possible is that Salesforce.com is making enterprise software available to nonprofits. This software is of a class that most of us don’t get to work with. The nonprofit-specific applications we use have much smaller development budgets, so we live with limitations. The open source software we use isn’t enterprise level either, and has its own set of limitiations. Salesforce.com will knock your socks off if you’ve ever developed database applications…and it’s free to boot. Thanks again to Marc Benioff and the Salesforce.com Foundation for taking the lead in corporate philanthropy.

Another thing to add is that Salesforce.com went the open API route primarially because they had to. Their application lives in San Francisco–how can it integrate with your accounting system that lives in your server room if it doesn’t communicate in open fashion across the Internet? The on-demand model requires an open API if any meaningful integration is to be possible. And if it’s not possible, you can’t sell to enterprise clients.

We’ll see if any of the nonprofit-specific tools can “catch up” as Holly hopes. It’s expensive to develop software at this level, and I understand why the tools aren’t there yet. We’ll see who makes the investments and who doesn’t. And we implementers will continue to watch from the sidelines and pick the best products, now with the openness and robustness of the API as a key selling point.

Opportunities in a Contact-centric Salesforce database

Thursday, May 11th, 2006

Salesforce uses an object called Opportunity to represent the chance for money to come into your organization. Hence the name. People ask me to rename Opportunity to something more nonprofit specific, but I don’t like to. I can’t think of a good name for something that can represent these many things a nonprofit choose to record in Salesforce:

  • Donations
  • Membership Dues
  • Grants
  • Ticket purchases
  • Retail item purchases
  • Volunteering

So I like to leave it as Opportunity. All these things can be seen as an opportunity for revenue–in the case of volunteering it’s an in-kind gift of time.

Opportunities have a real issue in Salesforce, though. They are not connected to a Contact but only to an Account. That means that if you create a Gift, it has to be tied to an Account, but doesn’t have to be connected to an individual. That’s a drag when 80% of the Contacts in my database are members of an “Individual” Account, which only exists as a generic holder for unaffiliated Contacts. It’s also a drag when most of the Opportunites in the database are payments directly from individuals, on behalf of themselves, and not on behalf of a company.

Some Salesforce users have gotten around this by creating an Account for each Contact. So each person has a fake company that they are associated with. Then Opportunities can be tied to that Account and that Account has a 1-to-1 relationship with the Contact. This solves the problem, but is a bit hard to explain to users that they have to enter a Contact for each person and then an Account as well.

Salesforce has some other functionality we can use, however, to deal with this issue in a fully Contact-centric way. Individual Contacts can be related to an Opportunity by creating an Opportunity Contact Role for them. I can associate a donor with a gift via a Contact Role called “Individual Donor”. I can then look at all the Opportunities and all the people connected to them with a Role of “Individual Donor” to give hard credits, or tax receipts. I can add other Contacts to Opportunities as well. Some that I use are:

  • Individual Donor - Household Member (this is a soft credit for everyone who is a member of the donor’s household)
  • Organizational Donor (this is to designate when the Opportunity is in the name of a business, like a business sponsoring an event)
  • In Honor Of (this allows you to report on Opportunites that are made in tribute to someone)
  • Grant Manger (designates the primary contact for a grant Opportunity)
  • Board Solicitor (identifies board members who are assigned to work a prospect donoation)

Salesforce isn’t built to support organizations that work directly with individuals, but as I’ve come to expect, it proves itself flexible enough to get the job done. By using contact roles on Opportunities you can tie them directly to individuals, and successfully use Salesforce in a Contact-centric fashion.

Datascope: creating sf.com queries on the desktop

Thursday, May 11th, 2006

Upside Outcomes, a nonprofit-friendly development shop in the UK, released their Datascope today on Appexchange. It’s a desktop application that gives you an interface for creating queries against your Salesforce.com data. I got a demo from Gareth early in the week and it looks pretty cool. Simpler than getting all your tables downloaded into Access. You can set up complex queries and the app does all the calls to Salesforce.com to execute them, presenting the results in a data grid. Pretty nice.

It allows you to make queries that are impossible to make in Salesforce. The main drawback that it and other query builders have is that the results of the query aren’t in Salesforce.com, which is where I’d love them to be. But until Salesforce makes these kinds of queries possible, tools like Datascope are our best option.

It might be pretty straightforward for them to take your query results and give you an “Add to Campaign” button if the set is of Contacts and/or Leads. Just a thought for the 2.0 release, Gareth!

Salesforce.com Wish List

Thursday, May 4th, 2006

Salesforce.com blogging luminary Scott Hemmeter has a Wish List category over at his Perspectives on Salesforce blog. I heartily second just about all the things on his wish list. I wanted to add a couple of my own.

  • Give the API to all Salesforce.com customers. Don’t reserve it for people who pay for Enterprise and Unlimited. Some of the smartest people in the world work at small companies that won’t purchase the Enterprise level. Let’s try to leverage their great ideas by getting them cooking on the API.
  • Let us add custom fields to standard junction objects like CampaignMember and Partner. If I can add some fields to the CampaignMember object, all of the sudden Campaigns could be the heart of an online event registration system. Think about it. Parter could sure use a Start Date and End Date, no?
  • Allow us to build more complex reports than we can now. I’d like directional joins, and the ability to combine different reports to get a resulting report set (or Campaign.) Let us save these complex report collections so we don’t have to build them each time.
  • I want to second Scott’s call for a robust B2C functionality, and extending the Sharing and permission model down to the Contact level. We do a lot of work directly with Individuals, so this would be incredible.

Simple Campaign Builder (BETA)

Thursday, May 4th, 2006

OK, here is the Simple Campaign Builder in BETA form. Did I mention it’s in BETA? It’s in BETA.

If you want to play with it, go get it from the Appexchange. Please let me know what you think (steve at gokubi dot com). I’d love for you to test it out and tell me what works and doesn’t work, what you like and hate, and how it could be better. How does it work with large Campaign member sets? Any flaws in result sets? How could the UI be better?

It’s not perfect, it’s in BETA.

After you install the Appexchange S-Control, you need to create a custom formula field of type text on the Campaign object. The formula should look like this, where THESCONTROLID is the ID that the S-Control has in your Salesforce.com instance:

HYPERLINK("/servlet/servlet.Integration?lid=THESCONTROLID&eid=" & {!Id} , "Combine with Another Campaign")

To find the ID of the S-Control, go to Setup | Build | Custom S-Controls and look at the link to the “Simple Campaign Builder” S-Control. You should be able to dig the ID out of that link.

Let me know what you think!

Follow up to annoying post

Tuesday, May 2nd, 2006

So we can’t do complex queries in Salesforce.com. But we all need to. And it’s a reporting functionality, right? I mean, if they don’t give us access to reports in the API (which they haven’t) and they don’t build a complex query builder (which they haven’t) we’re out of luck.

And then I thought about Campaigns.

After Winter ‘06 came out, Campaigns became snapshots of reports. They added the all powerful “Add to Campaign” button.

That removed the need for a bunch of Excel ping pong. Export to Excel, import to Campaign. Great for usability, but doesn’t help the complex reporting needs.

But what if they had added this button too?

Then we could create a report of all Donors, and then subtract out everyone who attended our last party. Giving us the result set we want in a Campaign where it’s available for export to Excel, can be viewed in a report, etc.

Unfortunately, I can’t add that button. There isn’t API access to reports. But I have full API access to Campaigns. So if we do the first step of putting the report results in a Campaign, then I could subtract the members of one Campaign from another, putting the resulting set in another Campaign.

We could chain together as many as we wanted. Giving results like everyone who has never given to my org, attened my last breifing meeting, and is a volunteer.

I’ve written a way to compare two Campaigns, generating a resulting set of CampaignMembers in a new Campaign. Still interested? Want to beta test?

They said it couldn’t be done

Monday, May 1st, 2006

Reporting has always been one of Salesforce.com’s weakest links. Want to see a list of everyone in your database who has never given you money? Can’t be done. Want to see all donors who attended your party last week? Can’t be done. Want to see all Donors, except your board members, who attended the party, and received the last newsletter?

But now I can do it all in Salesforce.com. No export. No data manipulation. Just a couple clicks. As complex as you want. With the result sets available for export, mass mailing, etc.

Let me know if you are intrigued…

Salesforce.com #7 in Business Ethics’ top 100 Corporate Citizens

Monday, May 1st, 2006

Nice to see Salesforce.com leadership role in corporate philanthropy is getting recognized.

From Inside the Force.