Author: Andrew Koprowski

The “My Tasks Due This Week Report” will impress all of your work license users now that you’ve leveraged advanced Views and Groupings. The benefits of adding advanced Groupings to reports and object lists are:

  • An Admin can group data in ways that aren’t native in the standard user interface
    • Our grouping uses an advanced valueexpression to categorize each task rather than leveraging a task field
  • An Admin can control how the grouping displays to your users
    • Our grouping categorizes each task as either LATE, ON TIME, UPCOMING depending on the day of the week and the task’s planned completion date
  • An Admin can enhance the user experience by creating dynamic advanced groupings
    • Our advanced grouping updates day by day and recategorizes each task using an advanced calculation

 

Before I share the Task and Assignment text mode code, it is important to note that you cannot create a chart using advanced Groupings or Views. Charts must use either native object fields or custom fields.

The text mode code for both Task and Assignment reports is found below:

Task Report Advanced Grouping Text Mode:

 

1
2
3
4
5
6
7
textmode=true
group.o.valueexpression=IF(DAYOFWEEK({plannedCompletionDate})
<DAYOFWEEK(DATE($$TODAY)),”LATE”,IF(DAYOFWEEK({plannedCompletionDate})=DAYOFWEEK(DATE($$TODAY)),”ON
TIME”,IF(DAYOFWEEK({plannedCompletionDate})>DAYOFWEEK(DATE($$TODAY)),”UPCOMING”,”N/A”)))
group.0.valueformat=HTML

 

Assignment Report Advanced Grouping Text Mode:

1
2
3
4
5
6
7
group.0.valueexpression=IF(DAYOFWEEK({task}.{plannedCompletionDate})
<DAYOFWEEK(DATE($$TODAY)),”LATE”,IF(DAYOFWEEK({task}.
{plannedCompletionDate})=DAYOFWEEK(DATE($$TODAY)),”ON
TIME”,IF(DAYOFWEEK({task}.
{plannedCompletionDate})>DAYOFWEEK(DATE($$TODAY)),”UPCOMING”,”N/A”)))
group.0.valueformat=HTML
textmode=true

 

I forgot to explain in the “Create Reports Like a Pro! Advanced Views Part III” blog the differences between the Task and Assignment report syntax. If you review the Task object within the API Explorer, you’ll notice that an Assignment is both a referenced and collected object to the Task object. If you create an Assignment report and you need to reference the task object in your text mode, you need to first specify the task object and then the field. For example, in the code above, when I reference the plannedCompletionDate, I preface the field with {task}. This tells Workfront that I am calling the Task object’s planned completion date value. Therefore, whenever you create an object report that references a connecting object, add the object enclosed by curly brackets first, followed by a period, and then the referenced object’s field enclosed by curly brackets.

Next up, you will learn how to build advanced Filters to help find the exact information you are looking for.

In Part I, we discussed what an Advanced Grouping is, what it looks like, and how it is formatted differently from an Advanced View. In addition, we discussed a user challenge and the solution. The challenge is that our work license users want to group their Tasks by whether the Task is LATE, ON TIME, or UPCOMING within the current week. We can only do this through an Advanced Grouping.

How to write the custom text mode to solve the challenge?

First, navigate to the “My Tasks Due This Week” report we previously created in the “Creating Reports Like a Pro! Advanced Views” series. Select the Report Actions dropdown and choose Edit. Next, select the Groupings tab. To the far right you will see two options: Switch to Matrix Grouping and Switch to Text Mode. Choose, Switch to Text Mode.

Our valueexpression function will use the following functions, formulas, and fields:

Functions:

  • textmode
  • 0.valueexpression
  • 0.valueformat

 

Formulas:

  • IF
  • DAYOFWEEK
  • DATE

 

Fields:

  • plannedCompletionDate
  • $$TODAY

 

