Iterating Issue Activity
As it is not known in advance how many changes are made on issues and these changes are registered on Issue Activity, there is a notation that allows iterating a section over all the activities of an issue. For example, this allows creating a document that dynamically grows according to the number of existing activities. The notation is:
Activity Fields | Description |
---|---|
Title | The title of the issue |
Summary | The summary of the activity |
Content | When an activity regards a change of the Issue contents, this field displays the new Issue contents |
Author | The author of the activity |
AuthorEmail | The email of the author of the activity |
Published | The time the issue was published |
Updated | The time the issue was updated |
Categories | When an activity regards an Issue Status change, this field displays the new Issue Status |
We suggest you to use the html function to render the data, because almost all content is html. Here is an example: ${html:ActivityEntries[n].Title}
Below there is a sample of using the Activity iteration in a Word template:
or
Below there is a sample of using the Activity iteration in an Excel template:
or
Iterating Issue Links
As it is not known in advance how many linked issues exist for an issue, there is a notation that allows iterating a section over all the linked issues of an issue. For example, this allows creating a table that dynamically grows according to the number of existing linked issues. The notation is:
Links Fields | Description |
---|---|
AppType | The application type of the link |
LinkType | The type of the link |
Key | The key of the linked issue |
Summary | The summary of the linked issue |
URL | The URL of the link |
All fields listed here are available on Links[n] because it represents an issue. Besides those, there are two new fields on Links[n] level. See the table below:
Field | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
AppType | Returns the Application Type. The values can be:
| ||||||||||
LinkType | Returns the Link Type. |
Note: When the link you are iterating is on of these AppTypes: External JIRA or Confluence, the name is obtained using the Summary property.
The image below demonstrates an example of a Word template that iterates over linked issues.
or
For a working example of this functionality, check the template (SampleIterations.docx) on the Samples Page.
The image below demonstrates an example of an Excel template that iterates over linked issues.
or
Iterating Issue Comments
As it is not known in advance how many comments exist for an issue, there is a notation that allows iterating a section over all the comments on an issue. For example, this allows creating a table that dynamically grows according to the number of existing comments. The notation is:
Comments Fields | Description |
---|---|
Author | The author of the comment |
AuthorFullName | The full name of the author of the comment |
Body | The comment |
Created | The date the comment was posted |
GroupLevel | The group level of the comment |
The image below demonstrates an example of a Word template that iterates over issue comments.
or
For a working example of this functionality, check the template (SampleIterations.docx) in the Samples Page.
The image below demonstrates an example of an Excel template that iterates over issue comments.
or
Iterating Issue Worklogs
As it is not known in advance how many worklogs exist for an issue, there is a notation that allows iterating a section over all the worklogs of an issue. For example, this allows to create a table that dynamically grows according to the number of existing worklogs. The notation is:
Worklogs Fields | Description |
---|---|
Author | The author of the worklog |
AuthorFullName | The full name of the author of the worklog |
Comment | The comment of the worklog |
Created | The date the worklog was created |
Date Started | The date the worklog was started |
Time Spent | The timespent of the worklog in seconds |
TimeSpentFormatted | The timespent of the worklog as is displayed on JIRA |
BilledHours | The billedhours of the worklog in seconds (Belongs to Tempo Timesheets plugin) |
BilledHoursFormatted | The billedhoursformatted of the worklog as is displayed on JIRA (Belongs to Tempo Timesheets plugin) |
The image below demonstrates an example of a Word template that iterates over issue worklogs.
or
For a working example of this functionality, check the template (SampleIterations.docx) on the Samples Page.
The image below demonstrates an example of a template in Excel that iterates over issue worklogs.
or
Iterating Issue Subtasks
As it is not known in advance how many subtasks exist for an issue, there is a notation that allows iterating a section over all the subtasks of an issue. For example, this allows creating a table that dynamically grows according to the number of existing subtasks. The notation is:
Subtasks Fields | Description |
---|---|
Key | The key of the subtasks |
Summary | The summary of the subtasks |
AssigneeUserDisplayName | The assignee user of the subtasks |
The image below demonstrates an example of a Word template that iterates over issue subtasks.
or
For a working example of this functionality, check the template (SampleIterations.docx) on the Samples Page.
The image below demonstrates an example of an Excel template that iterates over issue subtasks.
or
For an example of how to iterate the details of a subtask Parent issue, please check the Iterating JQL Queries area below.
Iterating Issue Components
As it is not known in advance how many components exist for an issue, there is a notation that allows iterating a section over all the components of an issue. For example, this allows creating a table that dynamically grows according to the number of existing components. The notation is:
Components Fields | Description |
---|---|
Name | The name of the component |
Description | The description of the component |
Lead | The name of the component lead |
Id | The id of the component |
ProjectId | The project id of the component |
AssigneeType | The assignee type of the component |
The image below demonstrates an example of a Word template that iterates over issue components.
The image below demonstrates an example of an Excel template that iterates over issue components.
Iterating Issue Status Transitions
As it is not known in advance how many Status Transitions exist for an issue, there is a notation that allows iterating a section over all the Status Transitions of an issue. For example, this allows creating a table that dynamically grows according to the number of existing status transitions. The notation is:
Status Transitions Fields | Description |
---|---|
Author | The author of the status transitions |
Created | The date the status transition was performed |
OldStatus | The old status of the status transitions |
NewStatus | The new status of the status transitions |
The image below demonstrates an example of a Word template that iterates over status transitions.
or
The image below demonstrates an example of an Excel template that iterates over status transitions.
or
Iterating Issue Attached Images
As it is not known in advance how many Images can exist for an issue (as attachment), there is a notation that allows iterating a section over all the attached images of an issue to get some metadata about them. For example, this allows creating a table that dynamically grows according to the number of existing images. The notation is:
Attachments Images Fields | Description |
---|---|
ID | The id of the attached image |
Image | The image of the attached image |
Name | The name of the attached image |
Size | The size of the attached image |
HumanReadableSize | The size of the attached image |
Author | The author of the attached image |
Created | The date the attached image was created |
MimeType | The type of the attached image |
ThumbnailURL | The URL to the thumbnail of the image |
The image below demonstrates an example of a Word template that iterates over attached images.
or
The image below demonstrates an example of an Excel template that iterates over attached images.
or
Iterating Issue Attachments
As it is not known in advance how many attachments exist in an issue, there is a notation that allows iterating a section over all the attachments of an issue. For example, this allows creating a table that dynamically grows according to the number of existing attachments. The notation is:
Attachments Fields | Description |
---|---|
ID | The id of the attachment |
Name | The name of the attachment |
Author | The author of the attachment |
AuthorFullName | The full name of the author of the attachment |
Created | The date the attachment was created |
Size | The size of the attachment |
HumanReadableSize | The formatted size of the attachment |
MimeType | The type of the attachment |
The image below demonstrates an example of a Word template that iterates over attachments.
or
The image below demonstrates an example of an Excel template that iterates over attachments.
or
Iterating Issue Labels
As it is not known in advance how many labels exist in an issue, there is a notation that allows iterating a section over all the labels of an issue. The notation is:
Attachments Fields | Description |
---|---|
Name | The name of the label |
#{for labels} ${Labels[n].Name} #{end} or #{for <VariableName>=LabelsCount} ${Labels[VariableName].Name} #{end}
The image below demonstrates an example of a Word template that iterates over labels.
or
The image below demonstrates an example of an Excel template that iterates over labels.
or
Iterating Project Versions from an Issue
This iteration allows you to iterate over all project versions from the project which the issues belong to. The notation is:
Attachments Fields | Description |
---|---|
Name | The name of the project version |
Description | The description of the project version |
Start date | The Start Date of the project version |
Release date | The Release Date of the project version |
#{for projectVersions} ${ProjectVersions[n].Name} ${ProjectVersions[n].Description} ${ProjectVersions[n].Start date} ${ProjectVersions[n].Release date} #{end} or #{for <VariableName>=ProjectVersionsCount} ${ProjectVersions[VariableName].Name} ${ProjectVersions[VariableName].Description} ${ProjectVersions[VariableName].Start date} ${ProjectVersions[VariableName].Release date} #{end}
The image below demonstrates an example of a Word template that iterates over project version.
or
The image below demonstrates an example of an Excel template that iterates over project version.
or
Iterating JQL Queries
It is also possible to iterate issues that are the result of a JQL Query. The syntax is similar to the other iterations, but there is a clause parameter that will receive the JQL Query. A few examples are provided below.
The image below demonstrates an example of a Word template that iterates over issue subtasks.
For a working example of this functionality, check the template Sample Iterations in the Template Store.
The image below demonstrates an example of an Excel template that iterates over issue subtasks.
Iterating Issue Commits
As it is not known in advance how many commits exist for an issue, there is a notation that allows iterating a section over all the commits of an issue. For example, this allows creating a table that dynamically grows according to the number of existing commits. The notation is:
Commits Fields | Description |
---|---|
URL | The URL of the link |
CreatedDateTime | The date the commit was created |
Message | The message of the commit |
Author | The author of the Commit |
In order to extract more information from Commits, it is possible to get information from files committed:
Commits files count Fields | Description |
---|---|
FilesCount.Path | The path of the file was committed |
FilesCount.URL | The URL of the file was committed |
FilesCount.ChangeType | Identify the type of change occurs in the commit |
Iterating Issue Branches
As it is not known in advance how many branches exist for an issue, there is a notation that allows iterating a section over all the branches of an issue. For example, this allows the user to create a table that dynamically grows according to the number of existing branches. The notation is:
Branches Fields | Description |
---|---|
URL | The URL of the Branch |
Name | The name of the Branch |
RepositoryName | The name of the repository |
RepositoryURL | The URL of the repository |
Iterating Issue Pull Requests
As it is not known in advance how many pull requests exist for an issue, there is a notation that allows iterating a section over all the pull requests of an issue. For example, this allows creating a table that dynamically grows according to the number of existing pull requests. The notation is:
Pull Requests Fields | Description |
---|---|
URL | The URL of the Branch |
Name | The name of the Branch |
RepositoryName | The name of the repository |
RepositoryURL | The URL of the repository |
CommentsCount | Counts the number of comments in the pull request |
Status | The status of the pull request |
LastUpdated | The last time the pull request was updated |
PullRequestReviewers.Name | The name of the pull request reviewers |
PullRequestReviewers.Approved | The approve of the pull request reviewers |
You can get information about reviewers from each pull request:
Pull Request reviewers Fields | Description |
---|---|
PullRequestReviewers.Name | The name of the pull request reviewers |
PullRequestReviewers.Approved | The approve of the pull request reviewers |
Iterating Issue Builds
As it is not known in advance how many builds exist for an issue, there is a notation that allows iterating a section over all the builds of an issue. For example, this allows the user to create a table that dynamically grows according to the number of existing builds. The notation is:
Builds Fields | Description |
---|---|
ProjectName | The build project name |
ProjectKey | The build project key |
In order to get more information, we can get all the individual plans for the project and the correspondent build in existence for this plan
Build plans Fields | Description |
---|---|
Plans.Key | The plans build key |
Plans.Name | Theplansbuild name |
Plans.BuildNumber | The plans build number |
Plans.BuildKey | The plans build key |
Plans.BuildDuration | The duration of the build |
Plans.BuildFinishedDate | The date when plans build was finished |
Iterating Issue Reviews
As it is not known in advance how many reviews exists for an issue, there is a notation that allows iterating a section over all the pull requests of an issue. For example, this allows the user to create a table that dynamically grows according to the number of existing reviews. The notation is:
Reviews Fields | Description |
---|---|
Id | The review ID. Ex: 1 |
URL | The URL of the review |
Status | The review status. |
Title | The title of the review |
Author | The author of the review |
Moderator | The moderator of the review |
In order to get all the reviewers from this review we can use de following mappings:
Reviewers Fields | Description |
---|---|
Reviewers.Username | The username of each reviewer |
Reviewers.Completed | The completed name of each reviewer |
Applying filters to Iterations
If you want to take the previous iterations over comments, subtasks and issue links to another level of control you can use a javascript filter to define over which issues the iteration will be made. For instance, this can be useful in the following scenarios:
- Iterating over linked issues that are only of a specific issue type
- Iterating over subtasks of a specific issue type
- Iterating over linked issues with a specific priority
- Iterating over comments created by a specific user
- etc...
The notation for applying filters to the iterations is the following:
- VariableName is the name of the variable to use as the iteration index.
LinksCount|SubtasksCount|CommentsCount allows to define over which type of entities you want to iterate.
- Filter allows you to define the filter to be applicable in the iteration.
Notice that as the filter is evaluated as a Javascript expression, there is a big flexibility on the definition of the conditions. You can use and (&&), or (||) and other logical operators supported by the Javascript language.
It is also possible to format fields inside iteration filters. For more information on formaters, see Formatting Fields.
The image below demonstrates an example of a template that iterates over issue links and comments with filters being applied.
Links Bugs with High Priority:
Nested Iterations:
For a working example of this functionality, check the template Sample Iterations in the Template Store.
Iterating in the same line of the document
It is also possible to iterate values in the same line of the document. This can be useful for instance to display a list of Subtasks on Linked Issues in the same line, separated by commas or spaces. Find examples below:
Iterating in the same cell in an Excel document
It is possible to iterate values in the same cell in an Excel document. You can achieve this by simply making your Iteration inside the same cell.
You can use all the Iterations that you are used to and construct them in the exact same way, the difference being that you only use one cell to do them.
Iterating with the BREAK or CONTINUE statement.
It is possible to iterate anything and setup a Conditional expression and utilize the BREAK and CONTINUE statements.
The way to do this is by doing a normal Conditional expression and using the mapping #{break} or #{continue} inside it. You can check a more detailed example inside the code block.
This iteration allows you to iterate over all project versions from the project which the issues belong to. The notation is: