There are many points to consider and steps to take when creating programs in RE:VBA and RE:API.  Depending on the scope of the program, one small step could change the program’s entire result.  For example, you need to create a program that populates the Profile Code field in The Raiser’s Edge 7 based on a criteria set.  When you look at the Object Browser in RE:VBA, you do not find the Profile Code field, so you decide to create a constituent attribute called Profile Code.  What you may not realize is that Profile Code is actually the Religion field that was renamed in Config.  

Following are guidelines for creating applications using RE:VBA and RE:API.  This is not an absolute list as most applications created will be significantly different than the previously created ones.  

  1. What is the overall purpose of this application?  It is very important to understand the most basic purpose of the program to be created.  This may help you to suggest a better, more efficient way to run the application.
     
  2. What is the specific functionality to take place?  You will need to test the program to ensure its accuracy, so verify the exact steps you will take to run the program.
     
  3. In what order should events take place?  Should the application run automatically or as a macro?  If it runs automatically, when exactly should it happen?  When closing a record?  When saving a record?  If it runs as a macro, should it run for all records (Standard macro) or for the current record (Data Object macro)?  This information is necessary to decide in which project to place the application and, possibly, based on which event.
     
  4. To which records should this application apply?  Does it apply to all or selected constituents?  If selected constituents, is it based on an existing query?  A constituent code?  An attribute?  This group of records must be accounted for in the program.
     
  5. Are there any special formatting requirements?  For example, should a numeric field be stored as a currency in the attribute?  Will the information be stored in Upper Case or Proper Case?  How will custom forms appear?  Encourage the person requesting the application to draw an example of the custom forms’ appearance.
     
  6. What fields need to be accessed?  Define the fields and on which tabs/modules they appear.  In most cases, how the field is accessed on the front-end is the same as the back-end.

    1. Check Config/Fields to determine if the fields are required.  If they are required through the shell, then they are required through RE:VBA and RE:API.
       
    2. Check Config/Fields to determine if the fields have been renamed.  The name of the field on the front-end is not always the system name accessible through RE:VBA or RE:API.
     
  7. Does the user group have proper security to access the objects that we are using?  Check Admin/Security to determine that the user(s) accessing the application have the appropriate rights.  Rights on the front-end will follow through to rights on the back-end.  
     
  8. What references do I need to set?  If an application is written in RE:VBA, will it interface with another application such as Microsoft Excel or Microsoft Word?  If so, set the References to the respective Type Library.  Select References from the Tool menu bar and select the appropriate object library.  If the application is written in Microsoft Visual Basic with RE:API, select References from the Project menu bar.  To interface with The Raiser’s Edge 7, select Blackbaud Raiser’s Edge 7 Objects.

    Note: The interfacing software must have an existing application programming interface to attach the type library.
     
  9. What components do I need to add?  Additional controls not included in the standard Toolbox can be added to your custom form.  In RE:VBA, while the Toolbox screen is available, select Additional Controls from the Tool menu bar.  In Microsoft Visual Basic, select Components from the Project menu bar.
     
  10. What events do I need to use?  If the application should add information to a record then consider using the BeforeSave or the BeforePostRecord event.  To synchronize The Raiser’s Edge 7 with a Microsoft Access database, consider the AfterSave Event to ensure the information saved to the record.
     
  11. What objects do I need to use?  The Raiser’s Edge 7 uses Object Oriented Programming and therefore uses an object hierarchy to access objects.  To access child objects and collections, initialize the parent record first.  For example, to use the addresses collection of a constituent, use the CRecord object.  Also, most Service Objects such as the Search Screen and the CodeTablesServer require REServices to be initialized first.  
     
  12. What variables do I need to create?  Variables are necessary for each object used and for any objects needed to loop through.  You may also need additional variables such as Booleans to determine if a criterion is met, or strings to hold field values during an application.
     
  13. Do I need to create any special sub or function procedures?  If a routine will be used multiple times, consider storing it as a procedure.  The procedure can be called from the module every time it needs to be referenced.

    Depending on the program, there will be many additional considerations as well.