Update Custom fields with scriptrunner post-funcion on create transition

Federico Scheu July 11, 2018

Hi,

I'm trying to update some customfields with values from my database in a post-function when the issue is created. I´m create the script reading this docs:

Set Issue attributes

Connecting to Databases

The script executes fine, and the debug shows the values. The problem is that the issue is not updated in the jira DB.

I tried to put the script function as the first step but I get the following error when I try to create an issue:

"Error creating issue: Error occurred while creating issue. This could be due to a plugin being incompatible with this version of JIRA. For more details please consult the logs, and see: http://confluence.atlassian.com/x/3McB"

I'm using JIRA 6.4.9. Many thanks!

import java.sql.Connection

MutableIssue issue = issue

def delegator = (DelegatorInterface) ComponentAccessor.getComponent(DelegatorInterface)
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def userUtil = ComponentAccessor.getUserUtil()
String helperName = delegator.getGroupHelperName("default")

//Obtengo el valor del usuario seleccionado
def userCf = customFieldManager.getCustomFieldObjectByName("Solicitante")
def userKey = issue.getCustomFieldValue(userCf).getKey()

def sqlStmt = """
select dp.id_empleado, rc.id_empleado_sap, dl.id_centro_costo, dl.position_class, trunc((sysdate-dp.fec_nacimiento)/365) edad, dp.cuil
from mss_usuarios us
, mss_relaciones_claves_empl rc
, mss_datos_personales dp
, mss_datos_laborales dl
where us.id_sociedad_empleado = rc.id_sociedad
and us.id_empleado = rc.id_empleado
and rc.id_sociedad_m4 = dp.id_sociedad
and rc.id_empleado_m4 = dp.id_empleado
and rc.id_sociedad_m4 = dl.id_sociedad
and rc.id_empleado_m4 = dl.id_empleado
and us.id_usuario_Ad = '""" + (userKey.toString()).toUpperCase() + """'"""

Connection conn = ConnectionFactory.getConnection(helperName)
Sql sql = new Sql(conn)

try {
StringBuffer sb = new StringBuffer()
def textCf
def textIDEmpl
sql.eachRow(sqlStmt) {
textCf = customFieldManager.getCustomFieldObjectByName("ID Empleado")
textIDEmpl = it.id_empleado
issue.setCustomFieldValue(textCf, textIDEmpl)

textCf = customFieldManager.getCustomFieldObjectByName("ID SAP")
issue.setCustomFieldValue(textCf, it.id_empleado_sap)

textCf = customFieldManager.getCustomFieldObjectByName("Centro de Costos")
issue.setCustomFieldValue(textCf, it.id_centro_costo)

textCf = customFieldManager.getCustomFieldObjectByName("CAT")
issue.setCustomFieldValue(textCf, it.position_class)

textCf = customFieldManager.getCustomFieldObjectByName("Edad")
issue.setCustomFieldValue(textCf, it.edad)

textCf = customFieldManager.getCustomFieldObjectByName("CUIL")
issue.setCustomFieldValue(textCf, it.cuil)

sb << "${issue.getKey()}\t${textIDEmpl}\t${it.id_empleado_sap}\t${it.id_centro_costo}\t${it.position_class}\t${it.edad}\t${it.cuil}\n"
}
log.debug sb.toString()
}
finally {
sql.close()
}

2 answers

1 accepted

2 votes
Answer accepted
Mark Markov
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
July 12, 2018

Hello @Federico Scheu 

It seems you are using jira 6.X version and updateIssue method needs not ApplicationUser object, but crowduser.

Try this

import com.atlassian.jira.component.ComponentAccessor
import groovy.sql.Sql
import org.ofbiz.core.entity.ConnectionFactory
import org.ofbiz.core.entity.DelegatorInterface
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.event.type.EventDispatchOption;
import java.sql.Connection

MutableIssue issue = issue

def delegator = (DelegatorInterface) ComponentAccessor.getComponent(DelegatorInterface)
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def issueManager = ComponentAccessor.getIssueManager()
def userUtil = ComponentAccessor.getUserUtil()
String helperName = delegator.getGroupHelperName("default")

//Obtengo el valor del usuario seleccionado
def userCf = customFieldManager.getCustomFieldObjectByName("Solicitante")
def userKey = issue.getCustomFieldValue(userCf).getKey()

def sqlStmt = """
select dp.id_empleado, rc.id_empleado_sap, dl.id_centro_costo, dl.position_class, trunc((sysdate-dp.fec_nacimiento)/365) edad, dp.cuil
from mss_usuarios us
, mss_relaciones_claves_empl rc
, mss_datos_personales dp
, mss_datos_laborales dl
where us.id_sociedad_empleado = rc.id_sociedad
and us.id_empleado = rc.id_empleado
and rc.id_sociedad_m4 = dp.id_sociedad
and rc.id_empleado_m4 = dp.id_empleado
and rc.id_sociedad_m4 = dl.id_sociedad
and rc.id_empleado_m4 = dl.id_empleado
and us.id_usuario_Ad = '""" + (userKey.toString()).toUpperCase() + """'"""

Connection conn = ConnectionFactory.getConnection(helperName)
Sql sql = new Sql(conn)

