Date: Fri, 29 Mar 2024 01:02:27 +0000 (UTC) Message-ID: <104817835.9.1711674147591@cc5894ff65d6> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_8_490349101.1711674147591" ------=_Part_8_490349101.1711674147591 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
Purpose |
Hosting |
Compatible Tools |
---|---|---|
Create a new issue based on the values of a choice question (checkbox, d= ropdown or multi-select dropdown) in a form. |
Cloud |
Any scripting tool, such as JMWE, Power Scripts or Scriptrunner, that us= es Groovy. |
Script |
//// Wh= en using this script in the script console uncomment the next line: def issueKey =3D 'ISSUE-1' //// When using this script in a transition uncomment the next line: // def issueKey =3D issue.key String formName =3D "Form Name" String fieldName =3D "Issue Creation Dropdown Field" Closure createIssue =3D { def summary, def issueTypeName, def projectKey -&= gt; def taskType =3D get('/rest/api/2/issuetype').asObject(List).body.find = { it['name'] =3D=3D issueTypeName }['id'] post('/rest/api/2/issue') .header('Content-Type', 'application/json') .body( [ fields: [ summary : summary, project : [ key: projectKey ], issuetype : [ id: taskType ] ] ]) .asString().body } Closure getFormId =3D { def allProperties, String name -> for(def formProperty : allProperties){ if(formProperty.key.equals("proforma.forms")){ for(def p : formProperty.value.forms) { if(p.name.equals(name)){ return p.id } } } } } Closure<String> getFieldId =3D { def property, String name -> for (def question : property.value.design.questions){ if(name.equals(question.value.label)){ return question.key } } } Closure getDropdownFieldValue =3D { def property, String name -> def fieldId =3D getFieldId(property, name) for (def answer : property.value.state.answers){ if(answer.key.equals(fieldId)){ return answer.value.choices } } } Closure getDropdownFieldInfo =3D { def property, String name -> def fieldId =3D getFieldId(property, name) for (def question : property.value.design.questions){ if(question.key.equals(fieldId)){ return question.value.choices } } } def proformaPropertyKeys =3D [] def allIssueProperties =3D get('/rest/api/3/issue/' + issueKey + '/properti= es/') .header('Content-Type', 'application/json') .asObject(Map) if (allIssueProperties.status =3D=3D 200){ for(def property : allIssueProperties.body.keys){ if(property.key.contains("proforma.forms")){ proformaPropertyKeys.add(property.key) } } } def formProperties =3D [] if(!proformaPropertyKeys.isEmpty()){ for(def key : proformaPropertyKeys){ def property =3D get('/rest/api/3/issue/' + issueKey + '/properties= /' + key) .header('Content-Type', 'application/json') .asObject(Map) if(property.status =3D=3D 200){ formProperties.add(property.body) } } } def formId if(!formProperties.isEmpty()){ formId =3D getFormId(formProperties, formName) for(def formProperty : formProperties){ if(formProperty.key.equals("proforma.forms" + ".i" + formId) &&= amp; formProperty.value.schemaVersion.equals(8)){ def fieldChoice =3D getDropdownFieldValue(formProperty, fieldNa= me) def fieldInfo =3D getDropdownFieldInfo(formProperty, fieldName) for(def option : fieldInfo){ if(option.label.equals("Story") && fieldChoice.cont= ains(option.id)){ createIssue("Summary for Story", "Story", "PS") } else if(option.label.equals("Task") && fieldChoic= e.contains(option.id)){ createIssue("Summary for Task", "Task", "PS") } } } } } |
Installation instructions |
|
Possible use cases |
Use this script to create new issues based on the value selected on a fo= rm. For example, a dropdown menu in a support request form could be used to= make new Bug or Feature Request issues. |
Limitations |
|