如果使用 Groovy 的自定义字段值小于 1,则阻止 Jira 打开票证

Block Jira opening ticket if custom field value is less than 1 using Groovy

如果自定义字段值小于 1,我需要阻止在 Jira 上创建问题。

我尝试使用此代码但没有成功,自定义字段 ID 是:13200。

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.issue.Issue;
import com.opensymphony.workflow.InvalidInputException;
import org.apache.log4j.Category;


import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.Issue;
import groovy.xml.MarkupBuilder;
import com.atlassian.jira.config.properties.APKeys;

def issueManager = ComponentAccessor.getIssueManager()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def cField = customFieldManager.getCustomFieldObject("customfield_13200")
def cFieldValue = issue.getCustomFieldValue(cField) as Integer


if (cFieldValue > 0){
log.debug("ERRORE, QUANTITA' NON DISPONIBILI");
throw "ERRORE";
throw new InvalidInputException("QUANTITA' NON DISPONIBILI");
return cFieldValue;
return false;
}

该自定义字段取自另一个数据库(通过 Elements 链接),它是特定项目的数量,如果数量小于 0,票据应该抛出异常,但它不像我想的那样工作,给我日志中的这个错误:

For input string: "{"keys":["47"]}"
java.lang.NumberFormatException: For input string: "{"keys":["47"]}"
 at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
 at java.lang.Integer.parseInt(Integer.java:580)
 at java.lang.Integer.valueOf(Integer.java:766)

取值正确(47)但可能是类型错误?

有人可以帮我吗?

谢谢, 卢卡

您的变量内容是“{"keys":["47"]}",而不是"47"。你可以在这里看到这个:java.lang.NumberFormatException:对于输入字符串:“{“keys”:[“47”]}”

这就是您得到此异常的原因,因为“{"keys":["47"]}" 无法转换为数字,因此请仔细检查要转换为数字的变量的值

import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.component.ComponentAccessor
import com.opensymphony.workflow.InvalidInputException

def customFieldManager = ComponentAccessor.getCustomFieldManager()
def Scorte = customFieldManager.getCustomFieldObject("customfield_13200")
def ValoreScorte = issueObject.getCustomFieldValue(Scorte)
def QuantitaRichiesta = customFieldManager.getCustomFieldObject("customfield_13201")
def ValoreQuantitaRichiesta = issueObject.getCustomFieldValue(QuantitaRichiesta)
def casting_ValoreScorte = ValoreScorte.toString().replaceAll("[^\d.]", "") 
def Scorte_Intero = casting_ValoreScorte as int
def QuantitaRichiesta_Intero = ValoreQuantitaRichiesta as int

if (Scorte_Intero <= 0 || QuantitaRichiesta_Intero > Scorte_Intero){
log.debug("ERRORE, QUANTITA' NON DISPONIBILI")
throw new InvalidInputException("","QUANTITA' NON DISPONIBILI")
}

这是最终代码:)感谢您的帮助!