Smart Fields Examples

 

Total time passed in hours since the issue has been resolved

1- Login to JIRA as an administrator.

2- Go to Settings → Issues → Custom Fields.

3- Create a custom field with Smart Number Field type. Don’t forget to add it to related screens.

4- Locate the custom field you created in the custom fields list.

5- From the actions, choose “Contexts and default value”.

6- Click on “Edit custom field config”.

7- Enter the expression below to “Insert Jira Expression” editor.

8- Save your configuration.

issue.resolutionDate ? (new Date()).minusMinutes(issue.resolutionDate.getTime() / (1000 * 60)) .getTime() / (1000 * 60 * 60) : null

The final date to start working on an issue to finish on due date

1- Login to JIRA as an administrator.

2- Go to Settings → Issues → Custom Fields.

3- Create a custom field with Smart Text Field type. Don’t forget to add it to related screens.

4- Locate the custom field you created in the custom fields list.

5- From the actions, choose “Contexts and default value”.

6- Click on “Edit custom field config”.

7- Enter the expression below to “Insert Jira Expression” editor.

8- Save your configuration.

issue?.dueDate && issue.originalEstimate ? issue?.dueDate.minusDays(issue.originalEstimate / (60 * 60 * 8)).toISOString() : ""

Account Id of Previous Assignee

1- Login to JIRA as an administrator.

2- Go to Settings → Issues → Custom Fields.

3- Create a custom field with Smart Text Field type. Don’t forget to add it to related screens.

4- Locate the custom field you created in the custom fields list.

5- From the actions, choose “Contexts and default value”.

6- Click on “Edit custom field config”.

7- Enter the expression below to “Insert Jira Expression” editor.

8- Save your configuration.

issue.changelogs.map(e => e.items).flatten() .filter(e => e.field == "assignee").length > 1 ? issue.changelogs.map(e => e.items).flatten() .filter(e => e.field == "assignee")[issue.changelogs.map(e => e.items).flatten().filter(e => e.field == "assignee").length - 2].from : ""

Previous Status

issue.changelogs.map(i=>i.items) .flatten() .filter(i=>i.field=="status").length>0 ? issue.changelogs.map(i=>i.items) .flatten() .filter(i=>i.field=="status") .map(a=>a.fromString)[0] : ""

Blocking Issues

issue?.links?.filter(e => e?.type?.inward == "is blocked by" || e?.type?.outward == "blocks") .map(e => e?.inwardIssue?.key != issue?.key ? e?.inwardIssue?.key : e?.outwardIssue?.key)

Total Worklogs by Author

issue?.worklogs?.map(e => ({time: e.timeSpent, author: e.author.displayName})) .reduce((result, worklog) => result.set(worklog.author, (result[worklog.author] || 0) + worklog.time), new Map())

Parent Priority

issue?.parent?.priority?.name

Parent Assignee

issue?.parent?.assignee?.displayName

Parent Status

issue?.parent?.status?.name

Comment Authors

issue?.comments?.map(comment => comment.author?.displayName)

Last Status Author

issue.changelogs.filter(c => c.items.some(i => i.field=="status"))[0]?.author.displayName

Project Category

issue.project?.projectCategory?.name

Project Lead

issue.project?.lead?.displayName

Assignees of Sub-tasks

issue.subtasks?.map(e => e.assignee?.displayName)

ICE Score

issue.cfIIIII * issue.cfCCCCC * issue.cfEEEEE

Replace IIIII, CCCCC and EEEEE with your following number custom fields:

IIIII → Impact

CCCCC → Confidence

EEEEE → Ease

Time Spent - Original Estimate Ratio

issue.timeSpent && issue.originalEstimate ? issue.timeSpent / issue.originalEstimate : 0