Java APIs

This page is describes our to use all Java APIs for Table Grid Next Generation Server / Datacenter. You can use an app such as ScriptRunner for Jira to be able to run Groovy / Java scripts directly inside Jira Software Server / Datacenter.

Check the Javadoc for Table Grid Next Generation Server / Datacenter for more detail documentation.

(dead link, we are working on it)

Java API Examples

readFieldData usage example

The example script reads all data from a Grid custom field with default configuration called API Sample in issue TEST-1.

// 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 // 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) // Read field data def fieldData = gridService.readFieldData(issueId, tgngCustomFieldId, user, null) def gridRows = fieldData.getRows() StringBuilder result = new StringBuilder() for (row in gridRows) { def columns = row.getColumns() result.append("Order: ${columns.get("jseq")}, ") result.append("Summary: ${columns.get("jsummary")}, ") def assignee = columns.get("jassignee") result.append("Assignee: ${assignee == null ? "null" : assignee.get("username")}, ") result.append("Status: ${columns.get("jstatus")};<br>") } return result

 

addRows usage example

The example script adds 2 rows to a Grid custom field with default configuration called API Sample in issue TEST-1.

// 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"] ])

 

updateRows usage example

The 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.

// 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 // 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) // Get GridRow class Class gridRowClass = pluginAccessor.getClassLoader().findClass("com.idalko.tgng.jira.server.api.GridRow") // Read field data def fieldData = gridService.readFieldData(issueId, tgngCustomFieldId, user, null) def gridRows = fieldData.getRows() // Update rows def updates = new ArrayList() for (row in gridRows) { def columns = row.getColumns() def assignee = columns.get("jassignee") if (assignee != null && assignee.get("key") == user.getKey() && columns.get("jstatus") == "In Review") { def update = gridRowClass.newInstance() update.setRowId(row.getRowId()) // We need to specify only the columns which are being updated update.setColumns(["jstatus": "Closed"]) updates.add(update) } } gridService.updateRows(issueId, tgngCustomFieldId, user, updates)

 

deleteRows usage example

The 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.

 

readFieldDataInEditMode usage example

The example script checks whether a sample Grid custom field contains values on transition and throws an error otherwise.

 

Related articles

https://tablegrid.atlassian.net/wiki/spaces/TGNG/pages/1933685