Apps documentation
Extension for Jira Service Management
Cloud Server/Data Center
Extension for Jira Service Management

Cloud

Server/Data Center

Guides
FAQ
Release notes
Last updated Apr 8, 2021

Java API (ScriptRunner)

Learn how to use data from Bundled Fields in ScriptRunner

Extension for Jira Service Management allows you to use data from Bundled Fields in ScriptRunner, or any other similar app. You’ll find all possible actions that you can perform this way in the right-hand side navigation menu.

Our API methods are public services that can be used in any code editor. The examples, however, are prepared to match the ScriptRunner’s format in particular. If you’d like to use the methods in other applications, you will need to adjust the code according to their requirements.

Info

Currently we don’t support ScriptRunner’s Behaviours.

Note

We’ve tested all methods in this chapter and made sure that they work in the form provided in the examples. Nevertheless, the support we provide doesn’t include verifying custom scripts. In case of any issues with customized code, we recommend checking out the ScriptRunner documentation, too.

Structure of an exemplary Bundled Fields custom field

Here is what an example Bundled Fields custom field looks like in the context of:

  • Configuration screen within the Bundled Fields app
    Bundled Field Structure - Configuration
    Bundled Field Structure - Configuration
  • Request Form
    Bundled Field Structure - Request Form
    Bundled Field Structure - Request Form
  • Request Details View
    Bundled Field Structure - Request Details View
    Bundled Field Structure - Request Details View
  • Jira Issue View
    Bundled Field Structure - Jira Issue View
    Bundled Field Structure - Jira Issue View
  • Jira REST API
    Bundled Field Structure - Jira REST API
    Bundled Field Structure - Jira REST API
  • Java API (ScriptRunner)
    Bundled Field Structure - Java API (ScriptRunner)
    Bundled Field Structure - Java API (ScriptRunner)
  • JSON format of the field
{
   "configurationId":3,
   "baseGroupId":{
      "fields":[
         {
            "id":"75355903-7c50-4298-a57b-8119e4350a57",
            "originId":"75355903-7c50-4298-a57b-8119e4350a57",
            "value":"text value 1"
         },
         {
            "id":"f617ff8d-4da1-4460-a7ba-19d45287de6e",
            "originId":"f617ff8d-4da1-4460-a7ba-19d45287de6e",
            "value":"text value 2"
         },
         {
            "id":"e3504c9d-ae95-4a6f-9e1e-43ad1897abf8",
            "originId":"e3504c9d-ae95-4a6f-9e1e-43ad1897abf8",
            "value":"86daf9e6-ac14-484a-b858-00fcc2a3e123"
         },
         {
            "id":"d503e309-1087-428a-8c1b-4da10c1b66be",
            "originId":"d503e309-1087-428a-8c1b-4da10c1b66be",
            "value":"33a885fa-9ee4-4e7f-8c84-84d7929544d5"
         },
         {
            "id":"d69d220a-bb32-46a4-9391-dbbd9d8eff26",
            "originId":"d69d220a-bb32-46a4-9391-dbbd9d8eff26",
            "value":"2021-01-11T23:00:00.000Z"
         },
         {
            "id":"ee8be8b3-1745-425b-9bcf-86c16c37a2bb",
            "originId":"ee8be8b3-1745-425b-9bcf-86c16c37a2bb",
            "value":"2021-01-12T11:06:00.000Z"
         },
         {
            "id":"9faa1c9f-25d1-451b-8002-819be057b56f",
            "originId":"9faa1c9f-25d1-451b-8002-819be057b56f",
            "value":"2021-01-11T13:18:00.000Z"
         },
         {
            "id":"3b328579-b57c-4aca-9451-e3019e95ffdb",
            "originId":"3b328579-b57c-4aca-9451-e3019e95ffdb",
            "value":"Multiline Text Value 1"
         }
      ],
      "order":0
   },
   "b1fcbf4e-a243-45ce-afe9-a6e8b401c41d":{
      "fields":[
         {
            "id":"a14aebf9-87da-4442-b4a3-0b5239ad2698",
            "originId":"75355903-7c50-4298-a57b-8119e4350a57",
            "value":"another text value 1"
         },
         {
            "id":"3c89db7b-192e-451b-aac8-7862e0cc3d68",
            "originId":"f617ff8d-4da1-4460-a7ba-19d45287de6e",
            "value":"another text value 2"
         },
         {
            "id":"81018e91-88c5-4cf7-b688-a5090503884b",
            "originId":"e3504c9d-ae95-4a6f-9e1e-43ad1897abf8",
            "value":"70605cff-5c64-4bc2-888d-02a268af2b7d"
         },
         {
            "id":"bc033644-4940-495b-bdc3-0f8b5b9d80bb",
            "originId":"d503e309-1087-428a-8c1b-4da10c1b66be",
            "value":"d83d4de4-8b46-418c-9984-a400fc331230,976f342a-232b-4128-877f-a7ce2563a075"
         },
         {
            "id":"84a026d6-eeda-43f0-8d1e-c54be1db6eb7",
            "originId":"d69d220a-bb32-46a4-9391-dbbd9d8eff26",
            "value":"2021-01-26T23:00:00.000Z"
         },
         {
            "id":"d2791a87-be7c-47fc-9a92-faa63cda1dbe",
            "originId":"ee8be8b3-1745-425b-9bcf-86c16c37a2bb",
            "value":"2021-01-20T12:56:00.000Z"
         },
         {
            "id":"bbb8a49a-b1ec-4e82-9565-7caf6005179b",
            "originId":"9faa1c9f-25d1-451b-8002-819be057b56f",
            "value":"2021-01-11T12:34:00.000Z"
         },
         {
            "id":"9c5c106b-1287-467f-a769-af7943f1d1a5",
            "originId":"3b328579-b57c-4aca-9451-e3019e95ffdb",
            "value":"Another Multiline Text Value 1"
         }
      ],
      "order":1
   }
}

