Notifications from Customisations
The Notification Framework in TallyPrime provides a system-driven way to surface important alerts, reminders, and actionable insights to users. This has been introduced in Release 5 and it enabled system-level notifications. Starting from Release 7, the framework has been extended to allow developers to create, trigger, and manage custom notifications using TDL.
The notification capability can be used in various scenarios, such as alerting users about pending invoices, stock shortages, or overdue payments. It can also display reminders for scheduled backups or report exports, helping users stay on top of routine tasks. Additionally, notifications can inform users about the status of external integrations or data synchronization, ensuring visibility into connected systems. For third-party or ISV extensions, solution-specific alerts can be delivered to enhance usability and keep users informed in real time.
Definition – Notification
The Notification definition enables developers to configure how notifications are created, displayed, and interacted within the system. This framework allows you to:
- Define custom notifications.
- Raise notifications programmatically.
- Manage user interactions (snooze, dismiss, persist).
- Track notification state across companies and application sessions.
The attributes of Notification definition allow for greater flexibility in how and when notifications are triggered.
Key Behavior:
- If the base frequency attribute is present then the notification behaves like a Right Button, appearing consistently based on the defined frequency.
- If the base frequency attribute is not present, the notification uses the extended attributes described below to determine its behaviour and display conditions.
Syntax
[Notification: <Definition Name>]
Where, <Definition Name> is the name of the notification.
Example:
[Notification : My Custom Alert]
Notification Attributes
Attributes – Activity Name and Activity ID
These attributes specify the name and ID of the notification as it will appear in the Notification Report and the Allow/Disallow Notifications from Customizations report.
Each notification is uniquely identified by the combination of Activity Name and Activity ID.
Syntax
[Notification: <Definition Name>]
Activity Name : <Notification Display Name >
Activity ID : < ID Number>
Where,
<Definition Name> is the name of the notification definition.
<Notification Display Name > is the display name or activity name for the notification report.
<ID number> is the identification number for the activity ID.
Attribute – Activity Description
This attribute provides a brief, user-friendly summary shown under the Description column in the Allow/Disallow Notifications from Customizations report. It helps users clearly understand the purpose of each notification before allowing or disallowing it. This is a mandatory attribute for Notification definition.
Syntax
[Notification: <Definition Name>]
Activity Description: <Description Name>
Where, <Description Name> is the description used to describe the notification.
Attribute – IsCompanyNotify
This attribute is specified to check whether the notification to be displayed at company level or application level. The default value of this attribute is Yes, i.e., at company level.
Syntax
[Notification: <Definition Name>]
IsCompanyNotify: <Logical Expression>
Where,
<Logical Expression> can be any expression which evaluates to a logical value.
Attribute – Handler
This attribute specifies a TDL function to be triggered when the user presses Enter on a notification. The function returns a value that determines how the notification should be handled. The possible return values and their actions are:
- No Action – Keep the notification unchanged.
- Mark as Read – Update the notification status to “read.”
- Dismiss – Remove the notification from the list.
- Acted – Indicate that a relevant action has been performed for the notification.
- Snooze – Temporarily hide the notification to reappear later.
The return value directly controls the system’s behavior when the notification is activated. This is a mandatory attribute for defining a notification.
Syntax
[Notification: <Definition Name>]
Handler: <Function Name>
Where,
<Function Name> is the name of the TDL function.
Attributes – Type and Persist
The attribute Type specifies the type of the notification. The type of notification can be Normal, Non-Dismissible, No-read, No-read-no-dismiss. The default value will always be Normal.
Syntax
[Notification: <Definition Name>]
Type: <Notification Type>
Where,
<Notification Type> can be any of the following values: Normal, Non-Dismissible, No-read, No-read-no-dismiss.
The attribute Persist checks whether the notification to be temporarily held in memory or persisted across sessions.
- In-Memory: The notification stays visible only while TallyPrime is running. It will disappear once TallyPrime is closed.
- Persist: The notification is saved and will continue to appear in the Notification Report even after TallyPrime is closed and restarted.
Syntax
[Notification: <Definition Name>]
Persist: <Logical Value>
Where,
<Logical Value> can be any expression which evaluates to logical value.
Attributes – Snooze Type and Snooze Value
Snooze Type attribute specifies the duration of snooze for a particular notification. If a user snoozes a notification that when will the notification be shown again will be determined by the value for this attribute.
The values for Snooze Type can be
- Next Reminder Date
- Next Product Release
Syntax
[Notification: <Definition Name>]
Snooze Type : <Next reminder date/Next product release>
Where, <Next reminder date/Next product release> specifies the duration for when the notification should reappear.
Snooze Value attribute will become mandatory only if the attribute Snooze type has value “Next reminder date”. The value will specify the time for which the notification is snoozed.
This attribute is mandatory if Snooze Type given is “NextReminderDate”. And hence is valid only if Snooze type is NextReminderDate.
Syntax
[Notification: <Definition Name>]
Snooze Value : <Snooze Duration>
Where, <Snooze Duration> specifies number of seconds which takes a unique value and it must be a positive long integer.
Attributes – Raise New and Expiry Controls
Raise New attribute will be used to specify if a new notification can be raised if the present notification already exists on the notification report. This attribute takes logical value Yes/No
This is different from “grouped” notifications, in which case the “time stamp” gets altered to whenever a notification is raised.
This will be ignored if “Grouped” is “yes”
Syntax
[Notification: <Definition Name>]
Raise New : <Logical Condition>
Where, <Logical Condition> is an expression that evaluates to a logical value (Yes/No).
Expiry Relative attribute will be used to specify whether the expiry of a particular notification is related to some other notification or is it absolute. Absolute means that the notification expiry will have no dependency on the other notifications and will follow a fixed criteria for expiry.
Syntax
[Notification: <Definition Name>]
Expiry Relative : <Logical Condition>
Where, <Logical Condition> is an expression that evaluates to a logical value (Yes/No).
Expiry Date Time attribute will be used to specify the exact date and time for expiring the notification, but only if Expiry Relative is set to No. If this attribute is not provided, the Expiry Relative setting will be ignored. If Expiry Relative is ‘No’, then this is mandatory. The value for this attribute will be “Date and Time”
Syntax
[Notification: <Definition Name>]
Expiry Date Time : <Date and Time>
Where, <Date and Time> specifies the absolute date and time for the notification to expire.
Expiry Duration attribute will be used to specify the duration after which the notification should expire, but only if Expiry Relative is set to Yes. If this attribute is not provided, the Expiry Relative setting will be ignored.
It takes two arguments:
- The expiry duration, calculated from the time the notification is raised.
- (Optional) The unit of expiry — Week(s), Day(s), Hour(s), Minute(s), or Second(s). The default unit is Day
Syntax
[Notification: <Definition Name>]
Expiry Duration : <Duration>
Where, <Duration> specifies the expiry duration that will be calculated from the time the notification is raised.
Example
[Notification: CustomNotification]
Activity Name : CustomNotification
Activity Description : Alert for pending invoice approvals
Type : Normal
Persist : Yes
Snooze Type : Duration
Snooze Value : 1:Day
Expiry Duration : 3:Days
Handler : MyNotificationHandler
Accessing Notifications
Use TDL collections to fetch notifications.
|
Collection |
Scope |
Usage |
|
AppLevelNotifications |
Application-level |
Fetches all notifications at application level. |
|
CompanyLevelNotifications |
Company-specific |
Fetches notifications for all loaded companies. |
|
AllNotifications |
Global |
Fetches every notification in system.(application level & all loaded companies) |
|
NotificationByCompany |
Targeted |
Fetches notifications by company name. |
Example
[Collection : Company Notifications]
Type : Notification
Source Collection : CompanyLevelNotifications
Actions
Actions – RaiseNotification and DeleteNotification
The action RaiseNotification is a global action used to open or raise a notification report and use this specifically where notification-related behavior is required. The return value is a BOOLEAN, which denotes whether the notification is raised or not.
This action takes 2 parameters
- Parameter 1: It specifies the name of the TDL notification.
- Parameter 2: It specifies the text to be displayed for a notification.
Both the parameters are mandatory
Syntax
[Function: <Function Name>]
Action: RaiseNotification:<Notification Name>:<String Expression>
Where,
<Notification Name> is the name of the notification.
<String Expression> can be an expression which evaluates to a string.
DeleteNotifications action is used to delete all notifications associated with a specific notification activity type. It is a global action, meaning it can be invoked across the application context to clear relevant notifications system-wide.
This action takes one parameter
- Parameter: Provides the name of the TDL notification activity to be deleted.
It is a mandatory parameter.
Syntax
[Function: <Function Name>]
Action: DeleteNotification: <Notification Name>
Where,
<Notification Name> is the name of the notification.
Example
[Notification : Backup Reminder]
Activity Name : BackupReminder
Description : It’s been 7 days since your last data backup.
Type : Info
Persist : Yes
Snooze Type : Duration
Snooze Value : 1:Day
Expiry Duration : 5:Days
….
….
[Button : Raise Backup Reminder]
Key : F8
Action : RaiseNotification : BackupReminder
Best Practices
- Define reusable handlers – write common handler functions for repeated logic.
- Use logical grouping – e.g., “Accounts”, “Inventory”, “System” for better organization.
- Set expiry and snooze wisely – avoid overwhelming users with persistent alerts.
- Avoid duplicates – use Delete All Previous attribute before raising new notifications.
- Validate snooze/expiry conditions thoroughly.
Troubleshooting
|
Issue |
Possible Cause |
Solution |
|
Notification not appearing |
Invalid activity name or missing raise action |
Verify name and trigger code |
|
Handler not executing |
Function not defined or mismatched name |
Check Handler definition |
|
Notification persists after expiry |
Expiry not defined or persist set to “Yes” |
Set Persist : No or define expiry duration |
|
Multiple duplicate alerts |
Missing delete action |
Use Delete All Previous : Yes |
Summary
This capabilty gives developers complete control to design meaningful, contextual, and actionable notifications for users. By defining and raising notifications programmatically, you can improve visibility, automate reminders, and enhance user engagement within custom solutions.
