Page tree
Skip to end of metadata
Go to start of metadata

场景

使用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();
    }
  • No labels