Definitions

  • configurationId: ID of a specific configuration of a Bundled Fields custom field (table AO_8CB340_DF_BUNDLED_CFG)
  • baseGroupId: Predefined name of the first group’s key. Every next key name is generated by the system (just as the key b1fcbf4e-a243-45ce-afe9-a6e8b401c41d in the example below)
{
   "configurationId":3,
   "baseGroupId":{
      "fields":[
         
      ],
      "order":0
   },
   "b1fcbf4e-a243-45ce-afe9-a6e8b401c41d":{
      "fields":[
         
      ],
      "order":1
   }
}
  • order: Sequence number of the group on the issue view
  • fields: Set of subfields’ values in a given group
  • id: Key (ID) of a subfield value
  • originId: Key (ID) of a subfield value configuration
  • value: Value of a subfield. If it’s a text or a date then a specific value will be given. If it’s a select list or a checkbox the value will be represented by comma-separated keys (IDs) of the given subfield’s configuration, for example:
"value":"d83d4de4-8b46-418c-9984-a400fc331230,976f342a-232b-4128-877f-a7ce2563a075"

Get bundled field

Get an object representing a bundled field for the given issue key and the bundled field’s ID.

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

Get subfield

Get a subfield object for the given name and group index.

def subField = bundledField.getSubfield("Name", 0)
Note

Groups numbering starts from 0.

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

def subField = bundledField.getSubfield("Name", 0)
Tip

You can also retrieve a subfield by its originId. Learn more

Get group by index

Get a group object using index.

def group = bundledField.getGroup(0)
Note

Rows numbering starts from 0.

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

def group = bundledField.getGroup(0)

Get all groups of a field

Get a list of all groups of a bundled field.

def groups = bundledField.getGroups()

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

def groups = bundledField.getGroups()

Add new group with subfields

Add a new group containing subfields from the list defined above. Either the value and originId, or the name will be recognized.

def newGroupFields = [
    Subfield.builder()
        .originId("7a23604a-c78a-4a54-b5ff-9f92175ba7a7")
        .value("John")
        .build(),
    Subfield.builder()
        .name("Date of arrival")
        .value(new Date())
        .build(),
    Subfield.builder()
        .originId("f9ad017e-df32-4b7a-8120-ef1e9e8fff36")
        .value(['fdd8d043-f13b-4d71-8ea3-1f838e7c178b'])
        .build()
]

bundledField.addGroup(newGroupFields)

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

def newGroupFields = [
    Subfield.builder()
        .originId("7a23604a-c78a-4a54-b5ff-9f92175ba7a7")
        .value("John")
        .build(),
    Subfield.builder()
        .name("Date of arrival")
        .value(new Date())
        .build(),
    Subfield.builder()
        .originId("f9ad017e-df32-4b7a-8120-ef1e9e8fff36")
        .value(['fdd8d043-f13b-4d71-8ea3-1f838e7c178b'])
        .build()
]

