Skip to main content

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.
LayerPurposeExamples
Polarion TypeHow data is stored in the repositoryText, Integer, IEnumOption, User
RISKSHEET TypeHow column is configured in risksheet.jsonstring, enum:severity, itemLink
OData TypeExternal API representationString, Int64, Date, Boolean
Editor TypeUI control for user inputTextInput, 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
}
AspectDetails
Polarion SourceText, TextRichFormat
OData TypeString
EditorText input (single or multi-line)
ConversionRich text fields converted to plain text; HTML/formatting stripped
Max LengthUnlimited (Polarion TextRichFormat limit ~64KB)
Empty ValueNull or empty string

Integer Type

Storage: 64-bit signed integer
{
  "header": "Priority",
  "binding": "priority",
  "type": "int",
  "format": "n0"
}
AspectDetails
Polarion SourceInteger, Rating (1-5), Enum backing store
OData TypeInt64
Range-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
EditorNumericInput with spinner
ConversionParses strings to integers; non-numeric input rejected
Formatn0 = no decimals, n2 = 2 decimal places

Float Type

Storage: 64-bit floating-point (IEEE 754)
{
  "header": "Weight",
  "binding": "weight",
  "type": "float",
  "format": "n3"
}
AspectDetails
Polarion SourceDecimal, Double
OData TypeDouble
Precision15-17 significant decimal digits
EditorNumericInput with spinner
ConversionParses locale-aware number formats
Special ValuesInfinity, -Infinity, NaN supported

Currency Type

Storage: Decimal with currency wrapper
{
  "header": "Budget",
  "binding": "budgetAmount",
  "type": "currency",
  "format": "c2"
}
AspectDetails
Polarion SourceDecimal field
OData TypeDecimal
PrecisionArbitrary precision (BigDecimal)
EditorNumericInput with currency formatting
Storage WrapperWrapped in Polarion Currency type
ConversionMaintains full precision for financial calculations
Formatc2 = 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"
}
AspectDetails
Polarion SourceBoolean field
OData TypeBoolean
Valuestrue or false
String Conversion"true" or "false" (case-insensitive)
EditorCheckbox control
DisplayChecked (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"
}
AspectDetails
Polarion SourceDateOnly field
OData TypeDate
FormatISO 8601: YYYY-MM-DD
Example2025-12-31
EditorDatePicker calendar control
StorageMidnight (00:00) assumed for time component
TimezoneUTC (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
}
AspectDetails
Polarion SourceDate, DateTime field
OData TypeDateTimeOffset
FormatISO 8601: YYYY-MM-DDTHH:MM:SSZ
Example2025-12-31T14:30:00+01:00
EditorDateTimePicker (combined control)
TimezoneOffset from UTC (e.g., +01:00)
PrecisionTo the second

Time Type (Time Only)

Storage: Clock time without date
{
  "header": "Start Time",
  "binding": "startTime",
  "type": "time",
  "format": "HH:mm:ss"
}
AspectDetails
Polarion SourceTimeOnly field
OData TypeDateTimeOffset (time component only)
FormatHH:MM:SS (24-hour)
Example14:30:00
EditorTimePicker control
MidnightRepresented as 00:00:00
PrecisionTo the second

Duration Type

Storage: Time span (hours, days, etc.)
{
  "header": "Effort (hours)",
  "binding": "effortHours",
  "type": "duration"
}
AspectDetails
Polarion SourceDurationTime field, or Integer/Float
OData TypeString
FormatString representation (e.g., "5.5h", "330m")
EditorText input with parser
StorageCan store as DurationTime object or numeric value
ParsingUses DurationTime.fromString() for conversion
DisplayFormatted 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
}
AspectDetails
Polarion SourceIEnumOption, Enum field
OData TypeString (enum ID)
Storage FormatEnum ID (e.g., "critical", "major")
Display FormatEnum name (e.g., “Critical”, “Major”)
Syntaxenum:enumTypeId (e.g., enum:severity_5)
EditorDropdown/Combobox with options
Null ValueNo selection = empty/null
DescriptionCan show definition if showEnumDescription: true

Multi-Enum Type (Multiple Selections)

Storage: Multiple enumeration option IDs
{
  "header": "Tags",
  "binding": "tags",
  "type": "multiEnum:tag_categories"
}
AspectDetails
Polarion SourceList<IEnumOption>, multi-enum field, or comma-separated string
OData TypeString
Storage FormatColon-separated IDs: "id1:id2:id3"
Display FormatAll selected option names joined
SeparatorColon (:) NOT comma
EditorMulti-select with checkboxes
Empty SelectionBlank values auto-filtered
SyntaxmultiEnum: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"
}
AspectDetails
Polarion SourceInteger field, Rating enum
OData TypeInt32
Range1-5 (configurable per rating type)
Storage FormatInteger: 1, 2, 3, 4, or 5
EditorRatingComboBox (star/icon selector)
Syntaxrating:ratingTypeId (e.g., rating:severity_5)
No SelectionNull/empty = unrated

