Part 6 - Creating the team members page

Overview

The team members page lists all the users that belong to the project. This is done by filtering and displaying a list of users based on a user group.

For this project, 2 user groups are created

  • pmd-project-leaders - all the project leaders involved in the project

  • pmd-project-members - all the project members involved in the project

Using Reporting, all the users that belong is these two groups will be listed here along with other relevant details.

Suppliers used

When to use the Collection Supplier

Use the object supplier if you are unsure of the object type. Pair any key with an object:class keychain and it will return the type of object, for example:

data:Project Members > object:class returns

class java.util.ArrayList

which means the Project Members Scaffolding data is stored as an Array List.

This keychain is useful for debugging purposes.

Content and Structure

Set the main structure of our report, which is a table. 

  • create a report-table macro

Esure to check Injected as we use parameter injection later in the report.

Define who to report using a user-reporter block

  • add a user-reporter block

  • nest this block inside the report-table block

  • edit the user-reporter block

    • type in Groups pmd-project-members, pmd-project-leaders 

Reporting only fetches users from those groups

In the user-reporter block

  • insert a text-sort block

  • edit the text-sort block

    • type user:full name  for Key

    • choose 'ascending' for Order

This sorts the users in ascending order based on their full name.

Now we are ready to setup the report columns.

User Name

Within the report-table block

  • insert a report-column macro underneath the user-reporter block

    • name this column Name

  • insert a report-info block inside this report-column

  • edit the report-info block

    • name the Key user:full name

Email

  • insert a report-column block

    • name this column Email

  • insert a report-info block inside this report-column

  • edit the report-info block

    • name the Key user:email

Department

  • insert a report-column block

    • name this column Department

  • insert a report-info block inside this report-column

  • edit the report-info block

    • name the Key user:department

Position

  • insert a report-column block

    • name this column Position

  • insert a report-info block inside this report-column

  • edit the report-info block

    • name the Key user:position

Project Lead

This column will show a list of projects that the user is involved in as a leader.

  • insert a report-column block

    • name this column Project Lead or Leading Projects

  • insert a report-list block inside this report-column

  • insert a content-reporter block within the report-list block

  • edit the content-reporter block

    • set Type to pages

    • set Labels to subproject

Inside the content-reporter block

  • insert a text-filter block

  • edit the text-filter block

    • name the Key data:Project Leader > collection:first > user:full name

    • set Exact Value to %user:full name%

Now that we have the content and structure

  • insert a report-body block under content-reporter

  • insert 2 report-info blocks inside report-body

For the first report-info block

  • name the Key page:title

  • check Link To Item

For the second report-info block

  • nest this second report-info block with a pair of parentheses and name the Key data:Project Status. 

Finally

  • insert a report-empty block under report-body

  • enter a message to display when the user is not leading any projects

What does this mean?

The key data:Project Leader is fetching data from a Scaffolding block we used in our subprojects, like this one:

The Project Leader Scaffold data block is returned in a list, so we use the Collection Supplier to fetch the first item in the list, and then finally convert it to the user's full name.

As we have the name of the project leader from the subproject, Exact Value can match the user in this current report to the full name returned from the content-reporter.

The reporter finds a list of subprojects with the Project Leader as a particular user and report it based on the current user in the table.

Based on the report-info blocks we used, the page title and subproject status is shown in the fifth column:

Projects Involved In

This column is used to display a list of projects that the user is involved in as a member.

  • insert a report-column block

    • name this column Projects Involved In

  • insert a report-list block inside this report-column

  • insert a content-reporter block within the report-list block

  • edit the content-reporter block

    • set Type to pages

    • set Labels to subproject

Inside the content-reporter block

  • insert a text-filter block

  • edit the text-filter block

    • name the Key data:Project Members > collection:first > user:full name

    • set Exact Value to %user:full name%

Now that we have the content and structure

  • insert a report-body block under content-reporter

  • insert 2 report-info blocks inside report-body

For the first report-info block

  • name the Key page:title

  • check Link To Item

For the second report-info block

  • nest this second report-info block with a pair of parentheses and name the Key data:Project Status

Finally

  • insert a report-empty block under report-body

  • enter a message to display when the user is not leading any projects