We will start with our most complex line of code, which is the group.0.valueexpression. The valueexpression function uses the IF formula to determine if the planned completion date of the task is LATE, ON TIME, or UPCOMING throughout the week. We need to create a dynamic “today” value so that the data is processed using today’s date (regardless of when the user views the report. To do this, we will use the wildcard field $$TODAY and extract the date using the DATE formula. Lastly, for both fields $$TODAY and plannedCompletionDate, we need to extract the day of the week in order to analyze if the plannedCompletionDate is less than, equal to, or greater than today’s date so that we can group the task accurately. To do this, we will leverage the DAYOFWEEK formula.

The textmode is:

1
2
3
group.0.valueexpression=IF(DAYOFWEEK({plannedCompletionDate})
<DAYOFWEEK(DATE($$TODAY)),”LATE”,IF(DAYOFWEEK({plannedCompletionDate})=DAYOFWEEK(DATE($$TODAY)),”ON
TIME”,IF(DAYOFWEEK({plannedCompletionDate})>DAYOFWEEK(DATE($$TODAY)),”UPCOMING”,”N/A”)))

The second line of text mode will specify the valueformat of the output (valueexpression). For our example, the second line of text mode will be group.0.valueformat=HTML. We can use HTML for almost any valueexpression if you don’t know which format to leverage. We can use the string format, or str. The third and last line of text mode will specify that we are using text mode to create the Grouping, rather than the standard user interface. The third line of text mode will be textmode=true.

When you are finished writing each line of text mode, you should end up with the following block of code:

 

After you select “Done” and “Save + Close”, your end result will be:

 

In Part III, I will share the custom text mode code for both the Task and Assignments reports.

 

 

 

Let’s return to the report we created in our last series, “Advanced Views”. Recall, we added two additional custom columns that displayed data for Days Remaining and Hours Remaining. For each custom View, we leveraged the following functions:

  • displayname
  • valueexpression
  • valueformat
  • textmode

Similarly, we will use many of the functions above within an advanced Grouping, but the syntax will be different.

Unlike advanced Views, advanced Groupings begin with “group.[#].” before identifying the function. When you create your Groupings using the standard user interface, you are limited to three groupings for a standard list or, four groupings when leveraging the matrix setting. However, you can add more groupings when you create your own advanced Groupings but be careful. The more groupings you add to a standard object list report, the messier your report will look.

The syntax for each line within an advanced Grouping reads: group.[#].function. The [#] portion of the text mode identifies which Grouping the function belongs to. Groupings start at 0 and continue to increase by one. For example, the first Grouping in a report is actually group.0.function. The second Grouping is group.1.function and so on. The only exception to the rule is the line for textmode. The textmode line does not use the same format of group.[#].function, but is written as textmode=true (identical to advanced Views).

 

Challenge:

Our work license users want the “My Tasks Due This Week” report to group their tasks by timeliness: LATE, ON TIME, UPCOMING.

  • LATE: Defined as any task with a planned completion date less than today’s date.
  • ON-TIME: Defined as any task with a planned completion date equal to today’s date.
  • UPCOMING: Defined as any task with a planned completion date greater than today’s date.

 

Solution:

We will create custom advanced Groupings to group tasks under the three labels identified above: LATE, ON TIME, and UPCOMING.

Your report will go from this:

To this:

 

In Advanced Groupings Part II, we are going to discuss how to write the custom text mode to solve the challenge.

In the previous blog, “Create Reports Like a Pro! Advanced Views Part II”, we did not have a chance to mention the differences between the Task and Assignment report syntax. If you review the Task object within the API Explorer, you will notice that an Assignment is both a referenced and collected object to the Task object. If you create an Assignment report and you need to reference the task object in your text mode, you need to first specify the task object and then the field.

For example, in the code below, when I reference the plannedCompletionDate, I preface the field with {task}. This tells Workfront that I am calling the Task object’s planned completion date value. Therefore, whenever you create an object report that references a connecting object, add the object enclosed by curly brackets first, followed by a period, and then the referenced object’s field enclosed by curly brackets.

The “My Tasks Due This Week Report” will impress all of your work license users now that you’ve leveraged advanced Views and Groupings. The benefits of adding advanced Groupings to reports and object lists are:

  • Group data in ways that are not native in the standard user interface.
    • The grouping uses an advanced valueexpression to categorize each task rather than leveraging a task field.
  • Control how the grouping displays to your users.
    • The grouping categorizes each task as either LATE, ON TIME, UPCOMING depending on the day of the week and the task’s planned completion date
  • Enhance the user experience by creating dynamic advanced groupings
    • The advanced grouping updates day by day and recategorizes each task using an advanced calculation

Before I share the Task and Assignment text mode code, it is important to note that you cannot create a chart using advanced Groupings or Views. Charts must use either native object fields or custom fields.

The text mode code for both Task and Assignment reports is found below:

Task Report Advanced Grouping Text Mode:

1
2
3
4
5
6
textmode=true
group.0.valueexpression=IF(DAYOFWEEK({plannedCompletionDate})
<DAYOFWEEK(DATE($$TODAY)),”LATE”,IF(DAYOFWEEK({plannedCompletionDate})=DAYOFWEEK(DATE($$TODAY)),”ON
TIME”,IF(DAYOFWEEK({plannedCompletionDate})>DAYOFWEEK(DATE($$TODAY)),”UPCOMING”,”N/A”)))
{plannedCompletionDate})>DAYOFWEEK(DATE($$TODAY)),”UPCOMING”,”N/A”)))
group.0.valueformat=HTML

