Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Overview

Widgets are used to make up the UI of edit screens for entities, and include combo boxes, text areas, radio buttons and many more UI components.

Widgets are returned from the Widgets API Resource end point or by using the "Widgets" expand when retrieving an entity or project.

All widgets share the following value/options:

PropertyTypeDescription
WidgetCategorystring Either "intrinsic" or "custom", for in-built and custom widgets
NamestringName of the inbuilt or custom widget
LabelstringThe label for the widget
WidgetTypestringA type-descriminator, used for determining how the widget should be rendered
ImplementationTypestringThe handler (class) in code which is used to represent this widget, this information can be used to provide additional customisation to a widget based on what information it represents.
HandlerTypestringThe key of the handler being used to render this widget, this information can be used to provide additional customisation to a widget based on what information it represents.
ValueTypestringThe JSON Schema type of the value for this widget, these should be consistent with the swagger for the API.
ItemIdstringA unique ID assigned to some inbuilt widgets so they can be handled in special ways within the UI - for example "remote links" for a requirement will not be shown if the requirement is being created, or if it has yet to be synchronized with any remote entities, and that remote links widget is identified by it's ItemId.
RequiredBooleanIf present, this determines if the widget is required or not. If the value is not present, the default behaviour of not-required is assumed.
ReadOnlyBooleanIf present, this widget is in a read-only state.
TabIndexintegerRepresents the tab-order of fields on screen - normally widgets are returned in-order anyway, but this can be used for explicit tab-order assignment which does not conform to field order.
HiddenBooleanIf the value is present, determines if the field is current hidden or not - if not present, the field is assumed to be visible.
FormNamestringGenerally retained for internal use by Enterprise Tester, if present, this will be the key used for the key/value pair of this widget when submitted back to the server.
DescriptionstringDescription of the field (descriptions can be captured on the custom field configure screen for each custom field). Descriptions are not currently used within the Enterprise Tester UI, but are available for 3rd party tool developers.

In addition each widget may have more options configured specific to that type of field.

Note: intrinsic fields do not currently include their current value in their representation, the value is instead retrieved from the model, using the 'Name' or 'FormName' as the key.

Widgets

Assign User

The assign user field is used to pick an assignee - it makes use of the Users Search API resource to retrieve users for the picker.

Widget Type: AssignUserPicker

Code Block
languagenone
{
  "FieldCategory": "intrinsic",
  "Name": "AssignedTo",
  "Label": "Assigned To",
  "WidgetType": "AssignUserPicker",
  "ImplementationType": "EnterpriseTester.Core.CustomFields.IntrinsicFields.AssignededTo",
  "HandlerType": "AssignedTo",
  "ItemId": "assigned-to",
  "Required": false,
  "TabIndex": 106,
  "FormName": "requirement.AssignedTo"
}

Cascading Select

Widget Type: CascadingSelect

The cascading select is a series of 2 or more combo boxes, where selections and the first level determine what child options can be selected in the second combo etc. The number of combo-boxes requires is determined by the "Levels" property (2 in this case for the example below).

Selections are represented as an array, with the first element being the first-level section, second element being the second-level selection and so on, the field must support optional selection of second/third etc. level options.

Code Block
languagenone
 {
  "Levels": 2,
  "Value": [
    {
      "Identifier": "10005",
      "Text": "Level A"
    },
    {
      "Identifier": "10007",
      "Text": "Level 1"
    }
  ],
  "Options": [
    {
      "Identifier": "10005",
      "Text": "Level A",
      "Children": [
        {
          "Identifier": "10007",
          "Text": "Level 1",
          "Children": []
        },
        {
          "Identifier": "10010",
          "Text": "Level 2",
          "Children": []
        }
      ]
    },
    {
      "Identifier": "10006",
      "Text": "Level B",
      "Children": [
        {
          "Identifier": "10008",
          "Text": "Level 2",
          "Children": []
        },
        {
          "Identifier": "10009",
          "Text": "Level 1",
          "Children": []
        }
      ]
    }
  ],
  "FieldCategory": "custom",
  "Name": "Cascading",
  "Label": "Cascading`",
  "WidgetType": "CascadingSelect",
  "ImplementationType": "EnterpriseTester.Plugins.DefectTracking.Fields.DefectTrackerCascadingSelectCustomField",
  "HandlerType": "Defect Tracker Cascading Select",
  "ValueType": "IValue[]",
  "Required": false,
  "TabIndex": 117,
  "FormName": "requirement.Cascading",
  "Description": ""
}

