HI @Jamie Echlin [Adaptavist],
Can you help me with a groovy script to set previous customfield value based on change History for a Date Time Custom field ?
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.ComponentManager;
import com.atlassian.jira.issue.history.ChangeItemBean;
import com.atlassian.jira.issue.changehistory.ChangeHistory;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.project.Project;
import com.atlassian.jira.project.ProjectManager;
import com.atlassian.jira.user.util.UserManager;
import com.atlassian.crowd.embedded.api.User;
import com.atlassian.jira.user.ApplicationUsers;
import com.atlassian.jira.bc.issue.search.SearchService;
import com.atlassian.jira.user.util.UserUtil;
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.issuetype.IssueType;
import com.atlassian.jira.exception.CreateException;
import com.atlassian.jira.user.DelegatingApplicationUser;
import com.atlassian.jira.issue.customfields.option.Option;
import com.atlassian.jira.issue.customfields.option.Options;
import com.atlassian.jira.issue.fields.config.FieldConfig;
import java.util.Collection;
import java.util.List;
import java.lang.Object;
import org.apache.log4j.Category;
import com.atlassian.jira.issue.ModifiedValue;
import java.text.SimpleDateFormat;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.util.Date;
import com.atlassian.jira.util.ImportUtils;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.util.IssueChangeHolder;
import com.atlassian.jira.issue.fields.layout.field.*;
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder;
import com.atlassian.jira.issue.ModifiedValue as ModifiedValue;
import com.atlassian.jira.issue.customfields.manager.OptionsManager as OptionsManager;
import com.atlassian.jira.issue.customfields.option.*;
import com.atlassian.jira.issue.changehistory.*;
import com.atlassian.jira.issue.*;
import com.atlassian.jira.issue.history.ChangeLogUtils;
import org.apache.log4j.Category as Category;
import org.apache.log4j.Level as Level;
class RevertCustomField
{
Category log = Category.getInstance("com.onresolve.jira.groovy.GroovyService");
SearchService searchService = ComponentAccessor.getComponent(SearchService.class);
IssueManager issueManager = ComponentAccessor.getIssueManager();
CustomFieldManager cfm = ComponentAccessor.getCustomFieldManager();
ProjectManager projectManager = ComponentAccessor.getProjectManager();
IssueFactory issueFactory = ComponentAccessor.getIssueFactory();
MutableIssue mIssue = issueFactory.getIssue();UserUtil userUtil = ComponentAccessor.getUserUtil();
def revertCustomFieldValues(String jql, String cft)
{
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
SearchService.ParseResult parseResult = searchService.parseQuery(user, jql);
List<Issue> issues = null;
if (parseResult.isValid())
{
def searchResult = searchService.search(user, parseResult.getQuery(), PagerFilter.getUnlimitedFilter())
issues = (List <Issue>) searchResult.issues.collect {issueManager.getIssueObject(it.id)}
for (Issue issue : issues)
{
ChangeHistoryManager changeHistoryManager = ComponentAccessor.getChangeHistoryManager();
List<ChangeItemBean> ChHistory = changeHistoryManager.getChangeItemsForField(issue, cft);
if (cft == "CAB Ticket Number" || cft == "Product ID" || cft == "Release Plan")
{
if (!ChHistory.isEmpty())
{
CustomField tgtfield = cfm.getCustomFieldObjectByName(cft);
FieldLayout layout = ComponentAccessor.getFieldLayoutManager().getFieldLayout(issue);
FieldLayoutItem fieldLayoutItem = layout.getFieldLayoutItem(tgtfield);
DefaultIssueChangeHolder issueChangeHolder = new DefaultIssueChangeHolder();
ChangeItemBean assigneeChItemBean = ChHistory.get(ChHistory.size() - 1);
String x = assigneeChItemBean.getFromString();
mIssue.setCustomFieldValue(tgtfield,x);
Map<String, ModifiedValue> modifiedFields = mIssue.getModifiedFields();
final ModifiedValue modifiedValue = (ModifiedValue) modifiedFields.get(tgtfield.getId());
tgtfield.updateValue(fieldLayoutItem, issue, modifiedValue, issueChangeHolder);
ChangeLogUtils.createChangeGroup(user,issue,issue,issueChangeHolder.getChangeItems(),true);
}
}
}
}
}
}
def obj = new RevertCustomField();
//String testSelect = obj.revertCustomFieldValues("project = CHAN" , "Custom Select List");
String testURL = obj.revertCustomFieldValues("project = ENGRTEST" , "Release Plan");The above code works fine for URL field. I need to implement the same for Date Time Custom Field
Thank You
Chander