Versions Compared

Key

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

This section has use cases which help you understand the usage of the Calculated fields provided by JMCF.

On this page:

Table of Contents

Calculated (scripted) Date custom field type

A Calculated (scripted) Date custom field type represents a java.util.Date calculated from a Groovy script.

Sample use cases:

(lightbulb) Calculate and display the Sprint end date in the statistics

Expand
  • Create a Calculated (scripted) Date custom field type, Sprint End Date, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula in the editor

    Code Block
    for (Object sprint : issue.get("Sprint")) {
      if (sprint.isActive())
        return sprint.getEndDate().toDate();
    }

  • Click on “Save”

  • Add this field in the statistics gadgets

Calculated (scripted) Date/Time custom field type

A Calculated (scripted) Date/Time custom field type represents a java.util.Date and is displayed as date+time.

Sample use cases:

(lightbulb) Calculate and display the probable date of resolution (excluding weekends) for an issue based on its Priority

...

Expand
titleSteps
  • Create a Calculated (scripted) Date/Time custom field type, Sprint end date from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula in the editor

    Code Block
    for (Object sprint : issue.get("Sprint")) {
      if (sprint.isActive())
        return sprint.getEndDate().toDate();
    } 
  • Click on Save.

  • Click on Edit Date Column Format and select RELATIVE.

  • Click on Save.

Calculated (scripted) Duration custom field type

A Calculated (scripted) Duration custom field type represents a duration and is displayed either as a duration string or as a number in a Long format representing the number of seconds.

Sample use cases:

(lightbulb) Calculate and display how many days an issue has been open

...

Expand
titleSteps
  • Create a Calculated (scripted) Duration custom field type, Due change, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    import java.text.SimpleDateFormat;
    
    Date curDueDate = issue.get("duedate");
    if (curDueDate == null)
      return null;
    
    if (issue.getFieldHistory("duedate").size() == 0)
        return null;
    oldVal = issue.getFieldHistory("duedate")[-1].getFrom()
    
    if (oldVal==null)
     return null;
    
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date oldDueDate = sdf.parse(oldVal);
    return (curDueDate.getTime() - oldDueDate.getTime())/1000L;
  • Click on Save.

(lightbulb) Calculate and display the Total Original Estimate of all the Stories associated to the Epic.

Expand
titleSteps
  • Create a Calculated (scripted) Duration custom field type: Total Original Estimate, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    def totalOE = 0
    	issue.getStories().each{
        totalOE += it.get("timeoriginalestimate",0)   
    }
    return totalOE
  • Click on Save.

  • Select the Duration in the configuration as Duration (Time Tracking Format)

(lightbulb) Calculate and display the Remaining Estimate of all the Stories associated to the Epic.

Expand
titleSteps
  • Create a Calculated (scripted) Number custom field type: Total Remaining Estimate, from the Custom fields administration page.

  • Click on Configure.

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    def totalRE = 0
    issue.getStories().each{
        totalRE += it.get("timeestimate",0)    
    }
    return totalRE
  • Click on Save.

  • Select the Duration in the configuration as Duration (Time Tracking Format)

Calculated (scripted) Multi-select custom field type

A Calculated (scripted) Multi-select custom field type represents a collection of Options and is displayed as a String representing the option values.

Sample use cases:

(lightbulb)  Calculate and display the access to be provided to the user in a custom field based on the project role the user belongs to.

Expand
titleSteps
  • Create a Calculated (scripted) Multi-select custom field type, "Access to" from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Options

  • Add the options to the custom field.

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    languagegroovy
    if(issue.get("New user")== null)
    return null
    def user = issue.get("New user")
    def roles = []
    def project = issue.get("project")
    if(user.isInProjectRole("Customer Support",project)){
      roles += "Jira Service Desk"
    }
    if(user.isInProjectRole("Document writer",project)){
      roles += "Confluence"
    }
    if(user.isInProjectRole("Project Manager",project)){
      roles += "Jira Software"
    }
    return roles
  • Click on Save.

Calculated (scripted) Multi-user custom field type

