Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in
Deleted user
0 / 0 points
Next:
badges earned

Your Points Tracker
Challenges
Leaderboard
  • Global
  • Feed

Badge for your thoughts?

You're enrolled in our new beta rewards program. Join our group to get the inside scoop and share your feedback.

Join group
Recognition
Give the gift of kudos
You have 0 kudos available to give
Who do you want to recognize?
Why do you want to recognize them?
Kudos
Great job appreciating your peers!
Check back soon to give more kudos.

Past Kudos Given
No kudos given
You haven't given any kudos yet. Share the love above and you'll see it here.

It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

How can I change the Resolved Date for an Issue?

I have several issues which should have been resolved some time back. I want to close and resolve them now, but do not know how to properly backdate the Resolved date. it is important for reporting purpuses and GH charts.

Thanks,

-Jim

5 answers

I know I'm hopping onto an old thread, but this was the first page I came across when searching for an answer.

This turned out to be a very straight forward fix in SQL. The resolved date is stored in the dbo.jiraissue table.

I updated the resolved date on mine by executing the following:

UPDATE dbo.jiraissue
SET UPDATED = '2013-05-23 12:19:22.087', RESOLUTIONDATE = '2013-05-23 12:19:22.127'
WHERE pkey = 'CCSP-455'

Just change the pkey to the issue key that you're trying to update. The update didn't require any re-indexing nor did I bring Jira offline (rebel!).

Hope this helps anyone doing the same search as me.

UPDATE FOR JIRA 6.1+:

It looks like they deprecated the pkey identifier starting in Jira v6.1. This is the new query I ran to accomplish the same in the new version:

UPDATE dbo.jiraissue
SET UPDATED = '2014-02-03 14:07:22.087', RESOLUTIONDATE = '2014-02-03 14:07:22.087'
WHERE PROJECT = 10104 AND issuenum = 44

It may take some searching for you to identify the PROJECT value.

Works for me; to be safe, I did a complete reindex afterwards. I was actually fixing up resolve dates on issues which were imported from another system, so I was able to do a direct join between the two SQL Server databases and update all the JIRA issues in one go :-)

Remember that this is only appropriate for imported issues that don't have a history entry for when the resolution changed from <null> to <something>

If you have history records, then hacking the resolution date will make your data inconsistent nonsense.

Like # people like this
Peter Bengov Community Leader Mar 03, 2015

Thanks for the update here, knoche. Very helpful

This approach doesn't work on JIRA 7, changed both values and the Resolved Date didn't change, I did a locked re-index and tried with different issues with no luck, is there anywhere else i can get to that value?

2 votes

You can't. The resolved date is derived from the last time you resolved the issue, which you can't alter.

Of course, there's always hacking - in this case, you'd need to use SQL to change the date on the changegroup (and I think you'd need to alter the os_workflow too). That does require backups, downtime and re-indexing though (never alter a Jira database while it's running. Just. No. Never), and will destroy the information about when your users actually resolved it.

Use ScriptRunner - this will update only 1 ticket at  a time. 

Paste this template the ScriptRunner script console,

Update the ticket number and the date.  Run.    

 

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import java.sql.Timestamp
import com.atlassian.jira.util.ImportUtils
import java.text.SimpleDateFormat
import java.text.DateFormat;
import java.util.Date;

DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss");

Date date = dateFormat.parse("05/23/2019 06:00:00");

long time = date.getTime();

Timestamp targetDate = new Timestamp(time);

IssueManager issueManager = ComponentAccessor.getIssueManager()

MutableIssue missue = (MutableIssue) issueManager.getIssueObject("PS-2469")

missue.setResolutionDate(targetDate);

missue.store();

return (targetDate);

works fine for me.

But history entry mismatch needs to be taken into account.

Thanks!

It is important to trigger issue reindex then !

import com.atlassian.jira.issue.index.IssueIndexingService


def indexingService = ComponentAccessor.getOSGiComponentInstanceOfType(IssueIndexingService)
boolean wasIndexing = ImportUtils.isIndexIssues()
ImportUtils.setIndexIssues(true)
indexingService.reIndex(missue)
ImportUtils.setIndexIssues(wasIndexing)

Would it be possible to loop this over the issues in a saved filter or JQL?

Ugh, answering my own question, but for those who follow... https://library.adaptavist.com/entity/perform-a-jql-search-in-scriptrunner-for-jira was very helpful.

I almost started running the script but the warning put me off, showing in the script console:

"(!) Since version v5.0. DO NOT USE THIS as it overwrites all the fields of the issue which can result in difficult to reproduce bugs. Prefer to use QueryDslAccessor to change only needed fields @ line 24, column 8"

scriptrunner-update-issue-resolvedate.png

We're using Jira D.C. 8.14.x with ScriptRunner Version: 6.21.0

I could not create a script myself using QueryDslAccessor as this seems to be possible only from database queries, not ScriptRunner, but I may be wrong.

Does anyone have a workaround or update to this script that uses a method that updates only the Resolution Date field and will not overwrites all fields as the warning implies?

For newer Jira instance SQL command should look like:

update jiraissue set updated = '2018-11-28 09:22:22.498+01', resolutiondate = '2018-11-28 09:22:22.498+01' where id = 59918;

I was thinking you could go in to the workflow and do the modification that way. Create a new field put it on the transistion. Then as a part of the post workflow actions, have the Resolved date copy the date of the field you just entered.

(Added in later) But make the transistion go back to the same step it was previously ie. New - New, Open -Open, etc> You will lose the last updated date but at least you get your Resolved data back

Also then to protect yourself, go back and make sure that you or the jira-admins are the only people who can see that workflow option.

No. Generally, that is a very good approach and exactly what I'd do. Looped transitions are immensely useful to get around the weakness in "edit" permissions. It's just that for this one field, it's not right - because it's derived field, you don't need to touch it - and in fact, you can't. It'll take its value from the changed change history.

Suggest an answer

Log in or Sign up to answer
TAGS

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you