Skip to main content
Column Definition Binding System Polarion Work Item
binding: “sev”—>Direct field—>sev (enum field)
type: ratingbinding
binding: “req”—>Linked item—>Linked WI title
type: itemLinkresolution(upstream)
binding: “task”—>Task prefix—>Task WI status
+ “.status”resolution(downstream)

Binding Property

The binding property on a column definition specifies which Polarion work item field the column reads from and writes to. This is the fundamental mapping mechanism in Risksheet.
PropertyTypeDefaultDescription
bindingstringSame as column idThe Polarion work item field name. Supports direct field names, dot notation for linked item properties, and special prefixes.
{
  "id": "severity",
  "binding": "sev",
  "header": "Severity (S)",
  "type": "rating:severity"
}
The binding determines which Polarion field is read/written. The id is the column’s unique identifier used for referencing in formulas, cell decorators, views, and sortBy. When binding is omitted, it defaults to the same value as id.

Direct Field Binding

The simplest binding maps a column directly to a Polarion work item field by name. The field name must match the Polarion custom field ID exactly.
Binding PatternExampleResolves To
fieldName"sev"The sev custom field on the risk item
title"title"The work item title (standard field)
description"description"The work item description (standard field)
status"status"The workflow status (read-only)
id"id"The work item ID (read-only)
{
  "columns": [
    { "binding": "title", "header": "Failure Mode", "type": "text" },
    { "binding": "sev", "header": "Severity", "type": "rating:severity" },
    { "binding": "occ", "header": "Occurrence", "type": "rating:occurrence" },
    { "binding": "description", "header": "Description", "type": "text" }
  ]
}

Type Detection from Binding

When the type property is omitted from a column definition, Risksheet queries the Polarion field definition for the bound field and infers the column type automatically.
Polarion Field TypeInferred Column Type
Stringtext
Integerint
Floatfloat
Datedate
Booleanboolean
Enum (single)enum
Enum (multi-select)multiEnum
Currencycurrency
DurationTimeduration
This means you can define columns with just a binding and header:
{
  "binding": "dueDate",
  "header": "Due Date"
}
Risksheet detects that dueDate is a Date field in Polarion and automatically sets the column type to date.
You can override the auto-detected type by explicitly setting the type property. This allows displaying a field differently from its native Polarion type — for example, showing an integer field as a rating dropdown, or a string field as a date.

Linked Item Bindings (Upstream)

For itemLink and multiItemLink column types, the binding resolves to a linked work item rather than a field on the current row item. This enables upstream traceability columns that display properties of linked requirements, design elements, or other work items.
PropertyTypeDefaultDescription
bindingstringRequiredThe link role name or linked item field identifier.
typestringRequiredMust be itemLink or multiItemLink.
canCreatebooleantrueWhether users can create new linked items from the cell.
{
  "id": "requirement",
  "binding": "requirement",
  "header": "Linked Requirement",
  "type": "itemLink",
  "canCreate": false,
  "width": 200
}
Item link columns support a _link suffix convention for accessing the hyperlink URL of the linked item. A column with binding requirement provides the linked item’s display value, while requirement_link provides the navigable URL. See Item Link Columns and Multi-Item Link Columns for detailed configuration.

Task Bindings (Downstream)

Downstream task columns display properties of mitigation or control action items linked to the current risk item. Task bindings are configured through the dataTypes.task section and use task-level columns in the grid.
ConfigurationPurpose
dataTypes.task.typeWork item type for tasks (e.g., "task", "mitigationAction")
dataTypes.task.roleLink role connecting risk items to tasks
dataTypes.task.showInMenuWhether task creation appears in context menu (default: true)
{
  "dataTypes": {
    "task": {
      "type": "mitigationAction",
      "role": "mitigates",
      "showInMenu": true
    }
  }
}
Task-level columns do not have the level property set (they exist at the task level below the configured hierarchical levels). See Task Link Columns for task column configuration details.

Enumeration Binding

When a column is bound to a Polarion enumeration field, Risksheet handles the mapping between enum option IDs and display names:
Field TypeDisplay Behavior
Standard enum fieldsShows enum option ID in the grid
status fieldShows enum option name (display label)
String backing enumString value mapped to enum definition
Integer backing enumInteger value mapped to enum definition
{
  "id": "riskCategory",
  "binding": "riskCategory",
  "header": "Risk Category",
  "type": "enum:riskCategory"
}
The enum:riskCategory type syntax references the riskCategory definition in the enums section of risksheet.json. See Enum Columns for complete enum configuration.
The status field is the only enum field that displays its human-readable name rather than its ID. All other enum fields display the option ID in the grid. This is a platform behavior that cannot be overridden.

Relation Bindings (Dependent Enums)

