Type System Overview
RISKSHEET data flows through multiple type systems:
Each layer handles specific concerns: Polarion stores native types, RISKSHEET maps them for the UI, OData exports them for external systems, and editors present appropriate controls to users.
Layer Purpose Examples Polarion Type How data is stored in the repository Text, Integer, IEnumOption, User RISKSHEET Type How column is configured in risksheet.json string, enum:severity, itemLinkOData Type External API representation String, Int64, Date, Boolean Editor Type UI control for user input TextInput, Dropdown, DatePicker, AutoComplete
Primitive Data Types
String / Text Type
Storage: Plain text or rich text
{
"header" : "Description" ,
"binding" : "description" ,
"type" : "string" ,
"wordWrap" : true ,
"multiLine" : true
}
Aspect Details Polarion Source Text, TextRichFormat OData Type String Editor Text input (single or multi-line) Conversion Rich text fields converted to plain text; HTML/formatting stripped Max Length Unlimited (Polarion TextRichFormat limit ~64KB) Empty Value Null or empty string
Integer Type
Storage: 64-bit signed integer
{
"header" : "Priority" ,
"binding" : "priority" ,
"type" : "int" ,
"format" : "n0"
}
Aspect Details Polarion Source Integer, Rating (1-5), Enum backing store OData Type Int64 Range -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 Editor NumericInput with spinner Conversion Parses strings to integers; non-numeric input rejected Format n0 = no decimals, n2 = 2 decimal places
Float Type
Storage: 64-bit floating-point (IEEE 754)
{
"header" : "Weight" ,
"binding" : "weight" ,
"type" : "float" ,
"format" : "n3"
}
Aspect Details Polarion Source Decimal, Double OData Type Double Precision 15-17 significant decimal digits Editor NumericInput with spinner Conversion Parses locale-aware number formats Special Values Infinity, -Infinity, NaN supported
Currency Type
Storage: Decimal with currency wrapper
{
"header" : "Budget" ,
"binding" : "budgetAmount" ,
"type" : "currency" ,
"format" : "c2"
}
Aspect Details Polarion Source Decimal field OData Type Decimal Precision Arbitrary precision (BigDecimal) Editor NumericInput with currency formatting Storage Wrapper Wrapped in Polarion Currency type Conversion Maintains full precision for financial calculations Format c2 = currency with 2 decimals (localized)
Currency type maintains higher precision than float, suitable for financial applications where precision is critical.
Boolean Type
Storage: True/false flag
{
"header" : "Is Active" ,
"binding" : "isActive" ,
"type" : "boolean"
}
Aspect Details Polarion Source Boolean field OData Type Boolean Values true or falseString Conversion "true" or "false" (case-insensitive)Editor Checkbox control Display Checked (true) or unchecked (false)
Temporal Data Types
Date Type (Date Only)
Storage: Calendar date without time
{
"header" : "Due Date" ,
"binding" : "dueDate" ,
"type" : "date" ,
"format" : "yyyy-MM-dd"
}
Aspect Details Polarion Source DateOnly field OData Type Date Format ISO 8601: YYYY-MM-DD Example 2025-12-31Editor DatePicker calendar control Storage Midnight (00:00) assumed for time component Timezone UTC (no timezone offset)
DateTime Type (Date + Time)
Storage: Full timestamp with date and time
{
"header" : "Created" ,
"binding" : "createdTime" ,
"type" : "datetime" ,
"format" : "yyyy-MM-dd HH:mm:ss" ,
"readOnly" : true
}
Aspect Details Polarion Source Date, DateTime field OData Type DateTimeOffset Format ISO 8601: YYYY-MM-DDTHH:MM:SSZ Example 2025-12-31T14:30:00+01:00Editor DateTimePicker (combined control) Timezone Offset from UTC (e.g., +01:00) Precision To the second
Time Type (Time Only)
Storage: Clock time without date
{
"header" : "Start Time" ,
"binding" : "startTime" ,
"type" : "time" ,
"format" : "HH:mm:ss"
}
Aspect Details Polarion Source TimeOnly field OData Type DateTimeOffset (time component only) Format HH:MM:SS (24-hour)Example 14:30:00Editor TimePicker control Midnight Represented as 00:00:00 Precision To the second
Duration Type
Storage: Time span (hours, days, etc.)
{
"header" : "Effort (hours)" ,
"binding" : "effortHours" ,
"type" : "duration"
}
Aspect Details Polarion Source DurationTime field, or Integer/Float OData Type String Format String representation (e.g., "5.5h", "330m") Editor Text input with parser Storage Can store as DurationTime object or numeric value Parsing Uses DurationTime.fromString() for conversion Display Formatted with units (hours, minutes, days)
Duration is mapped to String type in OData despite representing temporal values. External systems consuming this field should parse the string representation (e.g., “5.5h” = 5.5 hours).
Enumeration Types
Enum Type (Single Selection)
Storage: Enumeration option ID
{
"header" : "Severity" ,
"binding" : "severity" ,
"type" : "enum:severity_levels" ,
"showEnumDescription" : true
}
Aspect Details Polarion Source IEnumOption, Enum field OData Type String (enum ID) Storage Format Enum ID (e.g., "critical", "major") Display Format Enum name (e.g., “Critical”, “Major”) Syntax enum:enumTypeId (e.g., enum:severity_5)Editor Dropdown/Combobox with options Null Value No selection = empty/null Description Can show definition if showEnumDescription: true
Multi-Enum Type (Multiple Selections)
Storage: Multiple enumeration option IDs
{
"header" : "Tags" ,
"binding" : "tags" ,
"type" : "multiEnum:tag_categories"
}
Aspect Details Polarion Source List<IEnumOption>, multi-enum field, or comma-separated string OData Type String Storage Format Colon-separated IDs: "id1:id2:id3" Display Format All selected option names joined Separator Colon (:) NOT comma Editor Multi-select with checkboxes Empty Selection Blank values auto-filtered Syntax multiEnum:enumTypeId
Multi-enum uses colon (:) as the separator, not comma. This is important for parsing exported data and configuring queries.
Rating Type
Storage: Numeric rating scale (typically 1-5)
{
"header" : "Occurrence" ,
"binding" : "occurrence" ,
"type" : "rating:occurrence_5"
}
Aspect Details Polarion Source Integer field, Rating enum OData Type Int32 Range 1-5 (configurable per rating type) Storage Format Integer: 1, 2, 3, 4, or 5 Editor RatingComboBox (star/icon selector) Syntax rating:ratingTypeId (e.g., rating:severity_5)No Selection Null/empty = unrated
Work Item Reference Types
Item Link Type (Single Reference)
Storage: Work item ID and metadata
{
"header" : "Linked Requirement" ,
"binding" : "requirement" ,
"type" : "itemLink" ,
"id" : "requirement"
}
Aspect Details Polarion Source Linked work item reference OData Type String (work item ID) Storage Format JSON object: { "id": "REQ-123", "title": "..." } Display Format Clickable hyperlink to work item Editor AutoComplete with OData suggestions Null Value No link = empty Nested Access requirement.title, requirement.status
Multi-Item Link Type (Multiple References)
Storage: Array of work item references
{
"header" : "Related Risks" ,
"binding" : "relatedRisks" ,
"type" : "multiItemLink" ,
"id" : "risks"
}
Aspect Details Polarion Source Multiple linked work items OData Type String (JSON array) Storage Format JSON array of items: [{ "id": "RISK-1" }, { "id": "RISK-2" }] Display Format Comma-separated list of links Editor MultiItemLinkEditor (add/remove) Null Value Empty array [] Nested Access relatedRisks.title (concatenates all titles)
Task Link Type (Downstream Items)
Storage: Link to downstream work item (task, mitigation, risk control)
{
"header" : "Mitigation" ,
"binding" : "task" ,
"type" : "taskLink" ,
"id" : "task"
}
Aspect Details Polarion Source Downstream linked work item OData Type String (work item ID) Storage Format JSON object with nested properties Link Role Defined in dataTypes configuration Editor AutoComplete with filtered suggestions Nested Columns Access via task.title, task.status, task.type Multi-Type Support Can link to multiple work item types (e.g., Task,Issue)
TaskLink columns are configured in both the columns array (type and display) and the dataTypes section (role, creation rules). The column’s id must correspond to a key in dataTypes.
Reference/User Types
User Reference Type
Storage: User ID or User object
{
"header" : "Assigned To" ,
"binding" : "assignee" ,
"type" : "ref:users" ,
"readOnly" : false
}
Aspect Details Polarion Source User field, assignees collection OData Type String (user ID) Storage Format User ID string (e.g., "john.doe") Display Format User full name Editor AutoComplete with user suggestions Single Assignment Clears existing assignees before assigning new user Read-Only Mode Shows user ID as string Null Value Unassigned = empty
Storage: Not stored; calculated on every render
{
"header" : "Risk Priority (RPN)" ,
"binding" : "rpn" ,
"formula" : "commonRpn" ,
"type" : "int" ,
"readOnly" : true
}
Aspect Details Formula Source JavaScript function in formulas section Calculation Client-side (browser) Storage Not persisted to Polarion Recalculation On every row render or cell change Read-Only Always read-only; cannot be edited Function Signature function(info) { ... } where info.item contains row dataReturn Value Computed result; null for no value
Example formula definition:
"formulas" : {
"commonRpn" : "function(info){ var value = info.item['occ']*info.item['det']*info.item['sev']; return value?value:null; }"
}
Server-Render Type (Server-Side Computed)
Storage: Not stored; rendered by server
{
"header" : "Generated ID" ,
"binding" : "generatedId" ,
"serverRender" : "generateItemId" ,
"type" : "string" ,
"readOnly" : true
}
Aspect Details Rendering Server-side (Java/Velocity) Storage Not persisted to Polarion Display Text only; no editing Column Type Automatically becomes string type Read-Only Always read-only Performance Calculated during page load
Type Conversion Rules
String to Other Types
Target Type Conversion Rule intParse decimal number; reject non-numeric floatParse decimal number; support scientific notation currencyParse decimal; wrap in Currency dateParse ISO format (yyyy-MM-dd); strict validation datetimeParse ISO format with time; strict validation timeParse HH:mm:ss; colon-separated boolean"true" → true; anything else → falseenumValidate against enum IDs; reject unknown multiEnumSplit by colon; validate each ID
Object to String
Source Type String Output intDecimal representation floatDecimal representation (varies precision) currencyCurrency display (localized) dateISO format: YYYY-MM-DD datetimeISO format: YYYY-MM-DDTHH:MM:SS boolean"true" or "false"enumEnum option name multiEnumComma-separated option names (display); colon-separated IDs (storage) itemLinkWork item ID; full object in JSON
OData EDM Type Mapping
When RISKSHEET data is accessed via OData APIs, columns map to OData primitive types:
RISKSHEET Type OData EDM Type Example stringString "Sample text"intInt64 42floatDouble 3.14159ratingInt32 4booleanBoolean truecurrencyDecimal 1234.56dateDate "2025-12-31"datetimeDateTimeOffset "2025-12-31T14:30:00Z"timeDateTimeOffset (time component only) durationString "5.5h"enumString "critical" (ID value)multiEnumString "high:urgent" (colon-separated)itemLinkString "REQ-123" (ID)multiItemLinkString JSON array: "[{\"id\":\"RISK-1\"}]" taskLinkString "TSK-456" (ID)
Type Compatibility Matrix
Source Type Read Write Sort Filter Formula Export Nest string Yes Yes Yes Yes Yes Yes Yes int Yes Yes Yes Yes Yes Yes Yes float Yes Yes Yes Yes Yes Yes Yes currency Yes Yes Yes Yes Yes Yes Yes date Yes Yes Yes Yes Yes Yes Yes datetime Yes Yes Yes Yes Yes Yes Yes enum Yes Yes Yes Yes Yes Yes Yes itemLink Yes Yes Yes Yes Limited Yes Yes formula Yes No Yes No N/A Yes No
Type-Specific Validation
Numeric Type Validation
Integers: Must be whole numbers; decimals rejected
Float: Accepts scientific notation; special values (Infinity, NaN) supported
Currency: Enforces maximum precision (typically 2-4 decimals)
Rating: Must be within defined scale (1-5 typical)
Date/Time Validation
Date: Must be valid calendar date; future/past not restricted
DateTime: Includes timezone offset validation
Time: Must be valid 24-hour time (00:00-23:59)
Enum Validation
Single Enum: Must be valid enum ID from defined enumeration
Multi-Enum: Each selected ID must be valid; duplicates removed
Reference Validation
User Reference: Must be valid Polarion user ID
Item Link: Must be valid work item ID from allowed projects
Type Precision and Limits
Type Min Value Max Value Precision int -2^63 2^63-1 Exact float ±2.2e-308 ±1.8e308 15-17 digits currency N/A N/A Arbitrary (BigDecimal) rating 1 Configurable (typ. 5) Whole number date 0001-01-01 9999-12-31 Days datetime 0001-01-01T00:00 9999-12-31T23:59 Seconds time 00:00:00 23:59:59 Seconds string N/A ~64KB UTF-8
Actual limits depend on Polarion field definitions and browser/server capabilities. String fields in TextRichFormat fields have a practical limit around 64KB due to Polarion storage.
Best Practices
Use specific types (date, int, currency) rather than string to enable sorting, filtering, and type-safe validation.
For financial calculations, always use currency type instead of float to maintain precision.
When configuring multi-enum columns, remember the separator is colon (:) not comma, even though configuration files use comma-separated lists in some contexts.
Duration values are stored as strings in OData despite representing time. External integrations must parse string representations like “5.5h” or “330m”.
Formula columns are calculated client-side on every render. For complex calculations used frequently, consider using server-render columns for better performance.
KB Articles Support Tickets Source Code
PolarionAppConfigManager.java
risksheet.json
ColumnTypeManager.java
AppConfigHelper.ts
GetSetUtil.java