Как получить значение поля родительской задачи при настройке правила поля в Behaviours с помощью ScriptRunner?

У меня возникла задача: нужно скрыть одно из полей на экранной форме при создании подзадачи, основываясь на значении поля родительской задачи. Для этого я использую Behaviours в рамках ScriptRunner. В теле скрипта написан следующий код:

Что я делаю не так?

```groovy
import com.atlassian.jira.component.ComponentAccessor 
import com.atlassian.jira.issue.fields.CustomField 
import com.atlassian.jira.issue.CustomFieldManager 
import com.atlassian.jira.issue.IssueManager 
import com.atlassian.jira.issue.Issue 

issue = issue.getParentObject() // здесь пишет, что переменная issue не задекларирована 

CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager() 

String myCustomFieldCode1 = "customfield_15500" 
CustomField myCustomField1 = customFieldManager.getCustomFieldObject(myCustomFieldCode1) 

String Value1 = issue.getCustomFieldValue(myCustomField1) 

If (Value1 == ‘’) { getFieldByName("ЦФО").setHidden(true) }
```

Не могли бы вы помочь мне разобраться в проблеме с использованием переменной issue и исправить возможные ошибки в коде?
  • 15 октября 2024 г. 15:43
Ответы на вопрос 1
Ваша проблема в том, что переменная `issue` должна быть инициализирована как текущая задача, к которой применяется правило Behaviours, и не изменяется с помощью `issue.getParentObject()`. Также в Groovy не используется `If`, вместо этого используется `if` (с маленькой буквы). 

В ScriptRunner Behaviours вы можете использовать переменную `issue`, которая уже ссылается на текущую задачу. Вы можете получить родительскую задачу с помощью метода `getParentObject()`. Давайте исправим ваш код:

```groovy
import com.atlassian.jira.component.ComponentAccessor 
import com.atlassian.jira.issue.fields.CustomField 
import com.atlassian.jira.issue.CustomFieldManager 

// Получаем родительскую задачу
def parentIssue = issue.getParentObject() 

// Проверяем, есть ли родительская задача
if (parentIssue) {
    CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager() 

    String myCustomFieldCode1 = "customfield_15500" 
    CustomField myCustomField1 = customFieldManager.getCustomFieldObject(myCustomFieldCode1)

    // Получаем значение пользовательского поля родительской задачи
    def value1 = parentIssue.getCustomFieldValue(myCustomField1) 

    // Скрываем поле, если значение пустое
    if (value1 == null || value1.isEmpty()) { 
        getFieldByName("ЦФО").setHidden(true) 
    }
}
```

Обратите внимание на следующие моменты:

1. Я создал переменную `parentIssue` для хранения родительской задачи.
2. Добавлена проверка, существует ли родительская задача (это необходимо для предотвращения ошибок, если у задачи нет родительской задачи).
3. Используется `if` с маленькой буквы.
4. Пояснены условия проверки значения на пустоту: я использую `value1 == null || value1.isEmpty()`, чтобы проверить, что значение поля не существует или является пустой строкой.

Этот код должен работать корректно в рамках вашего правила Behaviours. Не забудьте протестировать его, чтобы убедиться, что он скрывает поле "ЦФО" в соответствии с вашими требованиями.
Похожие вопросы