try {
StringBuffer sb = new StringBuffer()
def textCf
def textIDEmpl
sql.eachRow(sqlStmt) {
textCf = customFieldManager.getCustomFieldObjectByName("ID Empleado")
textIDEmpl = it.id_empleado
issue.setCustomFieldValue(textCf, textIDEmpl)

textCf = customFieldManager.getCustomFieldObjectByName("ID SAP")
issue.setCustomFieldValue(textCf, it.id_empleado_sap)

textCf = customFieldManager.getCustomFieldObjectByName("Centro de Costos")
issue.setCustomFieldValue(textCf, it.id_centro_costo)

textCf = customFieldManager.getCustomFieldObjectByName("CAT")
issue.setCustomFieldValue(textCf, it.position_class)

textCf = customFieldManager.getCustomFieldObjectByName("Edad")
issue.setCustomFieldValue(textCf, it.edad)

textCf = customFieldManager.getCustomFieldObjectByName("CUIL")
issue.setCustomFieldValue(textCf, it.cuil)

sb << "${issue.getKey()}\t${textIDEmpl}\t${it.id_empleado_sap}\t${it.id_centro_costo}\t${it.position_class}\t${it.edad}\t${it.cuil}\n"
}

Issue issue2 = issueManager.updateIssue(ComponentAccessor.getJiraAuthenticationContext().getUser().getDirectoryUser(), issue,EventDispatchOption.ISSUE_UPDATED,true);
log.debug sb.toString()
}
finally {
sql.close()
}
Federico Scheu July 12, 2018

It worked! Thank you!

0 votes
Federico Scheu July 11, 2018

I try to modify the script to use the IssueManager and updateIssue method but now I get the next error:

2018-07-11 18:49:26,460 ERROR [workflow.ScriptWorkflowFunction]: *************************************************************************************
2018-07-11 18:49:26,460 ERROR [workflow.ScriptWorkflowFunction]: Script function failed on issue: AUT-97, actionId: 1, file: <inline script>
groovy.lang.MissingMethodException: No signature of method: com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue() is applicable for argument types: (com.atlassian.jira.user.DelegatingApplicationUser, com.atlassian.jira.issue.IssueImpl, com.atlassian.jira.event.type.EventDispatchOption$EventDispatchOptionImpl, java.lang.Boolean) values: [BAISCF(baiscf), AUT-97, com.atlassian.jira.event.type.EventDispatchOption$EventDispatchOptionImpl@b5c4e32, ...]
Possible solutions: updateIssue(com.atlassian.crowd.embedded.api.User, com.atlassian.jira.issue.MutableIssue, com.atlassian.jira.event.type.EventDispatchOption, boolean), updateIssue(com.atlassian.jira.user.ApplicationUser, com.atlassian.jira.issue.MutableIssue, com.atlassian.jira.issue.UpdateIssueRequest)
 at Script206.run(Script206.groovy:68)

This is the code now:

import com.atlassian.jira.component.ComponentAccessor
import groovy.sql.Sql
import org.ofbiz.core.entity.ConnectionFactory
import org.ofbiz.core.entity.DelegatorInterface
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.event.type.EventDispatchOption;
import java.sql.Connection

MutableIssue issue = issue

def delegator = (DelegatorInterface) ComponentAccessor.getComponent(DelegatorInterface)
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def issueManager = ComponentAccessor.getIssueManager()
def userUtil = ComponentAccessor.getUserUtil()
String helperName = delegator.getGroupHelperName("default")

//Obtengo el valor del usuario seleccionado
def userCf = customFieldManager.getCustomFieldObjectByName("Solicitante")
def userKey = issue.getCustomFieldValue(userCf).getKey()

def sqlStmt = """
select dp.id_empleado, rc.id_empleado_sap, dl.id_centro_costo, dl.position_class, trunc((sysdate-dp.fec_nacimiento)/365) edad, dp.cuil
from mss_usuarios us
, mss_relaciones_claves_empl rc
, mss_datos_personales dp
, mss_datos_laborales dl
where us.id_sociedad_empleado = rc.id_sociedad
and us.id_empleado = rc.id_empleado
and rc.id_sociedad_m4 = dp.id_sociedad
and rc.id_empleado_m4 = dp.id_empleado
and rc.id_sociedad_m4 = dl.id_sociedad
and rc.id_empleado_m4 = dl.id_empleado
and us.id_usuario_Ad = '""" + (userKey.toString()).toUpperCase() + """'"""

Connection conn = ConnectionFactory.getConnection(helperName)
Sql sql = new Sql(conn)

try {
StringBuffer sb = new StringBuffer()
def textCf
def textIDEmpl
sql.eachRow(sqlStmt) {
textCf = customFieldManager.getCustomFieldObjectByName("ID Empleado")
textIDEmpl = it.id_empleado
issue.setCustomFieldValue(textCf, textIDEmpl)

textCf = customFieldManager.getCustomFieldObjectByName("ID SAP")
issue.setCustomFieldValue(textCf, it.id_empleado_sap)

textCf = customFieldManager.getCustomFieldObjectByName("Centro de Costos")
issue.setCustomFieldValue(textCf, it.id_centro_costo)

textCf = customFieldManager.getCustomFieldObjectByName("CAT")
issue.setCustomFieldValue(textCf, it.position_class)

textCf = customFieldManager.getCustomFieldObjectByName("Edad")
issue.setCustomFieldValue(textCf, it.edad)

textCf = customFieldManager.getCustomFieldObjectByName("CUIL")
issue.setCustomFieldValue(textCf, it.cuil)

sb << "${issue.getKey()}\t${textIDEmpl}\t${it.id_empleado_sap}\t${it.id_centro_costo}\t${it.position_class}\t${it.edad}\t${it.cuil}\n"
}

Issue issue2 = issueManager.updateIssue(ComponentAccessor.getJiraAuthenticationContext().getUser(),issue,EventDispatchOption.ISSUE_UPDATED,true);
log.debug sb.toString()
}
finally {
sql.close()

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events