如何设置 JIRA Workflow Validator 的描述?

How to set the description of a JIRA Workflow Validator?

我正在开发一个简单的 JIRA Server 插件,如果未设置某个自定义字段,它将阻止发生转换。我用 atlas-create-jira-plugin-module 创建了一个新的工作流验证器,并定制了验证函数以满足我的需要。奇怪的是,当我通过工作流编辑器将这个新验证器添加到转换中时,它出现在验证列表中并带有错误的描述。它显示了默认条件,"Only users with Resolve Issues"权限可以执行此转换的描述。

我一直在关注本教程:https://developer.atlassian.com/server/jira/platform/creating-workflow-extensions/ 我也遇到了这个类似的教程:https://www.j-tricks.com/tutorials/workflow-validator

在我的 atlassian-plugin.xml 中,我确保定义了一个 "view" velocity 资源:

<workflow-validator key="custom-field-is-set-validator" name="Custom Field Is Set Validator" i18n-name-key="custom-field-is-set-validator.name" class="com.ngc.jira.plugins.workflow.CustomFieldIsSetValidatorFactory"> 
    <description key="custom-field-is-set-validator.description">Validation to require that a custom field be given a value.</description>  
    <validator-class>com.ngc.jira.plugins.workflow.CustomFieldIsSetValidator</validator-class>  
    <resource type="velocity" name="view" location="templates/validators/custom-field-is-set-validator.vm"/>  
    <resource type="velocity" name="input-parameters" location="templates/validators/custom-field-is-set-validator-input.vm"/>  
    <resource type="velocity" name="edit-parameters" location="templates/validators/custom-field-is-set-validator-input.vm"/> 
  </workflow-validator>

而custom-field-is-set-validator.vm的内容如下:

Only if the custom field <strong>$field</strong> has be set.

作为完整性检查,我创建了一个工作流条件并将速度 (vm) 资源应用为它的视图模板。它在此上下文中正确显示!

但是,当我尝试为我的工作流验证器使用相同的速度资源时,管理页面仍然将验证器显示为 "Only users with Resolve Issues permission can execute this transition" 而不是使用我的描述。

我错过了什么?谢谢!

Screenshot showing the built-in condition

Screenshot showing my validator that is wrongly appearing as the same condition

我在 2011 年写了一本 O'Reilly 的实用 Jira 插件书,其中有一个验证器示例。这本书的来源是 https://bitbucket.org/mdoar/practical-jira-plugins/src/default/(这本书在那里)。

但坦率地说,最近我会使用 ScriptRunner、JMWE 或其他可让您编写自定义工作流程内容的插件。但是不要让它阻止你学习它!祝你好运

事实证明,我 copied/pasted 我的工作流程 condition 中有一段代码需要针对工作流程 validator。当我应该转换为 ValidatorDescriptor 时,我试图转换为 ConditionDescriptor:

差:

if (!(descriptor instanceof ConditionDescriptor)) {
          throw new IllegalArgumentException("Descriptor must be a ConditionDescriptor.");
        }

        ConditionDescriptor conditionDescriptor = (ConditionDescriptor) descriptor;

好:

if (!(descriptor instanceof ValidatorDescriptor)) {
            throw new IllegalArgumentException("Descriptor must be a ValidatorDescriptor.");
        }

        ValidatorDescriptor validatorDescriptor = (ValidatorDescriptor) descriptor;

非常巧妙,它没有完全破坏我的插件,而是最终显示了完全不同的描述。 ;)