Conditional compilation using preprocessor conditions
Conditional compiling of program code is integrated into One Identity Manager. Conditional compilation allows parts of the program code to be parsed whereas other parts remain untouched.
Conditional compiling has the following advantages:
-
Assemblies are reduced in size
-
Structures the system configuration
-
Improves clarity for the model and permissions
-
Speeds up processing
-
Hides unnecessary data in all VB.Net expressions
-
Hides unnecessary model components
Conditional compiling in One Identity Manager is controlled using preprocessor conditions. Preprocessor conditions can be used in:
NOTE: Preprocessor conditions help stop the module being disabled. For example, SQL procedures and triggers are still run even if the objects are disabled by preprocessor conditions. To disabled a module, remove the module from the One Identity Manager database. For more information about removing modules, see the One Identity Manager Installation Guide.
Configuration parameters and their options define the possible preprocessor conditions. In order to become effective on a system-wide basis, every modification to preprocessor relevant configuration parameters as well as modifications to preprocessor conditions on objects and VB.Net expressions requires the One Identity Manager database to be recompiled.
Detailed information about this topic
Preprocessor-relevant configuration parameters
IMPORTANT: The One Identity Manager database needs to be recompiled every time a preprocessor-relevant configuration parameter and its options are changed.
The Preprocessor relevant parameter option is used to label a configuration parameter as preprocessor relevant. A preprocessor expression is entered in the associated configuration parameter option.
When a preprocessor relevant configuration parameter is set it is valid globally across the system. The preprocessor condition does not come into effect until the database has been compiled.
NOTE: Predefined preprocessor configuration parameters are overwritten during schema installation. Define company-specific, preprocessor-relevant configuration parameters and options in the Designer under the Custom configuration parameter.
To display preprocessor relevant configuration parameters
-
In the Designer, select the Base data > General > Configuration parameters category.
-
In the Configuration Parameter Editor, select the View > Preprocessor definitions menu item.
The Preprocessor definitions view shows all preprocessor conditions. Double-click an entry to display the configuration parameter.
NOTE: In the Designer, you can find an overview of existing preprocessor dependencies in the One Identity Manager Schema > Preprocessor dependencies category.
Preprocessor conditions in objects
IMPORTANT: Each modification to preprocessor objects requires recompiling the One Identity Manager database.
You can enter a preprocessor condition directly for certain objects.
To enter a preprocessor condition
-
In the Preprocessor condition property, enter the preprocessor expressions of the configuration parameters. You can link preprocessor expressions together with AND, OR, NOT, ().
Example: Preprocessor condition for a column definition
The column Person.RiskIndexCalculated should only be shown in the interface if the risk function is set.
The following preprocessor conditions are entered in the column definition (DialogColumn table).
Table 87: Example for preprocessor conditions
Person |
RiskIndexCalculated |
COMPLIANCE |
If a preprocessor-relevant configuration parameter is enabled or disabled, tasks are created for the DBQueue Processor to calculate all preprocessor and calculation tasks for the affected objects. The Disabled by preprocessor option is updated for each object. If the re-interpretation of the preprocessor conditions leads to a change in the option, the preprocessor interpretation tasks that follow are generated for the dependent objects. User permissions can also be affected. After DBQueue Processor has processed the tasks, the database needs to be recompiled.
The interpretation of preprocessor conditions has the following effects:
-
If a table is disabled by a preprocessor condition then all the columns and object definitions that relate to the table and the user interface forms and the associated navigation are disabled.
-
If a primary key column is disabled, all foreign key columns that relate to it are disabled.
-
If a primary key member is disabled according to the preceding rule (for example, in the case of many-to-many tables), then this primary key’s table and all further columns belonging to this table are also disabled.
This method has the advantage that, for example, when a table such as ADSGroup is disabled then all assignments are automatically disabled, such as the table, DepartmentHasADSGroup.
NOTE: In the Designer, you can find an overview of existing preprocessor dependencies in the One Identity Manager Schema > Preprocessor dependencies category.
Preprocessor conditions in VB.Net expressions
IMPORTANT: Every modification to preprocessor conditions in VB.Net expressions requires recompiling the One Identity Manager database.
Preprocessor conditions can be used in VB.Net expressions. Script code that is dependent on a preprocessor condition has to be passed in an #if...then...#else statement. To formulate the preprocessor condition, use the preprocessor expressions of the preprocessor-related configuration parameters. You can link preprocessor expressions together with AND, OR, NOT, ().
The interpretation of the preprocessor conditions is not carried out until the script is generated.
Syntax
#If <preprocessor_condition_1>
’ code, for this preprocessor condition
#ElseIf <preprocessor_condition_2> then
’ code, for this preprocessor condition
#Else
#Endif
Example: Use preprocessor condition in templates
The ITSHOP preprocessor condition is entered in the column definition (DialogColumn table) for the ADSGroup.IsForITShop column. The template in the ADSGroup.DisplayName column should reference the IsForITShop column. In order to remain compatible, the following construction has to be used for the template:
#If ITSHOP Then
If $IsForITShop:Bool$ And $UID_AccProduct$ <> "" Then
Value = $FK(UID_AccProduct).Ident_AccProduct$
Else
End If
#Else
#End If