Assignment Report Advanced Grouping Text Mode:

1
2
3
4
5
6
7
group.0.valueexpression=IF(DAYOFWEEK({task}.{plannedCompletionDate})
<DAYOFWEEK(DATE($$TODAY)),”LATE”,IF(DAYOFWEEK({task}.
{plannedCompletionDate})=DAYOFWEEK(DATE($$TODAY)),”ON
TIME”,IF(DAYOFWEEK({task}.
{plannedCompletionDate})>DAYOFWEEK(DATE($$TODAY)),”UPCOMING”,”N/A”)))
group.0.valueformat=HTML
textmode=true

 

Stay tuned for the next blog in our series as we are going to discuss advanced filters!

Now it’s time to create our Task report. When creating a new report, it is always best practice to create a name and write a description for the report. The name should be descriptive enough to alert the user what the report is and the description should explain what the report shows.

Report Name: My Tasks Due this Week

Report Description: The My Tasks Due this Week report displays tasks that I am assigned to and have a planned completion date in the current week.

 

Instructions:

  1. Navigate to the Reporting area, select “New Report”, and choose the Task report.
  2. Navigate to the “Report Settings” dropdown and add the Report Title and Description. Select Done, when complete.
  3. Add the following columns: Project Name, Task Name, Status, Assignments, Planned Start Date, Planned Completion Date, Planned Hours, Actual Hours.
  4. Select “Add Column” and drag the new column between Planned Completion Date and Planned Hours,
  5. Confirm the new Column is highlighted blue then select Switch to Text Mode (upper right corner).
  6. Set the displayname to “Days Remaining”.
  7. Create a new line and type: textmode=true
    • This action alerts Workfront that we are using custom text mode rather than using standard fields.
  8. Create a new line for the valueexpression, which will leverage three functions: ROUND, DATEDIFF, and DATE
    • Remember to reference the API Explorer for the camel case values for object fields.
    • Set the valueexpression to: valueexpression=ROUND(DATEDIFF({plannedCompletionDate},DATE($$TODAY)),2)
    • DATE($$TODAY): calculates the date within the parenthesis and we used the $$TODAY wildcard to calculate today’s date.
    • DATEDIFF: calculates the number of days between two dates and we used the Planned Completion Date (camel case form) and DATE($$TODAY) dates.
    • IMPORTANT: Don’t forget to enclose your Workfront field between curly brackets: {plannedCompletionDate}
    • ROUND: rounds the value to the number of decimal places identified, which is 2 in our example.
  9. Create a new line for the valueformat.
    • Set the valueformat to: valueformat=doubleAsDouble
    • The valueformat formats the value of the valueexpression in the report when displayed.
  10. Select “Save”.
  11. Select “Add Column” and confirm that the column displays after the Actual Hours column.
  12. Confirm the new Column is highlighted blue then select Switch to Text Mode (upper right corner).
  13. Set the displayname to “Hours Remaining”.
  14. Create a new line and type: textmode=true
  15. Create a new line for the valueexpression, which will leverage three functions: ROUND, DIV, and SUB.
    • Set the valueexpression to: valueexpression= valueexpression=ROUND(DIV(SUB({workRequired},{actualWorkRequired}),60))
    • SUB({workRequired},{actualWorkRequired): calculates the difference between two fields and we used workRequired (planned hours) and actualWorkRequired (actual hours).
    • DIV: divides two numbers and we used SUB({workRequired},{actualWorkRequired}) and 60; We need to divide by 60 because Workfront uses seconds rather than minutes within the SUB function.
    • ROUND: rounds the value to the number of decimal places identified, which is 2 in our example.
  16. Create a new line for the valueformat.
    • Set the valueformat to: valueformat=doubleAsDouble
  17. Select “Save”.

 

After you have added both custom columns, select “Save + Close”. The report should look similar to the following:

 

In Part III, I will share the text mode code for a Task report and an Assignment report and introduce the series of blogs in the Create Reports Like a Pro series.

 

You are officially on your way to becoming a great Workfront Administrator! You know how to troubleshoot, create a feedback queue, and you have just learned how to read and use Workfront’s API Explorer. Now, let us focus on creating reports and dashboards that are effective and prompt our users to take action.

Every report shares four common areas: Views (Columns), Groupings, Filters, and Charts. We will cover Groupings, Filters, and Charts in later blogs but for now, we are going to focus on creating Advanced Views within a report.

A View on a report displays native and custom data for a given object (the object of a report). Let’s recall the lessons learned from the API Explorer blog. For a given object, you can leverage standard and custom object data, referenced object data, and object collections. Now, let’s create a report to help workers view key performance indicators for tasks they are assigned to.

 

Challenge:

Our work license users want to see how many days are left until the task is late and they want to see how many hours they have left on their tasks.

 

Solution:

Your initial reaction may be to create a Task report. A Task report will work if your organization assigns a single user to a Task. If your organization assigns multiple users to a Task, you will want to create an Assignment report. Don’t worry, the text mode code will be available for both Task and Assignment reports in Part III.

In our example, we will create a Task report with two custom text-mode columns. Days Remaining, and Hours Remaining. Both custom text mode fields are not available through the standard interface.

To create both columns, you need to know the different components of the text mode code we will develop. We will leverage the following functions:

  • displayname
  • valueexpression
  • valueformat
  • textmode

 

The displayname function will display the label name for the column. The valueexpression function enables users to develop formulas for advanced calculations to display data otherwise not available in the standard user interface. The valueformat function allows users to display the data in a variety of formats on a report. Lastly, the textmode function is used to identify the column as custom rather standard.

 

In Part II, we will create the custom text mode code to create both columns: Days Remaining, and Hours Remaining.

 

            Now that you are troubleshooting Workfront like a pro, it is time to sharpen your reporting skills. How many times have users asked to create advanced reports that show the number of hours remaining on a task and project or the number of days a task was late? When I was a Workfront System Administrator, my users constantly requested reports that automatically generated the KPIs above. But before we begin creating advanced reports, let’s learn about Workfront’s database structure and how to use the Workfront API Explorer.        

Every Workfront System Administrator should become familiar with the API Explorer. The API Explorer will teach you how different objects are linked together, the reporting limitations within each object in Workfront, and it will eventually prepare you to create amazing reports and integrations!

         First, you can find Workfront’s API by visiting Workfront’s Help site and searching for API Explorer (or by clicking here). The API Explorer is a large table that allows System Administrators to expand each object to see the different fields and components of the object. The API Explorer is broken down into the following parts: The Filter box, Object List, and API Version dropdown.

 

 

The API Version dropdown allows System Administrators to select different versions of Workfront’s API. I recommend selecting the most recent API version for a complete list of fields, references, collections, and actions per object. You don’t need to focus on reviewing different versions because Workfront’s production site will always leverage the most recent API version, which is what you need for advanced reporting.

The Filter (or search bar), allows you to quickly find the object you want to review. If you type “Project” in the Filter bar, the API Explorer will show a list of objects with Project in the name. The Filter bar is a great way to quickly find the object you want to review.

Lastly, there are objects within the table. Each object can be expanded for further detail. Each object has five subtabs: Fields, References, Collections, Search, and Actions.

1) The Fields subtab:

    • The Fields subtab is a comprehensive list of native object fields that can be used on an object report. The API Explorer only shows native Workfront fields, though you can leverage object custom fields in an object report. For example, if I select the Project object and choose the fields subtab, I will see a list of Project fields (like name, description, etc.).
    • Different fields have different field attributes. Each field is expandable for additional detail. Each field will have at least the Field Name and Field Type, but some fields have a lot more information.
    • Each field displays the label (what you see in Workfront) and the camel case name. The camel case name of each field is important when writing custom text mode within a report (I will show you how to use camel case field names in the next blog). Camel case refers to the style in which the fields are written, which is capitalizing the second word within the name. For example, the Planned Start Date field on a Project is actually called plannedStartDate. As you can see, Start and Date are both capitalized and form “humps” within the string.

 

