...
JAVA API for the Table Grid Next Generation
JAVA API Examples
...
language | java |
---|
theme | Eclipse |
---|
firstline | 1 |
---|
title | readFieldData usage example |
---|
linenumbers | true |
---|
collapse | true |
---|
...
Java API Examples
Expand |
---|
title | readFieldData usage example |
---|
|
readFieldData usage exampleThe example script reads all data from a Grid custom field with default configuration called API Sample in issue TEST-1. Code Block |
---|
| // This script reads all data from a Grid custom field with default
// configuration named "API Sample" in issue TEST-1
import com.atlassian.jira.component.ComponentAccessor |
|
...
import com.atlassian.jira.issue.CustomFieldManager |
|
...
import com.atlassian.jira.issue.Issue |
|
...
import com.atlassian.jira.issue.IssueManager |
|
...
import com.atlassian.jira.issue.fields.CustomField |
|
...
import com.atlassian.plugin.PluginAccessor |
|
...
import com.atlassian.jira.user.ApplicationUser |
|
...
...
...
...
id
IssueManager issueManager = ComponentAccessor.getOSGiComponentInstanceOfType(IssueManager.class) |
|
...
Issue issue = issueManager.getIssueObject("TEST- |
|
...
...
Long issueId = issue.getId() |
|
...
...
...
TGNG custom field id
CustomFieldManager customFieldManager = ComponentAccessor.getOSGiComponentInstanceOfType(CustomFieldManager.class) |
|
...
...
tgngCustomField = customFieldManager.getCustomFieldObjectsByName(" |
|
...
...
...
...
...
tgngCustomField.getIdAsLong() |
|
...
...
user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser() |
|
...
...
...
...
PluginAccessor pluginAccessor = ComponentAccessor.getPluginAccessor() |
|
...
Class apiServiceClass = pluginAccessor.getClassLoader().findClass("com.idalko.tgng.jira.server.api.GridService") |
|
...
...
gridService = ComponentAccessor.getOSGiComponentInstanceOfType(apiServiceClass) |
|
...
// Read field data
def fieldData = gridService.readFieldData(issueId, tgngCustomFieldId, user, null)
def gridRows = fieldData.getRows()
StringBuilder result = new StringBuilder() |
|
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
result.append("Order: ${columns.get("jseq")}, ")
|
|
...
...
append("Summary: ${columns.get("jsummary")}, ")
|
|
...
...
...
...
...
...
result.append("Assignee: ${assignee == null ? "null" : assignee.get("username")}, ")
|
|
...
language | java |
---|
theme | Eclipse |
---|
firstline | 1 |
---|
title | addRows usage example |
---|
linenumbers | true |
---|
collapse | true |
---|
...
result.append("Status: ${columns.get("jstatus")};<br>")
}
return result
|
|
Expand |
---|
title | addRows usage example |
---|
|
addRows usage exampleThe example script adds 2 rows to a Grid custom field with default configuration called API Sample in issue TEST-1. Code Block |
---|
| // This script adds two rows to Grid custom field with default configuration
// named "API Sample" in issue TEST-1
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.plugin.PluginAccessor
import com.atlassian.jira.user.ApplicationUser
// Get issue id
IssueManager issueManager = ComponentAccessor.getOSGiComponentInstanceOfType(IssueManager.class)
Issue issue = issueManager.getIssueObject("TEST-1")
Long issueId = issue.getId()
// Get TGNG custom field id
CustomFieldManager customFieldManager = ComponentAccessor.getOSGiComponentInstanceOfType(CustomFieldManager.class)
CustomField tgngCustomField = customFieldManager.getCustomFieldObjectsByName("API Sample").get(0)
Long tgngCustomFieldId = tgngCustomField.getIdAsLong()
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
// Get GridService
PluginAccessor pluginAccessor = ComponentAccessor.getPluginAccessor()
Class apiServiceClass = pluginAccessor.getClassLoader().findClass("com.idalko.tgng.jira.server.api.GridService")
def gridService = ComponentAccessor.getOSGiComponentInstanceOfType(apiServiceClass)
// Add a row
// Only "key" is required for userlist columns
gridService.addRows(issueId, tgngCustomFieldId, user, [
["jsummary": "Buy groceries", "jassignee": ["key": user.getKey()], "jstatus": "Open"],
["jsummary": "Plan vacation", "jassignee": ["key": user.getKey()], "jstatus": "In Progress"]
]) |
|
Expand |
---|
title | updateRows usage example |
---|
|
updateRows usage exampleThe example moves all rows assigned to a current user in status In Review to status Closed in a Grid custom field with default configuration called API Sample in issue TEST-1. Code Block |
---|
| // This script moves all rows assigned to a current user in status "In Review"
// to status "Closed" in a Grid custom field with default configuration named
// "API Sample" in issue TEST-1
import com.atlassian.jira.component.ComponentAccessor |
|
...
import com.atlassian.jira.issue.CustomFieldManager |
|
...
import com.atlassian.jira.issue.Issue |
|
...
import com.atlassian.jira.issue.IssueManager |
|
...
import com.atlassian.jira.issue.fields.CustomField |
|
...
import com.atlassian.plugin.PluginAccessor |
|
...
import com.atlassian.jira.user.ApplicationUser |
|
...
...
...
issue id
IssueManager issueManager = ComponentAccessor.getOSGiComponentInstanceOfType(IssueManager.class) |
|
...
Issue issue = issueManager.getIssueObject("TEST- |
|
...
...
Long issueId = issue.getId |
|
...
...
...
...
TGNG custom field id
CustomFieldManager customFieldManager = ComponentAccessor.getOSGiComponentInstanceOfType(CustomFieldManager.class) |
|
...
...
tgngCustomField = customFieldManager.getCustomFieldObjectsByName(" |
|
...
...
...
...
...
tgngCustomField.getIdAsLong() |
|
...
...
user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser() |
|
...
...
...
GridService
PluginAccessor pluginAccessor = ComponentAccessor.getPluginAccessor() |
|
...
Class apiServiceClass = pluginAccessor.getClassLoader().findClass("com.idalko.tgng.jira.server.api.GridService") |
|
...
...
gridService = ComponentAccessor.getOSGiComponentInstanceOfType(apiServiceClass) |
|
...
...
...
...
...
class
Class gridRowClass = pluginAccessor.getClassLoader().findClass("com.idalko.tgng.jira.server.api.GridRow")
// Read field data
def fieldData = gridService.readFieldData(issueId, |
|
...
...
...
...
...
...
...
...
...
...
...
(row in gridRows) {
def columns = row.getColumns()
def assignee = columns.get(" |
|
...
...
if (assignee != null && assignee.get("key") == user.getKey() && columns.get("jstatus") == "In Review") {
def update = gridRowClass.newInstance()
|
|
...
...
...
...
...
...
...
...
language | java |
---|
theme | Eclipse |
---|
firstline | 1 |
---|
title | updateRows usage example |
---|
linenumbers | true |
---|
collapse | true |
---|
...
)
// We need to specify only the columns which are being updated
update.setColumns(["jstatus": "Closed"])
updates.add(update)
}
}
gridService.updateRows(issueId, tgngCustomFieldId, user, updates) |
|
Expand |
---|
title | deleteRows usage example |
---|
|
deleteRows usage exampleThe example script deletes all rows assigned to a current user in status Closed in a Grid custom field with default configuration called API Sample in issue TEST-1. Code Block |
---|
| // This script deletes all rows assigned to a current user in status "Closed" in
// a Grid custom field with default configuration named "API Sample" in issue TEST-1
import com.atlassian.jira.component.ComponentAccessor |
|
...
import com.atlassian.jira.issue.CustomFieldManager |
|
...
import com.atlassian.jira.issue.Issue |
|
...
import com.atlassian.jira.issue.IssueManager |
|
...
import com.atlassian.jira.issue.fields.CustomField |
|
...
...
...
...
import com.atlassian.jira.user.ApplicationUser |
|
...
...
Get issue id
IssueManager issueManager = ComponentAccessor.getOSGiComponentInstanceOfType(IssueManager.class) |
|
...
Issue issue = issueManager.getIssueObject("TEST- |
|
...
...
Long issueId = issue.getId() |
|
...
...
...
TGNG custom field id
CustomFieldManager customFieldManager = ComponentAccessor.getOSGiComponentInstanceOfType(CustomFieldManager.class) |
|
...
...
tgngCustomField = customFieldManager.getCustomFieldObjectsByName(" |
|
...
...
...
...
...
tgngCustomField.getIdAsLong() |
|
...
...
user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser() |
|
...
...
...
...
PluginAccessor pluginAccessor = ComponentAccessor.getPluginAccessor() |
|
...
Class apiServiceClass = pluginAccessor.getClassLoader().findClass("com.idalko.tgng.jira.server.api.GridService") |
|
...
...
gridService = ComponentAccessor.getOSGiComponentInstanceOfType(apiServiceClass) |
|
...
// Read field data
def fieldData = gridService.readFieldData(issueId, tgngCustomFieldId, user, null)
def gridRows = fieldData.getRows()
// Ids of rows to delete
def toDelete = new ArrayList()
for (row in gridRows) {
def columns = row.getColumns()
|
|
...
...
...
get("jassignee")
if (assignee != null && assignee.get("key") == user.getKey() && columns.get("jstatus") == "Closed") {
|
|
...
...
...
...
...
...
...
...
...
deleteRows(issueId, tgngCustomFieldId, user, toDelete) |
|
Expand |
---|
title | readFieldDataInEditMode usage example |
---|
|
readFieldDataInEditMode usage exampleThe example script checks whether a sample Grid custom field contains values on transition and throws an error otherwise. Code Block |
---|
| // This script checks that Grid custom field named "API Sample" contains at least one row.
// Can be used only as scripted validator of issue transition. Cannot be run from the Script Console.
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.user.ApplicationUser
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.opensymphony.workflow.InvalidInputException
@WithPlugin("tge.cloud")
import com.idalko.tgng.jira.server.api.GridFieldData
import com.idalko.tgng.jira.server.api.GridService
// Get TGNG custom field id
String tgngCustomFieldName = "API Sample"
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
CustomField tgngCustomField = customFieldManager.getCustomFieldObjectsByName(tgngCustomFieldName).iterator().next()
Long tgngCustomFieldId = tgngCustomField.getIdAsLong()
// Get user
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
// Get GridService
GridService gridService = ComponentAccessor.getOSGiComponentInstanceOfType(GridService)
// Read field data
GridFieldData fieldData = gridService.readFieldDataInEditMode(issue, tgngCustomFieldId, user)
// Check if the grid is empty
if (fieldData.rows.size() == 0) {
// Throw an exception with the field id and an error message for TGNG field
// it will prevent transition with the noted error, user will stay on the transition screen.
throw new InvalidInputException(tgngCustomField.id, "Add at least one record to grid to proceed")
} |
|
Related articles
Extract Information from the Grid using the Java API