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

目标

有时候,我们想更为细致的来控制问题详情页的一些操作权限,但在权限方案或者工作流中的状态属性中并无法进一步细化条件来进行控制。比如:

  • 在问题得到解决后,不能够再创建子任务;
  • 在指定的条件下,不能通过界面的分派、或者分派给我来进行任务的分派;

对于以上的想要解决的场景,可以通过市场的现有的插件来完成,但我们这里将提供一个不需要采购插件即可完成的方法

实现步骤

设定jira的安装目录为:/opt/atlassian/Jira

步骤一

本页内容

下载页面下方的一个classes文件,并将它放在jira安装目录:/atlassian-jira/WEB-INF/classes/com/hktx/condition 下

需要在com目录下创建hktx/conditon目录,如果使用的是linux,注意需要向启动jira的账户授权对文件目录及文件地读权限

步骤二

/atlassian-jira/WEB-INF/classes/目录下,修改system-issueoperations-plugin.xml文件

如场景中,我们要实现"在问题得到解决后,不能够再创建子任务",可以查到此文件的内容

        <web-section key="operations-subtasks" name="Ops Bar Operations Subtask Section Section" location="opsbar-operations" i18n-name-key="webfragments.view.issue.opsbar.operations.subtasks" weight="50"/>

            <web-item key="create-subtask" i18n-name-key="webfragments.view.issue.opsbar.operations.subtasks.create" name="Create sub-task for this issue" section="operations-subtasks" weight="10">
                <label key="createsubtaskissue.operation"/>
                <tooltip key="admin.issue.operations.plugin.create.subtask.name"/>
                <styleClass>issueaction-create-subtask</styleClass>
                <link linkId="create-subtask">
                    /secure/CreateSubTaskIssue!default.jspa?parentIssueId=${issueId}
                </link>
                <condition class="com.atlassian.jira.plugin.webfragment.conditions.IsIssueEditableCondition"/>
                <condition class="com.atlassian.jira.plugin.webfragment.conditions.SubTasksEnabledCondition"/>
                <condition class="com.atlassian.jira.plugin.webfragment.conditions.IsSubTaskCondition" invert="true" />
                <condition class="com.atlassian.jira.plugin.webfragment.conditions.HasProjectPermissionCondition">
                    <param name="permission">create</param>
                </condition>
                <condition class="com.atlassian.jira.plugin.webfragment.conditions.HasSubTasksAvailableCondition"/>
				<!-- 以下是新增内容 -->
				<condition class="com.hktx.condition.UnsatisfyJqlCondition">
                    <param name="propertyKey">HKTXPROPERTIESKEY.UnsatisfyJqlCondition.subtask</param>
					<param name="jql"> resolved is not EMPTY </param>
                </condition>
                <!-- 以上是新增内容 -->
            </web-item>

即,我们在此配置中增加了以下内容

			<!-- 以下是新增内容 -->
				<condition class="com.hktx.condition.UnsatisfyJqlCondition">
                    <param name="propertyKey">HKTXPROPERTIESKEY.UnsatisfyJqlCondition.subtask</param>
					<param name="jql"> resolved is not EMPTY </param>
                </condition>
            <!-- 以上是新增内容 -->

配置内容说明,我们可以修改以下内容项

是否必要说明
propertyKey参数配置插件中定义的全主键

如果配置这个参数,需要安装汇科天下免费的参数配置插件,并在此插件中配置相关参数

此插件主要是提供全局化配置,并在其它类里直接来引用;

建议使用此种方法,可以通过配置参数来调整业务上的参数,避免因配置错误或者业务修改,频繁的重新JIRA应用。

插件的使用方法具体查看:Gears properties manager


如果这里配置了参数,但并未使用:Gears properties manager 这个插件,或者此插件中并未定义正确的键值和参数,那么整个条件将返回false

全主键的参数需要是一个有效的JQL语句,会判断这条语句是否满足当前问题的条件,如果满足会返回false,如果不满足会返回true

比如"在问题得到解决后,不能够再创建子任务“场景中,我们可以配置参数:”resolved is not EMPTY “

jqljql语句

如果我们不定义propertyKey参数(不定义propertyKey参数,可以不使用Gears properties manager插件),那么这里的值将是有效的;

如果我们不配置此参数,那么整个的条件都将返回false;

如果配置了此参数,会判断这条语句是否满足当前问题的条件,如果满足会返回false,如果不满足会返回true

比如"在问题得到解决后,不能够再创建子任务“场景中,我们可以配置参数:”resolved is not EMPTY “

步骤三

修改当配置完成保存文件后,重新启动服务器。


验证

我们看一下“在问题得到解决后,不能够再创建子任务”的场景的配置情况。

当问题被解决的时候,查看问题是否还可以看创建菜单

更多场景

当然 ,对于jira中问题详情页的各项操作,也可以通过在文件system-issueoperations-plugin.xml的各项操作配置中增加UnsatisfyJqlCondition的配置来完成。

对于需要限定特定的项目才需要这么处理,可以通过配置参数来完成,比如

  • 在指定的项目下,当前问题只有经办人才能创建子任务m可以写如下jql:“ project = demo and assignee = currentUser()  ”
  • 在指定的项目下,当字段的值等于A时,才能够分派经办人,可以写如下jql :"project = demo and cf[1234567] = A ",   交将配置添加以:system-issueoperations-plugin.xml文件中,并将配置内容增加到“key="assign-issue"” 的模块中。

以下是system-issueoperations-plugin.xml文件各个web-item的作用

说明
edit-issue编辑问题(不能限定行编辑)
assign-issue分派问题
assign-to-me经办人下面的分配给我
comment-issue备注(不能限定页面底部的备注)
log-work登记工时
vote-issue投票
unvote-issue取消投票
view-voters查看投票人
watch-issue关注问题
unwatch-issue取消关注
manage-watchers管理关注人
create-subtask创建子问题
subtask-to-issue子问题转换为父问题
issue-to-subtask转换为子问题
move-issue移动问题
move-subtask移动子任务
link-issue链接问题
clone-issue复制问题
edit-labels编辑标签
archive-issue归档问题
delete-issue删除问题
transitions-all所有工作流动作不可见(可通过工作流来控制)
opsbar-admin管理员管理项


下载附件

  File Modified
File UnsatisfyJqlCondition.class Jul 25, 2020 by 红旗公

  • No labels