CheckBox

Widget Type: Checkbox

Code Block
languagenone
{
  "Value": true,
  "FieldCategory": "custom",
  "Name": "CustomCheckBox",
  "Label": "CustomCheckBox",
  "WidgetType": "CheckBox",
  "ImplementationType": "EnterpriseTester.Plugins.CustomFields.Handlers.CheckboxFieldType",
  "HandlerType": "Checkbox",
  "ValueType": "Boolean",
  "Required": false,
  "TabIndex": 108,
  "FormName": "requirement.CustomCheckBox",
  "Description": ""
}

Date Picker

The date picker field expects the date to submitted as a string, conforming to the FormatString (.Net Date/Time format string). In addition the .Net date/time format string, we also include a FormatCode which is a PHP and ExtJS compatible parsing/format syntax (see the Ext.Date documentation for more details).

Widget Type: Date

Code Block
languagenone
{
  "FormatCode": "j/i/Y",
  "FormatString": "d/mm/yyyy",
  "FieldCategory": "custom",
  "Name": "CustomDate",
  "Label": "CustomDate",
  "WidgetType": "Date",
  "ImplementationType": "EnterpriseTester.Plugins.CustomFields.Handlers.DateField",
  "HandlerType": "Date",
  "ValueType": "Date",
  "Required": false,
  "TabIndex": 109,
  "FormName": "requirement.CustomDate",
  "Description": ""
}

External Comments

Widget Type: RequirementExternalComments

Code Block
languagenone
{
  "FieldCategory": "intrinsic",
  "Name": "ExternalComments",
  "Label": "External Comments",
  "WidgetType": "RequirementExternalComments",
  "ImplementationType": "EnterpriseTester.Core.CustomFields.IntrinsicFields.RequirementExternalComments",
  "HandlerType": "RequirementExternalComments",
  "ItemId": "requirementcommentsgrid",
  "Required": false,
  "ReadOnly": true,
  "TabIndex": 109
}

Widget Type: ExternalLinks

Code Block
languagenone
{
  "FieldCategory": "intrinsic",
  "Name": "ExternalLinks",
  "Label": "External Links",
  "WidgetType": "ExternalLinks",
  "ImplementationType": "EnterpriseTester.Core.CustomFields.IntrinsicFields.ExternalLinksGrid",
  "HandlerType": "ExternalLinksGrid",
  "ItemId": "externallinksgrid",
  "Required": false,
  "ReadOnly": true,
  "TabIndex": 110
}

Html Editor

Widget Type: HtmlEditor

Code Block
languagenone
{
  "Value": "<b><font color=\"#ff0000\">​Hello world</font></b>",
  "FieldCategory": "custom",
  "Name": "CustomRichText",
  "Label": "CustomRichText",
  "WidgetType": "HtmlEditor",
  "ImplementationType": "EnterpriseTester.Plugins.CustomFields.Handlers.RichTextField",
  "HandlerType": "RichText",
  "ValueType": "String",
  "Required": false,
  "TabIndex": 114,
  "FormName": "requirement.CustomRichText",
  "Description": ""
}

Label

Widget Type: Label

This component is used for rendering a read-only text widget.

Code Block
languagenone
{
  "FieldCategory": "intrinsic",
  "Name": "CreatedBy",
  "Label": "Raised By",
  "WidgetType": "Label",
  "ImplementationType": "EnterpriseTester.Core.CustomFields.IntrinsicFields.Label",
  "HandlerType": "Label",
  "ValueType": "String",
  "Required": false,
  "TabIndex": 102,
  "FormName": "incident.CreatedBy",
  "Value": "Joe Blogs (joeb)"
}

Multi Select

Widget Type(s): CheckBoxGroup, MultiSelect