2) The References subtab:

    • The References subtab is a list of all referenced objects that connect to the object you are reviewing.
    • Similar to the Fields subtab, each referenced object can be expanded to see additional detail.
    • The referenced objects are either one level above or parallel to the object you are reviewing. Think of objects as a pyramid. There are different levels within a pyramid and each level “connects”, either directly or indirectly to another level. For example, a referenced Project object is a Portfolio. A Project can only be associated to one Portfolio.
    • Each referenced object has a hyperlink that you can select, which will navigate you to the object within the API Explorer.

 

3) The Collections subtab:

    • The Collections subtab is a list of connecting objects that are grouped within the object you are viewing.
    • To maintain our Pyramid analogy, a collection object on a Project is the Task object. You can have many different Tasks on a single Project, but Tasks are a lower level on the Object Hierarchy. Think of the Object Hierarchy this way: Portfolio (top-level) à Program à Project à
    • You are limited on how you can leverage collection objects within a report, but we will cover that in a future blog post soon!
    • Each collection object has a hyperlink that you can select, which will navigate you to the object within the API Explorer.

 

4) The Search subtab:

    • The Search subtab is used primarily in Custom API calls. Custom API calls are traditionally used by iPaaS (Integration Platform as a Service, like Fusion) solutions or custom application software.

 

