如何设置JIRA工作流验证器的描述?

时间:2019-07-19 17:57:37

标签: jira jira-plugin atlassian-plugin-sdk

我正在开发一个简单的JIRA Server插件,如果未设置某些自定义字段,它将防止发生过渡。我使用atlas-create-jira-plugin-module创建了一个新的工作流验证器,并根据自己的需要量身定制了验证功能。奇怪的是,当我通过工作流编辑器将此新的验证器添加到过渡中时,它以错误的描述出现在验证列表中。它显示了来自默认 condition 的描述,“只有具有解决问题的权限的用户才能执行此过渡”。

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

在我的atlassian-plugin.xml中,确保确保定义“视图”速度资源:

<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)资源作为其视图模板。在这种情况下它可以正确显示!

但是,当我尝试为工作流验证器使用相同的速度资源时,管理页面仍将验证器显示为“只有具有“解决问题”权限的用户才能执行此过渡”,而不使用我的描述。

我想念什么?谢谢!

Screenshot showing the built-in condition

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

2 个答案:

答案 0 :(得分:0)

我在2011年写了一本O'Reilly的书《实用Jira插件》,其中包含一个验证程序示例。来源在https://github.com/mattleibow/SkiaSharpDemo(而本书在外面)。

但是坦率地说,这些天我会使用ScriptRunner,JMWE或其他插件来编写自定义工作流程。但是,不要让它阻止您学习它!祝你好运

答案 1 :(得分:0)

事实证明,我已经从工作流条件中复制/粘贴了一部分代码,需要对工作流 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;

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