Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Jira Groovy Script Update Custom Field

Marcin Beczynski
Contributor
October 3, 2018

Hey,

I have a script what calculate the date and based on if date is expired or not it should update another custom it works but not save those change when I go to edit it show still old value 

 

 

Code bellow 

 

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.Issue;
import java.util.Date.*
import java.text.SimpleDateFormat
import java.time.LocalDate
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date
import java.util.concurrent.TimeUnit
import java.lang.Object
import static org.junit.Assert.*;

import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder;
import com.atlassian.jira.issue.ModifiedValue;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.*;
import com.atlassian.jira.ComponentManager;
import com.atlassian.jira.issue.customfields.manager.OptionsManager;
import com.atlassian.jira.issue.customfields.option.Option;
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.IssueInputParameters

int optionYes = 11529;
int optionNo = 11530;

IssueService issueService = ComponentAccessor.getComponent(IssueService);
def optionsManager = ComponentAccessor.getComponent(OptionsManager);
//def customFieldManager = ComponentAccessor.getComponent(CustomFieldManager);
IssueInputParameters issueInputParameters = issueService.newIssueInputParameters()
def user = ComponentAccessor.getJiraAuthenticationContext().loggedInUser


//normal date
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate localDate = LocalDate.now();
def pro2=dtf.format(localDate);
//parse String date to Date
String sDate1=pro2;
Date date1=new SimpleDateFormat("dd/MM/yyyy").parse(sDate1);

//get Deadline date
def customFieldManager = ComponentAccessor.getCustomFieldManager();
def deadline= customFieldManager.getCustomFieldObjectByName('Deadline');
def deadlineDate= issue.getCustomFieldValue(deadline) as Date

//decalre two dates
Date firstDate = date1
Date secondDate = deadlineDate
//comparison
long diffInMillies = secondDate.getTime() - firstDate.getTime();
//condition

 


if (diffInMillies<0){
def diff = "Expired: " + Math.abs(TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS))+" days ago";

def cf = customFieldManager.getCustomFieldObjectByName("Overdue")
def cfConfig = cf.getRelevantConfig(issue)
value = ComponentAccessor.optionsManager.getOptions(cfConfig)?.find { it.toString() == 'Yes' }
issue.setCustomFieldValue(cf, value)

//def tgtField = customFieldManager.getCustomFieldObjects(issue).find {it.name == "Overdue"}
//def changeHolder = new DefaultIssueChangeHolder();
// tgtField.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(tgtField), "No"),changeHolder);

CustomField targetCf = customFieldManager.getCustomFieldObject(10821);
Options targetCfOptions = ComponentAccessor.getOptionsManager().getOptions(targetCf.getRelevantConfig(issue));
Option ChoosenOption = targetCfOptions.getOptionById(optionYes);
targetCf.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(targetCf), ChoosenOption), new DefaultIssueChangeHolder());
return diff
}
else {
def diff2 = "Days to Deadline: " + TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);


def diff = "Expired: " + Math.abs(TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS))+" days ago";

def cf = customFieldManager.getCustomFieldObjectByName("Overdue")
def cfConfig = cf.getRelevantConfig(issue)
value = ComponentAccessor.optionsManager.getOptions(cfConfig)?.find { it.toString() == 'No' }
issue.setCustomFieldValue(cf, value)

//def tgtField = customFieldManager.getCustomFieldObjects(issue).find {it.name == "Overdue"}
//def changeHolder = new DefaultIssueChangeHolder();
//tgtField.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(tgtField), "No"),changeHolder);

CustomField targetCf = customFieldManager.getCustomFieldObject(10821);
Options targetCfOptions = ComponentAccessor.getOptionsManager().getOptions(targetCf.getRelevantConfig(issue));
Option ChoosenOption = targetCfOptions.getOptionById(optionNo);
targetCf.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(targetCf), ChoosenOption), new DefaultIssueChangeHolder());

return diff2
}

2 answers

1 vote
Elifcan Cakmak
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.
October 4, 2018

Hello,

After you set customfield value, you need to update the issue as well. Could you try this after you set the field values:

updateIssue(ApplicationUser user, MutableIssue issue, EventDispatchOption eventDispatchOption, boolean sendMail)

This method will store the provided issue to the JIRA datastore.

For example:

issueManager.updateIssue(user, issue, EventDispatchOption.DO_NOT_DISPATCH, false)

You need to import event dispatch option, too

import com.atlassian.jira.event.type.EventDispatchOption

Regards,

0 votes
Elifcan Cakmak
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.
October 4, 2018

Hello,

After you set customfield value, you need to update the issue as well. Could you try this after you set the field values:

updateIssue(ApplicationUser user, MutableIssue issue, EventDispatchOption eventDispatchOption, boolean sendMail)
This method will store the provided issue to the JIRA datastore.

For example:

issueManager.updateIssue(user, issue, EventDispatchOption.DO_NOT_DISPATCH, false)

You need to import event dispatch option, too

import com.atlassian.jira.event.type.EventDispatchOption

Regards,

Elifcan Cakmak
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.
October 4, 2018

Sorry, something went wrong and my answer is posted twice :)

Suggest an answer

Log in or Sign up to answer
TAGS
atlassian, jira cloud certification, managing jira projects, jira project administration, jira cloud exam, atlassian certification, agile project management, jira workflows, jira permissions, jira training, jira cloud skills, atlassian learning

Become a Certified Jira Service Project Expert 🦸🏻‍♂️

Validate your expertise in managing Jira Service Projects for Cloud. Master configuration, optimize workflows, and manage users seamlessly. Earn global 🗺️ recognition and advance your career as a trusted Jira Service management expert.

Get Certified! ✍️
AUG Leaders

Atlassian Community Events