Update table field via Scriptrunner (Java API)

This script can update:

  • table’s existing rows

  • update table with a new row

import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.bc.issue.IssueService import com.atlassian.jira.util.ErrorCollection import groovy.json.JsonBuilder import groovy.json.JsonSlurper // Get the necessary Jira components def issueService = ComponentAccessor.getIssueService(); def userManager = ComponentAccessor.getUserManager(); def issueManager = ComponentAccessor.getIssueManager(); def customFieldManager = ComponentAccessor.getCustomFieldManager(); // Specify the user to perform the update def user = userManager.getUserByName("admin"); // Specify the issue to update def issue = issueManager.getIssueObject("BD-6"); // Specify the table field to update (replace 10347l with the actual custom field ID) def customField = customFieldManager.getCustomFieldObject(10347l); def issueInputParameters = issueService.newIssueInputParameters(); // Retrieve the current value of the table field for the given issue def oldValue = customField.getCustomFieldType().getActualValue(customField, issue) as String; /* New */ // Check if value is NULL if (oldValue == null) { oldValue = '{"values":[]}'; } // Parse the current value as JSON def jsonSlurper = new JsonSlurper(); def object = jsonSlurper.parseText(oldValue); // Assert that the parsed object is a map and its values are a list assert object instanceof Map assert object.values instanceof List // Iterate over each row in the table object.values.each { row -> // Assert that the row is a map assert row instanceof Map // Check if the value of "field-219" in the row is "text" if (row.get("field-219") == "text") { // Update the value of "field-219" to "change text" row.put("field-219", "change text") } // Log the updated row log.warn(row); } /* New */ // Add new row to existing rows object.values.push([ "field-191": [105], "field-219": "text2", "field-192": "BD-7", "field-190": ["admin"], "field-247": "45.5", "field-189": false, "id": -1 // to add new row ]); // Build the JSON with the updated rows JsonBuilder builder = new JsonBuilder(object); // Set the table value using the new JSON value issueInputParameters.addCustomFieldValue(customField.getId(), builder.toString()); // Skip the check screen issueInputParameters.setSkipScreenCheck(true); // Retain existing values when the parameter is not provided issueInputParameters.setRetainExistingValuesWhenParameterNotProvided(true, true); // Perform the update log.warn("start") // Validate the update parameters IssueService.UpdateValidationResult validationResult = issueService.validateUpdate(user, issue.getId(), issueInputParameters); // Check if the validation is successful if (validationResult.isValid()) { // Update the issue with the new values IssueService.IssueResult issueResult = issueService.update(user, validationResult); // Check if the issue update is successful if (!issueResult.isValid()) { log.error(issueResult.getErrorCollection().toString()); } } else { log.error(validationResult.getErrorCollection().toString()); } log.warn("end")

© 2023, STAGIL