Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Script

Code Block
//// When using this script in the script console uncomment the next line:
def issueKey = 'ISSUE-1'
//// When using this script in a transition uncomment the next line:
// def issueKey = issue.key

String formName = "Form Name"

Closure getFormIds = { def propertyValue, String name ->
    def ids = []
    for(def form : propertyValue.value.forms){
	    if(form.name.equals(name)){
	        ids.add(form.id)
	    }
	}
    return ids
}

def proFormaForm = get('/rest/api/3/issue/' + issueKey + '/properties/proforma.forms')
    .header('Content-Type', 'application/json')
    .asObject(Map)
    
if(proFormaForm.status == 200){
    def forms = getFormIds(proFormaForm.body, formName)
    for(def formId : forms){
        def property = get('/rest/api/3/issue/' + issueKey + '/properties/proforma.forms.i' + formId)
                .header('Content-Type', 'application/json')
                .asObject(Map)
        boolean updateAllForms = false
        
        if(property.status == 200){
            if(property.body.value.schemaVersion.equals(8)){
                if(property.body.value.state.status.equals("s")){
                    property.body.value.state.status = "o"
                    def insertProperty = put('/rest/api/3/issue/' + issueKey + '/properties/' + property.body.key)
                                      .header('Content-Type', 'application/json')
                                      .body(property.body.value)
                                      .asString()
                    updateAllForms = true
                }
            }
        }
        if(updateAllForms){
            def searchProperty = get('/rest/api/3/issue/' + issueKey + '/properties/proforma.forms.search')
                    .header('Content-Type', 'application/json')
                    .asObject(Map)
            if(searchProperty.status == 200){
                def openForms = searchProperty.body.value.count.open.value
                def submittedForms = searchProperty.body.value.count.submitted.value
                searchProperty.body.value.count.open = openForms + 1
                searchProperty.body.value.count.submitted = submittedForms - 1
                def insertSearchProperty = put('/rest/api/3/issue/' + issueKey + '/properties/' + searchProperty.body.key)
                        .header('Content-Type', 'application/json')
                        .body(searchProperty.body.value)
                        .asString()
            }
            for(def form : proFormaForm.body.value.forms){
                if(form.id == formId){
                    form.remove("submitted")
                    def insertProperty = put('/rest/api/3/issue/' + issueKey + '/properties/' + proFormaForm.body.key)
                                      .header('Content-Type', 'application/json')
                                      .body(proFormaForm.body.value)
                                      .asString()
                }
            }
        }
    }
}

Installation instructions

  • If used in a transition:

    • Comment line 2

    • Uncomment line 4

    • Change formName in line 6 to the name of the form that you want to reopen.

  • If used in the script console:

    • Change the issue key in line 2 to the key of the issue that has the form you want to reopen.

    • Change formName in line 6 to the name of the form that you want to reopen.

Possible use cases

Use this script to reopen a submitted form, for example if a form needs to be reopened for an Approver to add/amend information.

Limitations

  • All copies of the form on the issue be reopened.

  • Note that this script will not work if the form is over 32 KB. You can limit the size of your forms by using multiple smaller forms, and by including character/word limits on your text fields.