I am writing some scriptrunner listener code in Jira to be triggered when an issue of type impediment is updated and here is my code:
import com.atlassian.event.Event
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import org.ofbiz.core.entity.GenericValue;
import org.ofbiz.core.entity.GenericEntity;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.event.issue.AbstractIssueEventListener;
import com.atlassian.jira.event.issue.IssueEvent;
import com.atlassian.jira.issue.ModifiedValue;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder;
import com.atlassian.jira.issue.util.IssueChangeHolder;
import org.apache.log4j.Logger
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.component.ComponentAccessor
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import org.ofbiz.core.entity.GenericValue;
def log = Logger.getLogger("atlassian-jira.log")
log.warn("Start Auto Defaults Listener");
log.warn("IssueMounaEvent = " + event);
Issue issue = event.getIssue();
log.warn("IssueMouna = " + issue);
if (issue.getIssueType().getName().equalsIgnoreCase("Impediment"))
{
log.warn("Analyzing IMPEDIMENT changelog Mouna ...");
event2= (IssueEvent) event;
def warning = analyzeImpedimentChangeLog(event2);
}
def analyzeImpedimentChangeLog(IssueEvent event) {
def warning = "";
log.warn("IMPEDIMENT STATUS ")
List<GenericValue> changeItems = null;
def impedimentStatus = event.getIssue().getStatus().getName();
log.warn("IMPEDIMENT STATUS "+impedimentStatus)
if (!"New".equalsIgnoreCase(impedimentStatus) && !"Inspecting".equalsIgnoreCase(impedimentStatus)) {
GenericValue changeLog = event.getChangeLog();
log.warn("HERE 1")
HashMap<String, Object> fields = new HashMap<String,Object>();
log.warn("HERE 2")
fields.put("group", changeLog.get("id"));
log.warn("HERE 3")
String author = changeLog.getString("author");
log.warn("HERE 4")
try{
log.warn("CHANGE LOG: "+changeLog.internalDelegator)
changeItems = changeLog.internalDelegator.findByAnd("ChangeItem", fields);
log.warn("HERE 5")
}catch(Exception e){
log.warn("EXCEPTIONMOUNA "+e)
}
}
return warning;
}
I receive the following error, which is kind of weird because this was previously implemented in Java and it worked fine:
2022-08-11 EXCEPTIONMOUNA java.lang.IllegalArgumentException: [GenericEntity.get] "internalDelegator" is not a field of ChangeGroup
I would like to execute the following line of code:
changeItems = changeLog.internalDelegator.findByAnd("ChangeItem", fields);
and I receive the exception above when writing the following line of code into the log:
log.warn("CHANGE LOG: "+changeLog.internalDelegator)
This code was previously implemented as a Java plugin and it worked fine in this way. What needs to be done in this case in order to adapt this statement to groovy in ScriptRunner?
I found a way to access the log, this one:
import com.atlassian.event.Event
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import org.ofbiz.core.entity.GenericValue;
import org.ofbiz.core.entity.GenericEntity;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.event.issue.AbstractIssueEventListener;
import com.atlassian.jira.event.issue.IssueEvent;
import com.atlassian.jira.issue.ModifiedValue;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder;
import com.atlassian.jira.issue.util.IssueChangeHolder;
import org.apache.log4j.Logger
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.component.ComponentAccessor
import java.util.HashMap;
import java.util.List;
import org.apache.log4j.Logger;
import org.ofbiz.core.entity.GenericValue;
import org.ofbiz.core.entity.GenericDelegator;
import com.atlassian.jira.issue.changehistory.ChangeHistoryManager;
import com.atlassian.jira.issue.history.ChangeItemBean;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.comments.Comment
import com.atlassian.jira.workflow.JiraWorkflow
import com.atlassian.jira.workflow.WorkflowManager
import org.apache.log4j.Logger
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.changehistory.ChangeHistoryItem
def log = Logger.getLogger("atlassian-jira.log")
log.warn("Start Auto Defaults Listener");
log.warn("IssueMounaEvent = " + event);
Issue issue = event.getIssue();
log.warn("IssueMouna = " + issue);
if (issue.getIssueType().getName().equalsIgnoreCase("Impediment"))
{
log.warn("Analyzing IMPEDIMENT changelog Mouna ...");
event2= (IssueEvent) event;
def warning = analyzeImpedimentChangeLog(event2);
if (!warning.isEmpty()) {
log.warn("Set IMPEDIMENT warning tooo Mouna " + warning);
setWarning(issue, warning);
}
else {
log.warn("No IMPEDIMENT warning");
}
}
def analyzeImpedimentChangeLog(IssueEvent event) {
String warning = "";
log.warn("IMPEDIMENT STATUS ")
//List<GenericValue> changeItems = null;
def impedimentStatus = event.getIssue().getStatus().getName();
// status New and Inspecting are out of scope
log.warn("IMPEDIMENT STATUS "+impedimentStatus)
if (!"New".equalsIgnoreCase(impedimentStatus) && !"Inspecting".equalsIgnoreCase(impedimentStatus)) {
GenericValue changeLog = event.getChangeLog();
log.warn("HERE 1")
HashMap<String, Object> fields = new HashMap<String,Object>();
log.warn("HERE 2")
fields.put("group", changeLog.get("id"));
log.warn("HERE 3")
String author = changeLog.getString("author");
log.warn("HERE 4")
//changeItems = changeLog.internalDelegator.findByAnd("ChangeItem", fields);
log.warn("CHANGE LOG: "+changeLog.get("issue"))
List<GenericValue> changeItems = ComponentAccessor.getChangeHistoryManager().getAllChangeItems(issue)
// changeItems = changeLog.internalDelegator.findByAnd("ChangeItem", fields);
//changeItems = changeLog
log.warn("HERE 5::: "+ changeItems)
log.warn("MOUNA IS HERE AFTER HERE 5 " +changeItems.size());
log.warn("VALUES 1");
int lastIndex= changeItems.size()-1;
log.warn("MOUNA IS HERE AFTER HERE 5 " +changeItems.size()+ " "+changeItems.get(lastIndex));
ChangeHistoryItem value= changeItems.get(lastIndex) as ChangeHistoryItem;
log.warn("GENERIC VALUE "+ value.getField());
String modifiedField=value.getField();
if(modifiedField.equals("Source Type") ||modifiedField.equals("Class")||
modifiedField.equals("Planning Required")){
log.warn("MOUNA SIZE");
def ChangeHistoryManager= ComponentAccessor.getChangeHistoryManager();
List<ChangeItemBean> fieldchangeItems = ChangeHistoryManager.getChangeItemsForField(issue, modifiedField)
if (fieldchangeItems.size()>0) {
log.warn("MOUNA FIRST "+ modifiedField);
//String content = transientVars['Source Type'] as String
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def newStringCf = customFieldManager.getCustomFieldObjectByName(modifiedField)
String newString = issue.getCustomFieldValue(newStringCf) as String
log.warn("MOUNA FIRST "+ newString);
//def val=cfValues['Source Type']?.value
//log.warn(sourceType+" MOUNA FIRST "+sourceTypechangeItems.get(sourceTypechangeItems.size()-1).getFromString());
String oldString = fieldchangeItems.get(fieldchangeItems.size()-1).getFromString();
warning = "Field \"" + modifiedField + "\" has been changed from \"" + oldString + "\" to \"" + newString + "\" by \"" + author + "\"";
log.warn("MOUNA FIRST "+warning);
}
}
changeItems.eachWithIndex { item, index ->
log.warn("ITEM MOUNA "+item);
}
}
log.warn("changeitemlog== "+warning);
return warning;
}
void setWarning(Issue mutableIssue, String warning)
{
log.warn("WARNING FUNC "+warning)
Warning = 13593
CustomField customField = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(new Long(13593));
IssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
customField.updateValue(null, mutableIssue, new ModifiedValue(mutableIssue.getCustomFieldValue(customField), warning), issueChangeHolder);
}