top of page

Search Results

54 items found for ""

  • I’ve Got Admin Permissions–Now What? (Part 3)

    It’s time to wrap up this series on what to do when you’ve found yourself with system administrator privileges and are trying to figure out next steps with a little discussion about certifications. For people actively trying to break into Salesforce as a career, getting a certification is often an early step. But if you’ve fallen into your Salesforce journey and have a spot at a nonprofit that you’re enjoying, there’s really no reason to race toward certification, in my opinion. But it’s a good idea to have certs on your radar and start thinking about studying for the main gatekeeper cert: Administrator. Here’s the dirty little secret, though: The Admin Cert focuses a large percentage on features and concepts that you just aren’t going to use that much in the nonprofit context. So if you’ve had admin permissions for a while and have started doing more and more work on Salesforce in its own right in the context of your nonprofit position, you’ll find that the material on the admin cert might not seem directly relevant. Doesn’t mean you shouldn’t learn it and that you won’t find it helpful, but it isn’t going to reflect your day-to-day. If you’ve learned to manage users, create custom fields, and work with reports (all things you can learn on Trailhead) you know more than enough to answer the admin cert questions on these topics and you probably even have some practice that helps solidify that knowledge. What you probably don’t know about are things like who sees what and governor limits. That being said, I think you should consider Admin your first certification goal because it’s the one that most people know, understand, and–perhaps most importantly–respect. Salesforce Certified Administrator is a difficult exam. First of all, the material is technical and most of it will be new ground you haven’t really covered. Also the questions (or, really, the answers) are structured differently than multiple-choice tests you’ve taken in the past. A lot of them ask for which 2 or 3 answers are correct, rather than you having to find only the one plausible answer among those given. I failed the admin cert exam the first time I took it. (As have many others.) I strongly recommend having a basis of good, hands-on experience built up over months or years, plus some focused studying. (I used Focus on Force and Salesforce Ben for some courses and practice exams.) Amplify also has study groups that are a terrific resource. That first exam is going to be a challenge, but it will give you a foundation to really feel like you know your stuff and are ready for deeper Salesforce involvement. In the process of earning the Certified Administrator credential you’re going to learn things about the platform that will inform the work you’re doing. You’ll know more about why reports and dashboards work how they do, what design/architecture choices have been made for your current system, and what you can and can’t easily do to make changes to your instance. There are probably two other certs that have caught your eye on that link above: Platform App Builder - I think of App Builder very similar to the admin cert, though it’s definitely less difficult. App Builder is also an entry-level exam, but it doesn’t serve as a prerequisite for other exams like Admin does. Take Admin first, then I bet you can pass App builder with little additional study–it’ll be material you’ve got well in hand. The content of App Builder is more focused on (Surprise!) building apps on Salesforce and less on the technical underpinnings of the platform itself, such as privacy/visibility and governor limits. I’m sure there are lots of people that would recommend this as a first certification and I can’t really argue with them. I just think if you’re already working with Salesforce and are going to take the time to study for a first cert, I vote Admin. While putting App Builder on a resúmé might help you get a job, I haven’t seen too many job posting that ask for an App Builder certification. Nonprofit Cloud Consultant (or Education Cloud Consultant) - Naturally, if you’re coming to Salesforce from a nonprofit/education perspective, these make some degree of sense. But these are consultant-focused exams, rather than user/admin focused. Questions focus on considerations around building a new implementation, for example, rather than the kinds of work you do to support and modify an existing instance. There is a lot of common sense to figuring out the answers (though you also need to know features and terms of NPSP and EDA), but the real benefit of having one of these is going to come if you’re looking for a consulting job. There’s nothing wrong with getting one (or both) of these certifications, but I don’t think they’re going to be as helpful in doing your current job as Admin or App Builder will be. You can do this! First Installment: Get on Trailhead Part Two: Engage in the Community

  • I’ve Got Admin Permissions–Now What? (Part 2)

    Want to know a superpower that you can get without being bitten by a radioactive spider, is available to you right now, and can help you whether you’re a beginner or an expert? The Salesforce community is a superpower for everyone. Whether you need the answer to a flow question, want to find your next job, or just want to nerd out about building and designing on the platform, you’ll find someone, somewhere, to connect with. What really makes the Salesforce community special is that the culture incorporates paying it forward, generosity with time and wisdom, and always ensuring that there is no such thing as a stupid question. Let me tell a story of when I got started in Salesforce. It was 2013 (which seems like a long time ago) and I was brand new to “this Salesforce thing.” I had started to play with a trial org because I thought Salesforce might be a good fit for the organization I was working for and I had some questions. Because I was working for a nonprofit, I found the Power of Us Hub, which was the Salesforce community specifically for nonprofits and educational organizations. I asked a few questions about how to customize things and got answers that were always respectful of my newbie status and helpful and affirming. People like Judi Sohn were happy to help me with basic setup UI questions and to confirm for me that I was on the right track as I built or modified fields, layouts, and formulas. I knew I was asking basic questions and I was delighted with this helpful online forum. It was not lost on me that this was a helpful and welcoming part of the Internet. Then I started asking some more focused questions about the address-tracking functionality in the Nonprofit Success Pack (NPSP), which was a little hard to truly grasp. (Still is.) After some back-and-forth, eventually Beth Saunders asked if we should just jump on the phone to play around and try to figure things out. Beth was a stranger to me at the time but she was willing to take a chunk of time out of her day to just figure things out with me. That was my introduction to the Salesforce community and the beginning of a friendship and a turning point that would lead to a new career. But as generous as it was of Beth to offer to get on the phone, I have come to learn that what she did was not out of the ordinary for this community. Even consultants billing by the hour are happy to give time and attention to help out newcomers. It’s just in the DNA of the Salesforce online community that we are welcoming and that we share our knowledge so that others may grow. We lift each other up. The culture is such that our first instinct is to be welcoming and so the circle is virtuous. My second recommendation for new admins, therefore, is to get involved in the Salesforce community online. (First recommendation was Trailhead, last post.) If you’re reading this blog you probably have discovered the community. But I know that plenty of clients I work with, and admins, and users of Salesforce have not yet dipped their toes into the wider Salesforce community. Log into the Trailblazer Community (it’s now a tab of Trailhead) and join a couple of groups. Find people that are discussing topics of interest to you. Ask questions when you have them, or lurk to just soak things up. The Nonprofit Hub is the new home of the Power of Us Hub. (There’s also an Education Hub.) And there are groups for job seekers, for marketers, by industry, etc. You can find a group to learn about Flow, groups by region, and more. Just join a bunch–you can always pare down the list later. There is also a Salesforce community on Twitter and one or more on Slack, of course. As I understand it, all share the great culture of the Trailblazer Community. That was the easy part because you can do it from your couch. But did you know that the Salesforce community is so passionate about learning and networking that there are entire conferences focused on Salesforce that are organized by volunteers? There are more and more Dreamin events every year. Some are larger, some are smaller, Some are one day, others two or more. These are a fantastic introduction to the community. First of all, you’ll get the opportunity to meet in person the people you’ve seen online. But it’s also a place to learn skills, network, and have fun. Conferences offer content for users and admins at all levels. I just got back from Midwest Dreamin, the OG of these community events and–I think–still the largest. What a great time! I learned so much about the Salesforce platform, reconnected with friends and colleagues, and met new friends and future colleagues. I know that some of you are reading this and thinking, “I’m an introvert, conferences aren’t for me.” I would argue that you are wrong about that. I am definitely an introvert. (I’m not shy, for sure, but I am drained by being with people. And a room full of strangers and "cocktail party conversation" makes me want to crawl out of my skin.) It energizes me, however, when I can get a chance to go deep into conversation learning or discussing something of mutual interest. Well guess what? A conference brings together dozens or hundreds of people that share an interest in common! And this is a conference of the Salesforce community, so our online community norms of welcome just transfer right over. You will find Your People even if you are an introvert. (And, I think, even if you are a little bit shy.) Community conferences like Dreamins are not free, though they keep the cost low. And many offer discounts for nonprofit employees. Dreamins are an amazing value for the amount of learnin’ you get in a day or two. And because local conferences are less expensive than something huge like Dreamforce you got a good turnout of nonprofiteers to network with. I actually did not get my start at Dreamin events, though. My introduction to Salesforce events came through a special creature called an Open Source Sprint. These are hosted by and are focused directly on the nonprofit Salesforce sector. (And, in my opinion, they’re perfect events for introverts.) We come together for two days to work on projects together. (What better activity for introverts than to work together toward a common purpose?) If you’re a nonprofit Accidental Admin, attending a sprint is one of the best ways to build your network, grow (whether in Salesforce knowledge, writing, project management, or other useful job skills), and to have some fun. Sprints are free, though the full experience comes from traveling to the in-person sprints (which are starting back up this fall.) Sprints move around the country in an effort to reduce the cost and burden on nonprofit employees trying to attend. Watch for one near you! So you got your admin permissions and have become an Accidental Admin. Well why not turn yourself into an #AwesomeAdmin–a true superhero that can help your organization thrive with Salesforce? Launch yourself into the Salesforce community online and through in-person events and you’ll earn your cape in no time! Last time: Trailhead Next time: Certifications

  • I’ve Got Admin Permissions–Now What? (Part 1)

    It seems far less common to be a trained system administrator than to be handed the keys and told to “take ‘er for a spin,” particularly when we’re talking about systems that are built to be user friendly. And this is doubly true in the nonprofit world, from what I’ve seen. Someone has to be the Google Suite admin, setting up new employees with their email addresses or resetting passwords when the bosses drop their iPhone on concrete. That’s easy enough to learn on the job. Someone has to work with the consultant to build a new Salesforce implementation or to be the liaison on the managed services contract. And isn't easier to just have that person create new users rather than have to always bug the outside contractor? Salesforce is designed to be low-code and easy to customize, so it’s totally possible to pick it up on your own. And when it’s possible to hand it to someone without training, it’s gonna happen. And that’s OK with me. I love “accidental admins.” I’m an accidental admin myself. But once you’ve been handed those admin duties on Salesforce, what are you going to do about it? How do you learn to do what your colleagues are asking of you? And how might you learn to do even more, to go the extra mile and really give your colleagues what they need instead of just what they know how to ask for? This is going to be the first in a series of posts about deepening your Salesforce learning and skills and growing your involvement in the Salesforce community. Not that I’m suggesting you have to make Salesforce your main focus or your new career. (Though we’ll welcome you with open arms if you so choose!). But let’s make whatever portion of your time you spend thinking about Salesforce more productive and professionally rewarding. Step One–and I’m going to assume you’ve heard this before–is to spend some time on Trailhead. It seems hard for me to imagine you’ve found this blog without having heard of Trailhead, but I suppose it’s possible. And even if you’ve heard of it, you might not have really spent time there. Trailhead is the free and fun way to learn Salesforce. And I really mean it–it’s fun! Trailhead should have been the first place you were directed as a user to learn how to navigate within Salesforce and work within the system. When I train new clients I always give them Trailhead modules to complete as a way of extending the live training we do together. But now that you’ve got admin rights, Trailhead is also a great place to learn about your new powers (and the responsibilities that come with them.) You can do some book learnin’ where you read or watch videos and take a quick quiz to reinforce the knowledge. But don’t shy away from the hands-on challenges. It’s really fun to spin up your own Trailhead Playgroun (a complete working Salesforce instance connected to your Trailhead account) and build things, try things, and experiment. (I mean, it’s my idea of fun. You may not be such a nerd.) Maybe you can start small with the Manage Users module if you’ve just been tasked with creating an account for your new colleague. But that’s just a quick bite to learn how to do one thing. You really should get a little more familiar with the back-end of Salesforce, what I like to refer to as “behind the gear,” or the Setup menu you access by clicking on the gear at the top of the page. So if you want to extend your learning beyond the user side, it’s time to jump into the Admin Beginner trail and/or the Administer Nonprofit Success Pack or Education Data Architecture trails. I’m not going to keep listing modules and trails–Trailhead has a very capable search engine, not to mention a powerful recommendation engine. You can direct your own learning. My point is just to encourage you to jump into Trailhead. That’s all. A very simple Step One. Next time: Dipping a Toe in the Salesforce Community Final installment: Getting Certified

  • FormAssembly Errors to Cases

    One of the most important things I do with FormAssembly is make sure that when there are errors sending data to Salesforce we don’t lose track of those problems. That was important for me as a solo admin but it's perhaps even more important as a consultant supporting multiple organizations. When there is a connector error you want to make sure that the right person in your organization sees it and can deal with the problem. Sometimes you might even want to be able to assign different kinds of errors to different people, either by which form they come from or based on some other criteria. And you want to be able to document and report on how you or your team are ensuring that the data coming from FormAssembly is working right. There’s a really convenient way to set this up: Email-to-Case. Email-to-Case is a standard Salesforce feature that allows messages to a particular email address to automatically become case records in Salesforce. It’s very easy to set up and doesn’t require any extra licensing for nonprofits on the P10 donation. Once email-to-case has created a record you can use all the other features of Cases, including setting up rules for who is assigned the case, tracking them through stages until they are completed, collaborating via Chatter, etc. Many organizations don’t use cases because they aren’t engaged in customer service type support, so the object is just sitting unused. This makes it perfect for collecting and organizing your FormAssembly connector errors! But if you’re also using Cases for other things, it’s certainly possible to use it for FormAssembly at the same time. Here are the steps to get yourself set up to monitor FormAssembly errors via Case: 1. Set FA to send alerts to someone in the organization. This is probably the most important step. In fact, even if you aren’t using email-to-case, make sure you follow this instruction! New accounts ought to be set up this way by default, but that isn’t always the case. I have alerted FormAssembly Support to this problem but I’m not sure if it’s fixed yet. (I haven’t created a new FA account in a little while.) In your FormAssembly account, go to your profile>General Settings and check “Notify me of any downtime or processing error regarding my forms.” As I said, this ought to be checked by default. If it’s not, then when a form has an error, it fails silently. Yikes! With the box checked, the FormAssembly account user is going to get emails whenever there is an error that prevents a connector from sending data to Salesforce. (Note: If you have an Enterprise FormAssembly account with multiple logins the errors will go to each form’s owner. You’ll need to tweak the instructions here to account for that difference or else set all forms to send their errors to the same person.) Of course, if you’re the form builder and the Salesforce admin, you might just figure getting those emails is enough. You can see them in your In Box and deal with them when they occur. But perhaps you like to go on vacation? Or perhaps you’re the form builder but not the FormAssembly account holder, so the emails don’t go to you? Also, using your In Box as your To Do List is not necessarily the most convenient for all sorts of reasons… 2. Make An Error Form In order to test our setup and to help us as we build it, we’re going to make a FormAssembly form whose entire purpose is to cause errors when it’s submitted. (It should be obvious that we’re never going to share a link to this form to anyone else.) I literally name my form “Exists only to trigger connector errors.” That way I feel there’s little likelihood of someone misunderstanding how this form is used. It’s a pretty simple form, too. Basically it just has a submit button: You can set up the connector in all sorts of ways. (It’s not that hard to figure out something that will fail.) Here is an example of trying to find and then update a contact with no last name. Because Last Name field is always required for a contact in Salesforce, this is guaranteed to fail. Now test out your form to make sure that you get an email about the connector error. (If you’re not the one error emails go to, warn your colleague that this error is on the way. It might be helpful for them to forward it on to you.) 3. Set up On Demand Email-to-Case In Salesforce go to Setup>Service>Email-to-Case. Check Enable Email-to-Case and Enable On-Demand Service. Then click New under Routing Addresses. Give a name (your choice). Put in the email addresses you want to accept cases from. For this purpose, we need to accept from and from the email address we’re going to forward errors from (yours, or the FormAssembly account holder’s). [See the note in the next section that you might also need to accept from a temporary verification address.] When you click save, you’ll get an Email Services Address that is the name you gave plus a long string of characters. That’s the address you’re going to send emails to that will result in cases. You can try this: Send an email to that address. Load the Cases tab and see that a new case has been created. 4. Set Up Email Forwarding Whoever is now receiving the error emails now needs to set up their email account to forward those error emails to the Salesforce email-to-case address that you just created. Specific instructions for setting up forwarding rules vary by your email provider, so they’re outside the scope of this post. But it’s generally pretty easy to figure out. You just set a rule that all emails like the one you triggered from FormAssembly should automatically be forwarded to the email-to-case address (and probably immediately removed from the In box, since you’re going to be keeping track of them elsewhere). One thing I’ve learned the hard way: If you want to set Gmail to forward you have to first send a verification email to the account you’re going to forward to. That verification email will come from, not from the person/account that will be doing the forwarding. (It took some frustrating hours to realize that!) So when you’re setting up which addresses Salesforce should accept email-to-case from (Routing Addresses), you have to watch for that email. Once you get the forwarding set up, the messages will come from the original sender ( Now, you should be able to trigger an error from your errors form and see that a case gets created in Salesforce. Voila! Theoretically you’re done now. But you might notice that the case subject is pretty generic. We can do better than this! Let's see how to make these cases a little easier to work with. 5. Set up cleaning up of the case when it’s created The case created by email-to-case is going to be pretty generic because the FormAssembly error emails always have the same subject, like this: FormAssembly / Salesforce Connector Error Report - 06/12/2022 01:45:49 PM The body of the email tells you the name of the form and has a link to the response that errored. But it would be nice if your case had the form name in the Subject so you could easily distinguish them, wouldn’t it? Flow to the rescue! We’re going to build a simple Salesforce Flow that runs whenever a Case is created and is set for Fast Field Updates (which means it runs Before Save). The first thing this flow does is check to see if the case subject contains “FormAssembly / Salesforce Connector Error Report,” to know if we need to do the other steps. Then it’s going to replace the subject with a formula that parses the email body to find the name of the form that triggered the error: /*Give me a section from the middle of the Description field*/ MID({!$Record.Description}, /*starting 11 characters past the first character of the substring "your form "*/ FIND("regarding your form ",{!$Record.Description}) + 21, /*and ending just the right number of characters later. 22 leaves a quotation mark. So do any other numbers I've tried, so we'll just have an extra step to remove that quotation mark. */ (FIND("WHAT HAPPENED",{!$Record.Description}))- (FIND("regarding your form ",{!$Record.Description}) + 22) ) Then the final step is to clean up the text of the subject because the all-text email has some Unicode instead of characters, like ")" instead of ")". This step also grabs the link to the FormAssembly response and puts it into a URL field we’ve created on Case. I use five formulas for this. They’re a bit of a pain to read if you’re not familiar with Salesforce formulas, but you could just copy/paste and they’ll work: Here’s the formula for formulaFormResponseURL /*Give me a section from the middle of the Description field*/ MID({!$Record.Description}, /*starting 2 characters past the first character of the substring "The following response was received, but could not be processed using the Salesforce Connector:" which is 95 characters long*/ FIND("The following response was received, but could not be processed using the Salesforce Connector:",{!$Record.Description}) + 96, /*and ending just the right number of characters later */ (FIND("The error was:",{!$Record.Description}))- (FIND("The following response was received, but could not be processed using the Salesforce Connector:",{!$Record.Description}) + 97) ) Here’s formulaRemoveExtraQuoteInSubject: SUBSTITUTE({!$Record.Subject} , '"', '') And here’s formulaReplaceCloseParenInSubect: SUBSTITUTE({!$Record.Subject} , "(", "(") [The formulas for for OpenParen and Hyphen are the same as CloseParen but use ) and -, respectively.] 6. Set up a case assignment rule to assign cases to the right person/people Now that you have a case that’s organized and readable, you can set up a case assignment rule. Of course, if you’re a solo admin and the sole form builder, you might just assign all cases to yourself. But as your organization grows or others learn to work with FormAssembly you can use Salesforce’s standard case assignment rule functionality to share cases among a larger team. 7. Set up a case assignment email template I tend to assume that people (including myself) won’t remember to go looking for cases without a reminder. So you can set Salesforce to send an email to the case owner whenever there is a new case. The first step in that is making an email template. It doesn't have to be anything fancy, just the most pertinent fields (Subject, Status, Description) This email is going to go out to remind you (or whoever gets form cases) that you have a form error case to deal with. But because we have also created the case, this email is not the only record of the problem. Someone else could look in on cases to see what errors are still unsolved. 8. Set up a case assignment email alert Then use that email template in an email alert. 9. Have flow send an email Finally, set a Flow that will send out that email alert to the case owner upon the creation of a case.

  • Why I Love FormAssembly: The Prefill Connector

    There are lots of webform tools in the world. If you only need to collect information from people and store that information in Salesforce there are many tools that can do it. Even if you don’t have the tool integrated to Salesforce, it would be pretty easy to import a spreadsheet of the responses. But if you ask me to recommend a form or survey tool, I’m going to steer you to FormAssembly. [Full disclosure: I am a FormAssembly partner, but I do not get any kind of compensation from them for that. It just means I can give a discount code to my clients. I don’t get anything in return for a client purchasing through my code.] If you’re making only very simple forms, you’ll find FormAssembly easy to use. But you might do just as well with Google Forms (ugly, though) or you might even prefer something like GetFeedback, which makes fast and pretty customer satisfaction-type surveys. It’s when you want to make your forms more interactive that FormAssembly really shines, and that is due to the feature they call their Prefill Connector. If you have FormAssembly at the Premier level or above, you can have the form talk to your Salesforce data before the user begins to interact with the form. This is a neat trick that few, if any, other webform tools can match. URL Prefill The Prefill Connector is not URL Prefill. It's so much more. Just about any webform tool can handle what is called URL prefill. If you’ve ever looked closely at a link a company sent you, you might notice a format similar to this: In real life it’s usually a little harder to parse, but the idea is that you have a link to the web address, then after a backslash is the number or identifier of the particular form (4992347), then a question mark that tells your web browser what follows gets put onto the page that’s going to load. After the question mark you can see that question 1 and question 3 are filled with your name and email and question 5 has an identifier that you are a “customer.” This is basically a mail merge, only instead of creating a form letter, we’re creating a web form with some of the questions (possibly hidden) already filled out. As I said, most form tools can do this. Go ahead and follow that link–it’s a real form that doesn’t collect any information. If you modify the values in the URL, the answers in the form change. There’s nothing happening outside the form though. Try replacing “customer” in the URL with “reader” and see what happens. Honestly, URL prefill is pretty handy. You can send personalized surveys to people using your email marketing tool (like Mailchimp or Constant Contact), or from a spreadsheet, or out of your CRM. All you need to do is concatenate fields about the people into the right place(s) within the URL. This allows you to do some great things to make forms personal or to conditionally display the right questions, etc. But URL prefill requires that any logic (about the form recipient or related information) already be figured out before the form link goes out the door. There’s nothing dynamic about the information available to the form once that URL is generated. If I send you the link today and you wait a week to click on it, the form isn’t going to be any different. If I send you a link to a First Time Volunteer Experience form and then you don’t click on it for a month, having volunteered with my organization three times in the meantime, you’re still going to get the questions as though it were your first time when you finally click on that email. The Prefill Connector Unlike URL Prefill, FormAssembly’s Prefill Connector talks with Salesforce at the moment the form is loaded. This means that the form could look you up in our CRM by name and email and then, if it sees that you have already volunteered three times, show you a different set of questions than if you had just volunteered for your first time. Or we could take an example that doesn’t need any URL prefill at all. We could make a form on our website that’s for signup to our upcoming volunteer events. Most form tools would require that someone manually update the form as volunteer events are added to the calendar. But with the prefill connector, when the form loads it can ask Salesforce which volunteer events are coming up and then display those when it loads. Now if you want to add a new event to the signup form all you have to do is create that event in Salesforce. The next time someone goes to your website they’ll immediately have the new event as an option. Pause for a moment to think about how powerful that is. The prefill connector opens up all sorts of really interesting possibilities. Here a few to get you thinking: An attendance form: Teacher enters their email address. Form looks up the class for that teacher and finds all students in today’s session. All the teacher has to do now is mark each student present or absent. Now you don’t have to have attendance taken only by someone with a Salesforce login. A smart field trip form: Parent enters their email address and upon submit is redirected to a second form (for them it just looks like a new page.) Form looks up the kid associated with that parent and prefills the emergency contact information we have on file. Parent then fills out the field trip permission and can either change the emergency contact or keep what we already have, without having to reenter the information. A data update form: I click on a link that has my contact Id embedded in it. The form looks up my most up-to-date email, phone, and address, allowing me to edit or confirm that information. Of course, you could do this via URL prefill, but consider a couple of differences: WIth URL prefill the link would have to have all my personal information in the URL itself, so if I send that link out via email (which is always insecure), my personal information is pinging around the Internet unencrypted. Using Prefill Connector, when the form loads my information it communicates with Salesforce and my browser using secured HTTPS. WIth URL prefill, if any of my contact information changes in the database after the URL was generated, the form won’t know that. If I use the link a second time it will look like the changes from the first time never happened. With Prefill Connector the form is always up-to-date. A smart grades entry form: Parents arrive at the form with the unique identifier for their child (like from a mail-merged email reminding them to enter the child’s report card.) The form looks up which school the student goes to and their grade. Based on school and grade, the form asks only for the courses and grading method that is appropriate for that student. In theory you could do this via URL prefill too. But each parent’s link has to include all the information about the student, the school, and the report card type. That can be a lot to jam into that URL. And you would have to make sure you’re re-generating that URL any time a student’s information changes. Much easier to manage using the Prefill Connector. Realtime Information Display: This is just a single example of many ways you could create a form to display information to your stakeholders without needing to create a full-blown portal. Mentor clicks a link within the learning management system that has their contact Id embedded through URL prefill. Form looks up all the timesheets they have submitted, displaying the amount of time and whether that timesheet is approved or paid yet. Note: For a form like this, we hide the submit button. Now we’re just using “a webform” to pull data from Salesforce and display it. I’m not sure “webform” is even the right thing to call it anymore! Other Competitors It’s been a couple of years since I last spent the time to compare if other webform vendors have anything like FormAssembly’s Prefill Connector. When I last looked into it, the answer was a resounding No, though it took wading through a lot of marketing-speak to confirm it. Most salespeople hear a question about prefill and think you’re asking about URL Prefill, so they say “Yes, we have that!” But they don’t. Submit Connectors I don’t want to ignore the fact that FormAssembly’s connectors for putting the data into Salesforce once the user clicks Submit are also really powerful. (And maybe the subject of a future blog post.) But I think most form tool integrations have similar capabilities here, so it’s not my focus today. Anyone building webforms should keep in mind that you don’t necessarily have to put all the information you collect on a single form into a single object/table within your CRM. I could send out a single “post program form” for people to fill out that combines two different things, such as a post-module reflection (questions about the last module of the course) and course satisfaction questions on the same page. For the user, that’s one form. But when the data goes into Salesforce I can have the module reflection questions update one record while the satisfaction questions create a different record, perhaps even on a different object. Learning Curve Learning to use any webform tool is going to be its own learning journey. If you’re new to Salesforce and are about to integrate a webform–even one you’ve been working with for years–give yourself the time to explore and the grace to make mistakes. You can always ask for help from those of us a few steps ahead of you–we were in your place not too long ago!

  • My Favorite Way to Track Board Members

    A blessing and a curse of Salesforce is that you can solve most problems more than one way. How to track members of your organization’s board (and other committees or groups) is no different. People have all sorts of opinions. I’m going to lay out what I tend to do and suggest, but let’s be clear: this is only one option! Overview I’m going to leverage the Nonprofit Success Pack’s existing method for associating individuals (contacts) to organizations (accounts), which is called Affiliations. Unlike in the standard Salesforce business-to-business data model, where a contact is placed directly onto the account of the company they work for, in the NPSP contacts are directly on their household account, with one or more affiliation records to indicate connections to companies and organizations. (Usually the Primary Affiliation would be where someone works, but this is not a hard and fast rule.) A Board Account The first thing we do is create an account record for the board of our organization. (Of course, the board is not actually an organization in its own right, but we’re choosing to use an account record because it’s useful.) Affiliations to the Board Account Now that we have an account for the board of directors, we can make affiliations to connect people to the board. The reason I like to use NPSP’s affiliations functionality is that you immediately have a Start Date and End Date, a Role (for President, Treasurer, Board Member, etc), and the concept of Current vs. Former. That’s pretty much everything you’re going to need! If you’re familiar with using the Primary Affiliation field to track where someone works, let me note that most of the time for board members this record is going to be a “secondary” affiliation. We’ll still capture where they work in the primary affiliation, but we can add their association to the board as another affiliation at the same time. Beautiful Flags 🏳️‍🌈 Let’s have some fun now! When you’re on a contact page for a board member, you want to know right away that this is an important constituent, right? So let’s put a nice little flag on the record page to remind us. Something like this: Making this flag appear takes just three steps: 1. First we make two fields on contact that are not going to be on the page layout, one for Current Board Affiliations, and one for Former Board Affiliations. These are going to be rollup summary fields that simply count the number of affiliations to the board of directors account that are Status = "Current" (or "Former.") (* See footnote at the bottom of this post.) 2. Then we make a formula field that determines Board Member Status based on those two rollup fields. It’s a pretty simple formula that returns text: IF( Board_Current__c > 0, "Current Board Member", IF(Board_Former__c > 0 && Board_Current__c = 0, "Former Board Member", IF(Board_Former__c = 0 && Board_Current__c = 0, "", ""))) Basically, if there is a current affiliation to the board it returns “Current Board Member.” If there is no current but there is a former affiliation to the board, it returns “Former Board Member.” And it defaults to blank. I usually leave this field off of contact page layouts because we’re going to show the pretty flag instead. But the field is available in reporting on the contact object, so it can be useful for people to see the field directly in that kind of context. 3. Edit the contact Lightning record page. Add two components that are conditionally displayed based on the value in the Board Member Status field–one each for Current and Former. The Flag Itself You have a choice: You could simply use a Rich Text component to make your board member flag. This is the simplest option because it uses a standard page component that’s available right out of the box. Throw in some emoji to make it visual and it certainly does the job. But if you want your banner to look a little more like it belongs alongside the other parts of the page, I recommend installing the Lightning Messaging Utility from Salesforce Labs. This is a free page component that uses the Salesforce Lightning Design System, just like the other parts of the page layout. Personally, I think it looks more polished than the rich text version. Et voila! If you give someone an affiliation to the board, the flag appears, make them former and a different flag shows up, remove all board service and there’s no flag at all. Why I like the Affiliation Method Using this method you’ll have a complete record of historical board service. If someone changes roles on the board (like being elected treasurer), you can make a new affiliation indicating when the new role started. You can even preemptively use the End Date field to indicate when a board or position term will end. (Though putting in that end don’t won’t automatically change the status to Former, so you’ll still need to keep your data clean.) There is one minor downside to this method: It’s not that easy to quickly see who was on the board at any given moment in time (other than Now). You have the complete data, based on start and end dates, but you have to compare each affiliation record to understand which members would have been on the board at the moment you’re interested in. Why not a campaign? Instead of the affiliations-based method, some organizations create a campaign for the board and give campaign memberships to that campaign. This has its benefits, but you don’t have the same easy way to see start date, end date, and role. (Plus to track status you have to have the right Campaign Member Status options.) Some organizations create a campaign for each year, which helps with the history. Personally, I think the affiliation method is easier than the campaign method. But using the affiliation method it is probably also helpful to create a campaign each year for the board members. Setting up that campaign takes just a moment. (Run a report of current board members and then use the Add to Campaign button.) Once you have that campaign, you can use it for communication purposes (sending list emails). And if you create the campaigns each year, you'll have solved the minor downside of quickly seeing "who was on the board in FY20." Things Not To Do Should we address probably the most common way organizations track board members–having a checkbox on Contact? DON’T DO IT! It’s simple, of course, but the downsides are almost too numerous to list. Let's start with this: If the box isn't checked, does that mean they aren't on the board or does it mean nobody remembered to check it...? Next in line is a picklist for "Board Status." If someone regularly keeps this up to date, that's a start. But it's really no easier than the Affiliations method (or the Campaigns method) and the picklist has no way to capture start and end date, etc. * Footnote: If you make your fields using a standard Salesforce rollup summary field you will have to hard code the account Id of the record that is your board of directors account as one of your filters. This will work, but if you make a sandbox that Id won't exist and, therefore, your rollups will always be at zero. I prefer to make my rollups for this using the Declarative Lookup Rollup Summary tool, also known as DLRS. (I'll be writing more about DLRS in future blog posts.) The benefit to making these fields with a DLRS rollup is that you can put the actual Account Name as part of your rollup filter. Then if you spin up a sandbox and put an account for your board in that sandbox (with the same name as the account in production), your rollups and the resulting flags will immediately work.

  • When is a dashboard not a dashboard?

    Last week I wrote “When is a report not a report?” I was talking about all the different ways you could use a Salesforce report. Despite a very similar title, today I want to talk about definitions of “dashboard.” It’s hard to understand each other if we use different definitions for the same word! So let’s make sure we understand dashboard. For me, deep in Salesforce every day, when I hear “dashboard,” I’m immediately thinking of something like this: or this: But if you’re new to Salesforce, or even more if you’re not even using Salesforce yet and are describing what you need out of a system, you’re probably using the word “dashboard” entirely differently. For example, clients regularly ask for “a student dashboard where I can see how they’re doing in school and in our program, who their parents are, etc.” That is a request to see, in a convenient single place, how a single student is doing. When I build that in Salesforce, it’s going to look something like this: "Wait," you might be thinking, "that’s a Salesforce screenshot, but it’s not a 'dashboard,' it’s a 'contact record page.'" 💡 Lightbulb moment! “Record page” = “Dashboard” And this makes sense if you think about the automotive metaphor that “dashboard” comes from. The car’s dashboard is where you glance to immediately understand what is the status of your car: speedometer, odometer, fuel level (or charge level in an EV), any maintenance warnings, etc. So I’m totally on board with clients that like to think of having a “student dashboard” in that way. It’s just that we already use the word “dashboard” for something else in Salesforce. So it might confuse me at first. In Salesforce, dashboards are graphical representations of a series of underlying reports. Therefore, Salesforce dashboards are for looking at aggregate data. [One more quick definition: A report looks at many records in your database, usually filtered, grouped, and sorted. Of course, if you have sorted and/or filtered, you can make a chart. It's charts that go on dashboards.] If you’re talking about data for only one person (or program, or organization, or donation, or…), then in Salesforce terms you’re talking about “a record page.” Can you decide to call your student record page the “student dashboard?” Of course you can. It just might take me (or other Salesforce professionals) a moment to realize what you're talking about.

  • When is a report not a report?

    Hint: When it’s a To Do List. Or a checklist. Or a Hall of Fame. (Or Shame.) Salesforce reports are for more than just “reporting,” they’re the building blocks for running your organization. Once you start thinking outside the narrow confines of just "reporting" on your data, you'll find that you can do amazing things. Make a report with the following filters: All Contacts Gifts Last Year greater than $1,000 Gifts This Year equals $0 Add columns showing First Name, Last Name, phone number. You’ve just created a Call List for your development department. These are the major donors that haven’t given yet this year. Time to start dialing for dollars. Report on students with no college application record: Contacts of type “student” Current Grade equals 12 Cross filter: Contacts without (custom object) College Applications Where Status = Applied All you need are columns for first name and last name. If you’re looking at this report in September, it probably doesn’t mean much. But anyone on this report in December is behind the curve! This is a To Do List for the program staff to get in gear. Depending on how you're arranging your data, you might switch Status=Applied to Status=Interested on that cross filter. If you've got students that haven't expressed interest in any schools by November, they're the ones you need to be working with pronto! Report on students with (custom object) College Applications: All students that have an associated College Application School Year of the application equals This Year Status equals Accepted Add columns for student name, and college name. Group by student. This is a Celebrate List! (And a list of kids to start advising on how to make their final enrollment choice.) Report on opportunities: Stage equals Closed Won Amount greater than $1,000 Close Date equals Last Year Add columns for account name, opportunity owner (major gift officer). Group by opportunity owner. Subtotal the amounts and sort in descending order. You now have a Hall of Fame showing your top fundraisers for last year. Or make a report with these filters: Contacts of type Student Emergency Contact is null Add columns for First Name, Last Name, Primary Parent/Guardian name and contact info. You’ve just made a To Do List for the program team: students whose parents need a call. You don’t want those kids heading out on next week’s field trip without up-to-date emergency contact information! (Of course, you’ll probably want to validate the data for those whose emergency contact is not null. I’ve seen plenty whose name is “n/a” over the years. Not to mention the ones whose emergency contact name is the same as their primary parent’s name… But I digress.) Or a report with these filters: All Sessions Session Date less than This Week Attendance Percentage equals zero Add a column for teacher name. Sadly, this is the Hall of Shame. This is a list of teachers that have not entered last week’s attendance into the system. Report on: Time Cards Work Date equals Last Month Approved for Payment equals null Show columns for Time Card Name, Hours Worked, Activity Conducted, Total Payment. This is your Payroll Approval Checklist. Look at each of those line items and either approve or deny them so you can send out paychecks. Wow! Reports are for a lot more than just looking at data! Make sure you give those reports appropriate titles, put them front and center, such as on dashboards or the home page, and train your colleagues to keep an eye on them. I would argue they should even get some prominent placement on your documentation wiki, complete with links.

  • [Hard or Soft] Credit Where Credit is Due, part 2

    Last week we defined hard credit and soft credit. How does that look in Salesforce and the Nonprofit Success Pack (NPSP)? It all comes down to opportunity contact roles (OCRs). Opportunity Contact Role is a simple junction object that connects a contact to an opportunity. Besides the contact and the opp, there are two more fields: Role (a picklist) and Primary (a checkbox). In the original sales-focused use case of Salesforce, OCRs are used to designate the various people that you might need to talk to about a deal. You could check off one person as the “primary” contact on the deal and you could give everyone roles from a picklist, such as Influencer, Decision Maker, etc. NPSP uses OCRs in basically the same way, extending them a little further to control rollup fields for hard and soft credit. If someone has the opportunity contact role “Donor” then they are getting hard credit. There is an NPSP lookup field on opportunity called Primary Contact. Whoever is in that field will automatically be given an OCR of Donor (and Primary will be checked). You really don’t need to do very much to ensure that hard credit is assigned. If a contact is getting hard credit, the NPSP rollup fields for hard credit are getting values from this opportunity. That includes Total Gifts, Total Gifts This Year, etc. Most other OCRs confer soft credit. The specific OCRs that count toward soft credit in your org are set by your system admin, so it’s possible for someone to have an OCR on an opportunity and not have any credit (hard or soft) for that opp. But in general, if someone has an OCR connecting them to an opportunity other than Donor, they get soft credit. If a contact is getting soft credit, that shows up—You guessed it!—in the soft credit rollups. such as Soft Credit Total, Soft Credit This Year, etc. Remember our donations to Hudson Street Orphanage benefitting Annie and her cohort? Let’s look at a couple of those gifts: Oliver Warbucks gave $500 This is an opportunity on the Warbucks Household. Oliver is the primary contact and has the OCR “Donor.” Mrs. Warbucks has an OCR for Household Member that was automatically assigned. Shoe Fits Fund: $125 DAF gift on behalf of Goody Twoshoes This opportunity is on the Shoe Fits Fund account. Goody Twoshoes is the primary contact and gets a “Soft Credit” contact role. One more credit: Partial Soft Credit Since we understand soft credit from last week, let us now introduce the concept of Partial Soft Credit. Whereas last week I only ever talked about giving credit for a whole gift, partial soft credit is giving someone credit for only a portion of a larger gift. Here’s how it would work. Remember last week when both Oliver Warbucks and Goody Twoshoes both asked Mr. Munitions to donate to the Hudson Street Orphanage? Let’s say that each of them asked him to donate $75 to the orphanage, perhaps in honor of Little Orphan Annie’s birthday. When Mr. Munitions’ $150 check shows up, we could record partial soft credit for Oliver and Goody, each to the tune of $75, rather than giving them both full credit for having influenced the gift. Makes sense, right? And in that Trailhead module I linked to above, it's relatively easy to enter some partial soft credits in NPSP. But that’s a simple example with just two people to split the gift credit. I’ll be honest: Basically none of my clients (or former employers) use partial soft credits. The data nerd in me is sad about this. But it’s just rarely worth the effort when you get into things like… Three Bad Options: Workplace Giving The situations I find the most difficult to follow are third-party donation setups like payroll deductions or pass-through workplace giving platforms like United Way or Benevity. Remember the rubric: “Whose check is it?” The check comes from the workplace giving platform, United Way, or Benevity, or…) I think it’s pretty clear that we’re in a soft credit situation for the individual donors. The craziness comes in when you’re trying to figure out how to parcel out the soft credit (partial soft credit.) The moment the payroll deduction is made is the actual donation and the donation is to the workplace giving platform, not to your organization, hence a soft credit scenario. The problem arises when the workplace giving platform sends your organization one combined check and a list of the people at Company X whose contributions that represents. Some platforms send the detailed breakdown of how much was from each person, but not always. Some platforms tell you when the employees make their pledges, long before the payroll deductions start or the checks start coming, but you don’t get detail when the actual money arrives. And it’s my understanding that none of the workplace giving platforms actually go back and update you when things might change (like an employee that was doing a payroll deduction leaves the company mid way through the year.) This is where you really have to start asking yourself how much detail is worth your while. Imagine that you have a check from United Way and a list of 50 donors that went into it, with their individual amounts. The technically correct thing to do would be to create an opportunity on United Way account and then to assign partial soft credit to each of the donors. Of course, before you do that, each donor must be in Salesforce as a contact and there’s no way to predict if they already are or if they’re a new name. Then you have to assign the right amounts to each of them on the United Way gift. 🤯 Simpler would be to just assign each of the donors a soft credit contact role, giving them all soft credit for the full value of the gift. You still need each donor to be in Salesforce. And you’ve now done it “wrong,” in the sense that they’re each getting too much credit. But at least they get some kind of credit and you have a way to see the names of everyone that’s donated to you via workplace giving. 😕 The final option is to just record the United Way check and not give any soft credits. Nobody loves this option, but it’s dramatically less work. You have to make a decision for your organization about what you are going to do with soft credit information that would make it worthwhile to put in the up-front effort of all the data entry. 🤷‍♂️ Side Note About Keeping Data Clean: Corporate Donation/Payment on a Credit Card I want to call attention to one final scenario that’s really hard to deal with: Organizations using a credit card on your donation platform. If you’re a nonprofit that has some kind of earned-revenue situation, you might send out an invoice to a company. Depending on how that invoice was sent, it might not be payable by credit card. Or you could even have a case where a business notifies you that they’re going to make a grant/donation to your organization but they don’t do that kind of thing very often so they don’t have a clear process in place. In either of those situations you could have a well-meaning someone at the business who just pulls out their corporate credit card to pay the invoice or the pledge using the Donate Now link on your website. Ugh. The first thing to do is thank them for their desire to promptly get money into your hands. (The second thing to do is educate them about the realities of credit card fees and how much less money just got into your hands than if they had sent a check.) Don’t even mention to them that the donation link is not set up for organizational donations–it’s assuming this is an individual gift. Now it looks like a person made a personal donation but the money has actually come from an organization, not from their own bank account. And it’s also going to look like a sudden new donation even though somewhere else a similar amount is in accounts receivable, perhaps in Salesforce or perhaps in some other system… The technical term for this situation is A Mess. Realistically, you’re going to have to manually muck about with your database to sort things out. If we’re talking about Salesforce and a donation platform integration, there’s going to be an opportunity on the individual that should really be on the organization account. You could delete that, or modify it. There might also already be an opportunity on the organization account that was the one that’s really just been paid. You have to decide if you modify that one (to add the payment information) or use the newly created one (losing the history from the old one.) Like I said: a mess. PS: This has nothing to do with soft credit or hard credit. Once you get the information cleaned up, the soft/hard credit should be unchanged.

  • [Hard or Soft] Credit Where Credit is Due, part 1

    I like giving people credit. Not extending them credit, like a loan. Not tracking their progress toward graduation, like course credit. I’m talking about giving people credit for donations. You want to know who your donors are and how much they’ve given, right? Well if you’re a nerd like me you also want to know how much they gave compared to how much they “got.” At the very most basic level there are two kinds of donations someone could get “credit” for: money they gave or money they influenced. In development lingo, those are “give or get” or “hard credit” and “soft credit.” Before I delve any deeper, let me start with a caveat: not all organizations think about hard and soft credit the same way. And there are lots of organizations that just don’t really get into soft credit at all. But for those that do, it’s pretty important to understand the nuances. If your organization decides you’re not going to put a lot of time or effort into the distinctions, that’s OK, but you should know they exist so you can communicate clearly with other organizations. Since this is a Salesforce-focused blog, we’re also going to delve into how to think about hard and soft credit in your system of record. But that’s going to be mostly saved for the next post. A Simple Rubric I have a simple rubric for you to use: “Whose check was it?” Hard Credit refers to funds that come directly from the individual or organization in question. If the answer is “It was Shoshanna’s check,” then that’s hard credit to Shoshanna. If we are going to be strict in our tracking, then hard credit is only given to the legal entity that gave away their own money. If we think in terms of the United States tax system, it’s the entity that will be able to claim the donation as a deduction if they itemize on their tax return. If your tax system is different, you might not need to worry about who will claim the deduction, but I think you probably still want to know when someone was giving you their own money versus someone else’s. An example of hard credit: Oliver “Daddy” Warbucks gives $500 to the Hudson Street Orphanage. Soft Credit, on the other hand, recognizes influence over the funds. What makes it “soft” is that it’s credit for a donation that a contact did not actually make, but somehow influenced. The other “soft” part of soft credit is that your organization could give soft credit to multiple people for the same gift. The classic soft credit example is a matching gift from a donor’s employer. Let’s say The War Profiteering Company (WPC) has a 2:1 match policy. So after a simple application process, Warbucks’ gift from above is matched with a $1000 contribution from WPC. That gift is soft credit to Oliver because he influenced it but didn’t give it. It’s clear that the money came from the company’s coffers. That example is fairly straightforward because the matching gift is only soft-credited to Oliver Warbucks. If he hadn’t given his own gift, there would be no match. Next, Warbucks calls up his close friend Mr. Munitions and asks him to please donate to Hudson Street Orphanage because of the wonderful singing lessons they provide in addition to food and shelter. Mr. Munitions is rather cheap and he doesn’t say yes at first. But when he is also asked to give to the Hudson Street Orphanage by Goody Twoshoes, Mr. Munitions sends a $150 gift. Now we give hard credit to Mr. Munitions and soft credit (as “influencer” or “solicitor”) to both Oliver Warbucks and Goody Twoshoes. Notice that a single $150 gift has just resulted in two solicitors getting credit. There is now a total of $300 in soft credit awarded. That’s where things get “soft.” For those keeping score, Oliver Warbucks now has $500 in hard credit and $1,150 in soft credit. If asked, you might say that Mr. Warbucks has “raised $1,650 this year.” “Raised,” in this context, would mean “give or get.” Meanwhile, Goody Twoshoes has also raised $150 even though she hasn’t actually given a donation. (And note that only $1,650 has been deposited in the bank account of Hudson Street Orphanage.) Confusing Case: Donor Advised Funds Donor Advised Funds (or DAFs) are increasingly common donors to nonprofit organizations in the United States. DAFs exist in the US primarily to manage tax implications. If you can donate an asset directly to a charity without selling that investment for cash first, then you won’t pay taxes on the amount that asset appreciated from when you first bought it. The most common investment to donate this way, of course, would be stocks, though the same would apply for any asset from a house to your grandmother’s diamond engagement ring. Unfortunately, donating assets to an organization is a pain in the neck, both for the donor and the organization. Most charities just don’t have systems in place to receive a donated stock, let alone a property! And if you wanted to split the value of an asset between more than one organization, how would that even work? DAFs ease the burden by allowing you to donate the appreciated asset to the DAF, which is set up to be able to accept such donations. The DAF sells the asset for cash and then you, as the advisor, can direct where the DAF will send the money it has on hand. My wife and I have a DAF called the Tree Brother Fund that is managed by the Philadelphia Foundation. We set it up because we made some lucky investments in our 20’s. (Thank you, Apple Computer!) If we were to sell those stocks we would have to pay capital gains taxes, leaving less money for us to give to charity. Instead, we donate the stock to the Tree Brother Fund directly. Since we never sold it, we have no capital gains. That’s a great tax bonus! The other bonus is that the Philadelphia Foundation is used to accepting stock donations, so it’s quite easy. Not all charities are set up to accept donations other than money. One of my prior employers was notified that a donor wanted to give us appreciated stock. We had to open a brokerage account to receive the stock, give all the account details to the broker for the donor to facilitate the transfer, then sell the stocks immediately upon receipt, and then properly account for the transactions. I’m not really sure that the value of the donation was worthwhile once you factored in the time and effort we had to spend receiving it. Getting back to the discussion of hard credit and soft credit: When I donate an asset to my donor advised fund, that is the moment I get a tax deduction. I have donated to the DAF. (From the perspective of the DAF, my donation would be hard credit.) But the donation to the DAF is not the perspective I’m usually working from, and I expect it’s not your perspective. Once the DAF has money in its account, it sends grants to nonprofits like the Hudson Street Orphanage. That’s the perspective we’re interested in. When the money arrives at Hudson Street, all we have to ask is “Whose check was it?” And the answer is clear: the DAF’s. Therefore, the DAF gets hard credit and whoever directed the DAF to make that grant gets soft credit. Back to the fictional world: Goody Twoshoes donates 10 shares of WarCo stock to her donor advised fund, the Shoe Fits Fund. She then directs the fund to grant $125 to Hudson Street Orphanage. HSO records a $125 donation from Shoe Fits and gives soft credit to Goody. Let’s update the talley sheet: Oliver Warbucks: $500 gift (hard credit), $1,150 in soft credit. War Profiteering Co: $1,000 match gift on behalf of Daddy Warbucks Shoe Fits Fund: $125 gift on behalf of Goody Twoshoes Goody Twoshoes: $275 in soft credit Mr. Munitions: $150 gift (hard credit) $1,775 has been deposited in the bank account of Hudson Street Orphanage. (4 gifts) I strongly argue that this is the “right” way to think about things. But as you're probably starting to realize, it takes a lot of data to describe all those nuances. Next week we’re going to talk about how you actually record things in Salesforce.

  • Why I Love the 50/50 Split

    OK, I’m about to take a pretty big turn from the content and tone of this blog so far. I’ve had almost two months of weekly posts and they’ve all been focused on Salesforce in general and the nonprofit context. I’d say my imagined reader was just as likely to be a Salesforce admin as a nonprofit executive considering the platform and how to get value from it. But today is the first post where I start getting into the weeds. It was always my intent for this blog to be a hybrid resource, one that is useful for users and executives but also has tips and tricks for Salesforce admins. Today I’m talkin’ to the admins. (Of course, if you’re reading this and you’re not an admin, stick around. You might find some ideas you want to ask your admin to implement…) Don’t Settle for Default I want to talk about page layouts. I want to start talking about making your Salesforce instance fun, and functional, and helpful to your colleagues doing their jobs. I want to ask if you’ve still got the default page template for most of your Lightning record pages? Please tell me you don’t. [Quick aside for definitions: A “page layout” is the layout of fields for a Salesforce object. This is controlled in Setup>Object Manager>[object]>Page Layouts. It’s where you add or remove fields from the page and has a very “classic” look to it. A “Lightning Record Page” is the tool that allows you to add components like tabs, single or multiple related lists, even Rich Text components. The Details component on a Lightning Record Page shows the fields that you control with the Page Layout. As an admin, the easiest way to get to editing Lightning Record Pages is to click the gear and choose “Edit Page.” Besides the formal “Lightning Record Page,” I will also call these “LEX Page” or “Lightning Page.”] Here’s what I mean: The default Lightning record page in a new Salesforce org or on any new object uses a template that puts a tab component on the left with tabs including Details and Related. On the right is the Activity Feed and Chatter (if enabled for that object.) I refer to this as the two thirds/one third split because–that’s right!–the left-hand side is 2/3 of the page and…well I think you get it… Salesforce actually calls this template “Header, Subheader, and Right Sidebar.” But that’s an awful mouthful. The problem with this default page, in my humble opinion, is that it doesn’t use space efficiently. The Details component rarely needs to use two thirds of your screen width. (Most fields are going to show just a handful of characters.) For some simple objects that have just a handful of fields it’s actually harder to read with so much whitespace. And the real horror of the two thirds/one third is what happens when you start to get creative with your Lightning page. Let’s say you put a single related list component in that right-hand column. This is a pretty common way to highlight some information that is useful for your users. Here I’ve added the Opportunities related list and it’s got a couple of donations showing. If you ask me, it’s really hard to glean information about those donations when they show up as “tiles” like this. But when the component is only on one third of the screen, it only displays as tiles. And you only see a max of three. If you click on View All at the bottom, you’ll see you’ll see more fields, plus they’re laid out in columns so you can easily compare the items in the list. (Now I start to wonder if this donor is losing interest, because I can immediately see that their monthly donations are going down. Uh oh!) But that took an extra click. Look how much more functional that related list is if we change the LEX Page Template to the 50/50 split: Now you can see the progression month to month right here on the page. Plus on the left there’s still plenty of room for the Details fields. It takes about six clicks to change the page template: 1. Open the Lightning App Builder (Gear>Edit Page) 2. Click on the Change Template button on the right. 3. Select “Header and Two Equal Regions” (which is what Salesforce calls the 50/50 split.) 4. Click Next 5. Accept the screen that says which components will move to which section. 6. Save your changes. (If necessary, Activate the page.) I do this on literally every single object. I just wish there were a way to set it as my default instead of having to change each, one at a time. I think that one simple change makes for far more functional page layouts. Of course, I’ve got much more to say about making pages beautiful and functional. But this one simple step is a huge start. So what are you waiting for? Go change your page templates!

  • Just Start Writing

    Last week in Documentation Done Cheap I suggested that you probably have access to a free way to house a Salesforce documentation wiki. Let’s talk a little about what to put there. 1: Just Start Writing I mean it! Don’t let the perfect be the enemy of the good. (Don’t even let the good be the enemy of the somewhat-adequate.) Any documentation whatsoever, even full of sentence fragments, bulleted lists, and typos is better than nothing. Even before you can start building specifics, you want to have some kind of guide for your users to understand what Salesforce is, why you’re using it, what assumptions are baked into your implementation, etc. You can polish later. But if you don’t get the basic foundation constructed early you’ll always be playing catch-up. 2: Basics: A Welcoming, Fun Roadmap Make the front page welcoming and make things fun! I like to adopt a fairly informal tone. It puts users at ease and helps them understand that this is a living document that needs their help to keep it up to date. If you can, put in pretty pictures. I like LucidChart to easily build a diagram of the relationships between database objects. I’m no graphic designer, but I think this is pretty good looking: Perhaps throw in some links to Salesforce’s documentation of the features you’re using. You can see, in this screenshot, that I literally start with a link to the NPSP documentation. Not that I expect too many users to follow that link. (Who are we kidding?) But I want to set the expectation that whenever possible I’m going to let handle the documentation of their own features. (Pro Tip: Have you seen the amazing videos produced by the volunteer NPSP Videography Team? Whenever possible, include links to those videos to introduce your users to functionality from’s products.) 3: A Page for Every Object Next I create a page for every commonly-used object. At first some of them (particularly the Salesforce standard objects) might seem kinda’ stupid. That’s fine. That might even be all there is to say at first. But pretty soon, you’re going to find ways to expand on this with commentary that is specific to your organization and your Salesforce instance. Better to give yourself the placeholder page right now. Eventually you’ll have time to expand to specifics: But far more important than those standard objects is to start recording your org’s custom objects. Hopefully a lot of them are just as obvious as Contacts, based on the object name and understanding your organization’s programming. But this is the place to call out all the assumptions on which your instance has been architected. For example, let’s say you have an object named Program Enrollment that is a child object to Contact and also child to Program. Most of us reading this blog probably understand that Programs should have records for every program offering of your organization. And having a Program Enrollment is the only way to know which contacts are part of those programs. And it, therefore, follows that only contacts for whom there is one or more enrollment record are “participants” in our program. Now is the time to write that out explicitly! If you have an enrollment, you’re a participant. If you don’t have an enrollment, you’re not a participant. It’s that simple. When someone comes looking for a report of “how many participants have we had this year?” it’s going to be much easier to answer that question for them if they understand in advance that “participant” is defined as “a contact that has a program enrollment.” Now they probably already know what reporting they need! So give yourself a page for each of your custom objects and, even if it seems obvious, be explicit about why they represent and how they are used. 4: Make a Web of Links Strictly speaking, I’m going to say this step is optional. But one of the main reasons I suggested in last week’s article that you should build a wiki is that you’re going to have an easy way to link your pages together. One page per object, like I suggested above, is easy to maintain and keeps pages short (so lazy people will read them). Certain objects get used together. So make it your practice to give internal links. Whenever you mention an object, make that mention a link to that object’s page. And when you add a new page for a new object, try to remember and go back to previously-created pages and add links to this new page. If your site builder allows for a hierarchical menu, take advantage of it. But if not, at least one page for each object is pretty easy to browse through. It sounds obvious, but it’s very helpful to your readers. 5: Clear Descriptions of Automation Automation is fantastic! Users love how it makes their lives easier. Automation is part of why I say that Salesforce can be custom software to run your nonprofit. But automation can also be pretty opaque. You might see part of what happens when automation runs, but other things that happen could be hidden, or at least not obvious. So give your users a way to understand what happens when they do something and why. It might make sense to devote a page of your wiki to describing automation. Or it might be better to integrate the automation documentation into the page(s) of the objects in question. But just get something written down so your users (and other admins, and even Future You) have some bread crumbs they can follow. List it all out: When the Enrollment Status field is changed to Withdrawn there is automation that creates a Task assigned to Reggie. This task is Reggie’s reminder that the student’s email account should be closed and the status of any outstanding tuition balances evaluated. As simple and understandable as that paragraph is, let’s point out that it does quite a few things: For users, it lets them know that changing the enrollment status field is the action that actually un-enrolls a student. (This should probably also be explicit on any pages about students, or programs, or contacts.) For Reggie, it’s documentation of how these tasks keep getting assigned to him. For the organization, it documents the things that need to happen when a student withdraws. For Salesforce admins, it documents that Reggie is explicitly built into the automation. If Reggie leaves, you are going to need to change the automation to point to his successor. That’s a lot in just two sentences! One final word: On pages focused more on the user than the system admin you might not use all the jargon about how the automation works. I wrote “there is automation” above. But if you're working on pages for sysadmins, you might want to say “there is a flow...” 6: A Page About Installed Packages Most orgs have several AppExchange packages installed in their system. Sysadmins will know how to go into Setup and see the complete list. But any apps that users will interact with may be worth explaining a little bit on the wiki (and linking to their creator's own documentation.) This is also a good place to give future sysadmins a little leg up in figuring out when and why you have installed one package or another. I could go on and on, but that’s really plenty to get you going, I think. There’s just one last thing: getting your colleagues to read your wiki. I’m not gonna’ lie: people are lazy. Most of the time they’re either going to ask you directly for help or their going to just not do the thing they can’t remember how to do. I can’t beat human nature. But I can make it easier for you to answer their questions! Be Relentless: Every single time you answer a Salesforce question, do so by giving a link to the page on the wiki that they can reference in the future. (If you have to, write that page quickly and then link to it as though it was always there! I won't tell.) Relentlessly mention and link to “the wiki. The wiki. The wiki.” It takes time, but people will start to realize that when they ask you a question they’re likely to get a link to the wiki. Eventually, they'll even look at it for themselves. Make It Easy to Find: It’s one thing to link to the wiki in emails and Chatter posts. But if you really want your users to start going there on their own, you have to make it easy for them to find. Put a link front and center on the homepage so they see it every time they log in. In Lightning you can even customize the help menu (question mark) so a link to the wiki is available no matter where people are in Salesforce: And every time you do any sort of training, point out to people that a link to the wiki is there in the help menu. Once your users catch on, you might even find that your “Salesforce wiki” morphs into your “Organization Handbook.” How great is that?

bottom of page