📋 Universal Export Engine – Detailed Technical Documentation
🎯 Overview
Universal Export Engine is a .NET Extension Service designed for the OutSystems Platform.It enables exporting any data type to Excel (.xlsx), PDF, or CSV with extensive customization, security, and localization support.
Core Principle:Export once – use everywhere – handle everything
📦 Architecture & Components
Class Structure
public class CssUniversal_Export_Engine : IssUniversal_Export_Engine
Implements: IssUniversal_Export_Engine
Namespace: OutSystems.NssUniversal_Export_Engine
Type: .NET Library (DLL)
Framework: .NET Framework 4.8
🔢 Constants & Enum Values
Export Formats
EXPORT_FORMAT_EXCEL = 1 → Excel (.xlsx)
EXPORT_FORMAT_PDF = 2 → PDF (RTL, Watermark, Security)
EXPORT_FORMAT_CSV = 3 → CSV (UTF-8, Culture-aware)
Delivery Types
DELIVERY_TYPE_DOWNLOAD = 1
DELIVERY_TYPE_EMAIL = 2
DELIVERY_TYPE_STORAGE = 3
Page Configuration
PAGE_ORIENTATION_PORTRAIT = 1
PAGE_ORIENTATION_LANDSCAPE = 2
PAGE_SIZE_A4 = 1
PAGE_SIZE_LETTER = 2
Text Alignment
TEXT_ALIGNMENT_LEFT = 1
TEXT_ALIGNMENT_CENTER = 2
TEXT_ALIGNMENT_RIGHT = 3
Column Data Types
COLUMN_DATA_TYPE_TEXT = 1
COLUMN_DATA_TYPE_NUMBER = 2
COLUMN_DATA_TYPE_DATE = 3
COLUMN_DATA_TYPE_CURRENCY = 4
COLUMN_DATA_TYPE_BOOLEAN = 5
🛠 Helper Methods – Data Conversion
ConvertRLStringListToList(...)
Purpose: Convert RLStringListRecordList to List
Process:
Iterate records
Extract ssValue
Return standard .NET list
Usage: Email recipients from OutputConfig.ssAttribute
Default Configuration Methods
GetDefaultExportOptions()
GetDefaultLayoutConfig()
GetDefaultLocalizationConfig()
GetDefaultSecurityConfig()
GetDefaultPerformanceConfig()
GetDefaultOutputConfig()
Purpose: Apply defaults when configs are nullDefaults Source: Structures.cs
🔄 Data Processing Methods
ProcessData(...)
Input: Any OutSystems dataOutput: List>
Flow:
Serialize to JSON
Parse JSON (JArray / JObject)
Reflection fallback
Optional flattening
Null-safe handling
Handles: empty, null, nested, mixed types, arrays
ProcessJsonObject(...)
Recursive JSON processing
Flattens nested objects
Arrays → comma-separated values
Preserves key hierarchy
ConvertObjectToDictionary(...)
Reflection-based conversion
Recursive flattening (optional)
Skips unreadable properties
IsSimpleType(...)
Simple types:
Primitives, string, DateTime, decimal, Guid, Nullable
GetValue(...)
Extracts value from JValue
Returns raw object otherwise
📊 Column Processing Methods
CleanColumnName(...)
Removes OutSystems prefixes and formats names.
Examples:
ssENEmployee._ssName → Name
Customer.Address.Street → Street
_Status → Status
ShouldExcludeColumn(...)
Hardcoded exclusions:
ChangedAttributes
OptimizedAttributes
ProcessColumns(...)
Modes:
Auto-Detect: Extract from data
Manual: Use provided config
Applies:
Exclusions
Clean names
Data type detection
Sorting by order
DetectDataType(...)
Samples first 10 non-null values:
Number
Date
Boolean
Default → Text
FormatValue(...)
Formats based on column data type:
Boolean → Custom text
Date → TimeZone + format
Number → Culture-aware
Currency → Culture-aware
Null → NullValueText
✅ Validation Methods
MssValidateExportDefinition(...)
Validates:
Data existence
Export format
Column config
Layout config
Security config
Performance config
Output config
Returns: RCValidationResultRecord
Errors (blocking)
Warnings (non-blocking)
📄 Export Methods
ExportToExcel(...)
Library: ClosedXML
Headers, widths, alignment
Data formatting
Auto-fit columns
Returns: byte[]
ExportToCSV(...)
UTF-8 encoding
Culture-aware formatting
Proper CSV escaping
ExportToPDF(...)
Library: iTextSharp
Page size & orientation
Headers / Footers
Watermark & security
RTL & font fallback
🚀 Main Public Functions
MssExportData(...)
Main entry point
Apply defaults
Process data
Limit rows
Process columns
Export by format
Generate filename
Populate result
MssPreviewExport(...)
Exports first N rows
Prefixes filename with Preview_
Used for testing & validation
Pre-execution validation only
🔧 Helper Class – ColumnInfo
Internal structure holding:
ColumnKey
DisplayName
Visibility
Order
DataType
Format
Width
Alignment
WrapText
DefaultValue
📚 Dependencies & Libraries
NuGet:
ClosedXML (MIT)
DocumentFormat.OpenXml (MIT)
iTextSharp (AGPL)
Newtonsoft.Json (MIT)
OutSystems Runtime:
RuntimePlatform
DatabaseAbstractionLayer
RuntimeCommon
REST & SOAP APIs
✨ Key Features & Capabilities
Dynamic data handling
Smart column detection
Advanced formatting
Full localization & RTL
PDF security
Performance optimization
Large dataset support (1M+ rows)
Robust edge-case handling
📌 Important Notes
All configurations are optional
No assumptions about data shape
Full error & exception handling
Optimized for scale
Easily extensible