I have a Message BO that has a relationship to the Person BO and I assign the Message Subject and Body attributes to the Notification object.
This is the code I use to swap the tokens with data in a rule of the Message BO.
Message.Subject=REPLACE_PATTERN(Message.Subject,'\{FirstName\}',Message.Person.FirstName)
Message.Subject=REPLACE_PATTERN(Message.Subject,'\{LastName\}',Message.Person.LastName)
Message.Subject=REPLACE_PATTERN(Message.Subject,'\{EmailAddress\}',Message.Person.EmailAddress)
Message.Subject=REPLACE_PATTERN(Message.Subject,'\{EventName\}',Message.Person.Event.Subject)
Message.Subject=REPLACE_PATTERN(Message.Subject,'\{StartDay\}','<<Message.Person.Event.StartTime,EEEE>>')
Message.Subject=REPLACE_PATTERN(Message.Subject,'\{StartDate\}','<<Message.Person.Event.StartTime,d MMMM yyyy>>')
Message.Subject=REPLACE_PATTERN(Message.Subject,'\{StartTime\}','<<Message.Person.Event.StartTime,h:mma>>')
Message.Subject=REPLACE_PATTERN(Message.Subject,'\{FinishDay\}','<<Message.Person.Event.EndTime,EEEE>>')
Message.Subject=REPLACE_PATTERN(Message.Subject,'\{FinishDate\}','<<Message.Person.Event.EndTime,d MMMM yyyy>>')
Message.Subject=REPLACE_PATTERN(Message.Subject,'\{FinishTime\}','<<Message.Person.Event.EndTime,h:mma>>')
Message.Body=REPLACE_PATTERN(Message.Body,'\{EventDescription\}',Message.Person.Event.Description)
Message.Body=REPLACE_PATTERN(Message.Body,'`',SystemSettings.DoubleQuote)
Message.Body=REPLACE_PATTERN(Message.Body,'\{FirstName\}',Message.Person.FirstName)
Message.Body=REPLACE_PATTERN(Message.Body,'\{LastName\}',Message.Person.LastName)
Message.Body=REPLACE_PATTERN(Message.Body,'\{EmailAddress\}',Message.Person.EmailAddress)
Message.Body=REPLACE_PATTERN(Message.Body,'\{EventName\}',Message.Person.Event.Subject)
Message.Body=REPLACE_PATTERN(Message.Body,'\{StartDay\}','<<Message.Person.Event.StartTime,EEEE>>')
Message.Body=REPLACE_PATTERN(Message.Body,'\{StartDate\}','<<Message.Person.Event.StartTime,d MMMM yyyy>>')
Message.Body=REPLACE_PATTERN(Message.Body,'\{StartTime\}','<<Message.Person.Event.StartTime,h:mma>>')
Message.Body=REPLACE_PATTERN(Message.Body,'\{FinishDay\}','<<Message.Person.Event.EndTime,EEEE>>')
Message.Body=REPLACE_PATTERN(Message.Body,'\{FinishDate\}','<<Message.Person.Event.EndTime,d MMMM yyyy>>')
Message.Body=REPLACE_PATTERN(Message.Body,'\{FinishTime\}','<<Message.Person.Event.EndTime,h:mma>>')
This is the code I send the notification with
CREATE OutgoingEmail WITH OutgoingEmail.Subject=Message.Subject,OutgoingEmail.Message=Message.Body
FIND Registration WHERE Registration=Message.Person
SEND OutgoingEmail TO Registration
I actually keep the Messages as an archive related to each person for future reference.