场景
使用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(); }