根据自定义字段(数值类型例如:+5,表示在DueDate的基础上+5天),利用Bulk的Edit功能自动修改

FightTiger 2018-07-23 03:54:11
#1.我这里新建了一个自定义字段,数值类型,可以输入+/-数值,例如:+5或者-5,表示加五天或者减五天,已经添加并应用到问题的创建中了
#2.在Bulk功能里面,我批量筛选了若干个ISSUE,然后选择Bulk Edit(批量编辑)
#3.然后我设置这个字段+5天,功能是:当保存设置之后,同时修改对应的若干issue的duedate字段分别+5天


请问这个该如何实现,现在卡在这里了,官方文档介绍的很少!
...全文
342 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
FightTiger 2018-07-27
  • 打赏
  • 举报
回复
我这里写了一个LISTENER,完成了这个功能!

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.event.issue.AbstractIssueEventListener;
import com.atlassian.jira.event.issue.IssueEvent;
import com.atlassian.jira.event.type.EventDispatchOption;
import com.atlassian.jira.event.type.EventType;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.MutableIssue;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.security.JiraAuthenticationContext;
import com.td.jira.plugin.utils.LogFileOutput;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/***
* @auth baopuzi
* @date 7/25/18
* @desc 描述信息
*/
public class IssuseUpdateListener extends AbstractIssueEventListener {

private static final Logger log = LoggerFactory.getLogger(IssuseUpdateListener.class);


private JiraAuthenticationContext authContext = ComponentAccessor.getJiraAuthenticationContext();


@Override
public void workflowEvent(IssueEvent issueEvent) {

log.debug("_+_+_+_+_+_+_+_+_+_+_+_登录的用户信息:" + authContext.getLoggedInUser().toString());
Issue issue;
MutableIssue mutableIssue = null;
Long eventTypeId; //事件类型
Object customFieldValue; //自定义字段的值
CustomField customField = null; //自定义字段
eventTypeId = issueEvent.getEventTypeId();
if (EventType.ISSUE_UPDATED_ID.equals(eventTypeId)) {
try {
issue = issueEvent.getIssue();
mutableIssue = (MutableIssue) issue;
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();

List<CustomField> customFieldList = customFieldManager.getCustomFieldObjects(issue);
if (customFieldList != null && customFieldList.size() > 0) {
String nameKey = null;
for (CustomField field : customFieldList) {
nameKey = field.getNameKey();
LogFileOutput.log("****************desc:" + field.getDescription() + ",fieldName:" + field.getFieldName() + ",id:" + field.getId() + "name:" + field.getName() + ",nameKey:" + field.getNameKey() + ",untransLasedDesc:" + field.getUntranslatedDescription() + ",valueFormIssue:" + field.getValueFromIssue(issue) + ",getValue::" + field.getValue(issue) + ",valueFromMu:" + field.getValueFromIssue(mutableIssue) + ",getValueMu:" + field.getValue(mutableIssue));
if (nameKey.equals("顺延")) {
customField = field;
break;
}
}
}
customFieldValue = mutableIssue.getCustomFieldValue(customField);
LogFileOutput.log("*****************::customFieldValue:" + customFieldValue);
//设置时间
if (customFieldValue == null) {
return;
}
Integer days = Integer.valueOf(customFieldValue + "");
if (days != 0) {
Timestamp dueDate = issue.getDueDate();
int intDays = Math.abs(days.intValue());
//
Calendar calendar = Calendar.getInstance();
if (dueDate == null) {
log.info("++++++++++++该issue没有指定due Date ,跳过并且不执行");
return;
} else {
calendar.setTime(dueDate);
}
for (int i = 0; i < intDays; ) {
if (days < 0) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
} else {
calendar.add(Calendar.DAY_OF_MONTH, -1);
}
if (calendar.get(Calendar.DAY_OF_WEEK) - 1 == 6 || calendar.get(Calendar.DAY_OF_WEEK) - 1 == 0) {
days++;
continue;
}
i++;
}
Date newDueDate = new Date(System.currentTimeMillis() + (1000 * 3600 * 24 * days));
if (dueDate != null) {
newDueDate = new Date(dueDate.getTime() + (1000 * 3600 * 24 * days));
}
LogFileOutput.log("dueDate:" + dueDate + ",newDueDate:" + new Timestamp(newDueDate.getTime()));


mutableIssue.setDueDate(new Timestamp(newDueDate.getTime()));
mutableIssue.setCustomFieldValue(customField, null);
ComponentAccessor.getIssueManager().updateIssue(authContext.getLoggedInUser(), mutableIssue, EventDispatchOption.DO_NOT_DISPATCH, false);
}

} catch (Exception ex) {
LogFileOutput.log("!@#$$$$$$%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^error*******************:" + ex.getMessage());
mutableIssue.setCustomFieldValue(customField, null);
ComponentAccessor.getIssueManager().updateIssue(authContext.getLoggedInUser(), mutableIssue, EventDispatchOption.DO_NOT_DISPATCH, false);
//置空自定义字段
LogFileOutput.log("******************************置空自定义字段:ok,issueKey:" + mutableIssue.getKey());
}
if (log.isTraceEnabled()) {
log.trace("**********************Exit event " + issueEvent.getEventTypeId() + " on issue " + issueEvent.getIssue());
}
} else {
super.workflowEvent(issueEvent);
}
}


}
FightTiger 2018-07-27
  • 打赏
  • 举报
回复
好的,谢谢指导,大概意思是这样的:例如有10个issue,管理员通过条件筛选,得到最终5个要处理的issue,通过jira的bulk edit功能,进入编辑页面,通过自定义的字段(自己通过插件创建了一个"顺延"字段,该字段具有顺延这5的issue的due Date的功能),进行(+/-顺延)改变due Date的日期
zhangguanglin_csdn 2018-07-24
  • 打赏
  • 举报
回复
需求描述不够清楚。
通过设置一个数值来修改Duedate?直接修改Duedate就可以,不需要添加一个字段。
当然按这种规则修改Duedate是需要插件来实现的,Jira本身没有这个功能。
另外,从需求角度考虑下什么情况下需要这个功能,可以换别的方式吗?不要执着于通过这种技术手段解决问题。

253

社区成员

发帖
与我相关
我的任务
社区描述
欢迎来到Atlassian产品技术交流论坛,您可以从安装/配置/功能/插件等各方面分享JIRA、Confluence、Bamboo等Atlassian系列产品的使用心得、技术难题的解决办法。
社区管理员
  • Atlassian技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