Scripting
What's the impact of changing my "public class QAction" to "public static class QAction"?
If there's an impact, what's the reason behind this?
Automation
What's the impact of changing my "public class Script" to "public static class Script"?
If there's an impact, what's the reason behind this?
The main thing to be aware is that static fields and properties are shared across either the entire SLAutomation or SLScripting engine. For example, static fields and properties are shared across multiple runs of the same script or QAction and get remembered as long as the DataMiner Agent or hosting process doesn't restart. Be aware that locking is needed when accessing the same static data structures from multiple simultaneously running automation scripts/QActions.
Marking a class as static indicates that it can only contain static fields, properties and methods and that no instance objects can be created for it. The compiler will complain if you would try to do add non-static fields/properties/methods.
The main difference in behavior is with the entry point into an automation script or QAction ("Run" method).
- If the Run method is marked as static, an automation script or QAction execution will not create an object instance of the class, and only static data can be accesses from within the script/QAction.
- If the Run method is non-static, an instance object will be created either per automation script run or per element run (for QActions). The script can then access both instance-level fields/properties from this instance, but can also access static fields if these are defined.
The main difference between Automation scripts and QActions is that for QActions, the instance object is re-used across QAction invocations for the same element while for Automation scripts every run creates a new temporary instance object.
I would advise to mark your class as static if you want to use the static Run method, as any instance fields/methods/properties won't make much sense in that scenario.