Forums

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

Attachment deletion based on attachment date

Asiya Fathima
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
June 17, 2023

I want to delete attachments only based on attachment date but the script mentioned is fetching the issues based on JQL and deleting all the attachments in the Issue. 

Do we have any way to delete attachment based on attachment date

 

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.jql.parser.JqlQueryParser;
import com.atlassian.jira.issue.search.SearchQuery;
import com.atlassian.jira.issue.search.SearchResults;
import com.atlassian.jira.issue.search.SearchProvider;
import com.atlassian.jira.web.bean.PagerFilter;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.AttachmentManager;
import org.apache.log4j.Logger

import org.apache.log4j.Level

def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def searchProvider = ComponentAccessor.getComponent(SearchProvider)
def issueManager = ComponentAccessor.getIssueManager()
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def jqlQuery = "project = TEST AND issue in attachedOnDate(2019-05-1)"
def query = jqlQueryParser.parseQuery(jqlQuery)
def luceneQuery = SearchQuery.create(query, user)
def results = searchProvider.search(luceneQuery, PagerFilter.getUnlimitedFilter()).getResults()*.document
.collect{ComponentAccessor.issueManager.getIssueObject(it.getField('issue_id').stringValue().toLong())}
results.each {
issue ->
def attachments = ComponentAccessor.attachmentManager.getAttachments(issue)
attachments.each {attachment ->
ComponentAccessor.attachmentManager.deleteAttachment(attachment)
}
}

1 answer

0 votes
Evgenii
Community Champion
June 17, 2023

Hi, @Asiya Fathima 

You can use this script, it makes what you want. Needed time limits can be set in fromDate / toDate strings

/*
* @author Evgeniy Isaenkov
* @github https://github.com/Udjin79/SRUtils
*/

package ConsoleExamples

import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.attachment.Attachment
import com.atlassian.jira.issue.search.SearchResults
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.query.Query

JqlQueryParser jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser) as JqlQueryParser
SearchService searchService = ComponentAccessor.getComponent(SearchService)
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()

String jqlQuery = "project = TEST AND attachments is not EMPTY"
Date fromDate = new Date("01/01/2023")
Date toDate = new Date("01/31/2023")

Query query = jqlQueryParser.parseQuery(jqlQuery)
SearchResults search = searchService.search(user, query, PagerFilter.getUnlimitedFilter())
List<Issue> results = search.results

results.each { Issue issue ->
List<Attachment> attachments = ComponentAccessor.attachmentManager.getAttachments(issue)
attachments.each { Attachment attachment ->
if (attachment.created >= fromDate.toTimestamp() && attachment.created <= toDate.toTimestamp()) {
ComponentAccessor.attachmentManager.deleteAttachment(attachment)
}
}
}
Asiya fathima June 22, 2023

Hi @Evgenii , This script is deleting all the attachments in the issue

Evgenii
Community Champion
June 22, 2023

Hi, @Asiya fathima 

Check please time limits in strings and set correct

Date fromDate = new Date("01/01/2023")
Date toDate = new Date("01/31/2023")

 This condition checks, that attachment creation date is between this dates:

if (attachment.created >= fromDate.toTimestamp() && attachment.created <= toDate.toTimestamp())

If yes - then attachment is deleted. 

Asiya fathima June 22, 2023

Hi @Evgenii  I tried to use this Script but the attachments are not getting deleted.

package ConsoleExamples

import com.atlassian.jira.bc.issue.search.SearchService

import com.atlassian.jira.component.ComponentAccessor

import com.atlassian.jira.issue.Issue

import com.atlassian.jira.issue.attachment.Attachment

import com.atlassian.jira.issue.search.SearchResults

import com.atlassian.jira.jql.parser.JqlQueryParser

import com.atlassian.jira.user.ApplicationUser

import com.atlassian.jira.web.bean.PagerFilter

import com.atlassian.query.Query




JqlQueryParser jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser) as JqlQueryParser

SearchService searchService = ComponentAccessor.getComponent(SearchService)

ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()




String jqlQuery = "project = WFC AND attachments is not EMPTY"

Date fromDate = new Date("28/10/2012")

Date toDate = new Date("30/10/2012")




Query query = jqlQueryParser.parseQuery(jqlQuery)

SearchResults search = searchService.search(user, query, PagerFilter.getUnlimitedFilter())

List<Issue> results = search.results




results.each { Issue issue ->

   List<Attachment> attachments = ComponentAccessor.attachmentManager.getAttachments(issue)

   attachments.each { Attachment attachment ->

      if (attachment.created >= fromDate.toTimestamp() && attachment.created <= toDate.toTimestamp()) {

         ComponentAccessor.attachmentManager.deleteAttachment(attachment)

      }

   }

}
Evgenii
Community Champion
June 22, 2023

@Asiya fathima your date format is wrong. Must be month/date/year.

Date fromDate = new Date("10/28/2012")
Date toDate = new Date("10/30/2012")
Asiya fathima June 22, 2023

Hi @Evgenii , we tried with this format as well 

("10/28/2012") but the attachments are not getting deleted. Can we have a quick call to discuss on this.
Evgenii
Community Champion
June 22, 2023

Yes, it's possible.

Suggest an answer

Log in or Sign up to answer