Почему Groovy Script не работает в Scriptrunner?

Мне нужна помощь с groovy скриптом, который пересчитывает значение числового поля в родительской заявке при изменении поля в дочерней заявке. В консоли Groovy скрипт работает нормально, но когда я пытаюсь использовать его в Console Scriptrunner, появляются ошибки, такие как "No such property: issuetype for class: com.atlassian.jira.issue.Issue...". Вот сам скрипт:

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

def subTaskSum=0
issue.getSubTaskObjects().findAll{it.issuetype.name == "Этап/Заявка" && it.status.name in ["Подписан", "Закрыт"]}.each{subTaskSum += it.get("customfield_13203")} 
issue.setFieldValue("customfield_13302", subTaskSum)
return issue.get("customfield_13302")
  • 13 октября 2023 г. 9:49
Ответы на вопрос 2
Скрипт выше имеет синтаксическую ошибку. В последней строке вы используете метод `issue.get()`, который не существует для объекта типа `Issue`. Вместо этого вы можете использовать метод `getCustomFieldValue()`, чтобы получить значение пользовательского поля.

Кроме того, вам необходимо добавить импорт `com.atlassian.jira.issue.MutableIssue` и заменить `issue.setFieldValue()` на `issue.setCustomFieldValue()`, чтобы установить значение пользовательского поля.

Исправленный скрипт должен выглядеть так:

```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
import com.atlassian.jira.issue.MutableIssue

def subTaskSum = 0
issue.getSubTaskObjects().findAll { it.issuetype.name == "Этап/Заявка" && it.status.name in ["Подписан", "Закрыт"] }.each { subTaskSum += it.getCustomFieldValue(ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("customfield_13203")) as int } 
issue.setCustomFieldValue(ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("customfield_13302"), subTaskSum)
return issue.getCustomFieldValue(ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("customfield_13302")) as int
```

Проверьте этот исправленный скрипт и попробуйте снова использовать его в ScriptRunner. Он должен работать правильно без ошибок.
Не знаю, что такое "консоль Groovy" и какие функции в ней работают хорошо. Однако, в объекте Issue нет метода getIssuetype(), но есть getIssueType(). Поэтому для получения типа задачи нужно использовать issueType.name. Также не известно про метод setFieldValue. В объекте MutableIssue его нет. А метод setCustomFieldValue не сохраняет информацию в базе данных, а только устанавливает значение в объекте. Однако, в общем, такой подход не является оптимальным. Было бы лучше использовать вычисляемое поле, чтобы информация оставалась актуальной всегда.
Похожие вопросы