I am attempting to read contents of a table grid next generation custom field from a current issue and copy it's contents to the same table grid field in a create new issue form. Unsure how this gets done, the challenge here seems to be targeting a new form to write the grid data. Here is some dirty code we have been playing with.
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.plugin.PluginAccessor;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.IssueManager;
import com.idalko.tgng.jira.server.api.*
import static com.atlassian.jira.issue.IssueFieldConstants.*;
IssueManager issueManager = ComponentAccessor.getOSGiComponentInstanceOfType(IssueManager.class)
//Issue issue = issueManager.getIssueObject(issue.key); //actual use
//Long issueId = issue.getId()
CustomFieldManager customFieldManager = ComponentAccessor.getOSGiComponentInstanceOfType(CustomFieldManager.class);
if (getBehaviourContextId() == "SPR") {
getFieldById("project-field").setReadOnly(true)
getFieldById("issuetype-field").setReadOnly(true)
def contextIssue = issueManager.getIssueObject(getContextIssueId())
def contextIssueId = contextIssue.getId()
//Get Company Value ....................
def CompanyCF = customFieldManager.getCustomFieldObject("customfield_11002")//Company
def contextCompanyCF = contextIssue.getCustomFieldValue(CompanyCF) as String
def CompanyCFconfig = CompanyCF.getRelevantConfig(contextIssue)
def optionsManager = ComponentAccessor.getOptionsManager()
def options1 = optionsManager.getOptions(CompanyCFconfig)
def optionToSelect = options1.find { it.value == contextCompanyCF }
//Get Items grid.......................................
// Get TGNG custom field id
CustomField tgngCustomField = customFieldManager.getCustomFieldObjectsByName("Items")[0]
Long tgngCustomFieldId = tgngCustomField.getIdAsLong()
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
PluginAccessor pluginAccessor = ComponentAccessor.getPluginAccessor()
Class apiServiceClass = pluginAccessor.getClassLoader().loadClass("com.idalko.tgng.jira.server.api.GridService")
def gridService = ComponentAccessor.getOSGiComponentInstanceOfType(apiServiceClass)
// Read field data
def fieldData = gridService.readFieldData(contextIssueId, tgngCustomFieldId, user, null)
def gridRows = fieldData.getRows()
//def fieldData2 = ""
/*StringBuilder result = new StringBuilder()
for (row in gridRows) {
def columns = row.getColumns()
result.append("Qty: ${columns.get("qty")}, ")
result.append("Item#/Description: ${columns.get("vendoritemnumber")}, ")
result.append("GL Account: ${columns.get("glaccountno")}, ")
result.append("UoM: ${columns.get("uom")}; ")
result.append("Unit Price: ${columns.get("unitprice")};<br>")*/
//fieldData2 = gridService.addRows(null, tgngCustomFieldId, user, [
//["qty": "2", "vendoritemnumber": "123456", "glaccountno": "654321", "uom": "Each", "unitprice": "2.50"]
//])
//}
//Write Form Values..........
getFieldById("summary").setFormValue("${contextIssue.summary}").setReadOnly(true)//Summary
getFieldById("issuelinks-linktype").setFormValue("Creates").setReadOnly(true)//link Type
getFieldById("issuelinks-issues").setFormValue(contextIssue.key).setReadOnly(true)
getFieldById("customfield_11002").setFormValue(optionToSelect.optionId).setReadOnly(true)//Company
getFieldById("customfield_11009").setFormValue(contextIssue.getCustomFieldValue(tgngCustomField))
}