Blackbaud Internet Solutions
Developers Showcase
Blackbaud Internet Solutions
Developers Showcase
J Schultz
Blackbaud Internet Solutions
Developers Showcase
J Schultz
Blackbaud Developer Team
Who Was I?
- Failed High School Teacher
- Failed FM DJ at a Classic Rock Station
- Failed Writer
- Failed Coffee Shop Manager
- Failed Stock Boy at a Liquor Store
- Failed Best Buy Service Plan Pusher
Who Am I?
- Real Name is Just the Letter J
- Older than you think
- Married 19 years, 9 year old daughter
- Own a Basset Hound, the most ridiculous breed of dog ever created
- 5 Years at Blackbaud
- Senior Interactive Web Developer IV
- Specialize in BBIS Front End Customizations
What's the Issue?
- Dynamic Donation Forms
- Responsive Websites
- Social Media
- Engaging Content
Pure CSS Solution?
A JavaScript Solution?
The Old Way
Ghosting the Form
BBIS Tools and Parts
kills the practice of
Ghosting the Form
BBIS API
Unchains the donation form from its table, allows dynamic content, allows cross domain calls, and gives us access to our CRM data.
And Makes Responsive Design Easier
Mobile Elvis
Tablet Elvis
Desktop Elvis
What are the tools?
- Advanced Donation form / Donation API
- Query Display / Query API
- Record Search and Record Display
- Custom Content Part
- Unformatted text and other traditional parts
The Danger?
Remember the words of Uncle Ben
Or this Uncle Ben
"Only Rice is Instant"
Sacrificing ease of configuration with flexibility.
Responsive Design
Our "Foundation"
Our CSS
With BBIS we can add multiple stylesheets just as we would with in a standard hosted website.
We can also specify stylesheets specifically for mobile or desktop... but we don't need to do that when we can use media queries.
@media only screen and /*!YUI Compressor */ (min-width: 48em){
.medium-1{width:8.33333%}
.medium-2{width:16.66667%}
.medium-3{width:25%}
.medium-4{width:33.33333%}
.medium-5{width:41.66667%}
.medium-6{width:50%}
}
/*!YUI Compressor */
Complex media queries do not play well with the BBIS CSS compressor, so we add a piece of code that allows our media query to be ignored by the compressor.
Our JavaScript
As with our CSS we can add JS libraries, plugins and custom code the same way we would in a standard hosted environment. Using the Files section we can create a JS folder and place our files there, then include them at the layout level for all our pages.
Other Best Practices to Note
- Limiting Cross Domain Calls
- Keeping JS in One Place
- Being wary of static URLs
Advanced Donation Form
and the Donation API
var bbisURL = BLACKBAUD.api.pageInformation.rootPath;
var donationService = new BLACKBAUD.api.DonationService(partId,
{
url: bbisURL,
crossDomain: true
});
donationService.createDonation(donation, donationSuccess, donationFail);
donationSuccess and donationFail are our callback functions for those respective events.
{
"Donation":{
"Donor":{ //Donor Data
"Address":{
"City":"Columbia",
"Country":"United States",
"PostalCode":"29212",
"State":"SC",
"StreetAddress":"123 Main St."
},
"EmailAddress":"john.doe@blackbaud.com",
"FirstName":"John",
"LastName":"Doe",
"Phone":"555-555-5555",
"Title":"Mr."
},
"Gift":{ //Gift Data
"Designations":[ //Designations are an array of ID and Amount
{
"Amount":5,
"DesignationId":"3439a5c7-9977-4f9c-ba11-fadfb8144d35"
}
],
"FinderNumber":0,
"IsAnonymous":false,
"PaymentMethod":1,
"Comments":"Gift comments here.",
"CreateGiftAidDeclaration":false,
"Attributes":[ //Custom Attributes are an array of ID and Amount
{
"AttributeId":"BD18B3FD-B382-4183-A415-8F84B1E0E411",
"Value":"Volunteer;Member;Alumni"
},
{
"AttributeId":"3607C77D-19DC-4EE0-A0CD-A352762A8EF0",
"Value":"1985"
}
],
"Recurrence":{ //Optional Recurrence
"DayOfMonth":26,
"DayOfWeek":null,
"EndDate":null,
"Frequency":2,
"Month":null,
"StartDate":"\/Date(1337227200000-0400)\/"
},
"Tribute":{ //Optional Tribute
"Acknowledgee":{
"AddressLines":"123 Sunset ln.",
"City":"Charleston",
"Country":"USA",
"Email":"email@address.com",
"FirstName":"Joe",
"LastName":"Schmo",
"Phone":"123-123-1234",
"PostalCode":"29482",
"State":"SC"
},
"TributeDefinition":{
"Description":"New tribute",
"FirstName":"John",
"LastName":"Hancock",
"Type":"Tribute"
},
"TributeId":null
}
},
"Id":"853f96be-bf08-4828-aefa-326a06e48d31", //Created by BBIS/BBSP
"Origin":{
"AppealId":"C3B20FD8-6A81-451E-BF78-D195E82B4CBF",
"PageId":784,
"PageName":"Sample Page"
},
"TransactionStatus":1
},
"BBSPCheckoutUri":" https://payments.blackbaud.com/Pages/Index.aspx?t=853f96be-bf08-4828-aefa-326a06e48d31"
}
The Donation API Object
Did you Notice That?
BLACKBAUD.api.DonationService(partId, {url: bbisURL, crossDomain: true});
That's correct. You can call the Donation Service from ANY DOMAIN.
You can just as easily process this transaction in Drupal or a Wordpress site! You heard that right.
Crazy trick that works with BBNC too...
BLACKBAUD.netcommunity.Cart.AddDonationToCart(amount, designationID, description);
If you know the GUID of the fund to apply it to, you can directly add funds to a shopping cart and provide your own description/name.
Another Example
With the Donation API and the Advanced Donation form we can reduce the number of 'taps'
Query Display, Record Search and Record Display Parts
Example
TCU Calendar System - (Behind Firewall)
Record Search
Grabs events from CRM based on the CRM query created and displays them on a BBIS page.
Record Display
Links from record search automatically add the GUID to the URL, which is then digested by the Record Search part to display the correct details.
This is all dynamic data straight from CRM.
A contextual record search part
Example
With the Query API, we aren't tied to using the Parts. We can create our own JavaScript and HTML solution.
Example
Example
Maybe I didn't say it enough.
Just like the Donation API - the Query API is CROSS DOMAIN.
Custom Content Part
What is it?
A Part that allows us to create engaging and media rich content pieces that our content editors can’t destroy.
Like they do.
Every time.
Its beauty is, with a little bit of extra work at the beginning, we can create a part that is virtually indistinguishable from a standard BBIS part.
And we can use all the tools we've already covered.
For instance we can quickly create some code to handle callout boxes.
And create complex styles that can't be destroyed or misunderstood.
That's just the beginning.
We can just as easily create a slideshow that our content editors can deploy, reuse, and edit as simply as they do standard content
Example
No reason to reinvent the wheel here.
Use your favorite slideshow plugin.
Or create new widgets.
Like a social media widget.
I always wonder how social "Social" media really is...
Example
Give Away!!!
Giving out a free mini donation form
custom content part.
Example
The Results
- 42% of our donations to our primary form (whose audiences enter from the site, as opposed to an email or some other source) have been started through the mini-donation form above.
- We've been able to increase the average online donation to the College of Charleston from $193 to $259 (compared to the same time period last year)
- We've increased both total online donors (+47%) and online dollars (+97%) (compared to the same time period last year)
Jacee Brown
WEB STRATEGY MANAGER
Institutional Advancement
COLLEGE of CHARLESTON
What Questions Do You Have?
BBIS Developer Showcase
By J Owen Schultz
BBIS Developer Showcase
- 1,681