Calculated (scripted) Multi-user custom field type represents a collection of users and is displayed as a String representing the user display names

Sample use cases:

(lightbulb) Calculate and display the assignees of the sub-tasks on the parent issue.

Expand
titleSteps
  • Create a Calculated (scripted) Multi-user custom field type, "Assignees of Sub-tasks" from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    languagegroovy
    Set users = []
    issue.get("subtasks").each{
      if(it.assignee)
      {
        users += it.assignee
      }
    }
    return users
  • Click on Save.

Calculated (scripted) Number custom field type

Calculated (scripted) Number custom field type represents a number and is displayed in Double format. 

Sample use cases:

(lightbulb) Calculate and display the number of Stories associated to the Epic.

Expand
titleSteps
  • Create a Calculated (scripted) Number custom field type: Total Stories, from the Custom fields administration page.

  • Click on Configure

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    if (issue.stories){
      return issue.getStories().size() 
    }
    else{
      return 0
    }
  • Click on Save.

...

Calculated (scripted) Single-select custom field type

Calculated (scripted) Single-select custom field type represents an Option and is displayed as a String representing an Option value.

Sample use cases:

(lightbulb) Calculate and display the company name with logo based on the value provided in the text field holding the URL of the company

Expand
titleSteps
  • Create a Calculated (scripted) Single-select custom field type:

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    import com.google.common.net.InternetDomainName;
    import java.net.URL;
    import org.apache.commons.validator.routines.UrlValidator;
    
    if (issue.get("URL field")==null)
    return null;
    
    def urlString = issue.get("URL field")
    def urlValidator = new UrlValidator()
    if(urlValidator.isValid(issue.get("URL field")) == false)
    return null;
    
    def url = new URL(urlString)
    def host = url.getHost()
    def name = InternetDomainName.from(host).topPrivateDomain();
    return name.parts()[0].toUpperCase()
  • Click on Save.

  • Click on Edit Velocity template and write the following template

    Code Block
    #if ($value == "AMAZON")
    	<img src='https://images-na.ssl-images-amazon.com/images/I/31YAf-cs2oL._AC_UL160_.jpg'  width=30px >$value
    #elseif ($value == "MYNTRA")
    	<img src='https://images-na.ssl-images-amazon.com/images/I/31YAf-cs2oL._AC_UL160_.jpg'  width=30px >$value
    #else
    	return $value
    #end

Calculated (scripted) Single-user custom field type

Calculated (scripted) Single-user custom field type represents an ApplicationUser and is displayed as a String representing the display name of the user.

Sample use cases:

(lightbulb) Calculate and display the user who last commented on the issue

...

Calculated (scripted) Text/Html custom field type

Calculated (scripted) Text/Html custom field displays text calculated using a Groovy script and supporting HTML formatting.

Sample use cases:

(lightbulb) Calculate and display the last comment, its author, and timestamp in a text field.

Expand
titleSteps
  • Create a Calculated (scripted) Text/Html custom field type: Last comment details, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    if(issue.get("comment")){
      return "Comment body: " + issue.get("comment").last().getBody() + "\n" +
        "Comment Author: " + issue.get("comment").last(). getAuthor() + "\n" + "Comment timestamp: " + issue.get("comment").last().getUpdated()
    }
    else{
      return null
    }
  • Click on Save.

(lightbulb) Calculate and display the current issues' linked issues with "is blocked by" link type and are not in Resolved or Closed status.

Expand
titleSteps
  • Create a Calculated (scripted) Text/Html custom field type: Blocking issues, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    return issue.getLinkedIssues("is blocked by").findAll{
      it.get("status").name!= "Resolved" || it.get("status").name!= "Closed"
    }*.key.join(",")
  • Click on Save.

...

Expand
titleSteps
  • Create a Calculated (scripted) Text/Html custom field type: Previous Due dates, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    def dueDates = ""
    issue.getFieldHistory("duedate").each{
      if(it.getFrom()){
        dueDates += it.getFrom() + "\n"
      }
    }
    return dueDates
  • Click on Save.

(lightbulb) Calculate and display estimated hours for each day, using not more than 8 hours per day, until the due date.