Macro Structure

Full source

 <ac:structured-macro ac:macro-id="3dd1fc83-efe2-43c3-918f-5b2e3f0c36c7" ac:name="report-table" ac:schema-version="1"> <ac:parameter ac:name="injected">true</ac:parameter> <ac:rich-text-body> <ac:structured-macro ac:macro-id="62bc44dd-330c-47cd-9541-9b059767d41b" ac:name="user-reporter" ac:schema-version="1"> <ac:parameter ac:name="groups">pmd-project-members, pmd-project-leaders</ac:parameter> <ac:rich-text-body> <p> <ac:structured-macro ac:macro-id="cbc30ac6-45d6-4a08-9424-4cb429f635d8" ac:name="text-sort" ac:schema-version="1"> <ac:parameter ac:name="">user:full name</ac:parameter> </ac:structured-macro> </p> </ac:rich-text-body> </ac:structured-macro> <ac:structured-macro ac:macro-id="79416bad-fe3d-4857-af96-31391061ab98" ac:name="report-column" ac:schema-version="1"> <ac:parameter ac:name="title">Name</ac:parameter> <ac:rich-text-body> <p> <ac:structured-macro ac:macro-id="b704da22-9ec4-4e28-89aa-dc00edd52c2f" ac:name="report-info" ac:schema-version="1"> <ac:parameter ac:name="">user:full name</ac:parameter> </ac:structured-macro> </p> <p> <ac:structured-macro ac:macro-id="595d52b7-7980-4e31-9f14-c9c05d3dbbdf" ac:name="report-image" ac:schema-version="1"> <ac:parameter ac:name="height">100px</ac:parameter> <ac:parameter ac:name="">user:picture</ac:parameter> </ac:structured-macro> </p> </ac:rich-text-body> </ac:structured-macro> <ac:structured-macro ac:macro-id="5f78a437-49d7-42a0-a926-130f20ffe812" ac:name="report-column" ac:schema-version="1"> <ac:parameter ac:name="title">Email</ac:parameter> <ac:rich-text-body> <p> <ac:structured-macro ac:macro-id="25ff4798-098f-47ef-9724-74e39c502b8b" ac:name="report-info" ac:schema-version="1"> <ac:parameter ac:name="">user:email</ac:parameter> </ac:structured-macro> </p> </ac:rich-text-body> </ac:structured-macro> <ac:structured-macro ac:macro-id="7ee52b81-276f-4166-8b22-66675a824f51" ac:name="report-column" ac:schema-version="1"> <ac:parameter ac:name="title">Department</ac:parameter> <ac:rich-text-body> <p> <ac:structured-macro ac:macro-id="2251ab03-d1a1-4bf6-ad94-03d347598a07" ac:name="report-info" ac:schema-version="1"> <ac:parameter ac:name="">user:department</ac:parameter> </ac:structured-macro> </p> </ac:rich-text-body> </ac:structured-macro> <ac:structured-macro ac:macro-id="0ab44f48-561c-4560-a8d0-6c4cb360d724" ac:name="report-column" ac:schema-version="1"> <ac:parameter ac:name="title">Position</ac:parameter> <ac:rich-text-body> <p> <ac:structured-macro ac:macro-id="14f1c80e-704e-4d9f-b26c-537490559a30" ac:name="report-info" ac:schema-version="1"> <ac:parameter ac:name="">user:position</ac:parameter> </ac:structured-macro> </p> </ac:rich-text-body> </ac:structured-macro> <ac:structured-macro ac:macro-id="fa958852-711f-4eca-ae47-9d3827cd8ee0" ac:name="report-column" ac:schema-version="1"> <ac:parameter ac:name="title">Project Lead</ac:parameter> <ac:rich-text-body> <ac:structured-macro ac:macro-id="572542d6-833b-4603-9c26-66dcac23b582" ac:name="report-list" ac:schema-version="1"> <ac:rich-text-body> <ac:structured-macro ac:macro-id="cf1f6ddc-916f-4e24-a18c-6f65b20df651" ac:name="content-reporter" ac:schema-version="1"> <ac:parameter ac:name="types">page</ac:parameter> <ac:parameter ac:name="labels">subproject</ac:parameter> <ac:rich-text-body> <p> <ac:structured-macro ac:macro-id="f786da63-34c9-4866-b81d-006597ea943e" ac:name="text-filter" ac:schema-version="1"> <ac:parameter ac:name="value">%user:full name%</ac:parameter> <ac:parameter ac:name="">data:Project Leader &gt; collection:first &gt; user:full name</ac:parameter> </ac:structured-macro> </p> </ac:rich-text-body> </ac:structured-macro> <ac:structured-macro ac:macro-id="67bf071d-f38a-4a9b-81e9-72b4e3eef72d" ac:name="report-body" ac:schema-version="1"> <ac:rich-text-body> <p> <ac:structured-macro ac:macro-id="209f7b33-e209-4007-b7cf-17327f19195b" ac:name="report-info" ac:schema-version="1"> <ac:parameter ac:name="link">true</ac:parameter> <ac:parameter ac:name="">page:title</ac:parameter> </ac:structured-macro> (<ac:structured-macro ac:macro-id="024b352f-13c8-4a7c-975c-d9f618b122fa" ac:name="report-info" ac:schema-version="1"> <ac:parameter ac:name="">data:Project Status</ac:parameter> </ac:structured-macro>)</p> </ac:rich-text-body> </ac:structured-macro> <ac:structured-macro ac:macro-id="f1e9abb7-931c-46dd-a49f-ee2fed8b48e6" ac:name="report-empty" ac:schema-version="1"> <ac:rich-text-body> <p>-</p> </ac:rich-text-body> </ac:structured-macro> </ac:rich-text-body> </ac:structured-macro> </ac:rich-text-body> </ac:structured-macro> <ac:structured-macro ac:macro-id="533a4108-c490-4865-b8f1-f038b01970af" ac:name="report-column" ac:schema-version="1"> <ac:parameter ac:name="title">Projects Involved In</ac:parameter> <ac:rich-text-body> <ac:structured-macro ac:macro-id="3291153f-0b65-4c57-bbae-7c89b8aa697f" ac:name="report-list" ac:schema-version="1"> <ac:rich-text-body> <ac:structured-macro ac:macro-id="28c47ce1-f281-4929-bab7-2cf01df796a0" ac:name="content-reporter" ac:schema-version="1"> <ac:parameter ac:name="types">page</ac:parameter> <ac:parameter ac:name="labels">subproject</ac:parameter> <ac:rich-text-body> <p> <ac:structured-macro ac:macro-id="3e814921-5f99-4432-975c-5e02647d86c1" ac:name="text-filter" ac:schema-version="1"> <ac:parameter ac:name="value">%user:full name%</ac:parameter> <ac:parameter ac:name="">data:Project Members &gt; collection:first &gt; user:full name</ac:parameter> </ac:structured-macro> </p> </ac:rich-text-body> </ac:structured-macro> <ac:structured-macro ac:macro-id="145fc2d6-ab64-405f-bcd9-4a3d47696451" ac:name="report-body" ac:schema-version="1"> <ac:rich-text-body> <p> <ac:structured-macro ac:macro-id="7af69d75-5e6c-4c8a-9512-ea63ee77562c" ac:name="report-info" ac:schema-version="1"> <ac:parameter ac:name="link">true</ac:parameter> <ac:parameter ac:name="">page:title</ac:parameter> </ac:structured-macro> <span>(</span> <ac:structured-macro ac:macro-id="b706d706-70bf-4f02-aaee-148d1d4ca16b" ac:name="report-info" ac:schema-version="1"> <ac:parameter ac:name="">data:Project Status</ac:parameter> </ac:structured-macro> <span>)</span> </p> </ac:rich-text-body> </ac:structured-macro> <ac:structured-macro ac:macro-id="5b95f0e8-3f2f-47c3-90ad-b7ddee1c46e1" ac:name="report-empty" ac:schema-version="1"> <ac:rich-text-body> <p>-</p> </ac:rich-text-body> </ac:structured-macro> </ac:rich-text-body> </ac:structured-macro> </ac:rich-text-body> </ac:structured-macro> </ac:rich-text-body> </ac:structured-macro>

 

Next