31st of August, 2021

Structure 7.2 adds the ability to group Quick Transformations

Download the latest version of Structure and its Extensions

Try It: Structure Sandbox Server (no installation required)


1. Version Highlights

Structure 7.2 allows you to group Quick Transformations, to apply multiple transformations at once.

2. Changes in Detail

2.1. Transformation Groups

Apply several transformations with a single click.

Quick Transformations are a great way to temporarily refine a structure or change the way it's organized for a specific task - but often, you need to apply several transformations at the same time. For example, you may want to look at tasks assigned to you, that are unresolved, and grouped by Version...

Now you can apply all those transformations at once, by adding them to a group.

You can create as many Transformation groups as you need, each with a unique name and color, so they're easy to find and apply.

Documentation: Transformation Groups

2.2. Additional Updates

  • Fixed: SUM{} didn't work with select lists
  • Performance improvements for attribute calculation

3. Supported Versions

Structure 7.2 and all extensions support Jira versions 8.5 or later. This release is for customers using Jira Server or Data Center (Jira Core, Jira Software, or Jira Service Management/Service Desk).

Compatible plugins versions:

Cloud customers can learn more about our products on the “Cloud” tab of our marketplace listing.

4. Installation and Upgrade

Pick a Time

We strongly recommend that you install and upgrade your apps during off-peak hours or scheduled maintenance windows. There are known issues in the Jira plugin infrastructure that may cause performance degradation and impede app installation when your Jira instance is under heavy load.

4.1. Installing Structure

If your Jira server does not have Structure yet, the installation is simple:

  1. Download and install Structure app, either from the Atlassian Marketplace or our Download page.
  2. When Add-on Manager reports the successful installation, click Get Started to visit a page with important guidance for the Jira administrator. You may want to also check out the user's Get Started page, available under the "Structure" top-level menu.
  3. Monitor catalina.out or jira-application.log for log messages from Structure.

4.2. Upgrading Structure

The upgrade procedure from versions 3.0–7.1 is simple:

  1. Consider backing up Jira data. Use Administration | System | Backup System. (If you have a large instance and a proper backup strategy in place, you may skip this step.)
  2. Back up Structure data. Use Administration | Structure | Backup Structure menu item. If you have a lot of structures and a large Jira, consider turning off the "Backup History" option to avoid a long backup process.
  3. Install the new version of the plugin.

  4. Monitor catalina.out or jira-application.log for warnings or errors.

5. Enterprise Deployment Notes

5.1. Attribute calculation performance improvement

In this release we improved the attribute calculation procedure. Structure now preloads all the issues required for attribute calculation with a bulk request. Actual numbers will depend on the structure configuration, amount of issues in the structure, aggregates usage, database performance, etc.; however, in our internal tests we saw a 20-100% speedup in attribute loading.

5.2. Downgrade to previous releases

Structure 7.2 introduces a new feature called Transformation Grouping. It allows you to create groups of transformations and disable and enable the whole group at once. This functionality changes the way transformations are organized in the database.

A special Groovy (ScriptRunner) script should be applied before or immediately after downgrading to ensure transformations are not lost. If applying the script after a downgrade, do not make any changes to your transformations before running the script, or transformation data may be lost.

The following script ungroups all quick transformation groups for all structures:

Migrate quick transforms

import groovy.json.JsonSlurper
import groovy.json.JsonOutput
import com.almworks.jira.structure.api.StructureComponents
import com.almworks.jira.structure.api.property.StructurePropertyService
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.onresolve.scriptrunner.runner.ScriptRunnerImpl

import static java.util.Arrays.asList;

@Grab(group = 'com.almworks.jira.structure', module = 'structure-api', version = '17.0.0')
@WithPlugin('com.almworks.jira.structure')

class QuickTransformsMigration {
  def log
  def sps
    
  void run() {
    def sc = ScriptRunnerImpl.getPluginComponent(StructureComponents)
    sps = sc.getStructurePropertyService()  
    def sm = sc.getStructureManager()
    sm.getAllStructures(null).each { s ->
      migrate(s.id)
    }
    log.warn("Migration has finished")
  }
                
  void migrate(long structureId) {
    try {
      migrate0(structureId)
    } catch (Exception e) {
      log.error("Failed to migrate transforms for structure id=${structureId}.\n${trimStackTrace(e)}")
    }
  }                  
    
  void migrate0(long structureId) {
    def transformsJson = sps.getString(structureId, 'quick-transforms', '[]')
    def jsonSlurper = new JsonSlurper()
    def transforms = jsonSlurper.parseText(transformsJson)
    def newTransforms = [];
    transforms.each { t ->
      if (t.key != 'group') {
        newTransforms.add(t)
      } else if (t.transforms != null) {
        log.warn("Ungrouping '${t?.quick?.name}' to ${t.transforms.size()} transforms in structure id=${structureId}")
        newTransforms.addAll(t.transforms)
      }
    }
    sps.setValue(structureId, 'quick-transforms', JsonOutput.toJson(newTransforms))
  }
    
  String trimStackTrace(Exception e) {
    return asList(e.stackTrace).subList(0, 50).join('\n    ') + '\n    ...'
  }  
}    

new QuickTransformsMigration(log: log).run()
GROOVY


Should you have any questions on Enterprise Deployment, let us know at support@almworks.com.