Expand
titleSteps
  • Create a Calculated (scripted) Text/Html custom field type: Daily estimates, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    import org.apache.commons.lang.StringUtils;
    import java.text.SimpleDateFormat;
     
    dateStrings = new ArrayList();
    dateFormat = new SimpleDateFormat("yyyy-MM-dd");
     
    dueDate = issue.get("duedate");
    estimate = issue.get("timeoriginalestimate");
     
    if (dueDate != null && estimate != null && estimate > 0) {
      calendar = Calendar.getInstance();
      calendar.setTime(dueDate);
      hours = estimate / 3600.0;
     
      while (hours > 0) {
        dateHours = hours > 8 ? 8 : hours;
        dateStrings.add(
          dateFormat.format(calendar.getTime()) + "," +
          String.valueOf(dateHours) + " hours"
        );
        hours -= dateHours;
        calendar.add(Calendar.DATE, -1);
        if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY)
        	calendar.add(Calendar.DAY_OF_MONTH, -1)
        if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY)
        	calendar.add(Calendar.DAY_OF_MONTH, -1)
      }
    }
     
    if (dateStrings.isEmpty()) return null;
    return StringUtils.join(dateStrings, "\n");
  • Click on Save.

...

Calculated (scripted) Wiki Text custom field type

Calculated (scripted) Wiki custom field displays text calculated using a Groovy script and optionally supporting wiki-style formatting.

Sample use cases:

(lightbulb) Calculate and display the last comment, its author, and timestamp in a text field without escaping the formatting .

Expand
titleSteps
  • Create a Calculated (scripted) Text/Html custom field type: Last comment details, from the Custom fields administration page.

  • Click on Configure 

  • Click on Edit Groovy Formula and write the following formula.

    Code Block
    if(issue.get("comment")){
      return "Comment body: " + issue.get("comment").last().getBody() + "\n" +
        "Comment Author: " + issue.get("comment").last(). getAuthor() + "\n" + "Comment timestamp: " + issue.get("comment").last().getUpdated()
    }
    else{
      return null
    }
  • Click on Save.

Last Field Value Change Author custom field type

A Last Field Value change Author custom field type that represents the author of the last modification made to a field and is displayed as a String representing the display name of the user.

Sample use cases:

(lightbulb) Calculate and display the author who has last added this issue to a Sprint

Expand
titleSteps
  • Create a Last Field Value Change Author custom field type: Moved to Sprint by, from the Custom fields administration page.

  • Click on Edit Field to look for

  • Select the Sprint field.

  • Click on Save

Last Field Value Change Date/Time custom field type

Last Field Value Change Date/Time custom field type represents a java.util.Date and is displayed as date+time.

Sample use cases:

(lightbulb) Calculate and display the last time the issue was Flagged.

Expand
titleSteps
  • Create a Last Field Value Change Date/Time custom field type: Last Flagged, from the Custom fields administration page.

  • Click on Edit Field to look for

  • Select the Flagged field.

  • Click on Save

Parent Status custom field type

A Parent status calculated custom field type represents the status of the issue's parent issue, if any, and is displayed as a String representing the status name.

Sample use cases:

(lightbulb) Calculate and display the status of the parent issue and the name of the user to whom the issue is assigned.

Expand
titleSteps
  • Create a Parent Status custom field type: Parent Status field, from the Custom fields administration page.

  • Click on Edit Velocity Template

  • Write the following template

    Code Block
    #if ($issue.assignee.name)
    	$formattedValue and assigned to $issue.assignee.displayName
    #else
    	$formattedValue
    #end

Status entered by user custom field type

A Status entered by user custom field type represents a user who last (or first) moved the issue to the specified status and is displayed as a String representing the user display name.

Sample use cases:

(lightbulb) Calculate and display the author name and the email address of the user who first Approved the issue

Expand
titleSteps
  • Create a Status entered by user custom field type, First Approved on, from the Custom fields administration page.

  • Click on Edit Statuse(s) to look for.

  • Select the Approval status.

  • Select Earliest from Which transition execution field

  • Click on Save.

Status entered on date/time custom field type

