DIS 2.24
New features
IDE
C# editor: Class Library can now also be used in Automation scripts [ID 23925]
From now on, it is also possible to use code from Class Library packages in Automation scripts.
When DIS detects that code from a loaded Class Library package is used in EXE blocks of an Automation script, it will
- add a new EXE block to that script containing only the code necessary to be able to use the wanted functionally, and
- add references in the EXE blocks using that Class Library code to the newly added EXE block containing the Class Library code.
Note
Using Class Library packages in Automation scripts will only work in conjunction with DataMiner version 9.6.13 or higher.
C# editor: New snippets [ID 24066][ID 24222]
In the C# editor, you can now use the following additional snippets:
DIS > Automation Script
- CreateInformationEvent
- EditSpectrumPreset
- EmailReports
- EmailReportsWithReservationGUID
- EmailWithCustomContent
- GetScriptDummy
- MaskElementsInView
- RunAutomationScript
DIS > Protocol > Class Library
- Get DMS With Monitor
Validator
New and updated checks and error messages [ID 22757][ID 23419][ID 23793][ID 23935][ID 24132]
The following checks and error messages have been added, updated or removed.
ID | Check | Error message |
---|---|---|
1.11.4 | CheckAdvancedAttribute | Empty attribute 'Protocol/Type@advanced'. |
1.11.5 | CheckAdvancedAttribute | Untrimmed attribute 'Protocol/Type@advanced'. Current value '{attributeValue}'. |
1.11.6 | CheckAdvancedAttribute | Untrimmed value '{untrimmedValue}' in attribute 'Protocol/Type@advanced'. |
1.11.7 | CheckAdvancedAttribute | Unknown connection type '{connectionType}' in Connection '{connectionId}'. |
1.23.1 | CheckConnections | Connection {connectionId} has mismatching names: '{names}'. |
1.23.2 | CheckConnections | Invalid connection name '{connectionName}' for a '{connectionType}' connection. Connection ID '{connectionId}'. |
1.23.3 | CheckConnections | Duplicated Connection Name '{name}'. |
1.23.4 | CheckConnections | Duplicated Connection Name '{name}'. Connection IDs '{connectionIds}'. |
1.23.5 | CheckConnections | Connection count in 'Protocol/Type' tag '{connectionCount}' doesn't match with PortSettings count '{portSettingCount}'. |
2.13.2 | CheckDisplayTag | Invalid page button caption format '{displayValue}'. Suggested fix '{suggestedValue}'. Param ID '{paramId}'. |
2.13.3 | CheckDisplayTag | Missing tag 'Discreet/Display' in Param '{paramId}'. |
2.13.4 | CheckDisplayTag | Empty tag 'Discreet/Display' in Param '{paramId}'. |
2.13.5 | CheckDisplayTag | Untrimmed tag 'Discreet/Display' in Param '{paramId}'. Current value '{untrimmedValue}'. |
2.37.1 | Error message “InvalidValue” renamed to “TogglebuttonRecommended” | |
2.37.9 | CheckTypeTag | Invalid value '{paramType}' in 'Param/Type' for '{measurementType}'. Param ID '{paramId}'. |
2.37.10 | CheckTypeTag | Empty tag 'Measurement/Type' in Param '{paramId}'. |
2.37.11 | CheckTypeTag | Invalid value '{measurementType}' in tag 'Measurement/Type'. Param ID '{paramId}'. |
2.37.12 | CheckTypeTag | Untrimmed tag 'Measurement/Type' in Param '{paramId}'. Current value '{untrimmedValue}'. |
2.51.1 | CheckDiscreetsTag | Missing 'Measurement/Discreets' tag for '{paramDisplayType}' Param with ID '{pid}'. |
2.52.1 | CheckDiscreetTag | Missing 'Discreet' tag(s) in 'Measurement/Discreets' tag. Param ID '{pid}'. |
3.2.1 | CheckTriggersAttribute | Missing attribute 'triggers' in QAction '{qactionId}'. |
3.2.2 | CheckTriggersAttribute | Empty attribute 'triggers' in QAction '{qactionId}'. |
3.2.3 | CheckTriggersAttribute | Invalid value '{triggersValue}' in attribute 'triggers'. QAction ID '{qactionId}'. |
3.2.4 | CheckTriggersAttribute | Attribute 'triggers' references a non-existing 'Param' with ID '{pid}'. QAction ID '{qactionId}'. |
3.2.5 | CheckTriggersAttribute | Attribute 'triggers' references a non-existing 'Group' with ID '{triggerId}'. QAction ID '{qactionId}'. |
3.2.6 | CheckTriggersAttribute | Duplicate ID '{duplicateId}' in 'QAction@triggers'. QAction ID '{qactionId}'. |
4.2.1 | CheckParamTag | Tag 'Content/Param' references a non-existing 'Param' with ID '{pid}'. Group ID '{groupId}'. |
4.2.2 | CheckParamTag | Empty tag 'Param' in Group '{groupId}'. |
4.2.3 | CheckParamTag | Invalid value '{value}' in tag 'Content/Param'. Group ID '{groupId}'. |
4.3.1 | CheckActionTag | Tag 'Content/Action' references a non-existing 'Action' with ID '{actionId}'. Group ID '{groupId}'. |
4.3.2 | CheckActionTag | Empty tag 'Content/Action' in Group '{groupId}'. |
4.3.3 | CheckActionTag | Invalid value '{value}' in tag 'Content/Action'. Group ID '{groupId}'. |
4.4.1 | CheckPairTag | Tag 'Content/Pair' references a non-existing 'Pair' with ID '{pairId}'. Group ID '{groupId}'. |
4.4.2 | CheckPairTag | Empty tag 'Content/Pair' in Group '{groupId}'. |
4.4.3 | CheckPairTag | Invalid value '{value}' in tag 'Content/Pair'. Group ID '{groupId}'. |
4.5.1 | CheckSessionTag | Tag 'Content/Session' references a non-existing 'HTTP Session' with ID '{sessionId}'. Group ID '{groupId}'. |
4.5.2 | CheckSessionTag | Empty tag 'Content/Session' in Group '{groupId}'. |
4.5.3 | CheckSessionTag | Invalid value '{value}' in tag 'Content/Session'. Group ID '{groupId}'. |
4.6.1 | CheckTriggerTag | Tag 'Content/Trigger' references a non-existing 'Trigger' with ID '{triggerId}'. Group ID '{groupId}'. |
4.6.2 | CheckTriggerTag | Empty tag 'Content/Trigger' in Group '{groupId}'. |
4.6.3 | CheckTriggerTag | Invalid value '{value}' in tag 'Content/Trigger'. Group ID '{groupId}'. |
4.7.1 | CheckConnectionPidAttribute | Empty attribute 'connectionPid' in Group '{groupId}'. |
4.7.2 | CheckConnectionPidAttribute | Invalid value '{connectionPid}' in attribute 'connectionPid'. Group ID '{groupId}'. |
4.7.3 | CheckConnectionPidAttribute | Attribute 'connectionPid' references a non-existing 'Param' with ID '{pid}'. Group ID '{groupId}'. |
7.3.2 | CheckOptionsAttribute | {timerOption}' option refers to a non-existing {referItemType} '{referItemId}'. |
7.3.3 | CheckOptionsAttribute | {optionName}' option has an invalid value '{optionValue}'. |
7.3.5 | CheckOptionsAttribute | Invalid value for Timer@options attribute. Timer ID '{timerId}'. Current Value '{attributeValue}'. |
7.3.6 | CheckOptionsAttribute | Option '{optionName}' requires the 'ip' option in Timer@options. Timer ID '{timerId}'. |
7.3.7 | CheckOptionsAttribute | Invalid value for 'ignoreIf' option. Expected format: 'ignoreIf:<columnIdx>,<value>'. Current value '{ignoreIfValue}'. |
7.3.8 | CheckOptionsAttribute | Invalid value for 'each' option. Expected format: 'each:<period>'. Current value '{optionValue}'. |
7.3.9 | CheckOptionsAttribute | Invalid value for 'dynamicThreadPool' option. Expected format: 'dynamicThreadPool:<threadPoolSizeMonitorPid>'. Current value '{optionValue}'. |
7.3.10 | CheckOptionsAttribute | Invalid value for 'instance' option. Expected format: 'instance:<tablePid>,<columnIdx>'. Current value '{optionValue}'. |
7.3.11 | CheckOptionsAttribute | Invalid value for 'ip' option. Expected format: 'ip:<tablePid>,<columnIdx>'. Current value '{optionValue}'. |
7.3.12 | CheckOptionsAttribute | Invalid value for 'pollingRate' option. Expected format: 'pollingRate:<interval>,<maxCount>,<releaseCount>'. Current value '{optionValue}'. |
7.3.13 | CheckOptionsAttribute | Invalid value for 'qaction' option. Expected format: 'qaction:<qactionId>'. Current value '{optionValue}'. |
7.3.14 | CheckOptionsAttribute | Invalid value for 'qactionBefore' option. Expected format: 'qactionBefore:<qactionId>'. Current value '{optionValue}'. |
7.3.15 | CheckOptionsAttribute | Invalid value for 'qactionAfter' option. Expected format: 'qactionAfter:<qactionId>'. Current value '{optionValue}'. |
7.3.16 | CheckOptionsAttribute | Invalid value for 'threadPool' option. Expected format: 'threadPool:<size>,<calculationInterval>,<usagePid>,<waitingPid>,<maxDurationPid>,<avgDurationPid>,<counterPid>,<queueSize>'. Current value '{optionValue}'. |
7.3.17 | CheckOptionsAttribute | Option '{optionName}' requires the 'each' option in Timer@options. Timer ID '{timerId}'. |
7.3.18 | CheckOptionsAttribute | Option '{optionName}' requires the 'threadPool' option in Timer@options. Timer ID '{timerId}'. |
7.3.19 | CheckOptionsAttribute | dynamicThreadPool' option refers to a non-existing parameter: '{paramId}'. |
7.3.20 | CheckOptionsAttribute | Required value '{placeholderName}' is not defined. |
7.3.21 | CheckOptionsAttribute | Invalid value for 'ping' option. Current value: '{optionValue}'. |
7.3.22 | CheckOptionsAttribute | Unknown option '{optionName}' detected. |
7.3.23 | CheckOptionsAttribute | Duplicate option '{optionName}' detected. |
7.3.24 | CheckOptionsAttribute | Unknown option '{optionName}' detected in 'ping' option. |
7.3.25 | CheckOptionsAttribute | Duplicate option '{optionName}' detected in 'ping' option. |
7.3.26 | CheckOptionsAttribute | Enabling the calculation of the thread pool statistics by defining an interval can have an impact on performance. |
7.3.27 | CheckOptionsAttribute | The use of the timeoutPid option in the ping option is obsolete. |
7.3.28 | CheckOptionsAttribute | The use of the qaction option is obsolete. |
7.3.29 | CheckOptionsAttribute | {timerOption}' option refers to a non-existing column idx '{columnIdx}' in table '{tablePid}'. |
7.3.30 | CheckOptionsAttribute | {timerOption}' option refers to a non-existing column 1-based position '{columnPosition}' in table '{tablePid}'. |
8.4.1 | CheckPasswordAttribute | Attribute 'password' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. |
8.5.1 | CheckUsernameAttribute | Attribute 'userName' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. |
8.6.1 | CheckProxyServerAttribute | Attribute 'proxyServer' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. |
8.7.1 | CheckProxyUserAttribute | Attribute 'proxyUser' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. |
8.8.1 | CheckProxyPasswordAttribute | Attribute 'proxyPassword' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. |
8.9.1 | CheckPidAttribute | Attribute 'Request@pid' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. Connection ID '{connectionId}'. |
8.9.2 | CheckPidAttribute | Empty attribute 'Request@pid' in HTTP Session '{sessionId}'. Connection ID '{connectionId}'. |
8.9.3 | CheckPidAttribute | Invalid value '{pidValue}' in attribute 'Request@pid'. HTTP Session ID '{httpSessionId}'. Connection ID '{connectionId}'. |
8.10.1 | CheckPidAttribute | Attribute 'Request/Data@pid' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. Connection ID '{connectionId}'. |
8.10.2 | CheckPidAttribute | Empty attribute 'Request/Data@pid' in HTTP Session '{sessionId}'. Connection ID '{connectionId}'. |
8.10.3 | CheckPidAttribute | Invalid value '{pidValue}' in attribute 'Request/Data@pid'. HTTP Session ID '{httpSessionId}'. Connection ID '{connectionId}'. |
8.11.1 | CheckPidAttribute | Attribute 'Request/Headers/Header@pid' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. Connection ID '{connectionId}'. |
8.11.2 | CheckPidAttribute | Empty attribute 'Request/Headers/Header@pid' in HTTP Session '{sessionId}'. Connection ID '{connectionId}'. |
8.11.3 | CheckPidAttribute | Invalid value '{pidValue}' in attribute 'Request/Headers/Header@pid'. HTTP Session ID '{httpSessionId}'. Connection ID '{connectionId}'. |
8.12.1 | CheckPidAttribute | Attribute 'Request/Parameters/Parameter@pid' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. Connection ID '{connectionId}'. |
8.12.2 | CheckPidAttribute | Empty attribute 'Request/Parameters/Parameter@pid' in HTTP Session '{sessionId}'. Connection ID '{connectionId}'. |
8.12.3 | CheckPidAttribute | Invalid value '{pidValue}' in attribute 'Parameter@pid'. HTTP Session ID '{httpSessionId}'. Connection ID '{connectionId}'. |
8.13.1 | CheckStatusCodeAttribute | Attribute 'Response@statusCode' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. Connection ID '{connectionId}'. |
8.13.2 | CheckStatusCodeAttribute | Empty attribute 'Response@statusCode' in HTTP Session '{sessionId}'. Connection ID '{connectionId}'. |
8.13.3 | CheckStatusCodeAttribute | Invalid value '{statusCode}' in attribute 'Response@statusCode'. HTTP Session ID '{httpSessionId}'. Connection ID '{connectionId}'. |
8.14.1 | CheckPidAttribute | Attribute 'Response/Content@pid' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. Connection ID '{connectionId}'. |
8.14.2 | CheckPidAttribute | Empty attribute 'Response/Content@pid' in HTTP Session '{sessionId}'. Connection ID '{connectionId}'. |
8.14.3 | CheckPidAttribute | Invalid value '{pidValue}' in attribute 'Response/Content@pid'. HTTP Session ID '{httpSessionId}'. Connection ID '{connectionId}'. |
8.15.1 | CheckPidAttribute | Attribute 'Response/Headers/Header@pid' references a non-existing 'Param' with ID '{pid}'. HTTP Session ID '{sessionId}'. Connection ID '{connectionId}'. |
8.15.2 | CheckPidAttribute | Empty attribute 'Response/Headers/Header@pid' in HTTP Session '{sessionId}'. Connection ID '{connectionId}'. |
8.15.3 | CheckPidAttribute | Invalid value '{pidValue}' in attribute 'Response/Headers/Header@pid'. HTTP Session ID '{httpSessionId}'. Connection ID '{connectionId}'. |
9.2.1 | CheckContentTag | Missing clear response routine for pair '{pairId}'. |
9.2.2 | CheckContentTag | Missing clear response '{responseIdToClear}' routine after response '{responseIdOnWhichToTrigger}'. |
10.3.1 | CheckParamTag | Tag 'Content/Param' references a non-existing 'Param' with ID '{referencedPid}'. Command ID '{commandId}'. |
10.3.2 | CheckParamTag | Empty tag 'Param' in Command '{commandId}'. |
10.3.3 | CheckParamTag | Invalid value '{value}' in tag 'Content/Param'. Command ID '{commandId}'. |
10.4.1 | CheckAsciiAttribute | Empty attribute 'ascii' in Command '{commandId}'. |
10.4.2 | CheckAsciiAttribute | Invalid value '{asciiValue}' in attribute 'ascii'. Command ID '{commandId}'. |
10.4.3 | CheckAsciiAttribute | Attribute 'ascii' references a non-existing 'Param' with ID '{pid}'. Command ID '{commandId}'. |
11.3.1 | CheckParamTag | Tag 'Content/Param' references a non-existing 'Param' with ID '{referencedPid}'. Response ID '{responseId}'. |
11.3.2 | CheckParamTag | Empty tag 'Param' in Response '{responseId}'. |
11.3.3 | CheckParamTag | Invalid value '{value}' in tag 'Content/Param'. Response ID '{responseId}'. |
12.1.1. | Error message “DuplicatedValue” removed. | |
12.1.2 | CheckNameAttribute | Missing attribute 'Ports/PortSettings@name' in Connection '{connectionId}'. |
12.1.3 | CheckNameAttribute | Empty attribute 'Ports/PortSettings@name' in Connection '{connectionId}'. |
12.1.4 | CheckNameAttribute | Untrimmed attribute 'Ports/PortSettings@name' in Connection '{connectionId}'. Current value '{attributeValue}'. |
13.2.1 | CheckPathAttribute | Attribute 'Relation@path' references a non-existing 'Table' with PID '{pid}'. |
13.2.2 | CheckPathAttribute | Missing attribute 'Relation@path'. |
13.2.3 | CheckPathAttribute | Invalid value '{pathValue}' in attribute 'Relation@path'. |
13.2.4 | CheckPathAttribute | Empty attribute 'Relation@path'. |
16.1.1 | CheckDynamicIdAttribute | Attribute 'dynamicId' references a non-existing 'Table' with PID '{tablePid}'. ParameterGroup ID '{parameterGroupId}'. |
16.1.2 | CheckDynamicIdAttribute | Invalid value '{attributeValue}' in attribute 'dynamicId'. ParameterGroup ID '{parameterGroupId}'. |
16.1.3 | CheckDynamicIdAttribute | Empty attribute 'dynamicId' in ParameterGroup '{groupId}'. |
17.1.1 | CheckTableAttribute | Attribute 'ExportRule@table' references a non-existing 'Table' with PID '{pid}'. |
17.1.2 | CheckTableAttribute | Missing attribute 'ExportRule@table'. |
17.1.3 | CheckTableAttribute | Invalid value '{tableValue}' in attribute 'ExportRule@table'. |
17.1.4 | CheckTableAttribute | Empty attribute 'ExportRule@table'. |
19.1.1 | CheckNameAttribute | Missing attribute 'PortSettings@name' in Connection '{connectionId}'. |
19.1.2 | CheckNameAttribute | Empty attribute 'PortSettings@name' in Connection '{connectionId}'. |
19.1.3 | CheckNameAttribute | Untrimmed attribute 'PortSettings@name' in Connection '{connectionId}'. Current value '{attributeValue}'. |
The following legacy Validator return codes have been removed:
- 1502
- 1503
- 1504
- 2503
- 2505
- 2517
- 2518
- 2519
- 2520
- 2521
- 2522
- 2965
- 5200
- 5201
- 5202
XML Schema
UOM Schema: New units added [ID 23740]
The following units have been added to the UOM Schema:
- kvar (kilovolt ampere reactive)
- NanoCPUs (nano CPUs)
Automation Schema: Additional values for DMSScript.Exe.Param@type attribute [ID 23952]
The *DMSScript.Script.Exe.Param@type* attribute can now be set to the following additional values:
Value | Description |
---|---|
libraryName | The name of the library. |
precompile | Whether this C# action must be compiled as a library. Default: “false”. |
scriptRef | A reference to another library. Format: The name of the Automation script, followed by a colon and the name of the library (e.g. ScriptName:LibraryName). To refer to a library in the current Automation script, you can replace the name of the Automation script by the [AutomationScriptName] placeholder (e.g. “[AutomationScriptName]:MyCSharpAction”). |
Automation Schema: List of possible bit flags added to documentation tag of the DMSScript.Exe.Param@options attribute [ID 23953]
In the Automation Schema, the documentation tag of the *DMSScript.Exe.Param@options* attribute now contains a list of all hexadecimal bit flags that can be represented by the decimal value specified in that attribute:
- 0x000: None
- 0x008: Debug mode
- 0x010: AllowUndef
- 0x020: RequireInteractive
- 0x040: SupportsBackForward
- 0x080: SkipElementChecks
- 0x100: SavedFromCube
- 0x200: SkipInfoEventsSet
- 0x400: HasFindInteractiveClient
Protocol Schema: Key reference constraint added to overridePID attribute of Protocol.Display.Pages.Page.Visibility element [ID 23959]
In the Protocol Schema, a key reference constraint has been added to the overridePID attribute of the Protocol.Display.Pages.Page.Visibility element.
The Schema will now verify whether the value specified in that overridePID attribute refers to a parameter ID defined in the protocol.
Protocol Schema: Protocol.Topologies.Topology.Cell.Exposer@enabled is now a mandatory attribute [ID 24377]
In the Protocol Schema, the enabled attribute of the Protocol.Topologies.Topology.Cell.Exposer element is now a mandatory attribute.
Class Library
DMS Monitors [ID 24066]
The new Monitor Extension methods provide stable logic to handle eventing. They encapsulate DataMiner subscriptions and handle all correct cleanup and stability guidelines, leaving a developer free to focus on what must happen when an event is triggered.
Currently, the supported methods provide the ability to monitor changes in the full DMS and trigger a C# method to run for:
- Standalone parameter value changes
- Table cell value changes
- Parameter alarm level changes
- Table cell alarm level changes
- Single element alarm changes
- Single element name changes
- All elements (DMS-level) alarm changes
- All elements (DMS-level) name changes
Note
Class Library Monitors will only work in conjunction with DataMiner version 9.6.3 or higher.
New Rates namespace [ID 24283]
A new Rates namespace has been added. This namespace contains classes and methods that can be used to calculate all kind of rates, including bit rates for SNMP interface tables.
Changes
Enhancements
IDE - Function editor: Enhancements [ID 23978]
A number of enhancements have been made to the function editor:
- When you create a new function file by selecting File > New > File > General > DataMiner > DataMiner Function Template, you now have to first specify the function file version (e.g. 1.0.0.1) and select the associated protocol XML file.
- When you add a function to a function file, or you edit an existing function, you can now select a profile and an entry point, and configure the interfaces.
- When you add a table to a page, you can now select which columns to include.
Note
The XML editor now also features on-the-fly XML Schema validation when editing function XML files.
Class Library: Table cell subscriptions will now be established using the primary key [ID 24456]
Up to now, table cell subscriptions were established using the display key. From now on, they will be established using the primary key.
Fixes
IDE: Problem when parsing MIB files [ID 24266]
In some cases, an error could occur when parsing a MIB file.
Class Library: element.IsStartupComplete method would throw an exception when executed on an element that had been stopped [ID 24290]
In some cases, the IDmsElement IsStartupComplete method would throw an exception when it was executed on an element that had been stopped.
Class Library: Problem when updating properties [ID 24291]
In some cases, it would not be possible to update properties that had a value equal to NULL.
Class Library: Problem when requesting an element with duplicate properties [ID 24293]
When an element was requested via IDms, in some cases, an exception could be thrown when the element had duplicate properties.
From now on, when an element has duplicate properties, no exception will be thrown, but an entry will be added to the C:\Skyline DataMiner\Logging\ClassLibrary.txt
log file.
Class Library: GetAlarmTemplates() and GetTrendTemplates() would not work when the protocol was a production protocol [ID 24357]
In some cases, it would not be possible to retrieve the alarm template or the trend template of a protocol via IDms when that protocol was a production protocol.
Also, the IDmsProtocol interface now has a new “ReferencedVersion” property.