5) The Actions subtab:

    • The Actions subtab is used primarily in Custom API calls. Custom API calls are traditionally used by iPaaS (Integration Platform as a Service, like Fusion) solutions or custom application software.

 

Now that you understand the Workfront API Explorer and its different components, you are ready to create advanced reports within Workfront. In the next blog, we will review how to use the API explorer to create Advanced Views.

 

Now that you have a Workfront Requests queue to track errors, it is time to show our admins how to troubleshoot Workfront using a real-life example (with historical Revolutionary War heroes as our users). 

Remember, in the first article titled, “Think Like a Workfront Admin: What is Troubleshooting?” we discussed four fundamental questions to ask after reviewing the technical support ticket: 

In addition, we identified the process for troubleshooting errors in Workfront: 

Let’s attempt to solve George Washington’s error in Workfront. 

George Washington submitted a request to the Workfront Requests queue as a Technical Support request. After reviewing the form, we have identified the error involves a report on a layout template: 

Based on the custom form, we can identify three out of four fundamental questions when reviewing Workfront errors: 

        1. George Washington is attempting to view a list of active projects he owns on the “My Active Projects” report in Workfront.
        2. George Washington has the Planner Access Level.
        3. George Washington’s Layout Template is Creative Director (based on the ID in the Custom Form).

 

The last question we need to answer is, “Does the user have the correct sharing permissions on the corresponding object?” In this case, we need to review the sharing rights on the “My Active Projects” report. 

Upon further investigation, we have identified that George Washington does have the correct sharing permissions for the “My Active Projects” report. The report is visible system-wide, without restrictions: 

 

Now it’s time to follow the troubleshooting process! 

      1. Answer the four fundamental questions for troubleshooting errors in Workfront.
      2. Log in as George Washington in Workfront. 
      3. Replicate the error by navigating to the Projects area and viewing the “My Active Projects” report. Picture 1 shows the results that George sees when reviewing the report and picture 2 shows the results George should see but does not:

 

 4. In order to properly resolve the error, we need to further investigate the key features of the report. 

          • First, review the report’s filters and determine that the filters are set up correctly (we use wildcards to make the report dynamic).

          • Next, review the report’s settings and notice that we accidentally set the “Run this report with the Access Rights of Andy Koprowski.” When selecting a user in the “Run this report with the Access Rights of” field, it will overwrite the existing filters of the report. So, instead of viewing active projects with an owner ID equal to $$USER.ID, the report will instead show all active reports owned by Andy Koprowski. 

          • To resolve the error, remove Andy Koprowski from the field, “Run this report with the Access Rights of” and save changes to the report.
          • Next, log back in as George Washington and confirm that the update to the report resolves the error: George can now view all of his active projects.

          • Remember to respond to the error ticket, informing the user that the error has been resolved and move the status of the ticket to Closed. 

 

