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

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 5 Next »

场景

根据条件获取srt字段选项的issue


代码示例

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