Validatrix – Complex Business Rules with ease for The Raiser’s Edge

I am really pleased to announce that we have released our latest plugin – Validatrix. (Or jump to the fancy animation). It always bothered me how so many business rules built into The Raiser’s Edge were arbitrary. You have to supply a surname but not an email address. You have to give a gift amount and date but not specify which segment it belonged to when given (as some organisations would do by adding an attribute).  It maybe that somebody is a VIP because they give over a certain amount of money or because they are a specific type of prospect or because they attended a VIP dinner. You cannot enforce these rules in The Raiser’s Edge as is. You can, however, with Validatrix.

Continue reading Validatrix – Complex Business Rules with ease for The Raiser’s Edge

Payment Type or Payment Method ID reference

Some time ago I wrote the mappings for gift type ids and their corresponding descriptions. This is useful in the API and also when interrogating the database directly. More recently I have needed to do the same thing with payment type. I find it very strange that in some scenarios this field is referred to payment type and other times it is payment or just pay method. Whichever you use the mappings are given below:

  Continue reading Payment Type or Payment Method ID reference

Checking access restrictions in The Raiser’s Edge

In a recent project I had to ensure that specific confidential information was being saved as an action. I had a custom screen where this data was going to be viewed and edited. Only certain users had access to that action using security by action types. I had to check to see if the current user was able to view the action and if they could whether or not they were able to edit the details. There are useful methods for this in the API and I assumed it would be a simple task to use them. Continue reading Checking access restrictions in The Raiser’s Edge

Redesigning for mobile

This is somewhat off topic but since this is my blog I reckon I can use a bit of poetic licence. I have been updating the main zeidman.info website so that it can be used easily on mobile. Everybody talks about the percentage of visitors coming from mobile platforms as having increased and will certainly increase over time.  When you have a good smartphone you do look at sites much more on the web. Having recently (within the last two years at least) redesigned our website I was somewhat reluctant to do it all over again. The homepage sort of worked for mobile. There were three large icons that could easily be clicked on to get into the site. However the rest of the site was far from optimised.

Continue reading Redesigning for mobile

Raiser’s Edge, PCI Compliance and the Dreaded, Buggy Lock Screen

There were a lot of complaints when in version 7.91 (?) of The Raiser’s Edge a major new feature was PCI compliance including a lock screen. Firstly there were issues with long running processes, global changes, imports and customisations also locking up and not continuing. There were many people who said “why?”. We don’t store credit cards and have no intention of doing so. Some of the security additions were very welcome. The previous password policy (nothing larger than 8 characters, no minimum and the ability for supervisor uses to reveal the password in security) was terrible. Even the policy of forcing users to change their password after a certain time, while annoying for the user, is an industry standard and can also be turned off.

However the lock screen is my pet peeve. I am somewhat of a different type of RE user. I am not a fundraiser (despite the many LinkedIn endorsements – thank you). I am a software developer. As a software developer I care very little for PCI compliance. Most if not all of my constituents are fictional. And yet I have no opportunity to turn off the lock screen. Most organisations that are careful about security will enforce a group policy Windows lock so that after a few minutes of Windows inactivity the screensaver comes on and returns to the password screen. Again this is a sensible precaution. As a small business I have Sage accounting software which is PCI compliant. It does not lock out.

My latest issue is that RE locks, I unlock it, it opens RE only to lock again. Or it locks, I unlock it, it opens and then something locks again. RE is open but the lock screen appears in front of it. I unlock it and, because there is not actually anything to unlock, it crashes. I don’t know what is going on but this is very annoying.

Come on Blackbaud, make the lock screen optional for all users. Not just those with non-supervisor rights (or with Windows Authentication)!

 

EDIT

It has come to my attention that I am probably in a minority position here. I regularly have a development environment open with programs that are attached to RE. This may or may not be a cause of the problem. I don’t know. I know that RE crashes when I unlock it even if I don’t have external programs attached to it. I have not been told specifically of this happening to other people so it is unfair to say that it is buggy. (By all means feel free to share your experiences in the comments). The point is I believe that the lock screen is overkill.

An upgrade to The Mergician

I am really pleased to announce an update to The Mergician that will help all UK users of The Mergician.

Previously whenever you have merged two constituents with Gift Aid Declarations the value of in the source field on the GAD has not been transferred across to the merged record.

We now do this automatically for you whenever you select to merge Gift Aid Declarations. We know how much of a pain this has been in the past where you have had to do this manually.

The Mergician is not just a global merging tool. It cleans up after the merge too where The Raiser’s Edge merge tool leaves unfinished business. The addition of the source code field being copied over adds to the feature set of The Mergician that we hope you all appreciate. Of course if you have any suggestions of improvements then we would be happy to hear them.

The upgrade to version 1.8 is available after logging into your ZeidZone account on zeidman.info for all those organisations on a maintenance plan.

Batch API – error with tempRecords is nothing

