I want to update the Issue Type Link scheme on the newly created projects. Can someone please help me with using Scriptrunner script for updating the issue type link scheme ? Maybe like use a post function on the workflow.
We have an automated project creation step. When an user requests for a new project through our Service desk its automatically created.
Hello @Aisha M ,
Could You please clarify what You mean on 'Issue Type Link scheme'? I know about 'Issue linking' but it is scheme per system not per project. Could You please explain more details and provide screen?
Best regards,
Andrew
Hi @Andrew , Thank you for the comment.
There is an option called LINK SCHEMES available under the adminstration panel - Category - LINKS
We have a LINK SCHEME for each each issue type. An combination of all these is a ISSUE TYPE LINK SCHEME. There is a default. So, we want all the newly created projects to have this instead of the DEFAULT ISSUE TYPE LINK SCHEME
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I suppose You mean this plugin https://marketplace.atlassian.com/apps/1214172/extended-schemes-for-jira?hosting=server&tab=overview
https://devpost.com/software/link-schemes-for-jira
I'm right?
If yes, that mean You try use script runner make changes in some 3rd party plugin. I'm not sure that it is possible because I not found something REST API for that plugin. I recommend ask support team of that plugin.
Best regards,
Andrew
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Yep, scriptrunner used next java API https://docs.atlassian.com/software/jira/docs/api/7.13.8/ It is base of jira application, 3rd party java api not placed here and I'm not sure that possible reach java API of the 3rd party. As workaround I thought use rest API, but I not found some rest API for 'extend scheme' plugin.
Again, You can try ask support team of the plugin, maybe they can help You. I have no experience with the 'extend schemes' plugin.
Best regards,
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Andrew ,
Can you help me with the below existing Scriptrunner script.
I use the below script to capture the dates of the Epic Due Date and post the farthest date at the Program Epic Due Date field (scripted field). If any of the Due Date in the Epic is empty, then the scripted field at the Program Epic returns empty.
The script is working fine, but considers ALL of the epics associated with the Program Epic. Can you please help me modify the script so that ONLY the child of the Program Epic is considered and no other links.
import com.atlassian.jira.issue.link.IssueLink;
import com.atlassian.jira.component.ComponentAccessor;
import java.sql.Timestamp
def allOutIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getOutwardLinks(issue.getId()))
def issueLinks = allOutIssueLink?.findAll() {it.getDestinationObject().getIssueType().getName() == "Epic"}
def farthestDate
for(IssueLink issueLink : issueLinks){
def dueDate = issueLink.getDestinationObject().getDueDate()
if (dueDate == null){
return null
}
else if (farthestDate == null){
farthestDate = dueDate
}
else if (dueDate?.after(farthestDate)){
farthestDate = dueDate
}
}
def allInIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getInwardLinks(issue.getId()));
issueLinks = allInIssueLink?.findAll() {it.getSourceObject().getIssueType().getName() == "Epic"}
for(IssueLink issueLink : issueLinks){
def dueDate = issueLink.getSourceObject().getDueDate()
if (dueDate == null){
return null
}
else if (farthestDate == null){
farthestDate = dueDate
}
else if (dueDate?.after(farthestDate)){
farthestDate = dueDate
}
}
return farthestDate
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hello @Aisha M ,
Sorry for long time reaction, I was busy. I hope I right understand direction in which links should be updated.
import com.atlassian.jira.issue.link.IssueLink;
import com.atlassian.jira.component.ComponentAccessor;
import java.sql.Timestamp
def farthestDate
def issueLinks
//comment next section for use only inward links. From parent to child
//start section OUTWARD
/*
def allOutIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getOutwardLinks(issue.getId()))
issueLinks = allOutIssueLink?.findAll() {it.getDestinationObject().getIssueType().getName() == "Epic"}
for(IssueLink issueLink : issueLinks){
def dueDate = issueLink.getDestinationObject().getDueDate()
if (dueDate == null){
return null
}
else if (farthestDate == null){
farthestDate = dueDate
}
else if (dueDate?.after(farthestDate)){
farthestDate = dueDate
}
}
*/
//end section OUTWARD
//comment next section for use only inward links. From parent to child
//start section INWARD
def allInIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getInwardLinks(issue.getId()));
issueLinks = allInIssueLink?.findAll() {it.getSourceObject().getIssueType().getName() == "Epic"}
for(IssueLink issueLink : issueLinks){
def dueDate = issueLink.getSourceObject().getDueDate()
if (dueDate == null){
return null
}
else if (farthestDate == null){
farthestDate = dueDate
}
else if (dueDate?.after(farthestDate)){
farthestDate = dueDate
}
}
//end section INWARD
return farthestDate
Your code consist from two parts. First for outward links and second for inward links. As You can see I just disable the first part. If I made wrong parent-child direction You need just disable the second part and enable first part. I write comments in code for that.
Moreover I would like recommend You create new links type, because standard 'relate to' link not clarity for user. For example, in picture below 'relates to' not say that TEST-6 is parent or child? So, I've made new links and set different name to inward and outward link. After I changed date in the current ticket the script affect to TEST-6.
Best regards,
Andrew
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Andrew , Thank you sooo soo much !!! I will test this out now.
Actually my manager wants the script to work ONLY if the Epic is a child of the Program Epic.
The script should not consider the Epic Due date if the linking is of any other type like relates or clones or duplicates etc
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I suppose it is possible, but I should understand criteria to identify that the current epic is the child.
'The script should not consider the Epic Due date if the linking is of any other type like relates or clones or duplicates etc'
- so, I suppose You have some specific link type for that?
'Epic is a child of the Program Epic'
- Do You have two epic types?
Best regards,
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
So, as I understand: due date of the Program epic should affect to 'pr.due date' of the epic by only link name 'Child'('parent' from epic side).
import com.atlassian.jira.issue.link.IssueLink;
import com.atlassian.jira.component.ComponentAccessor;
import java.sql.Timestamp
def farthestDate
def issueLinks
def allOutIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getOutwardLinks(issue.getId()))
def allInIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getInwardLinks(issue.getId()));
issueLinks = allInIssueLink?.findAll() { (it.getSourceObject().getIssueType().getName() == "Program Epic") && (it.getIssueLinkType().getInward() == "Parent") }
for(IssueLink issueLink : issueLinks){
def dueDate = issueLink.getSourceObject().getDueDate()
if (dueDate == null){
return null
}
else if (farthestDate == null){
farthestDate = dueDate
}
else if (dueDate?.after(farthestDate)){
farthestDate = dueDate
}
}
return farthestDate
For that I've change condition: (it.getSourceObject().getIssueType().getName() == "Program Epic") && (it.getIssueLinkType().getInward() == "Parent", as You see I use type name 'Program Epic' and link type name 'Parent'.
For example in the current program epic affect only to epic 'test-4'
Best regards,
Andrew
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Andrew , I tried the above script. But its not working for me. In-fact, no date is available.
I replaced "Parent" with "Parent of Custom Link" , as that is how the link name is in our project.
Also, there is no mention on Epic in the above script, then how does the scripted field pull the farthest Due Date value of Epic and display at Program Epic ?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I suppose we are confusing in parent-child relation.
I simplified condition.
import com.atlassian.jira.issue.link.IssueLink;
import com.atlassian.jira.component.ComponentAccessor;
import java.sql.Timestamp
def farthestDate
def issueLinks
def allOutIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getOutwardLinks(issue.getId()))
def allInIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getInwardLinks(issue.getId()));
issueLinks = allInIssueLink?.findAll() { it.getIssueLinkType().getInward() == "Parent" }
for(IssueLink issueLink : issueLinks){
def dueDate = issueLink.getSourceObject().getDueDate()
if (dueDate == null){
return null
}
else if (farthestDate == null){
farthestDate = dueDate
}
else if (dueDate?.after(farthestDate)){
farthestDate = dueDate
}
}
return farthestDate
If this also not working, could You please check screen of next settings 'linking':
'Parent' placed in Inward column?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Andrew ,
The above script din work as well. It did not show any date at all.
I checked like you have asked,
PARENT OF CUSTOM LINK - Outward
CHILD OF CUSTOM LINK - Inward.
Also few more description,
The Due Date field is the regular JIRA field available at the Epic issue
Scripted Due Date (Scripted filed) is added to the Program Epic issue screen. So, its visible only at Program Epic issue type.
Then, in the issue hierarchy, we have Program Epic and below that we have Epic
Scenario - The scripted field pulls the farthest date from the Epic and displays at the Program Epic. If any one of the regular Due Date of Epic is empty, then the scripted field returns empty at Program Epic too.
Hope the helps . .Thank for trying to help. I'm really grateful for helping me
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Could You please check next code?
import com.atlassian.jira.issue.link.IssueLink;
import com.atlassian.jira.component.ComponentAccessor;
import java.sql.Timestamp
def farthestDate
def issueLinks
def allOutIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getOutwardLinks(issue.getId()))
issueLinks = allOutIssueLink?.findAll() { (it.getDestinationObject().getIssueType().getName() == "Epic") && (it.getIssueLinkType().getOutward() == "Parent") }
for(IssueLink issueLink : issueLinks){
def dueDate = issueLink.getDestinationObject().getDueDate()
if (dueDate == null){
return null
}
else if (farthestDate == null){
farthestDate = dueDate
}
else if (dueDate?.after(farthestDate)){
farthestDate = dueDate
}
}
return farthestDate
or
import com.atlassian.jira.issue.link.IssueLink;
import com.atlassian.jira.component.ComponentAccessor;
import java.sql.Timestamp
def farthestDate
def issueLinks
def allInIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getInwardLinks(issue.getId()));
issueLinks = allInIssueLink?.findAll() { (it.getSourceObject().getIssueType().getName() == "Epic") && (it.getIssueLinkType().getInward() == "Child") }
for(IssueLink issueLink : issueLinks){
def dueDate = issueLink.getSourceObject().getDueDate()
if (dueDate == null){
return null
}
else if (farthestDate == null){
farthestDate = dueDate
}
else if (dueDate?.after(farthestDate)){
farthestDate = dueDate
}
}
return farthestDate
I hope one of them will work as needed.
Best regards,
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Andrew , Hope you are well :) I just some question your script and hope you can help.
The script was working great in our DEV env. But, its not working in QA. I'm getting the below error,
2020-06-15 09:45:13,194 ERROR [customfield.GroovyCustomField]: ************************************************************************************* 2020-06-15 09:45:13,194 ERROR [customfield.GroovyCustomField]: Script field failed on issue: ATLAS-540, field: PE Scripted Due Date org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script165.groovy: 16: unable to resolve class IssueLink @ line 16, column 37. def allOutIssueLink = new ArrayList<IssueLink>(ComponentAccessor.getIssueLinkManager().getOutwardLinks(issue.getId())) ^ Script165.groovy: 19: unable to resolve class IssueLink @ line 19, column 1. for(IssueLink issueLink : issueLinks){ ^ 2 errors
Also, one more thing is, in QA we have enabled this plugin called saFe EPIC to Feature translator. So, this Plugin helps translate the issue name to Feature.
Please help. Thank yo.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.