nonprofitCRM.org is produced by members of the NPSF (nonprofit salesforce.com) community. We are Salesforce.com administrators and consultants working to help nonprofits understand, better use and leverage Salesforce.com for their organizations. Read More
A while back I blogged about the Salesforce Certifications. Shortly after that post, I took the certifications for Administrator and Consultant. I am happy to say that I was able to pass both on my first attempt. Overall, the certification process has been a fairly streamlined process. You can easily sign up online and find a local test center. The exams are short (you get 90 mins, but probably only need 45 mins). Your results (pass or fail, not the actual score) are instantly presented on your screen upon submitting the test. And, a few weeks after taking the test, a nifty packet arrived in the mail containing a certificate and a nice Salesforce.Com branded USB Flash drive.
My aim in taking these tests were threefold:
First, let me start with my experiences on the two certifications exams that I took. Of the two, I actually found the “Administrator” exam slightly more challenging than the “Consultant” exam. The Administrator exam covered many elements of Salesforce that most nonprofits do not touch on a day to day basis and this made it slightly more challenging. The Consultant exam was more scenario based and thus easier to grasp, however, it had very sales-related scenarios which needed to be translated to an NPO context before you could respond. So, let’s say that you are someone who purely works in the Nonprofit Sector and you have a good deal of experience with Salesforce. Both of these exams should be easy for you save for a.) Knowing Salesforce features you rarely ever user b.) Translating Sales-Speak into Non-Profit Speak before answering a question. So, even though both these exams consider 67% to be a passing number, you might want to do a little prep as your margin for error might be slightly less if we assume that you won’t get the Sales Questions or the Rare Features questions.
If we loop back to my original goals on the ceritifications, here is my analysis of each:
I plan on taking the other three certification exams within the next 6 months. I will report back with more updates as I get through them. I was thrown for a surprise, however, when I was asked to take a free Update Exam shortly afer my certification. I never had the time to get around to it and it did concern me. Would Salesforce expect me to take 5 update exams every quarter to keep my certification levels (once I have all 5)? That is the one part of this certification process that still needs work. I know the update exams are short and free, but time is hard to find these days. I think if they made this an annual update, that would be much easier to manage.
Stay tuned for more to come on this topic as I get through the next three!
Salesforce.com has a new feature called Batch Apex. It is currently available only as a preview by special request, but is expected to be in general release later this year. One of my nonprofit clients has a very large data set and have been looking forward to the ability to add up opportunity values in a variety of ways. We used Batch Apex to create a tool for them, and it seems to be working extremely well.
In this post, I will briefly explain what Batch Apex is, and describe our use case for the feature. In a later post, I will show the tool we created and how it works.
About Batch Apex Apex has limits. You can perform only so many queries, and process only so many results; this allows Salesforce to keep your resource usage under control. Batch Apex blows these limits out of the water by allowing you to perform a query that returns up to 5 million records, and then create a special type of apex class that processes the records 200 at a time. There are still some rules as to what you can do in a Batch Apex class, but it can be a great workaround for apex limits.
Once you write a “Batchable” Apex class that follows the proper design pattern, you can use the class to execute your query, which queues up an Apex job that executes little by little until it is complete. How fast it runs depends on factors such as complexity of your query, time of day, and the extra capacity of the Salesforce system. You can monitor your job’s progress by clicking Setup | Monitoring | Apex Jobs.
As you see, the last apex job shown was broken into 1,327 batches of 200 records – which means the query must have returned and processed over 265,000 opportunities.
Why We Used It We use many strategies for summarizing data in Salesforce, including report totals, roll-up summary fields, and apex code in triggers. Because roll-up summaries do not support calculations of opportunity totals into contacts who have roles, we have always used triggers to keep these calculations current. However, if your data set is large enough, you will hit apex limits.
The following screen shows the donation summaries our client asked us to provide for all their donors, households, and accounts. Having this data available on the contact and household records will allow them to produce reports that filter in creative ways – for example, donors whose donations are rising or falling from year to year or those with one type of donation history but not another.
With the tool we created, the client can visit a Visualforce Page (daily or weekly, perhaps) and kick off the Batch Apex that performs all the rollups. The Apex runs in steps: the first two batches roll up opportunities to a temp table, a third copies totals from the temp table to the contact, household, and account objects, and so on. When the jobs finish running, they know the totals are all correct. We still use triggers to add a newly closed opportunity to the totals – but because all the really heavy lifting now belongs to the offline Batch Apex process, we don’t expect to hit any limits.
In my next post, I will show you the Visualforce tool and a bit of the Batch Apex code I wrote.
This is my first post after a long hiatus involving a move to a new city (Boston), and to a new job as Technology Manager at Root Cause, a nonprofit in Cambridge, MA. One of my first and biggest challenges here has been getting our Salesforce database under control. After 4 years, every user was a System Administrator, and nobody knew what most of the custom fields and objects were being used for! It was a disaster.
big mess o' computers
Here are some of the things I did to get our database back under control:
Hope this helps any of you out there who are inheriting a database “of a certain age.” Good luck, and any comments are welcome!
A client of ours got frustrated with having to click on Send an Email, then Select a Template, and finally Select the right Contact(s) before hitting Send on a very common type of email. The email was still sent on a discretionary basis by staff so we couldn’t automate it with a workflow rule. The client asked for a special button to be put on the page that could open up the correct email template and automatically select the correct contacts. After some searching on the Salesforce.Com Developer Forums, I found this little gem of JavaScript code.
I adapted the code to the following:
location.replace(‘/_ui/core/email/author/EmailAuthor? retURL=/{!Opportunity.Id} &p3_lkid={!Opportunity.Id} &p2_lkid={!Opportunity.Registrant_Salesforce_ID__c} &p2={!Opportunity.Registrant_Full_Name__c} &p24={!Opportunity.Billing_Contact_Email__c} &template_id=00XX99234365′); NOTE: Remove the linebreaks if you cut and paste this code.
location.replace(‘/_ui/core/email/author/EmailAuthor? retURL=/{!Opportunity.Id} &p3_lkid={!Opportunity.Id} &p2_lkid={!Opportunity.Registrant_Salesforce_ID__c} &p2={!Opportunity.Registrant_Full_Name__c} &p24={!Opportunity.Billing_Contact_Email__c} &template_id=00XX99234365′);
NOTE: Remove the linebreaks if you cut and paste this code.
I put the above code into a Custom Button on the Opportunity Object. The Button behavior should be set to Execute Javascript and the Content Source should be set to OnClick JavaScript.
In the above JavaScript code, the following variables are represented:
Many Nonprofit System Administrator level users are wondering if they should get Salesforce Certified. This is actually a tricky questions because the Certification definitely carries value to the individual holding it, however, it can also prove to be of great value to the organization in validating the skill levels of their administrator(s).
Before you jump into certification, study the options available and find out what is right for you and for your organization? Also, consider the following. Since you are working in the nonprofit space, a fair amount of the questions may have little to no applicability to you. For example, questions on territories, assets, products, and super complex security issues are likely not the norm for a nonprofit implementation. Given the domain we operate in, most of you might need to review the study material to get familiar with the sections that we really don’t use on a day to day basis. Salesforce has done a really good job of putting up Study Guides, Sample Questions, and Reference Materials to help you prepare for the Certification Exams.
Salesforce is currently offering 5 levels of certification. I have included them in the image below:
In the above chart, I have rated the difficulty level of the exams based on a cursory review of the study guide and review of all sample questions. The above chart assumes that you are a System Administrator and not a consultant. If you are a consultant, you may actually find all of the above exams to be easy, save for the “Force.Com Advanced Developer” which requires some deep knowledge of Apex and VisualForce. (Disclaimer: I haven’t taken the full exams yet, but plan to take at least two of them in 2009).
Good luck on your certification efforts and feel free to post any resources you find useful in your prep!
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:
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:
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.
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.
We’ve been customizing Salesforce.com for nonprofits for more than a year now – we’ve helped enough nonprofit’s customize, migrate data, integrate with payment tools, Vertical Response and more – and we have just enough information from all of those projects to begin to see what happens AFTER we’re done.
As most know – moving to a new tool of any sort provides benefits and challenges. When I upgraded to the Microsoft Office 2007 suite, I had to fight with the toolbar, and finding the “print” button was excruciating – I wasn’t used to where things were, wasn’t ready to explore new offerings – I just wanted to have all of the new features available so I could use then when I was ready. I’ve been using Word and the other Office tools since their inception – so I’ve been through this before, but I was reminded that even an updated tool, with a LOT of user and usability testing can pose adoption challenges.
Imagine what it’s like moving from MS Access, or FileMaker Pro, or eTapestry to Salesforce then? Add in a complicated data migration, some thinking about doing things in new ways -and all of a sudden Monday morning with that new tool can be grim. Here are some things that you can do to get ready to adopt and adapt!
It’s easy to assume (at least for me) that most if not all of my nonprofit customers have been able to acquire a nice broadband connection. So I was surprised (but shouldn’t have been!) when one of my customers wanted to know what the bandwidth usage would be like if they moved their work to Salesforce. They have a shared infrastructure and some stringent requirements for ensuring that a certain amount of their pipeline is available to their constituents.
We considered an onsite usage test – but we would have had to reveal customer data – plus – we’d be making things up – what they really wanted to know was “how much bandwidth will OUR implementation of Salesforce use?”
So -we asked Salesforce -and they provided a LOT of information. Here’s the key points:
Bandwidth Required for Users Salesforce.com is designed to use as little bandwidth as possible so that the site performs adequately over both high speed, dial-up, and over the air Internet connections.
Obviously – your mileage may vary depending on the nature of your connection to the internet as well as what other internet related work you are doing. It’s likely more helpful to know your total bandwidth needs and to understand how they all fit together rather than to know what Salesforce uses by itself.
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.