“Nothing :
Init method must be called before using this object.” My colleague was testing a new application that I have written for a client. Every so often she would tell me that this error message was appearing in the control report. Everything else appeared to work. Just what did this mean? It was one of those classic RE error messages that means nothing. When I started to debug the problem I saw the error quite soon. Again it was one of those Batch API idiosyncrasies that just needed to be dealt with.

I was creating several gifts in a batch. I was looping through the gifts and creating each one.

For Each donation In donations
    tempRecords = CType(batch.TempRecords, Blackbaud.PIA.RE7.BatchData.CTempRecords)
    PopulateOneGift(constitSysId, batch, tempRecords.Add, donation)
    tempRecords.Save()
 Next

The error occurred on the second iteration of the loop. Whenever the tempRecords.Add
was called the error was raised. This was strange because normally you get this kind of error when you have not initialized the object or done a Closedown on it. Anyway the solution to add one line before calling the Add:

For Each donation In donations
    tempRecords = CType(batch.TempRecords, Blackbaud.PIA.RE7.BatchData.CTempRecords)
    tempRecords.Reload()
    PopulateOneGift(constitSysId, batch, tempRecords.Add, donation)
    tempRecords.Save()
 Next

That seemed to fix the problem.

EDIT: or so I thought. It appears as though it worked once then failed after that. I have now resorted to saving and closing the batch after each iteration and then opening it up again at the beginning. Ah the joys of the batch API.

Contactegration – An Integration between The Raiser’s Edge and Constant Contact

We are really excited to release Contactegration. Ever since we released Chimpegration we have been bombarded with people asking us to integrate other email packages. One of the most common requests was between The Raisers Edge and Constant Contact.

The functionality is similar to Chimpegration but not exactly the same. The two APIs differ somewhat so it was difficult to reproduce exactly the same functionality. However we are very close. You can export your email addresses and merge variables to Constant Contact and you can manage the bounced emails, the unsubscribes and everyone that the email was sent to so that you update the constituent record in the same way.

One new piece of functionality that came to Chimpegration with the release of Contactegration was the ability in both applications to remove subscribers who were not part of a particular query. This is perfect for membership organisations that steer their lists from RE and want to remove subscribers who are no longer have a particular membership.

Unfortunately we are also not able to offer a free version of Contactegation. This was something we were hoping to be able to do but for reasons beyond our control we are not able to do so.

If you are interested then take Contactegration for a test drive and let us know what you think.

The Raiser’s Edge Integrated with HubSpot… A series of case studies (3)

Our integration with HubSpot came about because they thought it would be a great idea. Well who wouldn’t think it a good idea to integrate with The Raiser’s Edge. HubSpot said that they had a number clients who use both systems and being able to transfer data from HubSpot back into The Raiser’s Edge would make both systems work better together.

Continue reading The Raiser’s Edge Integrated with HubSpot… A series of case studies (3)

Attach Visual Studio to Raiser’s Edge

One of the benefits of using VBA or VB6 (probably one of the very few benefits) is the ability to easily debug code. Not that it is too difficult to debug using .NET but there are a couple of tricks that you need to know. When using VBA from within RE7 you need to do very little other than set a break point where it is needed. Using VB6 plug-ins you used to be able to just run the project and start the document (until, that is Internet Explorer stopped supporting the running of these component directly).

In .NET it is not as straight forward. Either you have to create a little application that starts the form that you are using for plug-ins or for “VBA” style macros and event based customisations you need to ensure all your files are in the RE7 plugin or custom directory and attach Visual Studio to the RE7.exe process. This is done using the Tools menu item “Attach to Process”. In the list you find RE7.exe and as long as you are loading the same version of the file in RE7 as you have open in Visual Studio you are able to debug.

One of the problems with this is that it becomes slightly difficult to debug events that happen on opening of RE7 i.e. in the application start events. It is possible that you can be quick and start the Attach to Process item and select RE7 before the application has reached the custom code but it is a pain.

What is more it seemed to me that there must be a way of automating this process so that it would be much quicker. Well I got out my automation handbook and started to program (I don’t actually have an automation handbook). I put together the following macro which does the trick. I then assigned the shortcut CTRL-ALT P (you could assign whatever you like but this is one that I assigned previously to open up the attach to process window).

 

    Sub AttachToRE7()
        Try

            Dim dbg2 As EnvDTE80.Debugger2 = DTE.Debugger
            Dim trans As EnvDTE80.Transport = dbg2.Transports.Item("Default")
            Dim dbgeng(2) As EnvDTE80.Engine

            dbgeng(0) = trans.Engines.Item("T-SQL")
            dbgeng(1) = trans.Engines.Item("Managed (v2.0, v1.1, v1.0)")

            Dim proc2 As EnvDTE80.Process2 = dbg2.GetProcesses(trans, My.Computer.Name).Item("RE7.exe")
            proc2.Attach2(dbgeng)

        Catch ex As System.Exception
            MsgBox(ex.Message)
        End Try

    End Sub