Work Item Reference Types

Storage: Work item ID and metadata
{
  "header": "Linked Requirement",
  "binding": "requirement",
  "type": "itemLink",
  "id": "requirement"
}
AspectDetails
Polarion SourceLinked work item reference
OData TypeString (work item ID)
Storage FormatJSON object: { "id": "REQ-123", "title": "..." }
Display FormatClickable hyperlink to work item
EditorAutoComplete with OData suggestions
Null ValueNo link = empty
Nested Accessrequirement.title, requirement.status
Storage: Array of work item references
{
  "header": "Related Risks",
  "binding": "relatedRisks",
  "type": "multiItemLink",
  "id": "risks"
}
AspectDetails
Polarion SourceMultiple linked work items
OData TypeString (JSON array)
Storage FormatJSON array of items: [{ "id": "RISK-1" }, { "id": "RISK-2" }]
Display FormatComma-separated list of links
EditorMultiItemLinkEditor (add/remove)
Null ValueEmpty array []
Nested AccessrelatedRisks.title (concatenates all titles)
Storage: Link to downstream work item (task, mitigation, risk control)
{
  "header": "Mitigation",
  "binding": "task",
  "type": "taskLink",
  "id": "task"
}
AspectDetails
Polarion SourceDownstream linked work item
OData TypeString (work item ID)
Storage FormatJSON object with nested properties
Link RoleDefined in dataTypes configuration
EditorAutoComplete with filtered suggestions
Nested ColumnsAccess via task.title, task.status, task.type
Multi-Type SupportCan 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
}
AspectDetails
Polarion SourceUser field, assignees collection
OData TypeString (user ID)
Storage FormatUser ID string (e.g., "john.doe")
Display FormatUser full name
EditorAutoComplete with user suggestions
Single AssignmentClears existing assignees before assigning new user
Read-Only ModeShows user ID as string
Null ValueUnassigned = empty

Computed/Formula Types

Formula Type (Client-Side Calculated)

Storage: Not stored; calculated on every render
{
  "header": "Risk Priority (RPN)",
  "binding": "rpn",
  "formula": "commonRpn",
  "type": "int",
  "readOnly": true
}
AspectDetails
Formula SourceJavaScript function in formulas section
CalculationClient-side (browser)
StorageNot persisted to Polarion
RecalculationOn every row render or cell change
Read-OnlyAlways read-only; cannot be edited
Function Signaturefunction(info) { ... } where info.item contains row data
Return ValueComputed 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
}
AspectDetails
RenderingServer-side (Java/Velocity)
StorageNot persisted to Polarion
DisplayText only; no editing
Column TypeAutomatically becomes string type
Read-OnlyAlways read-only
PerformanceCalculated during page load

Type Conversion Rules

String to Other Types

Target TypeConversion 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 → false
enumValidate against enum IDs; reject unknown
multiEnumSplit by colon; validate each ID

Object to String

Source TypeString 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 TypeOData EDM TypeExample
stringString"Sample text"
intInt6442
floatDouble3.14159
ratingInt324
booleanBooleantrue
currencyDecimal1234.56
dateDate"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)
multiItemLinkStringJSON array: "[{\"id\":\"RISK-1\"}]"
taskLinkString"TSK-456" (ID)

Type Compatibility Matrix

Source TypeReadWriteSortFilterFormulaExportNest
stringYesYesYesYesYesYesYes
intYesYesYesYesYesYesYes
floatYesYesYesYesYesYesYes
currencyYesYesYesYesYesYesYes
dateYesYesYesYesYesYesYes
datetimeYesYesYesYesYesYesYes
enumYesYesYesYesYesYesYes
itemLinkYesYesYesYesLimitedYesYes
formulaYesNoYesNoN/AYesNo

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

TypeMin ValueMax ValuePrecision
int-2^632^63-1Exact
float±2.2e-308±1.8e30815-17 digits
currencyN/AN/AArbitrary (BigDecimal)
rating1Configurable (typ. 5)Whole number
date0001-01-019999-12-31Days
datetime0001-01-01T00:009999-12-31T23:59Seconds
time00:00:0023:59:59Seconds
stringN/A~64KBUTF-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 ArticlesSupport TicketsSource Code
  • PolarionAppConfigManager.java
  • risksheet.json
  • ColumnTypeManager.java
  • AppConfigHelper.ts
  • GetSetUtil.java