A Status entered on Date/Time custom field type represents a date+time the issue has been last (or first) moved to the specified status and is displayed as date+time.

Sample use cases:

(lightbulb) Calculate and display the date/time an issue entered the Approval status for the first time

Expand
titleSteps
  • Create a Status entered on date/time custom field type, First Approved on, from the Custom fields administration page.

  • Click on Edit Statuse(s) to look for.

  • Select the Approval status.

  • Select Earliest from Which transition execution field

  • Click on Save

Time in status custom field type

Calculated Time in status custom field type represents a duration and is displayed either as a duration String or as a number in a Long format representing the number of seconds.

Sample use cases:

(lightbulb) Calculate and display the time spent in the Pull request status

Expand
titleSteps
  • Create a Time in status custom field type, Time in Pull request, from the Custom fields administration page.

  • Click on Edit Statuse(s) to look for.

  • Select the statuses you would like the calculated field to look for.

  • Click on Save.

(lightbulb) Calculate and display the total resolution time for a ticket in an error banner if the time spent is more than 3 days

Expand
titleSteps
  • Create a Time in status custom field type, Total resolution time, from the Custom fields administration page.

  • Click on Edit Statuse(s) to look for.

  • Select In Progress from the list of statuse(s)

  • Click on Save.

  • Click on Edit Velocity Template

  • Write the following template

    Code Block
    #if ($value > 252900)
    <div class="aui-banner aui-banner-error">
    	$formattedValue
    </div>
    #else
    	$formattedValue
    #end

...

Transition Caller custom field type

Transition Caller custom field type returns the user who first/last executed a specific workflow transition and is displayed as a String representing the display name of the user.

Sample use cases:

(lightbulb) Calculate and display the author who last fixed the issue

Expand
titleSteps
  • Create a Transition caller custom field type, Last fixed by, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Provide the transition name or ID of the transition to Fixed status, either manually or using the Transition picker

  • Click on Add.

  • Click on Save.

  • Select Latest from the Transition Execution field.

...

Transition Callers custom field type

Transition Callers custom field type rreturns the users who triggered a specific workflow transition and is displayed as a String representing the display names of the users.

Sample use cases:

(lightbulb) Calculate and display the authors who approved the ticket

Expand
titleSteps
  • Create a Transition callers custom field type, Approved by, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Select the "Approve" transition using the Transition picker

  • Click on Add.

  • Click on Save.

...

Transition Count custom field type

Transition Count custom field represents the number of times a specified workflow transition(s) was executed and is displayed as a number in Double format.

Sample use cases:

(lightbulb) Calculate and count the number of times an issue fix has been rejected

Expand
titleSteps
  • Create a Transition Count Custom field type, Rejected, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Provide the transition name or ID of the transition "Reject" either manually or using the Transition picker

  • Click on Add.

  • Click on Save.

...

Expand
titleSteps
  • Create a Transition Count Custom field type, Revisions, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Provide the transition name or ID of the transition "Needs revision" either manually or using the Transition picker

  • Click on Add.

  • Click on Save.

Transition Date/Time custom field type

Transition Date/Time custom field type represents a java.util.Date and is displayed as date+time. 

Sample use cases:

(lightbulb) Calculate and display the date/time as a relative time when the issue has been last approved.

Expand
titleSteps
  • Create a Transition Date/Time Custom field type, Last Approved on, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Provide the transition name or ID either manually or using the Transition picker

  • Click on Add.

  • Click on Save.

  • Select Latest from the Transition Execution field.

  • Click on Edit Date Format

  • Select RELATIVE

  • Click on Save

(lightbulb) Calculate and display the "Fix date" when an issue is moved to Fixed/Checked-in status for the first time

Expand
titleSteps
  • Create a Transition Date/Time Custom field type, Fix date, from the Custom fields administration page.

  • Click on Edit Transition(s) to look for.

  • Click on the Transition picker.

  • Select the workflow name and the transition that leads to the respective status

  • Click on Add

  • Repeat the same with the other transitions of the workflows.

  • Click on Save.

  • Select Earliest from the Transition Execution field