场景
使用srt的多issue选择字段,根据条件获取srt字段选项的issues,然后执行issues的工作流
代码示例
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.workflow.WorkflowManager;
import com.opensymphony.workflow.loader.ActionDescriptor;
import com.opensymphony.workflow.loader.StepDescriptor;
import com.atlassian.jira.workflow.WorkflowException;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.bc.issue.IssueService;
import com.atlassian.jira.security.JiraAuthenticationContext;
import com.atlassian.jira.workflow.TransitionOptions;
import com.atlassian.jira.issue.IssueInputParameters;
def issuekey ="BUSS-1098";
MutableIssue issue = ComponentAccessor.getIssueManager().getIssueObject(issuekey);
ApplicationUser user = ComponentAccessor.getComponent(JiraAuthenticationContext.class).getUser();
//申请取消事务的类型
CustomField qxlyCf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(12005L);
CustomField ywxqCf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(11916L);
CustomField cjgsCf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(11919L);
log.info("cf:"+qxlyCf);
//定义业务需求状态,符合此状态的的执行“取消”
def ywxqStatus =["待开发","开发中","验收中","待上线"];
def cfValueObj =issue.getCustomFieldValue(qxlyCf);
log.info("cfValue="+cfValueObj);
//根据取消理由至进行判断
if(cfValueObj.equals("系统需求废弃")){
//获取系统需求
def ywxq =issue.getCustomFieldValue(ywxqCf);
log.info("ywxq="+ywxq);
for(ywxqKey in ywxq){
log.info("ywxqKey="+ywxqKey);
MutableIssue ywxqIssue = ComponentAccessor.getIssueManager().getIssueObject(ywxqKey.toString());
//关联的业务需求和场景故事 包含的场景故事可以全部取消 业务需求需判断
def status =ywxqIssue.statusObject.name;
log.info("status="+status);
//满足业务需求状态的才执行工作流
if(ywxqStatus.contains(status)){
log.info("满足");
int actionId =getNextActionId(ywxqIssue,"取消");
log.info("actionId="+actionId);
transition(user,ywxqIssue,actionId);
}
}
def cjgs =issue.getCustomFieldValue(cjgsCf);
log.info("cjgs="+cjgs);
for(cjgsKey in cjgs){
log.info("cjgsKey="+cjgsKey);
MutableIssue cjgsIssue = ComponentAccessor.getIssueManager().getIssueObject(cjgsKey.toString());
def status =cjgsIssue.statusObject.name;
log.info("status="+status);
//满足业务需求状态的才执行工作流
if(ywxqStatus.contains(status)){
log.info("满足");
int actionId =getNextActionId(cjgsIssue,"取消");
log.info("actionId="+actionId);
transition(user,cjgsIssue,actionId);
}
}
}
//获取工作流步骤
int getNextActionId(MutableIssue mutableIssue,String nextActionName) throws WorkflowException {
int nextActionId = 0;
try {
nextActionId = -1;
WorkflowManager workflowManager = ComponentAccessor.getWorkflowManager();
//当前step的状态
StepDescriptor stepDescriptor = workflowManager.getWorkflow(mutableIssue).getLinkedStep(mutableIssue.getStatusObject());
//当前step状态下,有那些步骤可以走
List<ActionDescriptor> actions = stepDescriptor.getActions();
if (actions != null && actions.size() > 0) {
for (ActionDescriptor action : actions) {
if (nextActionName.equals(action.getName())) {
nextActionId = action.getId();
break;
}
}
}
if (nextActionId <= 0) {
List<ActionDescriptor> actionAll = new ArrayList();
actionAll.addAll(workflowManager.getWorkflow(mutableIssue).getAllActions());
for (ActionDescriptor action : actionAll) {
if (nextActionName.equals(action.getName())) {
nextActionId = action.getId();
break;
}
}
}
} catch (WorkflowException e) {
throw e;
} finally {
if (-1 == nextActionId) {
throw new WorkflowException("not find actionId about actionName");
}
}
return nextActionId;
}
//执行工作流
void transition(ApplicationUser user, MutableIssue mutableIssue, int nextActionId) throws WorkflowException {
IssueService issueService = ComponentAccessor.getIssueService();
JiraAuthenticationContext context = ComponentAccessor.getComponent(JiraAuthenticationContext.class);
if (user != null) {
context.setLoggedInUser(user);
} else {
context.setLoggedInUser(user);
}
TransitionOptions transitionOptions = getTransitionOptions();
IssueInputParameters paramMap = issueService.newIssueInputParameters();
paramMap.setSkipScreenCheck(true);
IssueService.TransitionValidationResult transitionValidationResult = issueService.validateTransition(user, mutableIssue.getId(), nextActionId, paramMap,transitionOptions);
if (transitionValidationResult.isValid()) {
IssueService.IssueResult transitionResult = issueService.transition(user, transitionValidationResult);
if (transitionResult.isValid()) {
} else {
throw new WorkflowException(transitionResult.getErrorCollection().toString());
}
} else {
throw new WorkflowException(transitionValidationResult.getErrorCollection().toString());
}
}
//工作流参数
TransitionOptions getTransitionOptions(){
TransitionOptions.Builder builder = new TransitionOptions.Builder();
builder = builder.skipPermissions();
builder = builder.skipConditions();
builder = builder.skipValidators();
// builder = builder.setAutomaticTransition();
return builder.build();
}