Hi experts
I am wondering if there are any recommendations about using global variables in single instance codeunits in Business Central/NAV. Generally, in modern object oriented programming defining and using global variables should be avoided at all costs.
Are there any official guidelines for BC?
Here is an example where it is really tempting to use single instance codeunit global variables: I am using two subscribers - OnValidate Qty on Warehouse Receipt Line (1) and OnValidate Qty on Purchase Line (2).
(1) should update values on both Warehouse Receipt Line and on Purchase Line.
(2) should update only values on Purchase Line.
The problem is that when I call (1), it triggers my code in subscriber (2) - I don't want to do that. I don't have a handled boolean here in parameters, as those are standard OnValidate triggers.
What is the best approach? Is using single instance codeunit global variables a no-go here?
Answers
In tis case i:
1. create global variable (SkipTrigger) in Purchase Line
2. Create function SetSkipTrigger to set value for global variable SkipTrigger
3. Create function GetSkipTrigger to get value for global variable SkipTrigger
4. In (1) before update value in Qty field I set skipTrigger on TRUE. (Rec.SetSkipTrigger);
5. In (2) if Rec.GetSkipTrigger = TRUE then EXIT;
and I don't like to use single Codeunit in this case.
Still wondering if there are any recommendations about single instance codeunit, anyone else?