Today Shaun Sullivan posted an article in Labs discussing his latest project, an iPhone emulator.
Blackbaud releases an iPhone emulator
Wednesday, February 18, 2009Posted by Garrett at 20:19 0 comments Links to this post
Open Source REAPI Project
Saturday, February 7, 2009Earlier this week AJParise made me aware of an Open Source project that he started for the REAPI on CodePlex. There is some pretty slick stuff there for those of us that have purchased The Raiser's Edge API.
AJParise wrote: In January 2008, I started working extensivley with the REAPI.After a year of headaches and mindnumbing research I've developed some very handy classes for .NET developers using the 3.5 framework looking to integrate with the REAPI.
Posted by Garrett at 20:21 0 comments Links to this post
Labels: API, Blackbaud, open source, re
Geo-coding Your Constituents
Saturday, January 17, 2009'''''' this method will take a REID and get the address''' then it will use google maps to lookup that address address''' note: the value of the returned array with the lat/lng is nothing if''' either the address coudln't be geocoded or it wasnt' specific enough to get back a single result''''''''''''_ Public Function getConstitLatLng(ByVal sREID As String) As ArrayListDim oConstit As New CRecord 'this is the constit objectDim aLatLng As New ArrayList(2) 'we'll be returning this.Dim RE7 As REAPI = initAPI() 'this is located in the source. be sure to change up your serial, username, pass and db number.Dim oAddress As CConstitAddress 'address objectTryWith oConstit.Init(RE7.SessionContext) 'init.Load(sREID) 'load the passed in REIDFor Each oAddress In .Addresses 'loop over all the addressesIf oAddress.Fields(ECONSTIT_ADDRESSFields.CONSTIT_ADDRESS_fld_PREFERRED) = -1 Then 'grab the prefered one, yes I know it's -1 trust me on this -1 = true for some strange reason in the BBREAPI...I don't ask questions if it works.'pass the retrieved criteria to the seekCoords methodaLatLng = getCoords(oAddress.Fields(ECONSTIT_ADDRESSFields.CONSTIT_ADDRESS_fld_ADDRESS_BLOCK) & " " & oAddress.Fields(ECONSTIT_ADDRESSFields.CONSTIT_ADDRESS_fld_CITY) & ", " & oAddress.Fields(ECONSTIT_ADDRESSFields.CONSTIT_ADDRESS_fld_STATE) & " " & oAddress.Fields(ECONSTIT_ADDRESSFields.CONSTIT_ADDRESS_fld_POST_CODE))Exit ForEnd IfNextEnd WithFinally 'close down your stuff...alwaysoConstit.CloseDown()System.Runtime.InteropServices.Marshal.ReleaseComObject(oConstit)System.Runtime.InteropServices.Marshal.ReleaseComObject(RE7)End TryReturn aLatLng 'return the valueEnd Function
Private Function getCoords(ByVal sAddress As String) As ArrayListDim stream As IO.Stream = NothingDim doc As XmlDocumentDim req As HttpWebRequestDim aLatLng As New ArrayListIf sAddress <> "" Then 'we check to make sure that we have an addressreq = DirectCast(WebRequest.Create("http://maps.google.com/maps?output=kml&q=" + sAddress), HttpWebRequest) 'pass the address to googole and assign the results to req'now we parse up the results'generally speaking kml = xml so we can use the std handlers in .net for this'why google doesn't just call it xml is beyond meDim response As HttpWebResponse = DirectCast(req.GetResponse(), HttpWebResponse)stream = response.GetResponseStream()Dim sr As New StreamReader(stream)Dim text As String = ""text = sr.ReadToEnd()sr.Close()doc = New XmlDocument()doc.LoadXml(text)longitudes = doc.GetElementsByTagName("longitude")latitudes = doc.GetElementsByTagName("latitude")'for simplicty we only want to worry about results that have 1 possible result'none, means the address wasn't geocodable'multiple means the address wasn't specific enoughIf longitudes.Count = 1 ThenaLatLng.Add(latitudes(0).InnerText)aLatLng.Add(longitudes(0).InnerText)End IfEnd IfReturn aLatLngEnd Function
Posted by Garrett at 21:08 4 comments Links to this post
Labels: Blackbaud, custom parts, geo-code, NetCommunity
What's cooking
Thursday, January 15, 2009- The top five new articles on our site in the last 7 days.
- The top five non-news article pages in the last 30 days.
- The top five pages the logged in user has visited in the last six months.
Posted by Garrett at 20:13 1 comments Links to this post
Labels: Blackbaud, blogger, custom, NetCommunity
2008 Online Giving Trends
Tuesday, January 6, 2009The subject is a bit off topic from what I usually write but I found it pretty interesting.
Posted by Garrett at 07:10 0 comments Links to this post
Labels: 2008, Blackbaud, giving, Ma, maclaughlin, steve maclaughlin, trends
Blackbaud NetCommunity 5.6 relases soon
Friday, December 19, 2008Latest blog post and some twitter activity indicates NetCommunity 5.6 might release later today. It's a control release so you'll need to call support to get the download. The download will be available online next week...
From Steve's blog...
Here are just some of the changes you'll see in the release;
- Ability to enter metadata descriptions and keywords at the Template and Page level
- Ability to copy Layouts and Stylesheets to quickly reuse or modify site designs
- Ability to style menus using unordered lists and custom classes
- Ability to put the Donation, Event Registration, and Payment parts into a "test" mode
- Ability to print and export Survey part results
- Ability to compare content performance for testing purposes
- Adding tooltips for every merge field in the product
- Adding default text for several of the email types and helplets
- Adding custom tabs within Wave Social Networking
- Adding group photos and other user contributed photo improvements
Posted by Garrett at 10:58 0 comments Links to this post
Labels: 5.6, Blackbaud, NetCommunity, wave
NetCommunity Developer Challenge Entries Released
Friday, December 12, 2008Shaun has posted a few of the top entries from the NetCommunity Developer Challenge. They are all open source. They don't come with support but if you have a problem with any of them post something on the Bus and someone will probably help you out.
You can download my entry here or view them all here.
Posted by Garrett at 14:13 3 comments Links to this post
Labels: challenge, developer, NetCommunity




