示例描述:
项目里程碑的计划完成日期必须在项目阶段的计划开始日期和计划完成日期之间
@WithPlugin("com.hktx.jxrs.jxlife") import com.onresolve.scriptrunner.runner.customisers.WithPlugin import com.hktx.jira.utils.IssueLinkTypeUtils import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.Issue import com.atlassian.jira.issue.MutableIssue import java.text.SimpleDateFormat import com.atlassian.jira.issue.customfields.option.Option def stage = getFieldByName("阶段名称") def endDate = getFieldByName("计划完成日期") def linkIssue = getFieldById("issuelinks-issues") def issueManager = ComponentAccessor.getIssueManager() def customFieldManager = ComponentAccessor.getCustomFieldManager() //项目档案issue Issue parentIssue = null //创建页面 if (linkIssue != null && (underlyingIssue?.id == null || underlyingIssue?.id == '')) { def linkIssuekey = linkIssue.getValue() as String[] if (linkIssuekey){ //项目档案issue parentIssue = issueManager.getIssueObject(linkIssuekey[0]) } } else { //编辑页面 //获取阶段对于的项目 List<Issue> projectIssueList = IssueLinkTypeUtils.getIssueListByLinkDescription(underlyingIssue, '所属项目') if (projectIssueList != null) { parentIssue = projectIssueList.get(0) } } if (parentIssue != null && endDate && endDate.getValue() && stage && stage.getValue()) { def endDateVal = endDate.getValue() as Date //判断计划完成日期是否大于项目阶段的计划完成日期 //自定义字段-阶段名称 def cf_jdmc = customFieldManager.getCustomFieldObject(12600L) //获取项目下的所有阶段 List<Issue> jdIssueList = IssueLinkTypeUtils.getIssueListByLinkDescription(parentIssue, '关联的项目阶段') //找到当前选择的阶段 Issue currentJdIssue = null for (Issue jdIssue : jdIssueList) { Option jdmcOption = (Option) jdIssue.getCustomFieldValue(cf_jdmc) if (jdmcOption != null && stage.getValue().equals(jdmcOption.getValue())) { currentJdIssue = jdIssue break } } if (currentJdIssue != null) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") //获取当前阶段的计划开始日期 def startDate = ComponentAccessor.customFieldManager.getCustomFieldObject(12003L) def parentStartDate = currentJdIssue.getCustomFieldValue(startDate) as Date //获取当前阶段的计划完成日期 def doneDate = ComponentAccessor.customFieldManager.getCustomFieldObject(10201L) def parentEndDate = currentJdIssue.getCustomFieldValue(doneDate) as Date if (endDateVal && endDateVal.before(parentStartDate)) { endDate.setError('计划完成日期不能小于当前阶段的计划开始日期: '+sdf.format(parentStartDate)) } else if (endDateVal && endDateVal.after(parentEndDate)) { endDate.setError('计划完成日期不能大于当前阶段的计划完成日期: '+sdf.format(parentEndDate)) } else { endDate.setError('') } } }