优秀的编程知识分享平台

网站首页 > 技术文章 正文

20220814项目管理周贴士(《项目管理》)

nanyue 2024-08-05 20:10:31 技术文章 5 ℃

项目经理需要收集各种信息,通过因素分析、对比分析和趋势分析等方法,定期开展项目数据分析,及时发现存在的问题,及时查明原因并加以改进。

本周最大的亮点是对上周的批量操作数据的弥补,面对600多条的冗余数据,逐条删除操作会显得很笨拙,作为技术出身还是期望能够通过编程或接口调用处理繁琐价值不大的事情。

发现JIRA的插件Script Runner的无缝支持Groovy编程,便抱着试一试的态度,结合谷歌百度,折腾起用脚本进行批量删除的想法,经过多轮实验,最后成功完成预期中的删除功能。

一些小体会

—重复例行的工作一定要自动化省时间

—总觉得能写点代码才对得起自己的专业

—有些规则是为了获取上下文北京而设

—一定要小批量测试再到大规模推广

—不断尝试解决掉问题经历痛苦到快乐

—系统学习小步快跑多种思路解决问题

主要代码

import com.atlassian.jira.issue.customfields.manager.OptionsManager

import com.atlassian.jira.component.ComponentAccessor

import com.atlassian.jira.issue.CustomFieldManager

import com.atlassian.jira.issue.fields.CustomField

import com.atlassian.jira.issue.fields.config.FieldConfig

import com.atlassian.jira.issue.fields.config.FieldConfigScheme

import com.atlassian.jira.issue.customfields.option.Option

import com.atlassian.jira.issue.customfields.option.Options

import groovy.transform.Field

// 更新的JIRA Issue Key

final String issueKey="BUG—XXX"

def issue =

ComponentAccessor.getIssueManager().getIssueObject(issueKey)

def customField =

ComponentAccessor.getCustomFieldManager().getCustomFieldObjects(issue).findByName("bug_type")

def availableOptions =

ComponentAccessor.optionsManager.getOptions(customField.getRelevantConfig(issue))

removeOptionToCustomField(customField, 400)

// 删除选项

public boolean

removeOptionToCustomField(CustomField customField, int offset) {

Option existingOption = null;

if (customField != null) {

List<FieldConfigScheme> schemes = customField.getConfigurationSchemes()

if (schemes != null &&

!schemes.isEmpty()) {

FieldConfigScheme schema =

schemes.get(0)

Map configs =

schema.getConfigsByConfig()

if (configs != null && !configs.isEmpty()) {

FieldConfig config = (FieldConfig) configs.pkeySet().iterator().next()

OptionsManager optionsManager =

ComponentAccessor.getOptionsManager()

Options options =

optionsManager.getOptions(config)

def len =

options.getRootOptions().size() - 1

options[offset..len].eachWithIndex{

option,i -> log.debug

"${i+offset}:$option"

options.removeOption(option)

}

}

}

}

return true;

}

// 增加选项

public Option

addOptionToCustomField(CustomField customField, String value) {

Option newOption = null;

if (customField != null) {

List<FieldConfigScheme> schemes = customField.getConfigurationSchemes()

if (schemes != null &&

!schemes.isEmpty()) {

FieldConfigScheme schema =

schemes.get(0)

Map configs =

schema.getConfigsByConfig()

log.debug(configs)

if (configs != null && !configs.isEmpty()) {

FieldConfig config = (FieldConfig) configs.keySet().iterator().next()

OptionsManager optionsManager =

ComponentAccessor.getOptionsManager()

Options option =

optionsManager.getOptions(config)

int nextSequence = option.isEmpty() ? 1 : option.getRootOptions().size() + 1

newOption = optionsManager.createOption(config, null, (long) nextSequence, value);

}

}

}

return newOption;

}

参考链接

https://scriptrunner.adaptavist.com/latest/index.html

https://www.cnblogs.com/freeliver54/p/15855723.html

https://community.atlassian.com/t5/Jira-questions/Remove-option-from-Select-list-custom-field-using-behaviour/qaq-p/1412083

https://doc.devpod.cn/jira/jira-scriptrunner-3244042.html

https://docs.atlassian.com/software/jira/docs/api/

http://groovy-lang.org/closures.html

最近发表
标签列表