Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
UI Expand
titleTable of Contents

Table of Contents

Iterating Issue

...

History

Changes to Issues are registered in the Issue History, but Because it is not known in advance how many comments exist for an issue, you can iterate a section over all the comments on an issue. This allows you to create a table that dynamically grows according to the number of existing comments. The notation is:

...

The author of the comment

...

changes are going to be made. 

The History tab shows the following Issue’s operations/updates:

  • Changing the Test Type.
  • Changing the Test Definition or Steps.
  • Linking the Test with other entities (Preconditions, Test Plans, Test Sets, etc.).
  • Moving the Test between folders on the Test Repository.
  • Attachment addition.
  • Test Execution.

You can iterate a section over all the History entries of an Issue. This allows you to create a table that dynamically grows according to the number of changes done. 

The notation is:

Field

Description

HistoryEntriesCountThe number of changes made
AuthorThe user who made the change
CreatedDate of the change
ChangedItemsCountThe number of fields changed in the current change
ChangedItems

Field

Description

FieldReturns the name of the field in which the value was changed
FromReturns the old value
ToReturns the new value
Code Block
titleExpand to see the sample code
collapsetrue
#{for historyEntries
Code Block
titleExpand to see the sample code
collapsetrue
#{for comments}
   ${Commentsfullname:HistoryEntries[n].Author} 