Code Block
languagenone
{
  "Values": [
    "911d5b79-cdf2-477e-ae36-2fb4a0afa2b9",
    "cb3459de-f3a2-4ce5-bb54-25cb20778d5d"
  ],
  "Options": [
    {
      "Identifier": "911d5b79-cdf2-477e-ae36-2fb4a0afa2b9",
      "Text": "A"
    },
    {
      "Identifier": "ad0b2fc6-be31-4be8-83b4-c32ff12e50b6",
      "Text": "B"
    },
    {
      "Identifier": "cb3459de-f3a2-4ce5-bb54-25cb20778d5d",
      "Text": "C"
    }
  ],
  "FieldCategory": "custom",
  "Name": "CustomMultiSelect",
  "Label": "CustomMultiSelect",
  "WidgetType": "MultiSelect",
  "ImplementationType": "EnterpriseTester.Plugins.CustomFields.Handlers.MultiSelectField",
  "HandlerType": "MultiSelect",
  "ValueType": "String[]",
  "Required": false,
  "TabIndex": 107,
  "FormName": "requirement.CustomMultiSelect",
  "Description": ""
}

Multi-line Text Area

Widget Type: TextArea

Code Block
languagenone
{
  "Value": "This is line 1\nThis is line 2",
  "FieldCategory": "custom",
  "Name": "CustomTextArea",
  "Label": "CustomTextArea",
  "WidgetType": "TextArea",
  "ImplementationType": "EnterpriseTester.Plugins.CustomFields.Handlers.TextAreaField",
  "HandlerType": "TextArea",
  "ValueType": "String",
  "Required": false,
  "TabIndex": 105,
  "FormName": "requirement.CustomTextArea",
  "Description": ""
}

Single Select

Widget Type(s): ComboBox, RadioGroup

Code Block
languagenone
{
  "Value": "9bf6adcd-d3de-4e0f-b794-1fc898cf0fa4",
  "Options": [
    {
      "Identifier": "9bf6adcd-d3de-4e0f-b794-1fc898cf0fa4",
      "Text": "A"
    },
    {
      "Identifier": "536e8f83-6c4a-4bbd-bd1d-e9c81071f190",
      "Text": "B"
    },
    {
      "Identifier": "bcf55fd1-3f85-4f21-b316-afc5bd085e0f",
      "Text": "C"
    }
  ],
  "FieldCategory": "custom",
  "Name": "CustomComboBox",
  "Label": "CustomComboBox",
  "WidgetType": "ComboBox",
  "ImplementationType": "EnterpriseTester.Plugins.CustomFields.Handlers.ComboBoxField",
  "HandlerType": "ComboBox",
  "ValueType": "String",
  "Required": false,
  "TabIndex": 106,
  "FormName": "requirement.CustomComboBox",
  "Description": ""
}

Single-line Text widget

Widget Type: Text

Code Block
languagenone
{
  "Value": "Hello world",
  "MinLength": 1,
  "MaxLength": 1024,
  "MaxLengthText": "Field must be between 1 and 1024 characters long",
  "MinLengthText": "Field must be between 1 and 1024 characters long",
  "FieldCategory": "custom",
  "Name": "CustomText",
  "Label": "CustomText",
  "WidgetType": "Text",
  "ImplementationType": "EnterpriseTester.Plugins.CustomFields.Handlers.TextField",
  "HandlerType": "Text",
  "ValueType": "String",
  "Required": false,
  "TabIndex": 104,
  "FormName": "requirement.CustomText",
  "Description": "",
  "EmptyText": "Please enter some text"
}

Time Span

Time span fields are rendered using the text widget - to provide an alternative representation of this field in your own tool, use the HandlerType or ImplementationType to detect the presence of the estimated or actual duration fields:

Widget Type: Text

Code Block
languagenone
{
  "EmptyText": "eg. 4d, 5h 30m",
  "FieldCategory": "intrinsic",
  "Name": "EstimatedDuration",
  "Label": "Est. Duration",
  "WidgetType": "Text",
  "ImplementationType": "EnterpriseTester.Core.CustomFields.IntrinsicFields.EstimatedDuration",
  "HandlerType": "EstimatedDuration",
  "ValueType": "String",
  "Required": false,
  "TabIndex": 105,
  "FormName": "requirement.EstimatedDurationString"
}