bundledField.addGroup(newGroupFields)

Remove group by parameter

Remove a group of the given parameter.

bundledField.removeGroup(group)

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

def group = bundledField.getGroup(0)

bundledField.removeGroup(group)

Remove group by index

Remove a group of the given index.

bundledField.removeGroup(2)
Note

Rows numbering starts from 0.

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

bundledField.removeGroup(2)

Remove first group

Remove the first group - respectively to removeGroup(0).

bundledField.removeFirstGroup()

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

bundledField.removeFirstGroup()
String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

bundledField.removeFirstGroup()

Remove last group

Remove the first group - respectively to removeGroup(bundledField.getGroups().size() - 1)

bundledField.removeLastGroup()

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

bundledField.removeLastGroup()

Set subfield value in all groups

Set a value for a subfield in all groups (without defining the index).

Note

Type of the value must be compatible with the configured field’s type.

bundledField.setSubfieldValue("Name", "Jane Doe")

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

bundledField.setSubfieldValue("Name", "Jane Doe")

Set subfield value in a group

Set a value for a subfield in a group (with a defined index).

bundledField.setSubfieldValue(“Name”, “Jane Doe”, 2)

bundledField.setSubfieldValue("Name", "Jane Doe", 2)

Example

import com.atlassian.jira.component.ComponentAccessor
import groovy.json.JsonSlurper
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = 'TEST-38'
String bundledFieldId= "customfield_12000"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

bundledField.setSubfieldValue("Name", "Jane Doe", 2)

List of available signatures

BundledFieldService

BundledField getBundledField(String issueKey, String customFieldId)

BundledField

Subfield getSubfield(String name, int groupIndex)
 Group getGroup(int groupIndex)
 List<Group> getGroups()
 void setSubfieldValue(String name, Object value)
 void setSubfieldValue(String name, Object value, int groupIndex)
 void addGroup(List<Subfield> fields)
 void removeGroup(int groupIndex)
 void removeGroup(Group group)
 void removeFirstGroup()
 void removeLastGroup()

Group

String getId()
 List<Subfield> getFields()

Subfield

String getId()
String getOriginId()
Object getValue()
String getName()
String getType()

Correct values for each type

Subfield type Supported data type Additional conditions
TEXT String Maximum length 255 characters. Value should be compatible with a regular expression, mask, or set formatting (for example, number for the Currency type).
TEXTAREA String
USER String Contains a key of a user existing in Jira
SELECT String Contains ID/Name of the configured option.
CHECKBOX Iterable Collection of IDs/Names of the configured options.
DATE Date
DATETIME Date
TIME Date
Tip

Use a null or an empty string to clear the value.

Validation

ScriptRunner Validation is possible with a method overloading script within the BundledFieldService. It allows you to use a specific object from a postfunction (or validation) that’s being executed during transition.

BundledField getBundledField(Issue issue, String customFieldId)

Example

Here’s an example of validating a certain word as forbidden.

Script

Bundled Fields Java API - Validation Script
Bundled Fields Java API - Validation Script

Result

Bundled Fields Java API - Validation result
Bundled Fields Java API - Validation result
Note

The ScriptRunner postfunction must be placed below the “Update change history for an issue and store the issue in the database” step:

Bundled Fields Java API - ScriptRunner postfunction's order
Bundled Fields Java API - ScriptRunner postfunction's order

Otherwise, the value you’ve defined in the script will be overwritten by the value from the screen assigned to the transition.

Tip: Removing the field from the screen solves this problem, too.

Classes representing subfield types

All classes listed in the below table inherit from the Subfield object and get retrieved by the BundledField object’s methods, depending on their type.

derived class subfield’s type path methods defined in the class
CheckboxField checkbox import com.deviniti.plugins.bundledfields.api.issue.CheckboxField List<Option> getSelectedOptions
SelectField select import com.deviniti.plugins.bundledfields.api.issue.SelectField Option getSelectedOption
DateField date, datetime, time import com.deviniti.plugins.bundledfields.api.issue.DateField
TextField textarea, text import com.deviniti.plugins.bundledfields.api.issue.TextField
UserField user import com.deviniti.plugins.bundledfields.api.issue.UserField

Example of using the returned SelectField type

import com.deviniti.plugins.bundledfields.api.issue.BundledFieldService
import com.deviniti.plugins.bundledfields.api.issue.Subfield
import com.deviniti.plugins.bundledfields.api.issue.CheckboxField
import com.deviniti.plugins.bundledfields.api.issue.SelectField
import com.deviniti.plugins.bundledfields.api.issue.Option
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin

