Today in this post we will discuss about Notification and how to implement.
First let us see, what are Notifications?
- Non-intrusive message
- Differs from the message initiated by the MESSAGE method.
- Contextual
- You can specify up to 4 actions
- User can ignore and continue to work, doesn’t lock the user for immediate response.
- Works with any client
Messages are modal, which means users are typically required to address the message and take some form of corrective action before they continue working. On the other hand, notifications are non-modal. Their purpose is to give users information about a current situation, but do not require any immediate action or block users from continuing with their current task.
Tips for Create Notifications
- Always use a unique ID, can be any GUID
- ADDACTION points to a function
- Arguments are case-sensitive literal
- Functions must be global
- Function must accept a Notification as parameter
- Use SETDATA and GETDATA to exchange information between the sending and handling function.
Using Notification and NotificationScope data types and methods you can add code to send notifications to the users.
var
MyNotification : Notification;
Available methods are as below:
Method | Description |
MESSAGE | Specifies the content of the notification that appears in the UI.
MyNotification.Message := ‘This will be shown as Notification’ |
SCOPE | Specifies the scope in which the notification appears.
MyNotification.SCOPE := NOTIFICATIONSCOPE::LocalScope; |
SEND | Sends the notification to be displayed by the client.
MyNotification.SEND |
ADDACTION | Adds an action on the notification.
MyNotification.ADDACTION(‘Action 1’, CODEUNIT::”My Action Handler Codeunit”, “RunMyAction1’); |
SETDATA | Sets a data property value for the notification
MyNotification.SETDATA(‘CustomerNo’,Customer.”No.”); |
GETDATA | Gets a data property value from the notification.
MYNotification.GETDATA(‘CustomerNo’); |
RECALL | Recalls a sent notification. |
Without going further any more in theory, let’s check how we can enable Notification.
Step – 1
Create a Codeunit to handle the Actions for Notification.
As usual we create a new Codeunit in our Extension Project.
codeunit 50101 NotificationRaiseAndHandel
Step – 2
Raise the Notification
You can Raise the Notification on Specific Page or can subscribe to the Events of that Page and write your code.
I am using the Subscription way to Raise my Notification.
For Demo purpose I am subscribing to OnOpen Event of the Page, in actual you need to decide from which action/event you wish to raise this Notification.
Code are self-explanatory, so no need special commentary.
- I am checking for Company Info Setup we created in our earlier post if it is complete or not and then inform user about you Company Information is not completed and give him the option if he wish to complete that activity.
[EventSubscriber(ObjectType::Page, Page::”Sales Order”, ‘OnOpenPageEvent’,
”, true, true)]
local procedure CheckCompanyInfo(var Rec: Record “Sales Header”)
var
CompInfo: Record “Company Information”;
MyNotification: Notification;
begin
if compinfo.get then
if (compinfo.name <> ”) and (compinfo.”E-Mail” <> ”) then
EXIT;
MyNotification.Id := FORMAT(CreateGuid, 0, 9);
MyNotification.Scope := NotificationScope::LocalScope;
MyNotification.Message := ‘Company Information Incomplete.’;
MyNotification.AddAction(‘Open Company Information’, 50101,
‘DisplayCompanyInfoWizard’);
MyNotification.Send;
end;
- I am checking the Credit Limit of the customer if it is low, attracting attention towards it and giving him chance to update the Credit Limit.
[EventSubscriber(ObjectType::Page, Page::”Sales Order”, ‘OnOpenPageEvent’,
”, true, true)]
local procedure CheckCreditBalance(var Rec: Record “Sales Header”)
var
Customer: Record Customer;
MyNotification: Notification;
Text001: TextConst ENU = ‘Balance Exceeds Credit Limit.’;
Text002: TextConst ENU = ‘Wish to change Credit Limit?’;
begin
Customer.Get(Rec.”Sell-to Customer No.”);
Customer.CalcFields(“Balance (LCY)”);
if Customer.”Balance (LCY)” > Customer.”Credit Limit (LCY)” then begin
MyNotification.Message(Text001);
MyNotification.Scope := NotificationScope::LocalScope;
MyNotification.SetData(‘CustomerNumber’, Customer.”No.”);
MyNotification.AddAction(Text002, 50101, ‘OpenCustomer’);
MyNotification.Send;
end;
end;
Step – 3
Handle the Action
Write the procedure which will respond to Actions.
procedure DisplayCompanyInfoWizard(MyNotification: Notification)
var
CompInfo: Record “Company Information”;
begin
Page.Run(Page::CompanyInfoWizard);
end;
procedure OpenCustomer(MyNotification: Notification)
var
CustomerNo: Text;
Customer: Record Customer;
CustomerCard: Page “Customer Card”;
begin
CustomerNo := MyNotification.GetData(‘CustomerNumber’);
if Customer.Get(CustomerNo) then begin
CustomerCard.SetRecord(Customer);
CustomerCard.RunModal;
end else begin
ERROR(‘Customer %1 not found.’, CustomerNo);
end;
end;
Here is the complete Code:
Step – 4
Publish the Extension
To Publish choose AL:Publish from command Pallet.
Step – 5
Test the Solution.
Open the Sales Order Page and you will see the Message as shared above. Keep in mind this is just for demo, this is not the right place from where such Notifications will be raised, in real scenario you need to raise these Notifications from appropriate action/event. Now you know the basics can build your own logic around.
Will come up with some more Development Tips in my future posts.
Enjoy coding and learning. Take Care of yourself.
You must be logged in to post a comment.