Hi,
A customer wants to be able to move issue (but everyone in the developer user is allowed) from every status to only a specified status("open" status for exp.) ?
How can i restrict to status(programatically or not)
I tried with the script listener. Action is Issue Moved.
Here is my code :
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.event.type.EventDispatchOption;
import com.atlassian.jira.issue.IssueInputParameters;
import com.atlassian.jira.bc.issue.IssueService;
import com.atlassian.jira.util.ErrorCollection;
import com.atlassian.jira.workflow.TransitionOptions;
import com.atlassian.jira.workflow.WorkflowSchemeManager;
log.warn("issue moved");
log.warn("status : " + event.getIssue().getStatus());
log.warn("Issue Type : " + event.getIssue().getIssueType());
WorkflowSchemeManager workflowSchemeManager = ComponentAccessor.getWorkflowSchemeManager();
String wfName = workflowSchemeManager.getWorkflowName(event.issue.getProjectObject(), event.issue.getId().toString());
log.warn("wfName : " + wfName);
def openStatusTransitionID = 131;
def adminUser = ComponentAccessor.getUserManager().getUserByName("safak.sahin");
MutableIssue issue = (MutableIssue)event.getIssue();
IssueService issueService = ComponentAccessor.getIssueService();
IssueInputParameters inputParameters = issueService.newIssueInputParameters();
inputParameters.setStatusId("1").setIssueTypeId("6").setSummary("updated:" + issue.getSummary());
TransitionOptions transitionOptions = TransitionOptions.defaults();
transitionOptions.skipConditions();
transitionOptions.skipPermissions();
transitionOptions.skipValidators();
IssueService.TransitionValidationResult transitionValidationResult;
transitionValidationResult = issueService.validateTransition(adminUser, issue.getId(), openStatusTransitionID, inputParameters);
if (transitionValidationResult.isValid()) {
IssueService.IssueResult transitionResult = issueService.transition(adminUser, transitionValidationResult);
if (!transitionResult.isValid()) {
ErrorCollection errors = transitionResult.getErrorCollection();
errors.getErrorMessages().each{log.warn(it)};
errors.getReasons().each{log.warn(it)};
errors.getErrors().each{k,v -> log.warn("Key : " + k + " Value : " + v)};
}
} else {
ErrorCollection errors = transitionValidationResult.getErrorCollection();
errors.getErrorMessages().each{log.warn(it)};
errors.getReasons().each{log.warn(it)};
errors.getErrors().each{k,v -> log.warn("Key : " + k + " Value : " + v)};
}
And here is the log output:
2018-01-19 15:30:36,856 WARN [runner.ScriptRunnerImpl]: issue moved
2018-01-19 15:30:36,858 WARN [runner.ScriptRunnerImpl]: status : IssueConstantImpl[[GenericEntity:Status][sequence,45][statuscategory,4][name,Sales Approval][iconurl,/images/icons/statuses/generic.png][description,Sales Approve][id,10529]]
2018-01-19 15:30:36,858 WARN [runner.ScriptRunnerImpl]: Issue Type : IssueConstantImpl[[GenericEntity:IssueType][sequence,1][name,Bug][iconurl,/secure/viewavatar?size=xsmall&avatarId=12853&avatarType=issuetype][description,A problem which impairs or prevents the functions of the product.][style,null][id,1][avatar,12853]]
This is the source issue Workflow not target ==>2018-01-19 15:30:36,881 WARN [runner.ScriptRunnerImpl]: wfName : TEST NP-MSU Workflow-deploymentsiz-w/o-DepUat
2018-01-19 15:30:36,884 WARN [runner.ScriptRunnerImpl]: The workflow operation with action id '131' does not exist in the workflow.
Script Runner Listener does not work because its start just before the move event.
Is there another way to do it?
I'm really stuck and customer want this no matter what.