Skip to the content


Understanding renaming/moving files with git

Source code files are living things. We add new ones and change their content on daily basis. Occasionally we delete them, too. Git is amazingly efficient when it comes to tracking these kinds of changes.…

The post appeared first on .

How to replace DotNet in AL

A lot of us still have a ton of C/AL code sitting around in existing databases that sooner or later will have to be moved into AL. A lot of us also have a ton…

The post appeared first on .

Business Central Virtual Entities and CDS

Business Central Virtual Entities and CDS God morning, It’s been a while since I wrote and I disappeared from the communities because I was sick, Covid unfortunately hit me too. After about 17 days of severe illness, I am slowly recovering, now I feel better. Covid is a disease that I do NOT recommend to ...

L'articolo proviene da .

Migrating Control Add-ins from C/SIDE to AL

Thanks to everyone who watched my live stream today! The audience wasn’t big, but it’s a very narrow topic, not of broad interest. Still, I am glad I got a few interesting questions that actually…

The post appeared first on .

How-to: Add your notification to My Notifications

In my post I introduced a step-by-step recipe that can help you to efficiently create a (non-intrusive) notification. I gladly used the YouTube video by Daniel Rimmelzwaan to illustrate this. Doing this I stuck to his example without adding anything, but the step-by-step approach.

In this post I would like to extend the example allowing you to add your notification to My Notifications and enabling the user to turn on or off your notification. To achieve this I need to do three additional steps, continuing the numbering of the steps as introduced in .

  1. Add notification to My Notifications
  2. Create IsEnabled check method
  3. Call IsEnabled in send-or-recall method

6. Add notification to My Notifications

A notification is being added to My Notifications based on the . This can easily be achieved with a subscriber to the OnInitializingNotificationWithDefaultState publisher on the My Notifications page.

[EventSubscriber(ObjectType::PagePage::"My Notifications", 'OnInitializingNotificationWithDefaultState''', false, false)]
local procedure OnInitializingNotificationWithDefaultState()
    MyNotifications: Record "My Notifications";
        Database::"Company Information");

Note that we reuse the NotificationIdLbl  and CompanyInfoMissingNotificationMsg labels already created as part of the previous steps and that an additional label is needed.

    CompanyInfoNotificationDescriptionTxt: Label 'Show warning when the company information is not complete.';

7. Create IsEnabled check method

We need a method that determine whether the notification is enabled or not (by the user).

local procedure IsCompanyInfoNotificationEnabled(CompanyInfo: Record "Company Information")Boolean
    MyNotifications: Record "My Notifications";
    exit(MyNotifications.IsEnabledForRecord(NotificationIdLbl, CompanyInfo));

8. Call IsEnabled in send-or-recall method

And finally we need to call the IsEnabled method by adding the following tow lines to the SendOrRecallCompanyInfoMissingNotification methodthat was created in after the company record was gotten.

if not IsCompanyInfoNotificationEnabled(CompanyInfothen

Now you have a complete action plan to create a notification and enable the user to configure whether it will appear or not. Have fun.

How-to: Create Notifications – Steps to Take

In a recent VSCode/AL update training the topic , as part of , was tackled. After a short introduction of what these notifications (functionally) are about I explained and demoed how to develop them. Inviting the attendees thereafter to pose their questions, one of them, a seasoned C/SIDE developer whom I will call Bogdan, marked that he had been implementing them a couple of times and still had issues with the different parts that have to be developed. He asked: "Could you give me a clear overview on what steps I have to take?"

It was special to experience how this resonated i me as that was exactly what I ran into when preparing this part of the training. Notifications as a functional feature are efficient, simple and powerful. To code them isn't surely rocket science, but to have a clear overview what is needed and how it can be structured can indeed be somewhat muddy. Triggered by Bogdan's question I came up with the following steps:

  1. Create method NotificationId
  2. Create sender method
  3. Create recaller method
  4. Create method with send-or-recall logic
  5. Trigger send-or-recall method in event subscribers to relevant publishers

Let me elaborate on these steps by means of an example taken from Daniel Rimmelzwaan's video l.

1.Create method NotificationId

Each notification should a unique id being a Guid. For reusibility ease of use you need to create a function that will allow you to assign and retrieve this id.

local procedure NotificationId()Guid;

Note that you have to fill in your own, unique .

2.Create sender method

The code part that sets up your notification is called the . This is how it could look like:

local procedure SendCompanyInfoMissingNotification()
    CompanyInfoMissingNotification: Notification;
    CompanyInfoMissingNotification.ID := NotificationId();
    CompanyInfoMissingNotification.Message := CompanyInfoMissingNotificationMsg;
    CompanyInfoMissingNotification.Scope := NotificationScope::LocalScope;
    CompanyInfoMissingNotification.AddAction(OpenCompanyInfoTxt, Codeunit::"Notication Company Info", 'ShowCompanyInfomationWizard');

3.Create recaller method

Each sender should in general be accompanied by a recaller:

local procedure RecallCompanyInfoMissingNotification()
    CompanyInfoMissingNotification: Notification;
    CompanyInfoMissingNotification.ID := NotificationId();

4.Create method with send-or-recall logic

Given sender and recaller we can now build the send-or-recall logic that will define whether a notification should be sent or recalled.

local procedure SendOrRecallCompanyInfoMissingNotification()
    CompanyInfo: Record "Company Information";
    if (CompanyInfo.Name = '') or (CompanyInfo."E-Mail" = ''then

5.Trigger send-or-recall method in event subscribers to relevant publishers

Eventually, now having all logic in place to create a notification and determine to get it shown, the last part we need to setup is when it shouild be triggered.

[EventSubscriber(ObjectType::PagePage::"Sales Order", 'OnAfterGetCurrRecordEvent''', false, false)]
local procedure CompanyInfoMissingNotifOnAfterGetCurrRecordEvent(var Rec: Record "Sales Header")

Hope this makes sense and can be of help.

Using GitHub for DevOps

For the last 2 years we have had the Hands On Lab ( ) in a few iterations using Azure DevOps as the platform. Latest revision was published a few weeks ago. There are however...()

Live Schedule for Period Ahead

Thanks to everyone who attended my live blog yesterday, and to everyone who subscribed. It was so encouraging to see that you like this idea. As announced yesterday, my live blog will run on a…

The post appeared first on . goes live

It’s time to turn a new page. You’ve noticed that I’ve been absent for a long time. No posts, no activity. Well, blogging takes time, and I am a sort of a perfectionist. Writing posts…

The post appeared first on .

Business Central V17.1 fails your pipeline .. and that’s OK

A few days ago, we upgraded our product from 17.0 to 17.1. We had been looking forward to this release, because we usually never release a product or customer on an RTM release of Business Central. So .. finally 17.1, finally we could continue to upgrade the product and start releasing this to customers before …