@WithPlugin("com.intenso.jira.plugins.jsd-extender")

@PluginModule
BundledFieldService bundledFieldService

String issueKey = "TEST-1"
String bundledFieldId= "customfield_10200"

def bundledField = bundledFieldService.getBundledField(issueKey, bundledFieldId)

Subfield subField = bundledField.getSubfield("select", 0)

if (subField instanceof SelectField) {
Option selectedOption = subField.getSelectedOption()
log.info(selectedOption.getName())
}

Methods available in the returned Option object

String getId()
String getName()

SubfieldUtils Class

This class contains additional methods for checking the type of a Subfield object and casting it to a specific derived class. If the subfield is of a different type than the one listed in the table in the first section, the following exception is thrown: SubfieldClassCastException to inform about the conflict: %s subfield cannot be cast to %s subfield.

SubfieldUtils path

import com.deviniti.plugins.bundledfields.api.issue.utils.SubfieldUtils;

SubfieldUtils methods

boolean isCheckbox(Subfield subfield)
boolean isSelect(Subfield subfield)
boolean isDate(Subfield subfield)
boolean isText(Subfield subfield)
boolean isUser(Subfield subfield)

CheckboxField toCheckboxField(Subfield subfield)
SelectField toSelectField(Subfield subfield)
DateField toDateField(Subfield subfield)
TextField toTextField(Subfield subfield)
UserField toUserField(Subfield subfield)

Implementation of the toString method in classes: Group, Subfield, and Option

When you type any of the above mentioned objects into the console you will be able to immediately see all the information it contains, for example:

Group(id=baseGroupId, fields=[TextField(super=Subfield(id=b0603214-7ab4-4880-9a9a-ba14d3c26156, originId=b0603214-7ab4-4880-9a9a-ba14d3c26156, value=Some value, name=text field, type=text)), SelectField(super=Subfield(id=740bf7fc-1f6e-475e-93a0-986f0f4ebb4e, originId=740bf7fc-1f6e-475e-93a0-986f0f4ebb4e, value=[6a559b54-7821-40f8-bb11-ce78d0ee8f19], name=select, type=select), selectedOption=Option(id=6a559b54-7821-40f8-bb11-ce78d0ee8f19, name=s2))])

Retrieving a field by originId

In most cases, retrieving a field by its name will be enough but we also provide the possibility to retrieve a field by its originId when using the getSubfield and setSubfieldValue methods.

Differences between ID and originId

Please note that the originId of a subfield differs from its ID. Here are the definitions:

  • originId – indicator of a subfield existing in the configuration as its identifier
  • ID – is an identifier of a subfield within the Bundled Fields custom field (unique across all groups)

How to find originId

There is a number of places you can get the originId from:

  • ScriptRunner console. You’ll see the originId in the Result tab after retrieving a group:
    Bundled Fields Java API - Getting the originId from the ScriptRunner console
    Bundled Fields Java API - Getting the originId from the ScriptRunner console
  • Database. You’ll find the originId in the AO_2AE210_JSD_BUNDLED_FIELD table. Navigate to the FIELD_ID column and select a specific record based on the customfield’s ID and its context.
  • Developer console in browser (Jira issue view, edit issue screen, or configuration screen):
    Bundled Fields Java API - Getting the originId from the Developer console in browser
    Bundled Fields Java API - Getting the originId from the Developer console in browser

Cases that throw exceptions

  • Providing a data type that is not compatible with the configured subfield’s type.
  • Exceeding the character limit (255) in a text field (single-line).
  • Trying to set a value for the separator (which is a technical field).
  • Providing a non-existent option as a value.
  • Providing a userKey of a non-existent user.
  • Providing a non-existent subfield name.
  • Providing a non-existent group index.
  • Providing an empty value for a required subfield.
  • Providing a value that is not compatible with the defined formatting, regular expression, or value mask.
  • Trying to exceed the configured number of groups for an issue.
  • Trying to create a new group without a required subfield.
  • Trying to perform an operation on a Bundled Field that hasn’t been configured (no configuration of such field has ever been saved).
  • Error during form validation while trying to update the issue (the possible reason may be a globally required field that hasn’t been filled).

Need help?

If you can’t find the answer you need in our documentation, raise a support request. Include as much information as possible to help our support team resolve your issue faster.