The relations array in risksheet.json defines cascading relationships between enum columns. When a parent enum value changes, related child enum values are automatically updated or filtered.
PropertyTypeDescription
fromstringColumn ID of the parent enum
tostringColumn ID of the child enum
mappingobjectMap of parent value to array of valid child values
{
  "relations": [
    {
      "from": "riskCategory",
      "to": "riskSubCategory",
      "mapping": {
        "safety": ["mechanical", "electrical", "thermal"],
        "security": ["authentication", "encryption", "access"],
        "performance": ["latency", "throughput", "memory"]
      }
    }
  ]
}
Key behaviors of dependent enum relationships:
  • Forward propagation: Changing a parent value filters valid child options
  • Backward propagation: Selecting a child value can auto-populate the parent if only one valid parent exists
  • Multi-select handling: When a parent enum value is deselected, dependent child values are automatically removed
  • Bulk edit: Relationship rules apply to all selected rows during bulk operations
  • Undo/redo: All cascading updates are tracked in the undo stack as a single operation
Relationships must be defined between columns at the same binding level (both master or both task). Cross-level relationships (master column to task column) are not supported and will be ignored.
See Enum Columns for dependent enum configuration details.

System Field Bindings

Risksheet uses reserved system bindings for internal state management. These bindings are not user-configurable but are documented here for reference.
System BindingPurpose
IDStandard item identity binding
systemItemIdPolarion work item ID for cross-reference and linking
systemReadOnlyMarks entire items as non-editable
systemReadOnlyFieldsArray of specific field names that are non-editable
systemItemRevisionWork item revision for baseline comparison
systemTaskReadOnlyMarks linked task items as non-editable
systemTaskReadOnlyFieldsArray of task field names that are non-editable
reviewsRenderedReview status display column
reviewsAddReview addition control column
These bindings enable features like permission-based editability, revision tracking, and review workflow visualization. See System Fields for the complete list.

Read-Only Field Protection

The binding system enforces read-only protection on specific fields. The following fields are always read-only and cannot be modified through the Risksheet grid:
FieldReason
idWork item identity
statusControlled by workflow transitions
typeImmutable after creation
projectProject assignment is immutable
outlineNumberManaged by Polarion document structure
Save attempts to protected fields are silently ignored.

Column Properties for Binding Configuration

The full set of column properties that affect field mapping behavior:
PropertyTypeDefaultDescription
bindingstringSame as idPolarion field name
typestringAuto-detectedColumn data type. Overrides auto-detection.
formatstringNoneDisplay format string for dates, numbers
isContentHtmlbooleanSee applicationRender cell content as HTML
cellRendererstringNoneCustom rendering function name
multiLinebooleantrueMulti-line text editing
wordWrapbooleantrueText wrapping in cells

Complete Example

A risksheet.json demonstrating multiple binding patterns — direct fields, upstream links, downstream tasks, and enum relationships:
{
  "dataTypes": {
    "risk": {
      "type": "risk",
      "role": "has_risk"
    },
    "task": {
      "type": "mitigationAction",
      "role": "mitigates",
      "showInMenu": true
    }
  },
  "columns": [
    {
      "id": "failureMode",
      "binding": "title",
      "header": "Failure Mode",
      "type": "text",
      "width": 220,
      "level": 1
    },
    {
      "id": "requirement",
      "binding": "requirement",
      "header": "Requirement",
      "type": "itemLink",
      "canCreate": false,
      "width": 180,
      "level": 1
    },
    {
      "id": "riskCategory",
      "binding": "riskCategory",
      "header": "Category",
      "type": "enum:riskCategory",
      "width": 130,
      "level": 2
    },
    {
      "id": "sev",
      "binding": "sev",
      "header": "Severity (S)",
      "type": "rating:severity",
      "width": 80,
      "level": 2
    },
    {
      "id": "occ",
      "binding": "occ",
      "header": "Occurrence (O)",
      "type": "rating:occurrence",
      "width": 80,
      "level": 2
    },
    {
      "id": "rpn",
      "binding": "rpn",
      "header": "RPN",
      "type": "int",
      "formula": "commonRpn",
      "width": 70,
      "level": 2
    },
    {
      "id": "dueDate",
      "binding": "dueDate",
      "header": "Due Date",
      "type": "date",
      "width": 120,
      "level": 2
    }
  ],
  "formulas": {
    "commonRpn": "function(info){ var value = info.item['occ']*info.item['sev']; return value?value:null;}"
  },
  "enums": {
    "riskCategory": [
      { "id": "safety", "name": "Safety Risk" },
      { "id": "security", "name": "Security Risk" },
      { "id": "performance", "name": "Performance Risk" }
    ]
  },
  "ratings": {
    "severity": [
      { "id": "1", "name": "Negligible" },
      { "id": "2", "name": "Minor" },
      { "id": "3", "name": "Moderate" },
      { "id": "4", "name": "Significant" },
      { "id": "5", "name": "Catastrophic" }
    ],
    "occurrence": [
      { "id": "1", "name": "Remote" },
      { "id": "2", "name": "Low" },
      { "id": "3", "name": "Moderate" },
      { "id": "4", "name": "High" },
      { "id": "5", "name": "Very High" }
    ]
  }
}
Source Code
  • AppConfigParser.ts
  • RelationActionController.ts
  • AppConfigHelper.ts