init
This commit is contained in:
@@ -0,0 +1,294 @@
|
||||
---
|
||||
source_files:
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/AbstractOLEDbWrapper.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/TemplateZone.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/TestObjectChannel.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/CalculatedValueClass.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/HardwareChannel.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/TemplateRegion.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/LevelTriggerChannel.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/MMEFigures.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/TestSetting.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/TestEngineerDetails.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/TestObjectMetaData.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/IsoCode.cs
|
||||
- DataPRO/Modules/PreviousDBVersions/Version57/DatabaseExport/ISO/CustomerDetails.cs
|
||||
generated_at: "2026-04-16T04:57:15.551651+00:00"
|
||||
model: "Qwen/Qwen3-Coder-Next-FP8"
|
||||
schema_version: 1
|
||||
sha256: "8139d487746881b8"
|
||||
---
|
||||
|
||||
# Documentation: DatabaseExport.ISO Module (Version 57)
|
||||
|
||||
## 1. Purpose
|
||||
|
||||
This module provides data models and utility classes for exporting test data to ISO-compliant formats, specifically targeting legacy database schema version 57. It serves as a bridge between internal data structures and standardized export formats by encapsulating database row mappings, ISO code construction logic, and metadata handling. The module supports template-based channel definitions, calculated values, level triggers, hardware configuration, and customer/test engineer metadata—enabling consistent serialization and deserialization of test setup information for interoperability with external systems.
|
||||
|
||||
## 2. Public Interface
|
||||
|
||||
### `AbstractOLEDbWrapper`
|
||||
- **`GetLong(IDataReader reader, string field)`**
|
||||
Safely extracts a `long` value from an `IDataReader`. Returns `long.MinValue` if the field value is `DBNull.Value`.
|
||||
- **`GetDate(IDataReader reader, string field)`**
|
||||
Safely extracts a `DateTime` value from an `IDataReader`. Returns `DateTime.MinValue` if the field value is `DBNull.Value`.
|
||||
|
||||
### `TemplateZone`
|
||||
- **Constructor `TemplateZone(string template, string name, string picture, string description)`**
|
||||
Initializes a new zone with explicit values.
|
||||
- **Constructor `TemplateZone(DataRow dr)`**
|
||||
Initializes from a database row. Sets `ZoneName` to `"Default zone"` if `ZoneName` is `DBNull.Value`; sets `Description` to `""` if `ZoneDescription` is `DBNull.Value`; populates `TemplateRegions` via `TemplateRegion.GetAllRegions()`.
|
||||
- **Properties**
|
||||
- `TemplateName` (read-only)
|
||||
- `ZoneName` (read-only, defaults to `""`)
|
||||
- `Picture` (read-write)
|
||||
- `Description` (read-only, defaults to `""`)
|
||||
- `TemplateRegions` (read-write array of `TemplateRegion`)
|
||||
|
||||
### `TestObjectChannel`
|
||||
- **`GetGraphID()`**
|
||||
Returns `GetId() + "_CU"` if `SquibChannelType == SquibChannelTypes.Current`; otherwise returns `GetId()`.
|
||||
- **`GetId()`**
|
||||
Returns `GetIdWithSpecificChannelId(Channel.Id)`.
|
||||
- **`GetIdWithSpecificChannelId(long id)`**
|
||||
Returns formatted string: `"{SerialNumber}_{MMEChannelType}_{id}"`.
|
||||
- **`GetID()` / `GetIDWithSpecificChannelId(long id)`**
|
||||
Alias methods identical to `GetId()` / `GetIdWithSpecificChannelId(long id)`.
|
||||
- **`CompareTo(TestObjectChannel right)`**
|
||||
Compares by `DisplayOrder`, then `Name`, then `TestObject.SerialNumberOrOriginalSerialNumber` (if both non-null). Returns `1` if `right == null`.
|
||||
- **Properties**
|
||||
- `SquibChannelType` (`SquibChannelTypes` enum: `None`, `Voltage`, `Current`)
|
||||
- `SensorSerialNumber` (read-write string, default `""`)
|
||||
- `HardwareId` (read-write string; setter normalizes format: splits on `'_'`, keeps first two tokens, and appends everything from first `'x'` in third token)
|
||||
- `TestObject` (read-only `ISO.TestObject`)
|
||||
- `ChannelIDX` (read-write `int`, initialized to `CHANNEL_IDX_UNKNOWN = -1`)
|
||||
|
||||
### `CalculatedValueClass`
|
||||
- **Constructor `CalculatedValueClass(DataRow dr)`**
|
||||
Populates properties from `DbOperations.CalculatedChannels.Fields` enum values. Skips `DBNull.Value` fields.
|
||||
- **Properties**
|
||||
- `Id` (`int`, default `-1`)
|
||||
- `Operation` (`Operations` enum: `SUM`, `AVERAGE`, `IRTRACC3D`, `IRTRACC3D_ABDOMEN`, `IRTRACC3D_LOWERTHORAX`; default `SUM`)
|
||||
- `CalculatedValueCode` (`string`, default `"???????????????X"`)
|
||||
- `InputChannelIds` (`string[]`)
|
||||
- `InputChannelIdsBlob` (`byte[]`):
|
||||
- Getter joins `InputChannelIds` with `CultureInfo.InvariantCulture.TextInfo.ListSeparator`, encodes to UTF-8.
|
||||
- Setter decodes UTF-8, splits by list separator, populates `_inputChannelIds`.
|
||||
- `CFCForInputChannels` (`string`, default `""`)
|
||||
- `ChannelFilterClassForOutput` (`string`, default `""`)
|
||||
- `TestSetupName` (`string`)
|
||||
- `Name` (`string`)
|
||||
|
||||
### `ISOHardwareChannel`
|
||||
- **Constructor `ISOHardwareChannel(ISOHardwareChannel copy, Hardware h)`**
|
||||
Deep-copies configuration from `copy`, assigns `ParentDAS = h`.
|
||||
- **Constructor `ISOHardwareChannel(DataRow dr, Hardware hardware)`**
|
||||
Populates from `DbOperations.DAS.DASChannelFields` enum values. Throws `NotSupportedException` for unknown fields.
|
||||
- **Static Method `PhysicalCompare(ISOHardwareChannel left, ISOHardwareChannel right)`**
|
||||
Compares by `ChannelIdx`. Returns `-1`/`0`/`1` for null checks.
|
||||
- **Properties**
|
||||
- `ParentDAS` (`Hardware`)
|
||||
- `SupportedBridges`, `SupportedSquibFireModes`, `SupportedExcitations`, `SupportedDigitalInputModes`, `SupportedDigitalOutputModes` (`int`, defaults `12`, `16`, `16`, `16`, `16`)
|
||||
- `ChannelIdx`, `DASDisplayOrder` (`int`)
|
||||
- `ModuleSerialNumber` (`string`, default `""`)
|
||||
- `ModuleArrayIndex` (`int`, default `0`)
|
||||
- `LocalOnly` (`bool`, default `false`)
|
||||
|
||||
### `TemplateRegion`
|
||||
- **Constructor `TemplateRegion(string templateName, string zoneName, bool bLocalOnly)`**
|
||||
Initializes with explicit values.
|
||||
- **Constructor `TemplateRegion(DataRow dr)`**
|
||||
Populates all fields from database row, including coordinate points (`UpperLeft`, `LowerRight`).
|
||||
- **Static Method `GetAllRegions(string templateName, string zoneName)`**
|
||||
Queries `tblTemplateRegions` via `DbOperations`, returns array of `TemplateRegion`. Silently ignores exceptions.
|
||||
- **Properties**
|
||||
- `TemplateName`, `TemplateZone` (read-only)
|
||||
- `RegionNumber`, `RegionName`, `RegionDescription`, `TestObject`, `Position`, `MainLocation`, `FineLocation1-3`, `PhysicalDimension`, `Direction`, `FilterClass` (`string`)
|
||||
- `LocalOnly` (read-only `bool`)
|
||||
- `UpperLeft`, `LowerRight` (`System.Drawing.Point`)
|
||||
|
||||
### `LevelTriggerChannel`
|
||||
- **Constructor `LevelTriggerChannel(LevelTriggerChannel copy)`**
|
||||
Deep-copies all properties.
|
||||
- **Constructor `LevelTriggerChannel(DataRow dr)`**
|
||||
Populates from `DbOperations.LevelTriggers.Fields` enum values. Silently ignores exceptions.
|
||||
- **Properties**
|
||||
- `TestSetupName`, `GroupSerialNumber`, `TestObjectChannelId`, `HardwareChannelId`, `SensorSerialNumber` (`string`, defaults `""`)
|
||||
- `GreaterThanEnabled`, `LessThanEnabled` (`bool`, defaults `true`, `false`)
|
||||
- `GreaterThanThresholdEU`, `LessThanThresholdEU` (`double`, defaults `0D`)
|
||||
- `TriggerBetweenBounds`, `TriggerOutsideBounds` (`bool`, defaults `false`)
|
||||
- `InsideUpperLevelEU`, `InsideLowerLevelEU`, `OutsideUpperLevelEU`, `OutsideLowerLevelEU` (`double`, defaults `0D`)
|
||||
|
||||
### `MMEFigures`
|
||||
- **Constructor `MMEFigures(...)`**
|
||||
Initializes all fields explicitly.
|
||||
- **Static Method `GetFigures()`**
|
||||
Queries `MMEFIGURES` table via `DbOperations.GetISOCommand()`, returns array of `MMEFigures`. Silently ignores exceptions during row processing.
|
||||
- **Properties**
|
||||
- `ID`, `IntAuthor`, `IntVersion` (`long`)
|
||||
- `TxtShortName`, `TxtDescription`, `TxtRemarks`, `TxtImageFile`, `TxtSortKey`, `TxtPath`, `Last_Change_Text`, `History` (`string`)
|
||||
- `DatRevision`, `Last_Change` (`DateTime`)
|
||||
- `IntPage`, `IntPages` (`ushort`)
|
||||
- `BolExpired` (`bool`)
|
||||
- `BitStdPath` (`bool`)
|
||||
- `IntIDStdPath` (`long`)
|
||||
|
||||
### `TestSetting` & `TestSettingDictionary`
|
||||
- **`TestSetting`**
|
||||
- **Constructor `TestSetting(string id, string value, string defaultValue)`**
|
||||
- **`ToSerializeString()`**
|
||||
Returns `"id=value"` with `=` replaced by `"_x_"` in both fields.
|
||||
- **Static `TryParse(string s, out TestSetting ts)`**
|
||||
Parses `"id=value"` format (reverses `"_x_"` → `"="`). Returns `false` if parsing fails.
|
||||
- **`TestSettingDictionary`**
|
||||
- **`GetValue(string ID, string defaultValue)`**
|
||||
Returns `_lookup[ID].Value` if exists and non-null; otherwise `_lookup[ID].DefaultValue`; otherwise `defaultValue`.
|
||||
- **`SetValue(TestSetting setting, string value)`**
|
||||
Replaces entry for `setting.Id` with new `TestSetting` (preserves `Id`, `DefaultValue`, sets `Value = value`).
|
||||
- **`SetValue(TestSetting setting)`**
|
||||
Adds/updates entry with `setting`.
|
||||
- **`SetValue(string id, string value)`**
|
||||
Adds new entry or updates `Value` if key exists.
|
||||
- **`ToSerializeString()` / `LoadSettings(string s)`**
|
||||
Serializes/deserializes settings using `"id=value"` pairs separated by `CultureInfo.InvariantCulture.TextInfo.ListSeparator`, with internal `"_X_"` escaping.
|
||||
|
||||
### `TestEngineerDetails`
|
||||
- **Constructor `TestEngineerDetails(DataRow dr)`**
|
||||
Populates from `tblTestEngineerDetails` row.
|
||||
- **Static Method `GetAllTestEngineerDetails()`**
|
||||
Queries `tblTestEngineerDetails`, returns array. Silently ignores exceptions.
|
||||
- **Properties**
|
||||
- `Name`, `TestEngineerName`, `TestEngineerPhone`, `TestEngineerFax`, `TestEngineerEmail` (`string`; setters ignore empty strings for engineer fields)
|
||||
- `LocalOnly` (`bool`)
|
||||
- `LastModified` (`DateTime`)
|
||||
- `LastModifiedBy` (`string`)
|
||||
- `Version` (`int`, default `1`)
|
||||
- **`GetValues()`**
|
||||
Returns `Dictionary<string, string>` of all fields.
|
||||
|
||||
### `TestObjectMetaData` & `TestSetupMetaData`
|
||||
- **`TestObjectMetaData`**
|
||||
- **Constructor `TestObjectMetaData(char testobject)`**
|
||||
Initializes properties from `Fields`, `CommentFields`, `OptionFields` enums. Sets `NOVALUE` defaults (except `VelocityOfTestObject`, `MassOfTestObject` → `""`).
|
||||
- **Properties**
|
||||
- `Version` (`double`, default `1.06`)
|
||||
- `NOVALUE = "NOVALUE"`
|
||||
- `TestObject` (`char`, default `'?'`)
|
||||
- `Properties` (`MetaData[]`)
|
||||
- **`TestSetupMetaData`**
|
||||
- **Constructor `TestSetupMetaData(bool requireXCrashCompatibilityForISOExports)`**
|
||||
Initializes properties from `Fields` enum. Sets `NOVALUE` or `""` based on `requireXCrashCompatibilityForISOExports`.
|
||||
- **`SetProperty(MetaData meta, bool requireXCrashCompatibilityForISOExports)`**
|
||||
Overrides `NOVALUE` → `""` for specific fields if `requireXCrashCompatibilityForISOExports` is `true`.
|
||||
- **Properties**
|
||||
- `Version` (`double`, default `1.06`)
|
||||
- `NOVALUE = "NOVALUE"`, `MEDIADEFAULT = "1/1"`
|
||||
- `TestObject = '_'`
|
||||
- `Properties` (`MetaData[]`)
|
||||
- **`MetaData`**
|
||||
- **Constructor `MetaData(string name, bool optional, string value, double version)`**
|
||||
- **Properties**
|
||||
- `Name`, `Value` (`string`)
|
||||
- `IsOptional`, `Version` (`bool`, `double`)
|
||||
|
||||
### `IsoCode`
|
||||
- **Constructor `IsoCode(string isoCode)`**
|
||||
Normalizes input to 16 characters (truncates or pads with `'?'`).
|
||||
- **Static Methods**
|
||||
- **`GetString(MMEPossibleChannels, MMETestObjects, MMEPositions, MMEFilterClasses)`**
|
||||
Constructs 16-char ISO code from components. Uses `'?'` for null inputs.
|
||||
- **`GetString(MMEPossibleChannels, bool careAboutTestTimeFields)`**
|
||||
Same as above, but masks `TestObject` and `FilterClass` to `'?'` if `careAboutTestTimeFields == false`.
|
||||
- **`GetString(string testObject, string position, string main, string floc1, string floc2, string floc3, string physdim, string dir, string fc)`**
|
||||
Concatenates inputs into 16-char code (no padding/truncation).
|
||||
- **Properties**
|
||||
- `TestObject`, `Position`, `MainLocation`, `FineLocation1-3`, `PhysicalDimension`, `Direction`, `FilterClass` (read-write `string`; setters enforce 1-char/4-char/2-char constraints)
|
||||
- `StringRepresentation` (`string`):
|
||||
- Getter: returns full 16-char code.
|
||||
- Setter: pads with `'0'` if shorter than 16.
|
||||
|
||||
### `CustomerDetails`
|
||||
- **Constructor `CustomerDetails(DataRow dr)`**
|
||||
Populates from `tblCustomerDetails` row.
|
||||
- **Static Method `GetAllCustomerDetails()`**
|
||||
Queries `tblCustomerDetails`, returns array. Silently ignores exceptions.
|
||||
- **Properties**
|
||||
- `Name`, `CustomerName`, `CustomerTestRefNumber` (`string`)
|
||||
- `ProjectRefNumber`, `CustomerOrderNumber`, `CustomerCostUnit` (`string`; setters ignore empty strings)
|
||||
- `LocalOnly` (`bool`)
|
||||
- `LastModified` (`DateTime`)
|
||||
- `LastModifiedBy` (`string`)
|
||||
- `Version` (`int`, default `1`)
|
||||
- **`GetValues()`**
|
||||
Returns `Dictionary<string, string>` of all fields.
|
||||
|
||||
## 3. Invariants
|
||||
|
||||
- **`AbstractOLEDbWrapper`**:
|
||||
- `GetLong` never throws on `DBNull`; returns `long.MinValue`.
|
||||
- `GetDate` never throws on `DBNull`; returns `DateTime.MinValue`.
|
||||
|
||||
- **`TemplateZone`**:
|
||||
- `ZoneName` defaults to `"Default zone"` only if `DBNull.Value` in DB row; otherwise preserved.
|
||||
- `Description` defaults to `""` if `DBNull.Value` in DB row.
|
||||
|
||||
- **`TestObjectChannel`**:
|
||||
- `HardwareId` setter enforces format: splits on `'_'`, expects 3 tokens, and reassembles first two tokens + suffix from third token after first `'x'`.
|
||||
- `CompareTo` uses `DisplayOrder` as primary key; `Name` as secondary; `SerialNumberOrOriginalSerialNumber` as tertiary (if both non-null).
|
||||
|
||||
- **`CalculatedValueClass`**:
|
||||
- `InputChannelIdsBlob` getter/setter uses `CultureInfo.InvariantCulture.TextInfo.ListSeparator` (typically `','`), not locale-specific.
|
||||
- `CalculatedValueCode` defaults to `"???????????????X"` (15 chars + `'X'`).
|
||||
|
||||
- **`IsoCode`**:
|
||||
- `StringRepresentation` setter pads with `'0'` if input < 16 chars.
|
||||
- All individual properties enforce fixed widths:
|
||||
- `TestObject`, `Position`, `Direction`, `FilterClass`: 1 char
|
||||
- `MainLocation`: 4 chars
|
||||
- `FineLocation1-3`: 2 chars each
|
||||
- `PhysicalDimension`: 2 chars
|
||||
- Total length always 16 characters.
|
||||
|
||||
- **`TestSettingDictionary`**:
|
||||
- `ToSerializeString` escapes `ListSeparator` → `"_X_"` in serialized values.
|
||||
- `LoadSettings` preserves existing default settings; only updates `Value` if key exists.
|
||||
|
||||
## 4. Dependencies
|
||||
|
||||
### Internal Dependencies
|
||||
- **`DbOperations`** (referenced via `DbOperations.GetCommand()`, `DbOperations.GetISOCommand()`, `DbOperations.CreateParam()`, `DbOperations.Connection.QueryDataSet()`):
|
||||
Provides database access utilities (SQL command creation, parameterization, query execution).
|
||||
- **`ISO.TestObject`** (used in `TestObjectChannel.TestObject`):
|
||||
Referenced but not defined in provided files.
|
||||
- **`ISO.TestObjectTemplate`** (used in `TestObjectChannel` constructor):
|
||||
Referenced but not defined in provided files.
|
||||
- **`Hardware`** (used in `ISOHardwareChannel.ParentDAS`):
|
||||
Referenced but not defined in provided files.
|
||||
- **`MMEPossibleChannels`, `MMETestObjects`, `MMEPositions`, `MMEFilterClasses`** (used in `IsoCode.GetString`):
|
||||
Referenced but not defined in provided files.
|
||||
|
||||
### External Dependencies
|
||||
- **`System.Data`** (`System.Data.OleDb`, `System.Data.SqlClient`):
|
||||
Used for `IDataReader`, `DataRow`, `SqlDbType`, `OleDbCommand`.
|
||||
- **`System.Text`**:
|
||||
Used for `StringBuilder`, `Encoding.UTF8`.
|
||||
- **`System.Drawing`**:
|
||||
Used for `System.Drawing.Point` in `TemplateRegion.UpperLeft/LowerRight`.
|
||||
- **`System.Globalization`**:
|
||||
Used for `CultureInfo.InvariantCulture.TextInfo.ListSeparator`.
|
||||
|
||||
### Inferred Usage
|
||||
- `TemplateRegion.GetAllRegions()` and `TestEngineerDetails.GetAllTestEngineerDetails()`/`CustomerDetails.GetAllCustomerDetails()` imply database persistence layer.
|
||||
- `TestSettingDictionary` serialization suggests configuration storage/retrieval (e.g., XML, DB).
|
||||
- `CalculatedValueClass` and `LevelTriggerChannel` imply integration with channel processing logic.
|
||||
|
||||
## 5. Gotchas
|
||||
|
||||
- **`AbstractOLEDbWrapper.GetDate`**:
|
||||
Returns `DateTime.MinValue` for `DBNull`, which may be ambiguous if `DateTime.MinValue` is a valid value in the domain. Consider using `DateTime?` or sentinel values.
|
||||
|
||||
- **`TestObjectChannel.HardwareId` setter**:
|
||||
Mutates input by stripping characters after first `'x'` in the third token. This may cause data loss if `'x'` appears elsewhere in the hardware ID.
|
||||
|
||||
- **`CalculatedValueClass.InputChannelIdsBlob`**:
|
||||
Uses `
|
||||
Reference in New Issue
Block a user