made  changes ${Commentsdateformat("dd-MM-yyyy HH:mm:ss"):HistoryEntries[n].AuthorFullNameCreated} 
   ${Comments#{for ch=HistoryEntries[n].BodyChangedItemsCount}
  
  Field ${dateformat("dd-MM-yyyy HH:mm:ss"):CommentsName: ${HistoryEntries[n].CreatedChangedItems[ch].Field}
    Old Value:  ${CommentsHistoryEntries[n].ChangedItems[ch].GroupLevelFrom}
#{end}
 
or
     New Value:  ${HistoryEntries[n].ChangedItems[ch].To}
  #{end}
#{end}
  
or
  
#{for <VariableName>=CommentsCountHistoryEntriesCount}
   Content and Issue History Mappings. Example: ${Commentsfullname:HistoryEntries[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel template templates that iterates iterate over all the issue Issue comments.

Image Removed Iterations_CommentsIterating_Issue_History.docx

Image Removed Iterations_CommentsIterating_Issue_History.xlsx

...

Iterating Xray Issue

...

History

Changes related to Xray fields in Xray Issues are registered in a separate tab named Xray History, as changes to these fields can not be included with the Issue changes. For this reason, there is another way of iterating Xray history changes. Just like with Issue changesBecause it is not known in advance how many work logs exist for an issue, you can iterate a section over all the work logs Xray history entries of an issueIssue. This allows you to create a table that dynamically grows according to the number of existing worklogschanges done.

The notation is:

Worklogs FieldsAuthor author the worklogAuthorFullName full name of the author of the worklog

Field

Description

XrayHistoryEntriesCountThe
number of
changes made
ActionThe

Comment

The comment of the worklog

Created

The date the worklog was created

Date Started

The date the worklog was started

Time Spent

The time spent in seconds

TimeSpentFormatted

The time spent as displayed on Jira
action that originated the changes
UserThe user who made the change
DateDate of the change
VersionThe Xray Test Version where the changes were made (if applicable)
XrayChangedItemsCountThe number of fields changed in the current change
XrayChangedItems

Field

Description

FieldThe name of the field in which the value was changed
ChangesThe changes for the field (old and new value)
Code Block
titleExpand
Code Block
titleExpand to see the sample code
collapsetrue
#{for worklogsXrayHistoryEntries}
   ${Worklogsfullname:XrayHistoryEntries[n].AuthorUser} 
made   ${Worklogs[n].AuthorFullName} 
   ${Worklogs[n].Comment}
   changes ${dateformat("dd-MM-yyyy HH:mm:ss"):WorklogsXrayHistoryEntries[n].CreatedDate}
   ${dateformat("dd-MM-yyyy HH:mm:ss"):Worklogs#{for ch=XrayHistoryEntries[n].DateXrayChangedItemsCount}
 Started} 
  Field Name: ${WorklogsXrayHistoryEntries[n].Time SpentXrayChangedItems[ch].Field}
    Changes:  ${WorklogsXrayHistoryEntries[n].TimeSpentFormatted} XrayChangedItems[ch].Changes}
  #{end}
#{end}
  
or
  
#{for <VariableName>=WorklogsCountXrayHistoryEntriesCount}
   Content and WorklogXray Issue History Mappings. Example: ${Worklogsfullname:XrayHistoryEntries[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel

...

templates that

...

iterate over all the

...

Issue comments.

...

Iterating_Xray_Issue_History.docx

...

Iterating_Xray_Issue_History.xlsx

...

Iterating Issue

...

Comments

Because it is not known in advance how many components comments exist for an issueIssue, you can iterate a section over all the components of comments on an issueIssue. This allows you to create a table that dynamically grows according to the number of existing componentscomments.

The notation is:

Components Name name componentDescription description componentThe name component leadId ID of the componentProjectId project ID of the componentThe assignee type of the component
Comments FieldsDescription
Author

The

author of the

comment

AuthorFullNameThe full name of the Leadauthor of the comment
BodyThe comment
CreatedThe date the comment was posted
GroupLevelThe group level of the commentAssigneeType
Code Block
titleExpand to see the sample code
collapsetrue
#{for componentscomments}
   ${ComponentsComments[n].NameAuthor} 
   ${ComponentsComments[n].DescriptionAuthorFullName} 
   ${fullname:ComponentsComments[n].LeadBody} 
   ${Components[n].Id}
   ${Componentsdateformat("dd-MM-yyyy HH:mm:ss"):Comments[n].ProjectIdCreated}
   ${ComponentsComments[n].AssigneeTypeGroupLevel}
#{end}

...


 
or
 
#{for <VariableName>=CommentsCount}
   Content and Issue Mappings. Example: ${Comments[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel

...

templates that

...

iterate over all the

...

Issue comments.

...

Iterations_Comments.docx

...

Iterations_Comments.xlsx

...

Iterating Issue

...

Worklogs

Because it is not known in advance how many Status Transitions worklogs exist for an issueIssue, you can iterate a section over all the Status Transitions work logs of an issueIssue. This allows you to create a table that dynamically grows according to the number of existing status transitionsworklogs.

The notation is:

old status of the status transitionThe new status of the status transition
Status Transitions

Worklogs Fields

Description

Author

The author of the worklog

AuthorFullName

The full name of the author of the

status transition

worklog

Comment

The comment of the worklog

Created

The date the

status transition

worklog was

performed

created

OldStatus

Date Started

The

NewStatus

date the worklog was started

Time Spent

The time spent in seconds

TimeSpentFormatted

The time spent as displayed on Jira
Code Block
titleExpand to see the sample code
collapsetrue
#{for statusTransitionsworklogs}
   ${StatusTransitionsWorklogs[n].Author} 
   ${dateformatWorklogs[n].AuthorFullName} 
   ${Worklogs[n].Comment}
   ${dateformat("dd-MM-yyyy HH:mm:ss"):StatusTransitionsWorklogs[n].Created}
   ${StatusTransitionsdateformat("dd-MM-yyyy HH:mm:ss"):Worklogs[n].Date Started} 
   ${Worklogs[n].OldStatusTime Spent}
   ${StatusTransitionsWorklogs[n].NewStatusTimeSpentFormatted} 
#{end}
  
or
 
#{for <VariableName>=StatusTransitionsCountWorklogsCount}
   Content and StatusTransitionsWorklog Mappings. Example: ${StatusTransitionsWorklogs[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel template templates that iterates iterate over all the issue commentsIssue worklogs.

Image Removed Iterations_StatusTransitionsWorklogs.docx

Image Removed IterationsIterations_StatusTransitionsWorklogs.xlsx

...

Iterating Issue

...

Components

Because it is not known in advance how many Images can components exist for an issue (as an attachment)Issue, you can iterate a section over all the attached images components of an issue to get some metadata about themIssue. This allows you to create a table that dynamically grows according to the number of existing imagescomponents. 

The notation is:

ID ID attached image
Attachments Images Components FieldsDescription
NameThe name of the component
ImageDescriptionThe image description of the attached imagecomponent
NameLeadThe name of the attached imagecomponent lead
SizeIdThe size ID of the attached imagecomponent
HumanReadableSizeProjectIdThe size project ID of the attached imagecomponent
AuthorAssigneeTypeMimeTypeThe author of the attached image
CreatedThe date the attached image was created
The assignee type of the attached image
ThumbnailURLThe image thumbnail URL.
component
Code Block
titleExpand to see the sample code
collapsetrue
#{for imagescomponents}
   ${ImagesComponents[n].Image|maxwidth=150|maxheight=150Name}
   ${ImagesComponents[n].NameDescription}
   ${Imagesfullname:Components[n].IDLead}
   ${ImagesComponents[n].SizeId}
   ${ImagesComponents[n].HumanReadableSizeProjectId}
   ${ImagesComponents[n].AuthorAssigneeType}
   ${dateformat("dd-MM-yyyy HH:mm:ss"):Images[n].Created}
   ${Images[n].MimeType}
   ${Images[n].ThumbnailURL}
 #{end}
 
or
 
#{for <VariableName>=ImagesCount}
   Content and Images Mappings. Example: ${Images[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel template that iterates over all the issue comments.

Image Removed Iterations_AttachedImages.docx

Image Removed Iterations_StatusTransitions.xlsx

Info

Document Generator will automatically read the EXIF orientation property of an image and rotate it to its correct orientation. You can turn this off by adding ${prop(xporter.images.process.exif,true/false)} to your template.

You can use the mappings "width" and "height" to define the exact width and height of the printed image.

Code Block
titleExpand to see the sample code
collapsetrue
#{for images}
   ${Images[n].Image|width=150|height=150}
 #{end}

These values are in pixels and if you only define one of them the image will be rescaled.

Info

Note that, if you use both maxWidth and width mappings, only the max value will be read. The same behavior happens with height and maxHeight.

...

#{end}

The documents below demonstrate examples both in Word and Excel templates that iterate over all the Issue components.

Iterating_Issue_Components.docx

Iterating_Issue_Components.xlsx

...

Iterating Issue Status Transitions

Because it is not known in advance how many Status Transitions exist for an Issue, you can iterate a section over all the Status Transitions of an Issue. This allows you to create a table that dynamically grows according to the number of existing status transitions. 

The notation is:

Status Transitions FieldsDescription
AuthorThe author of the status transition
CreatedThe date the status transition was performed
OldStatusThe old status of the status transition
NewStatusThe new status of the status transition
Code Block
titleExpand to see the sample code
collapsetrue
#{for statusTransitions}
   ${StatusTransitions[n].Author}
   ${dateformat("dd-MM-yyyy HH:mm:ss"):StatusTransitions[n].Created}
   ${StatusTransitions[n].OldStatus}
   ${StatusTransitions[n].NewStatus}
#{end}
 
or
 
#{for <VariableName>=StatusTransitionsCount}
   Content and StatusTransitions Mappings. Example: ${StatusTransitions[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel templates that iterate over all the Issue status transitions.

Iterations_StatusTransitions.docx

Iterations_StatusTransitions.xlsx

...

Iterating Issue Attached Images

Because it is not known in advance how many attachments exist in an issueimages can exist on an Issue (as an attachment), you can iterate a section over all the attachments of an issueattached images of an Issue to get some metadata about them. This allows you to create a table that dynamically grows according to the number of existing attachmentsimages.

The notation is:

formatted size of the attachment
Attachments Images FieldsDescription
IDThe ID of the attached image
ImageThe image of the attached image attachment
NameThe name of the attachmentattached image
AuthorSizeThe author size of the attachmentattached image
AuthorFullNameHumanReadableSizeThe full name size of the author attached image
AuthorThe author of the attachmentattached image
CreatedThe date the attachment attached image was created
SizeMimeTypeThe size type of the attachmentattached imageHumanReadableSize
ThumbnailURLThe
MimeTypeThe type of attachment
image thumbnail URL.
Code Block
titleExpand to see the sample code
collapsetrue
#{for attachmentsimages}
   ${AttachmentsImages[n].IDImage|maxwidth=150|maxheight=150}
   ${AttachmentsImages[n].Name}
   ${AttachmentsImages[n].AuthorID}
   ${AttachmentsImages[n].AuthorFullNameSize}
   ${dateformat("dd-MM-yyyy HH:mm:ss"):AttachmentsImages[n].HumanReadableSize}
   ${Images[n].CreatedAuthor}
   ${Attachmentsdateformat("dd-MM-yyyy HH:mm:ss"):Images[n].SizeCreated}
   ${AttachmentsImages[n].HumanReadableSizeMimeType}
   ${AttachmentsImages[n].MimeTypeThumbnailURL}
# #{end}
 
or
  
#{for <VariableName>=AttachmentsCountImagesCount}
   Content and IssueImages Mappings. Example: ${AttachmentsImages[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel template templates that iterates iterate over all the issue commentsIssue attached images.

Image Removed Iterations_AttachmentsAttachedImages.docx 

Image Removed Iterations_AttachmentsAttachedImages.xlsx

Iterating Issue Labels

Because it is not known in advance how many labels exist in an issue, you can iterate a section over all the labels of an issue. The notation is:

...

Info

Document Generator will automatically read the EXIF orientation property of an image and rotate it to its correct orientation. You can turn this off by adding ${prop(xporter.images.process.exif, true / false )} to your template.

You can use the mappings width and height to define the exact width and height of the printed image.

Code Block
titleExpand to see the sample code
collapsetrue
#{for images}
   ${Images[n].Image|width=150|height=150}
 #{end}

These values are in pixels and if you only define one of them the image will be rescaled.

Info

If you use the maxWidth and width mappings, only the max value will be read. The same behavior happens with height and maxHeight.

...

Iterating Issue Attachments

Because it is not known in advance how many attachments exist in an Issue, you can iterate a section over all the attachments of an Issue. This allows you to create a table that dynamically grows according to the number of existing attachments. 

The notation is:

Attachments FieldsDescription
IDThe ID of the attachment
NameThe name of the attachment
AuthorThe author of the attachment
AuthorFullNameThe full name of the author of the attachment
CreatedThe date the attachment was created
SizeThe size of the attachment
HumanReadableSizeThe formatted size of the attachment
MimeTypeThe type of attachment
Code Block
#{for labels}
   ${Labels[n].Name}
#{end}
 
or
 
#{for <VariableName>=LabelsCount}
  ${Labels[VariableName].Name}
#{end}

The documents below demonstrate examples both in Word and Excel template that iterates over all the issue comments.

Image Removed Iterations_Labels.docx

Image Removed Iterations_Labels.xlsx

Iterating Fix Versions of an Issue

You can iterate over all fix versions to which the issue belong to. The notation is:

Boolean that indicates if the version is released or not
Versions FieldsDescription
NameThe version name
DescriptionThe version description
Start dateStarting date of the version
Release dateRelease date of the version
ArchivedBoolean that indicates if the version is archived or not
Released
Code Block
titleExpand to see the smaple sample code
collapsetrue
#{for FixVersionsattachments}
	   ${FixVersionsAttachments[n].NameID}
	   ${FixVersionsAttachments[n].DescriptionName}
	   ${dateformat(“dd-MM-yyyy”):FixVersionsAttachments[n].Start date}
	Author}
   ${Attachments[n].AuthorFullName}
   ${dateformat(“dd"dd-MM-yyyy”yyyy HH:mm:ss"):FixVersionsAttachments[n].Release dateCreated}
	   ${FixVersionsAttachments[n].ArchivedSize}
	   ${FixVersionsAttachments[n].ReleasedHumanReadableSize}
#   ${Attachments[n].MimeType}
#{end}
 
or
 
#{for <VariableName>=FixVersionsCountAttachmentsCount}
   Content and Versions Issue Mappings. Example: ${FixVersionsAttachments[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel template templates that iterates iterate over all the issue commentsIssue attachments.

Image Removed Iterating_Issue_FixVersionsIterations_Attachments.docx

Image Removed Iterating_Issue_FixVersionsIterations_Attachments.xlsx

...

Iterating

...

Issue Labels

Because it is not known in advance how many labels exist in an Issue, you can iterate a section over all the labels of an Issue. 

You can iterate over all affected versions to which the issue belong to. The notation is:

Versions Attachments FieldsDescription
NameThe version name
DescriptionThe version description
Start dateStarting date of the version
Release dateRelease date of the version
ArchivedBoolean that indicates if the version is archived or not
ReleasedBoolean that indicates if the version is released or not
label
Code Block
Code Block
titleExpand to see the sample code
collapsetrue
#{for AffectedVersionslabels}
	   ${AffectedVersionsLabels[n].Name}
	${AffectedVersions[n].Description}
	${dateformat(“dd-MM-yyyy”):AffectedVersions[n].Start date}
	${dateformat(“dd-MM-yyyy”):AffectedVersions[n].Release date}
	${AffectedVersions[n].Archived}
	${AffectedVersions[n].Released}
#{end}

or

#{for <VariableName>=AffectedVersionsCount}
   Content and Versions Issue Mappings. Example: ${AffectedVersions[VariableName].Field}
#{end}#{end}
 
or
 
#{for <VariableName>=LabelsCount}
  ${Labels[VariableName].Name}
#{end}

The The documents below demonstrate examples both in Word and Excel template templates that iterates iterate over all the issue Issue comments.

Image Removed Iterating_Issue_AffectedVersionsIterations_Labels.docx

Image Removed Iterating_Issue_AffectedVersionsIterations_Labels.xlsx

...

Iterating

...

Fix Versions of an Issue

You can iterate over all project fix versions to which the issue belong that the Issue belongs to. 

The notation is:

Project Versions FieldsDescription
NameThe version name
DescriptionThe version description
Start dateStarting date of the version
Release dateRelease date of the version
ArchivedBoolean that indicates if the version is archived or not
ReleasedBoolean that indicates if the version is released or not
Code Block
titleExpand to see the smaple code
collapsetrue
#{for projectVersionsFixVersions}
	${ProjectVersionsFixVersions[n].Name}
	${ProjectVersionsFixVersions[n].Description}
	${dateformat(“dd-MM-yyyy”):ProjectVersionsFixVersions[n].Start date}
	${dateformat(“dd-MM-yyyy”):ProjectVersionsFixVersions[n].Release date}
	${ProjectVersionsFixVersions[n].Archived}
	${ProjectVersionsFixVersions[n].Released}
#{end}

or

#{for <VariableName>=ProjectVersionsCountFixVersionsCount}
   Content and ProjectVersions VersionsIssue Mappings. Example: ${ProjectVersionsFixVersions[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel template templates that iterates iterate over all the issue commentsIssue fix versions.

Image Removed Iterations_ProjectVersionsIterating_Issue_FixVersions.docx

Image Removed Iterations_ProjectVersionsIterating_Issue_FixVersions.xlsx

...

Iterating Affected Versions of an Issue

...

You can iterate over all affected versions that the Issue belongs to. 

Because it is not known in advance how many linked issues exist for an issue, you can iterate a section over all the linked issues of an issue. This allows you to create a table that dynamically grows according to the number of existing linked issues. The notation is:

Links LinkType type of the link
Versions FieldsDescription
NameThe
KeyThe key of the linked issue
SummaryThe summary of the linked issue
URL

The URL of the link

version name
DescriptionThe version description
Start dateStarting date of the version
Release dateRelease date of the version
ArchivedBoolean that indicates if the version is archived or not
ReleasedBoolean that indicates if the version is released or not
Code Block
titleExpand to
Code Block
titleExpand to see the sample code
collapsetrue
#{for linksAffectedVersions}
   	${LinksAffectedVersions[n].LinkTypeName}
   	${LinksAffectedVersions[n].KeyDescription}
   	${Linksdateformat(“dd-MM-yyyy”):AffectedVersions[n].SummaryStart date}
   ${Links[n].URL	${dateformat(“dd-MM-yyyy”):AffectedVersions[n].Release date}
	${AffectedVersions[n].Archived}
	${AffectedVersions[n].Released}
#{end}
 
or
 
#{for <VariableName>=LinksCountAffectedVersionsCount}
   Content and LinkedVersions Issue Mappings. Example: ${LinksAffectedVersions[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel template templates that iterates iterate over all the issue commentsIssue-affected versions.

Image Removed Iterations_LinksIterating_Issue_AffectedVersions.docx

Image Removed Iterations_LinksIterating_Issue_AffectedVersions.xlsx

...

Iterating

...

Project Versions

You can iterate over all project versions that the Issue belongs to.

...

Because it is not known in advance how many subtasks exist for an issue, you can iterate a section over all the subtasks of an issue. This allows you to create a table that dynamically grows according to the number of existing subtasks. The notation is:

Subtasks Project Versions FieldsDescription
KeyNameThe key of the subtasks
SummaryThe summary of the subtasks
AssigneeUserDisplayNameThe assignee user of the subtasks
version name
DescriptionThe version description
Start dateStarting date of the version
Release dateRelease date of the version
ArchivedBoolean that indicates if the version is archived or not
ReleasedBoolean that indicates if the version is released or not
Code Block
titleExpand to see the sample smaple code
collapsetrue
#{for subtasksprojectVersions}
   	${SubtasksProjectVersions[n].KeyName}
   	${SubtasksProjectVersions[n].SummaryDescription}
   	${Subtasksdateformat(“dd-MM-yyyy”):ProjectVersions[n].AssigneeUserDisplayNameStart date}
#{end}
 
or
 	${dateformat(“dd-MM-yyyy”):ProjectVersions[n].Release date}
	${ProjectVersions[n].Archived}
	${ProjectVersions[n].Released}
#{end}

or

#{for <VariableName>=SubtasksCountProjectVersionsCount}
   Content and IssueProject Versions Mappings. Example: ${SubtasksProjectVersions[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel template templates that iterates iterate over all the issue commentsIssue project versions.

Image Removed Iterations_SubtasksProjectVersions.docx
Image Removed

Iterations_SubtasksProjectVersions.docxxlsx

...

Iterating

...

Issue Links

Because it

All fields listed here are available on IssuesInEpic[n] because they represent an issue.

Because it is not known in advance how many issues linked Issues exist for an epicissue, you can iterate a section over all the issues linked Issues of an epic issueIssue. This allows you to create a table that dynamically grows according to the number of existing issueslinked Issues. 

The notation is:

Links FieldsDescription
LinkTypeThe type of the link
KeyThe key to the linked Issue
SummaryThe summary of the linked Issue
URL

The URL of the link

Code Block
titleExpand to see the sample code
collapsetrue
#{for IssuesInEpiclinks}
   ${IssuesInEpicLinks[n].KeyLinkType}
   ${IssuesInEpicLinks[n].SummaryKey}
   ${IssuesInEpicLinks[n].DescriptionSummary}
   ${IssuesInEpicLinks[n].Epic Link.KeyURL}
#{end}
 
or
 
#{for <VariableName>=IssuesInEpicCountLinksCount}
   Content and Linked Issue Mappings. Example: ${IssuesInEpicLinks[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel template templates that iterates iterate over all the issues in epicIssue links.

Image Removed Iterating_Issues_In_EpicIterations_Links.docx
Image Removed Iterating_Issues_In_Epic

Iterations_Links.xlsx

...

Iterating

...

Issue Subtasks

Because it is not known in advance how many subtasks exist for an Issue, you can iterate a section over all the subtasks of an Issue. This allows you to create a table that dynamically grows according to the number of existing subtasks.

You can iterate over all project components. The notation is:

Subtasks FieldsDescription
KeyThe key to the subtasks
SummaryThe summary of the subtasks
AssigneeUserDisplayNameThe assignee user of the subtasks
Code Block
titleExpand to see the sample code
collapsetrue
#{for ProjectComponentssubtasks}
   ${ProjectComponentsSubtasks[n].NameKey}
   ${ProjectComponentsSubtasks[n].DescriptionSummary}
   ${fullname:ProjectComponentsSubtasks[n].LeadAssigneeUserDisplayName}
   ${ProjectComponents[n].Id}
   ${ProjectComponents[n].ProjectId}
   ${ProjectComponents[n].AssigneeType}
#{end}
#{end}
 
or
 
#{for <VariableName>=ProjectComponentsCountSubtasksCount}
   Content and ComponentsIssue Mappings. Example: ${ProjectComponentsSubtasks[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel template templates that iterates iterate over all the project componentsIssue subtasks.

Image Removed Iterating_Issue_ProjectComponentsIterations_Subtasks.docx

Image Removed Iterating_Issue_ProjectComponents.xlsx

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. 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

Iterations_Subtasks.docx

...

Iterating Issues In Epic

All fields listed here are available on IssuesInEpic[n] because they represent an Issue.

Because it is not known in advance how many Issues exist for an epic, you can iterate a section over all the Issues of an epic Issue. This allows you to create a table that dynamically grows according to the number of existing Issues. 

The notation The notation for applying filters to the iterations is:

Code Block
titleExpand to see the sample code
collapsetrue
#{for <VariableName>=<LinksCount|SubtasksCount|CommentsCount|WorklogsCount>|filter=%{<Javascript>} IssuesInEpic}
   ${IssuesInEpic[n].Key}
   ${IssuesInEpic[n].Summary}
   ${IssuesInEpic[n].Description}
   Content here${IssuesInEpic[n].Epic Link.Key}
#{end}
  • VariableName is the name of the variable to use as the iteration index.
  • LinksCount|SubtasksCount|CommentsCount  indicates over which type of entities you want to iterate.

  • Filter indicates the filter to be applied in the iteration.

Notice that as the filter is evaluated as a JavaScript expression, which provides flexibility in 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.

The documents below demonstrate examples of a templates that iterate over issue links and comments with filters being applied.

Links Bugs with High Priority:

Image Removed Links_with_Filter.docx

Image Removed Links_with_Filter.xlsx

Nested Iterations:

Image Removed Links_with_nested_Iterations.docx

Image Removed Links_with_nested_Iterations.xlsx

For a working example of this functionality, check the template Sample Iterations in the Template Store.

Iterating in the same line of the document


 
or
 
#{for <VariableName>=IssuesInEpicCount}
   Content and Issue Mappings. Example: ${IssuesInEpic[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel templates that iterate over the Issues in epic.

Iterating_Issues_In_Epic.docx

Iterating_Issues_In_Epic.xlsx

...

Iterating Project Components

You can iterate over all project components.

The notation is:

Code Block
titleExpand to see the sample code
collapsetrue
#{for ProjectComponents}
   ${ProjectComponents[n].Name}
   ${ProjectComponents[n].Description}
   ${fullname:ProjectComponents[n].Lead}
   ${ProjectComponents[n].Id}
   ${ProjectComponents[n].ProjectId}
   ${ProjectComponents[n].AssigneeType}
#{end}

#{for <VariableName>=ProjectComponentsCount}
   Content and Components Mappings. Example: ${ProjectComponents[VariableName].Field}
#{end}

The documents below demonstrate examples both in Word and Excel templates that iterate over the project components.

Iterating_Issue_ProjectComponents.docx

Iterating_Issue_ProjectComponents.xlsx

...

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.

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.

The notation for applying filters to the iterations is:You can also possible to iterate values in the same line of the document. This can be useful if you want to display a list of Subtasks on Linked Issues in the same line, separated by commas or spaces. 

Code Block
titleExpand to see the sample code
collapsetrue
Users that added comments to this issue: #{for comments}${Comments[n].Author} #{end}

Subtasks of this issue: #{for j=SubtasksCount}${Subtasks[j].Key};#{end}

Linked issues this issue duplicates: #{for j=LinksCount|filter=%{'${Links[j].LinkType}'.equals('duplicates')}}${Links[j].Key} #{end}

...

#{for <VariableName>=<LinksCount|SubtasksCount|CommentsCount|WorklogsCount>|filter=%{<Javascript>}}
   Content here
#{end}
  • VariableName is the name of the variable to use as the iteration index.
  • LinksCount|SubtasksCount|CommentsCount  indicates over which type of entities you want to iterate.

  • Filter indicates the filter to be applied in the iteration.
Info

The filter is evaluated as a JavaScript expression, which provides flexibility in defining the conditions. You can use and (&&), or (||), and other logical operators supported by JavaScript.

It is also possible to format fields inside iteration filters.

The documents below demonstrate examples of templates that iterate over Issue links and comments with filters being applied.

Links Bugs with High Priority:

Links_with_Filter.docx

Links_with_Filter.xlsx

Nested Iterations:

Links_with_nested_Iterations.docx

Links_with_nested_Iterations.xlsx

For a working example of this functionality, check the template Sample Iterations in the Template Store.

...

Iterating in the Same Line of the Document

You can also iterate values in the same cell in an Excel line of the 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.This can be useful if you want to display a list of subtasks on linked Issues in the same line, separated by commas or spaces. 

Code Block
titleExpand to see the sample code
collapsetrue
Issue iteration as a demonstration.
Copy this iteration below and paste it into a cell.
 
&{for issues} ${Key} &{end}

Iterating with the BREAK or CONTINUE statement

You can iterate anything, set up a Conditional expression and then 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. 

Users that added comments to this issue: #{for comments}${Comments[n].Author} #{end}

Subtasks of this issue: #{for j=SubtasksCount}${Subtasks[j].Key};#{end}

Linked issues this issue duplicates: #{for j=LinksCount|filter=%{'${Links[j].LinkType}'.equals('duplicates')}}${Links[j].Key} #{end}

...

Iterating in the Same Cell in an Excel Document

You can also 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.

Code Block
titleExpand to see the sample code
collapsetrue
Issue iteration as a demonstration.
Copy this iteration below and paste it into a cell.
 
&{for issues} ${Key} &{end}

...

Iterating with the BREAK or CONTINUE Statements

You can iterate anything, set up a Conditional expression, and then 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. 

Code Block
titleExpand to see the sample code
collapsetrue
Imagine that you have a Jira Issue that contains these comments:
- Hello
- World
- Greetings
- Hi
 
For the Break functionality, lets say that you want to stop the iteration if the current comment is "World". Here is the template for that:
#{for comments}
Current Comment: ${Comments[n].Body}
#{if (%{'${Comments[n].Body}'.equals('World')})}
#{break}
#{end}
Current Comment Author: ${Comments[n].Author}
#{end}

Code Block
titleExpand to see the sample code
collapsetrue
Imagine that you have a Jira Issue that contains these comments:
- Hello
- World
- Greetings
- Hi
 
For the Break functionality, lets say that you want to stop the iteration if the current comment is "World". Here is the template for that:
#{for comments}
Current Comment: ${Comments[n].Body}
#{if (%{'${Comments[n].Body}'.equals('World')})}
#{break}
#{end}
Current Comment Author: ${Comments[n].Author}
#{end}
In this case, Xporter for Jira will print the comment "Hello" and it´s author. Next it will print the comment Body "World" but since the Conditional expression is true, it will stop the iteration all together and not print anything else.
Note: Anything after the #{break} mapping will not be printed in the exported document.
 
For the Continue functionality, lets say that you want to skip to the next iteration if the current comment is "World", bypassing the Author mapping for this iteration. Here is the template for that:
#{for comments}
Current Comment: ${Comments[n].Body}
#{if (%{'${Comments[n].Body}'.equals('World')})}
#{continue}
#{end}
Current Comment Author: ${Comments[n].Author}
#{end}
In this case, Xporter for Jira will print the comment "Hello" and it´s author. Next, it will print the comment Body "World" but since the Conditional expression is true, it will continue to the next iteration, not printing the Author of the "World" comment.

...

Sorting

...

Iterations

Imagine that you have an iteration and want to sort it by any field that it can export normally.

This will be the header for such an iteration:

#{for comments|sortby=<Iteration mapping>}

...

Info

The mapping after the

...

sortby

...

must be equal to the supported mappings for each Iteration.

Example:

Code Block
titleExpand to see the sample code
collapsetrue
This iteration will be sorted by the Body of all the comments in the issue.

#{for comments|sortby=Body}
${Comments[n].Author}
${Comments[n].Body}
#{end}

Sort By Bulk

...

Export

The sortby can also be used to sort a &{for issues} iteration on a Bulk Export.

...

Info
titleSorting Criteria

asc asc and desc  desc can be defined in order to define how do you want to sort your data. The default value is ascis asc

Expand
titleSupport/Troubleshooting

If you have questions or technical issues, please contact the Support team via the Customer Portal (Jira service management) or send us a message using the in-app chat.