In our next blog in the “Think Like a Workfront Admin” series, we will discuss how to create advanced reports using advanced views.

In the previous article, we discussed what is troubleshooting and what to expect as a Workfront System Administrator. Now, it is time to shift our focus to Workfront queues.

What is a Workfront Queue?

A Workfront queue refers to a special type of project that stores requests, issues, change orders, and bug reports submitted by Workfront users. Organizations traditionally use queues to capture requests and develop a working backlog of active issues that Workfront System Administrators will resolve. Every organization that leverages Workfront should have a version of a Workfront Request queue.

A successful Workfront Requests queue has the following features:

  • Project name: is informative and clearly articulates the queue’s purpose
  • Project status: equates with a status of Current (this activates the queue)
  • Queue topics: are easy to understand
  • Custom forms: have the appropriate fields to adequately capture the error
  • Other features:
      • The project is published as a Help Request Queue
      • The project enables “Anyone” to add requests to the queue

 

We have successfully outlined the characteristics of a functioning Workfront Requests queue and you are probably thinking, what does an example queue look like? Fortunately, you are in luck. Below is an example queue structure that many successful Workfront organizations use to capture Workfront issues submitted by their workforce.

  • Project name: Workfront Requests
  • Project status: Queue (equates with Current)
  • Queue topic structure:
      • Technical Support
      • Enhancement Idea
  • Custom forms: contain fields to identify the object/area of Workfront experiencing the error, space to describe the error in detail, and a final message to nudge the user to submit any photo/video proof of the error

There are many benefits to having a Workfront Requests queue, but the benefits are not just for Workfront System Administrators. Providing a Workfront Requests queue empowers your users to take control of errors and improves error resolution communication. In addition, logging errors helps Workfront System Administrators conduct intelligent and meaningful conversations with their Workfront Account Executives, Customer Success Managers, and Support Engineers. The more detail captured per error, the better equipped you and Workfront Support will be to quickly resolve the error.

Lastly, creating a Workfront Requests queue that captures technical support requests (errors) and enhancement ideas (product enhancements), supports your organization’s Workfront governance model. Users will build a product backlog of enhancement ideas, which can be routed to your Workfront Governance team. Rather than assuming the enhancement idea is valid and should be resolved, the Workfront Governance team can discuss the idea, determine the ROI of the idea, the overall impact to your user group, and ultimately decide if the enhancement is worth pursuing.

We will be returning to the idea of a Workfront Governance team and structure in a later series.

In our new series, “Think Like a Workfront Admin,” our consultants will walk you through how to troubleshoot Workfront like a pro!

Are you a new Workfront system administrator? Or perhaps you are a seasoned Workfront administrator looking for new ways to troubleshoot system errors. Either way, you’ve come to the right place.

First, we need to start with the basics and answer the following questions:

‘What is troubleshooting and how do you troubleshoot Workfront errors?’

Any software application, no matter how advanced, will need to be troubleshot by a system administrator or software subject matter expert from time to time. I’ve been in the IT world long enough to know that even the simplest line of code can break and when it does, it is best to be prepared with the right questions to quickly fix the problem.

So, what is troubleshooting?

Troubleshooting is identifying a problem, understanding the root cause, and correcting the problem. That’s it!

Next, we will discuss, how do you troubleshoot errors in Workfront?

Typically, errors are identified by your users. That’s right, the standard plan, work, and review license users will find more errors than you, the system administrator. Let’s be realistic, every system administrator builds Workfront to work, but Workfront doesn’t always work as expected. Don’t take it personally (I had to learn that the hard way). Just remember, it’s your job to identify the root cause and quickly solve the problem.

When an error is identified, you should ask the following questions:

When you answer all of the questions above, you will typically find the root cause of basic problems in Workfront. I cannot tell you how many times users have reported “errors” that weren’t actually software errors, rather, the user needed an upgraded license, access level, and/or layout template.

To make things easier, I execute the following process for each error:

 

After following the process above, if you aren’t able to identify the root cause and resolve the error, you will need to submit a ticket to Workfront Support for additional help.

In the next post, we will discuss “How to create an internal request queue to track and resolve errors that your users identify.”

Stay tuned.