VBA
115
In this code sample, we use the AfterSave event to notify the Director of Development of any gifts over $1000.00. 
This code also updates MajorDonors.Mdb and adds the Major Donor constituent code to the constituent record. 
The code below is placed in the AfterSave() event of the ActiveGift object.
Public Sub Gift_AfterSave(oRecord As Object)
'All gifts over $1,000 will designate a constituent as a Major Donor.  If 
'    the person is a Major Donor, then
'    1) We need to add the donor to our MajorDonors.Mdb
'    2) If it's a new major donor, we need to notify the 
'           Director of Development
'    3) We need to add the Constituent Code of Major Donor if 
'           it's not already there
'The module level variable mbNotifyDOD was set in the Before_Save Event
'  Since we only notify the DoD for new Major Donors, we know we need to 
'  add the donor to the MajorDonors.Mdb
Dim oGift As CGift
Set oGift = oRecord
If mbNotifyDOD then
'Send the email message
Dim oOutlook As Outlook.Application
Set oOutlook = CreateObject("Outlook.Application")
Dim oMailItem As MailItem
Set oMailItem = oOutlook.CreateItem(olMailItem)
With oMailItem
.To = "Director.of.Development@YourOrganiation.com"
.Subject = "Major Gift Alert"
Pdf searchable text converter - search text inside PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn how to search text in PDF document and obtain text content and location information
how to search text in pdf document; search multiple pdf files for text
Pdf searchable text converter - VB.NET PDF Text Search Library: search text inside PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn How to Search Text in PDF Document and Obtain Text Content and Location Information in VB.NET application
pdf searchable text converter; how to select all text in pdf
C
HAPTER
2
116
.Body = oGift.Constituent.Fields(RECORDS_fld_FULL_NAME) & " (" & _
oGift.Constituent.Fields(RECORDS_fld_CONSTITUENT_ID) & _
") has given a gift of " & _
Format$(oGift.Fields(GIFT_fld_Amount), "$###,##0.00") & _
" to the " & _
oGift.Fields(GIFT_fld_Fund) & ". Please call to thank them."
.Send 
'Sends the email without user intervention
End With
Set oMailItem = Nothing
Set oOutlook = Nothing
'Update the MajorDonors.MDB
Dim oMDB As Database
Dim oMajorDonor As Recordset
Set oMDB = OpenDatabase("d:\MajorDonors.mdb")
Set oMajorDonor = oMDB.OpenRecordset("Constituents")
With oMajorDonor
.AddNew
.Fields("Donor_ID") = oGift.Constituent.Fields(RECORDS_fld_ID)
.Fields("Donor_Name") = oGift.Constituent.Fields(RECORDS_fld_FULL_NAME)
.Fields("Total_Amount") = oGift.Fields(GIFT_fld_Amount)
.Update
End With
'Clean up
oMajorDonor.Close
Set oMajorDonor = Nothing
oMDB.Close
Set oMDB = Nothing
End If
C# PDF Convert to Text SDK: Convert PDF to txt files in C#.net
document to editable & searchable text file. Different from other C# .NET PDF to text conversion controls, RasterEdge C# PDF to text converter control toolkit
convert a scanned pdf to searchable text; make pdf text searchable
Online Convert PDF to Text file. Best free online PDF txt
document to editable & searchable text file. Different from other C# .NET PDF to text conversion controls, RasterEdge C# PDF to text converter control toolkit
cannot select text in pdf; searching pdf files for text
VBA
117
The CloseRecord Event
The CloseRecord event fires just before the active data object and UI form closes. This gives you the opportunity to 
close down any objects you may have open when using this record.
In the MajorDonors example, we opened and closed the MajorDonors.Mdb whenever it was needed. You may 
want to open this database only once in the Before_Open event, and then close it here. 
The BeforeDelete Event
The BeforeDelete event fires just before the active data object is to be deleted. This allows you to check any 
Business Rules specific to your organization and cancel the delete process if needed.
The event passes oRecord that represents the active object and bCancel that, if set to True, cancels the delete 
operation and returns focus to the active form. The oRecord object is already initialized, so there is no need to call 
the Init method or the CloseDown method at the end of your subroutine.
'Add the constituent code.
'The module level variable mbAddMajorDonorCC was set in the Before_Save Event
If mbAddMajorDonorCC Then
Dim oConstituentCode As CConstituentCode
Set oConstituentCode = oGift.Constituent.ConstituentCodes.Add
oConstituentCode.Fields(CONSTITUENT_CODE_fld_CODE) = "Major Donor"
oGift.Constituent.Save
End If
Set oConstituentCode = Nothing
Set oGift = Nothing
End Sub
VB.NET PDF Convert to Text SDK: Convert PDF to txt files in vb.net
Text in any PDF fields can be copied and pasted to .txt files by keeping VB.NET control for batch converting PDF to editable & searchable text formats.
how to make pdf text searchable; search a pdf file for text
VB.NET Image: Robust OCR Recognition SDK for VB.NET, .NET Image
for VB.NET provides users fast and accurate image recognition function, which converts scanned images into searchable text formats, such as PDF, PDF/A, WORD
convert pdf to searchable text; search pdf for text
C
HAPTER
2
118
In this example, we display a message indicating the constituent to be deleted is a recent donor. Place this code 
sample in the BeforeDelete event of the ActiveConstituent record.
The AfterDelete Event
The AfterDelete event fires after a record has been deleted. The event passes both the Record ID and the Import ID 
from the record that was deleted. Both of these fields are unique and provide a way to identify the deleted record.
Private Sub Constituent_BeforeDelete(oRecord As Object, bCancel As Boolean)
Dim lResult As Long
Dim oMDB As Database
Dim oMajorDonor As Recordset
Set oMDB = OpenDatabase("d:\MajorDonors.mdb")               
Set oMajorDonor = oMDB.OpenRecordset("Constituents")      
With oMajorDonor
.Index = "PrimaryKey"
.Seek "=", oRecord.Fields(RECORD_fld_ID)
If Not .NoMatch Then 
lResult = MsgBox("This constituent is a major donor. _
Are you sure you want to delete this record?", vbYesNo)
If lResult = vbNo then bCancel = True
End if
End With
oMajorDonor.Close
Set oMajorDonor = Nothing
oMDB.Close
Set oMDB = Nothing
End Sub
C# Create PDF Library SDK to convert PDF from other file formats
The PDF document file created by RasterEdge C# PDF document creator library is searchable and can be fully populated with editable text and graphics
how to select text in pdf; search text in pdf image
C# PDF: C# Code to Draw Text and Graphics on PDF Document
Draw and write searchable text on PDF file by C# code in both Web and Windows applications. C#.NET PDF Document Drawing Application.
how to select text in a pdf; text searchable pdf
VBA
119
This example opens the Microsoft Access database called MajorDonors.Mdb and deletes a record if it exists. This 
code should be placed in the AfterDelete event of the ActiveConstituent object. 
Active Process Objects
In addition to top level data objects, you can access and control certain processes using VBA. Through these service 
objects, you access BatchMailReports, and Import. The specific events provided vary based on the process. 
However, in general, you can act before and after the process and to handle exception processing.
Private Sub RaisersEdgeRecord_AfterDelete(lDatabaseID As Long, sImportID As String)
Dim oMDB As Database
Dim oMajorDonor As Recordset
Set oMDB = OpenDatabase("d:\MajorDonors.mdb")               
Set oMajorDonor = oMDB.OpenRecordset("Constituents")      
With oMajorDonor
.Index = "PrimaryKey"
.Seek "=", lDatabaseID
If Not .NoMatch Then .Delete
End With
oMajorDonor.Close
Set oMajorDonor = Nothing
oMDB.Close
Set oMDB = Nothing
End Sub
VB.NET Create PDF from Text to convert txt files to PDF in vb.net
Best VB.NET adobe text to PDF converter library for Visual Studio .NET project. Batch convert editable & searchable PDF document from TXT formats in VB.NET
search pdf for text in multiple files; pdf text searchable
C# Create PDF from Text to convert txt files to PDF in C#.net, ASP
PDF converter SDK for converting adobe PDF from TXT in Visual Studio .NET project. .NET control for batch converting text formats to editable & searchable PDF
how to search pdf files for text; select text in pdf reader
C
HAPTER
2
120
VBA Support in Batch
VBA in Batch provides four events so you can programatically access gift or constituent records before they are 
committed to the database. You can also create exceptions for constituents or gifts you do not want to commit to 
the database. You can specify the exception message so your end-users are able to determine what is wrong with 
the record. You can even make changes to a record that was previously an exception and instruct Batch to try 
again. The diagram below shows these events and the order in which they fire.
In the following sections, we use the Batch events to maintain a batch history database. It keeps track of each gift 
batch posted; including who posted it, the total gift amounts posted, and the total gift amounts that were exceptions.
The BeforePost Event
The BeforePost event fires once, just before the process to commit the records to the database begins. This way, 
you can set up any processes you want in place for processing the batch. For example, if you are transferring data 
from the batch to an external database, you can use this event to connect to that database.
E1. BeforeCommit
E2. BeforeCommitRecord (If bCancel is set to True cancel the posting of this record and save 
the custom exception message to be shown later on the exception report)
If there was an exception or bCancel was set to True in the BeforeCommitRecord then 
E3. HandleException (If bRetry set to True, return to step E2)
E4.AfterCommit
VB.NET PDF Convert to HTML SDK: Convert PDF to html files in vb.
less searchable for search engines. The other is the crashing problem when user is visiting the PDF file using web browser. Our PDF to HTML converter library
select text in pdf; convert pdf to searchable text online
VB.NET Create PDF from Word Library to convert docx, doc to PDF in
Export all Word text and image content into high quality PDF without losing formatting. Easy to create searchable and scanned PDF files from Word.
select text in pdf file; convert pdf to word searchable text
VBA
121
The event passes sBatchName. This is a string that represents the batch number of the batch in progress. It also 
passes lBatchType, from the enum bbVBABatchTypes, which tells you if this is a constituent, gift, or time sheet 
batch. The last parameter is bCancel that, if set to True, discontinues the entire committing process.
The BeforePostRecord Event
The BeforePostRecord event fires just before each row in the batch is committed to the database. This way, you 
can access the underlying data object after it has been created, but before it adds to the database. You can pass 
some of this information to a separate database or you can verify that specific Business Rules for your organization 
have been met. If the rules are not met, you can stop this record from being committed to the database.
The event passes sBatchName. This is a string that represents the batch number of the batch in progress. It also 
passes lBatchType, from the enum bbVBABatchTypes, which tells you if this is a constituent, gift, or time sheet 
batch. The next parameter is oDataObject. This variant is either of type CRecord, CGift, or CTimeSheet, 
depending on the batch type. You can access the entire object model for that object type at this time. You can 
change information, use VB to make a calculation and add that information to the record, or check to make sure all 
the information is entered according to your organization’s Business Rules.
If you do not want this particular record to add to the database, you can set bCancel equal to True. The record does 
not add to the database and lists as an exception on the Exception Report. You can even set sExceptionMessage 
equal to the reason for the exception so it prints on the Exception Report and shows your end-user what is wrong 
with the record. Any time a record is flagged as an exception, “The HandleException Event” on page122 fires.
Private Sub BatchVBARecord_BeforePost(ByVal sBatchName As String, _
ByVal lBatchType As bbVBABatchTypes, _
bCancel As Variant)
On Error GoTo BatchVBARecord_BeforePost_Error
'Only keep history for Gift batches
If lBatchType = bbBatchType_Gift Then
'moDB is a module level Database variable 
'  (requires a reference to a Microsoft DAO Library)
Set moDB = OpenDatabase("d:\BatchHistory.mdb")
'mbMaintainHistory is a module level boolean variable
mbMaintainHistory = True
End If
Exit Sub
BatchVBARecord_BeforePost_Error:
'Don't let them run batch unless they can access the history file
mbMaintainHistory = False
MsgBox "Error opening BatchHistory.MDB.  Please see your system administrator"
'Setting bCancel to TRUE will cancel the post process
bCancel = True
End Sub
C
HAPTER
2
122
To continue with the previous example, here we use the BeforePostRecord event to total the dollar amount of cash 
gifts posted and other gifts posted.
The HandleException Event
The HandleException event fires whenever a record in the batch is flagged as an exception. This way, you can 
change the record to correct the cause of the exception and try again. If you transferred information for each record 
to an external database in the BeforeCommitRecord event, you may want to remove that information using this 
event.
The event passes sBatchName. This is a string that represents the batch number of the batch in progress. It also 
passes lExceptionCode, from the enum bbVBABatchExceptionCodes, which tells you the reason for the exception. 
The next parameter is oDataObject. The variant is either the type CRecord, CGift, or CTimeSheet, depending on 
the batch type. You can access the entire object model for that object type at this time. The last parameter is 
bTryAgain. If set to True, TheRaiser’s Edge attempts to commit the updated record to the database again. It is 
important to make sure the cause of the exception has been corrected so there is no possibility of an end-user 
getting caught in a loop.
Private Sub Batch_BeforePostRecord(ByVal sBatchName As String, _
ByVal lBatchType As bbVBABatchTypes, _
oDataObject As Variant, _
bCancel As Variant, _
sExceptionMessage As Variant)
Dim oGift As CGift
'mbMaintainHistory is a module level boolean variable
If mbMaintainHistory Then
'Since this is a Gift batch, oDataObject is returned as a CGift object
'  Creating a CGift object is not necessary, but allows the Intelisense 
'  feature of VBA to recognize the object.
Set oGift = oDataObject
With oGift
If .Fields(GIFT_fld_Type) = "Cash" Then
mcurPostedCash = mcurPostedCash + .Fields(GIFT_fld_Amount)
Else
mcurPostedOther = mcurPostedOther + .Fields(GIFT_fld_Amount)
End If
End With
Set oGift = Nothing
End If
End Sub
VBA
123
Using the HandleException event, you can total the dollar amount of cash gifts and other gifts that are exceptions.
Private Sub BatchVBARecord_HandleException(ByVal sBatchName As String, _
ByVal lExceptionCode As _
bbVBABatchExceptionCodes, _
oDataObject As Variant, _
bTryAgain As Variant)
Dim oGift As CGift
Const DEFAULT_FUND = 99
--------------------------------------------------------------------------------
'mbMaintainHistory is a module level boolean variable
If mbMaintainHistory Then
'Since this is a Gift batch, oDataObject is returned as a CGift object
'  Creating a CGift object is not necessary, but allows the Intelisense 
'  feature of VBA to recognize the object.
Set oGift = oDataObject
With oGift
'We can check the exception codes and try again if we can 
'  correct the problem
If lExceptionCode = bbBex_FundNotFound AND _
.Fields(GIFT_fld_Fund) <> DEFAULT_FUND Then
'In this case, we have a default fund set up to catch gifts 
'  where the fund was deleted between the time the batch 
'  was created and when it was posted
'Fix the fund
.Fields(GIFT_fld_Fund) = DEFAULT_FUND
'Set bTryAgain and the system will again try to post the gift
bTryAgain = True
C
HAPTER
2
124
The AfterPost Event
The AfterPost event fires once after the entire committing process is complete. This way, you can “clean up” any 
objects or connections to other databases you use while the batch processes. You may also want to use this event to 
begin the acknowledgement process for gifts or to prepare a welcome letter for new constituents.
The event passes sBatchName. This is a string that represents the batch number of the batch in progress. The event 
also passes two longs; lNumRecsPosted and lNumExceptions. These represent the number of records that add 
successfully and the number of records that are exceptions, respectively.
Else
'Sum the exception amounts
If .Fields(GIFT_fld_Type) = "Cash" Then
mcurExceptionCash = mcurExceptionCash + _
.Fields(GIFT_fld_Amount)
Else
mcurExceptionOther = mcurExceptionOther + _
.Fields(GIFT_fld_Amount)
End If
End If
End With
Set oGift = Nothing
End If
End Sub
Documents you may be interested
Documents you may be interested