Understand basic text mode for views
IMPORTANT
Prerequisites:
TIP
- To gain a more in depth understanding of text mode we recommend watching the recorded webinar event Ask the Expert - Introduction to Text Mode Reporting, which is one hour in length.
- To learn even more about text mode we recommend watching the Advanced reporting tutorials, which together are five and a half hours in length.
- Click here to access API Explorer
In this video, you will learn:
- What text mode is
- What camel case is
- Some basic “plug and play” text mode you can use in your views
Transcript
Hi, welcome to Basic Text Mode for Views. In this video you’ll learn what text mode is, what camel case is, and some basic plug and play text mode you can use in report views. If you already know what text mode and camel case are, you can skip right to the Plug and Play section of this video. It starts at the Show Parent Task in a View slide. Many report writers use text mode in Adobe Workfront because they’ve exhausted their resources with the standard builder, and in some cases still don’t have the report they need or want. Although text mode is not a cure-all solution, it does allow you to get around some of the limitations that you may be experiencing through the standard builder. Let’s click on New View here. Now you’ve seen how columns and views are created in the standard builder by clicking on New Column and then using a drop-down menu to select the available field. The standard builder simplifies the reporting tool, but because of that simplification it can be limited. It actually doesn’t have all the fields that could be used in this list here. That’s why you may want to look to text mode to expand your options. The system reads the information you put into the standard builder and puts it into a code for Workfront to read. This is text mode. All of the same components are there. They just look different. The thing to keep in mind when working with text mode is that fields are written in what is called camel case. That means the field is written with a mixture of upper and lower case letters and no spaces. Workfront uses camel case to string words together in text mode. And most of the time what you find in the standard builder would be similar in camel case. For instance, this is how planned completion date looks in the standard mode. And here’s what it looks like in camel case. Here’s budget status in standard and here’s budget status in camel case. There are some fields in the standard builder that have a camel case equivalent that doesn’t follow these rules exactly. But they’re usually pretty easy to recognize and they still refer to the standard builder field. For example, duration in minutes is duration minutes in camel case. And external reference ID is X ref ID in camel case. A list of fields can be found in the API Explorer. You can learn more about the API Explorer in the advanced reporting tutorials in Experience League. And that’s a good place to go to find a link to the API Explorer. The advanced reporting tutorials teach you more about text mode than we can do here. They contain five and a half hours of video instruction and a manual that you can download. Here we’ll just show you some handy text mode code you can plug and play without having to take the advanced course. Here are a couple of plug and play text mode blocks. The first one is to show parent tasks in a view. And we’re going to create a view called for parents view. Some organizations use many levels of subtasks. In some cases, subtasks may have the same names and you can only accurately identify them by the parent tasks that they’re associated with. Suppose your boss comes to you with a request that you create a task view that will show tasks based on all the parents of the task up to four generations back. The view we will create looks like this. Now we’re going to create the view. To do that, we’ll first go here and choose new view. Now what we want to have is over to the left of task name, we want to have the parent of the task, the parent of the parent to the left of that, and going on back to the four generations. So we can either remove these other columns that we don’t need and start out with a new column. So I’m going to do that to start with. And then I’m also going to show you how to just edit these columns to change them into the columns that you want. Just to give you a little more information here. Okay, so we’re adding the first column. This is going to be the parent of the task. And the parent of the task, actually, you don’t need text mode to do that. But the reason we need the text mode is to view the parent of the parent and on up. So here, we just type parent. So you’ve got the task and then there’s the parent of the task here. So under parent, we’re going to go down to name. I’ll just type parent name. It’ll be a little easier. Make sure you get it from the parent object. And we’ll move it over here. Now we’re ready to do the next. Let’s say that we’re just going to take planned hours. Just to text mode. Click to edit and we’re just going to remove all of this text mode code. And now we need to go to Experience League and get the code block. Okay, so we’ll scroll down here. And get the parent of parent name. Copy that. Text mode code and paste it in here. Save it. And we’re going to move this over to the left. I’ll do the same again. It’s a good idea to delete all of this text mode code just so you don’t accidentally not paste over everything and have anything in here except the code that you want. If you don’t have the text mode code in here perfectly, then it just won’t work and it won’t necessarily tell you what the problem is. It will just not give you any results. Okay.
So you notice as I’m getting this last piece of code here that there’s a screenshot showing what this should look like. So we’ve got the parent name and the parent of parent, etc. There are lots of other things that you can plug and play with here. And as you can see as we scroll down there, they’re available also over here. And each group that goes together has got a screenshot with it. So hopefully it’s easy for you to browse through here and see things that will be useful for you. Copy that. Paste it. And we’ll delete these last two columns that we don’t need. Of course you can leave these other columns in here if you want or put other things in here. Columns that you create through the builder. We’re going to do this in name. And save it. Okay. We’re done. There it is. I hope you enjoy using these plug and play code blocks.
Task - 4 parents view
Create a column for the Task Name and the Parent Name first, then use the following text mode to create the other three columns.
Task - Parent of Parent Name
displayname=Parent of Parent Name
linkedname=parent
namekey=view.relatedcolumn
namekeyargkey.0=parent
namekeyargkey.1=name
querysort=parent:parent:name
textmode=true
valuefield=parent:parent:name
valueformat=HTML
Task - Parent of Parent of Parent Name
displayname=Parent of Parent of Parent Name
linkedname=parent
namekey=view.relatedcolumn
namekeyargkey.0=parent
namekeyargkey.1=name
querysort=parent:parent:parent:name
textmode=true
valuefield=parent:parent:parent:name
valueformat=HTML
Task - Parent of Parent of Parent of Parent Name
displayname=Parent of Parent of Parent of Parent Name
linkedname=parent
namekey=view.relatedcolumn
namekeyargkey.0=parent
namekeyargkey.1=name
querysort=parent:parent:parent:parent:name
textmode=true
valuefield=parent:parent:parent:parent:name
valueformat=HTML
User - Iterations showing lists in user views
User - All job roles
displayname=All job roles
listdelimiter=<p>
listmethod=nested(userRoles).lists
textmode=true
type=iterate
valuefield=role:name
valueformat=HTML
User - All job roles showing primary
displayname=All Job Roles showing primary
listdelimiter=<p>
listmethod=nested(userRoles).lists
textmode=true
type=iterate
valueexpression=IF({user}.{roleID}={role}.{ID},CONCAT("** ",{role}.{name}," **"),{role}.{name})
valueformat=HTML
User - All teams
displayname=All teams
listdelimiter=<p>
listmethod=nested(teams).lists
textmode=true
type=iterate
valueexpression={name}
valueformat=HTML
NOTE
There is a Team field accessible through the UI that shows all teams, comma separated, but using the text mode above will show each team on a separate line.
User - All groups
displayname=All groups
listdelimiter=<p>
listmethod=nested(userGroups).lists
textmode=true
type=iterate
valuefield=group:name
valueformat=HTML
User - All groups showing home group
displayname=All groups showing home group
listdelimiter=<p>
listmethod=nested(userGroups).lists
textmode=true
type=iterate
valueexpression=IF({user}.{homeGroupID}={group}.{ID},CONCAT("** ",{group}.{name}," **"),{group}.{name})
valueformat=HTML
User - Direct reports
displayname=Direct reports
listdelimiter=<p>
listmethod=nested(directReports).lists
textmode=true
type=iterate
valueexpression={name}
valueformat=HTML
User - Future PTO
displayname=Future PTO
listdelimiter=<br>
listmethod=nested(reservedTimes).lists
namekey=group.plural
textmode=true
type=iterate
valueexpression=IF({startDate}>$$TODAY,CONCAT({startDate}," - ",{endDate}),"")
valueformat=HTML
width=150
Task - How to display task assignments and working on status
displayname=Assignments and Status
listdelimiter=<br>
listmethod=nested(assignments).lists
namekey=group.plural
textmode=true
type=iterate
valueexpression=CONCAT({assignedTo}.{name},IF(ISBLANK({assignedTo}.{name}),"",IF({status}="AA"," - Requested",IF({status}="AD"," - Working"," - Done"))))
valueformat=HTML
width=150
Task - How to show role and allocation on multiple task assignments
Task - Role + hours
displayname=Role+hours
listdelimiter=<li>
listmethod=nested(assignments).lists
textmode=true
type=iterate
valueexpression=CONCAT({role}.{name}," (",round({workRequired}/60,2),")")
valueformat=HTML
Task - Assignment + percent allocation
displayname=Assignment+percent
valueexpression=CONCAT({assignedTo}.{name}," (",{assignmentPercent},")")
listdelimiter=<li>
listmethod=nested(assignments).lists
valueformat=HTML
textmode=true
type=iterate
Task - Cross-project predecessors and successors
Task filter (optional)
Show me all tasks that have at least one cross-project predecessor or at least one cross-project successor on current projects
predecessorsMM:ID_Mod=notblank
predecessorsMM:projectID=FIELD:projectID
predecessorsMM:projectID_Mod=ne
project:statusEquatesWith=CUR
project:statusEquatesWith_Mod=in
OR:1:project:statusEquatesWith=CUR
OR:1:project:statusEquatesWith_Mod=in
OR:1:successorsMM:ID_Mod=notblank
OR:1:successorsMM:projectID=FIELD:projectID
OR:1:successorsMM:projectID_Mod=ne
Task - Show predecessor names and project predecessor is in
displayname=Predecessor names
listdelimiter=<br>
listmethod=nested(predecessors).lists
namekey=group.plural
textmode=true
type=iterate
valueexpression=CONCAT("TASK = ",{predecessor}.{name}," >> PROJECT = ",{predecessor}.{project}.{name})
valueformat=HTML
width=150
Task - Show successor names and project successor is in
displayname=Successor names
listdelimiter=<br>
listmethod=nested(successors).lists
namekey=group.plural
textmode=true
type=iterate
valueexpression=CONCAT("TASK = ",{successor}.{name}," >> PROJECT = ",{successor}.{project}.{name})
valueformat=HTML
width=150
Task - Show projected completion date of predecessors
displayname=Predecessor projected completion dates
valueformat=atDate
listdelimiter=
textmode=true
width=90
stretch=0
valuefield=predecessor:projectedCompletionDate
type=iterate
listmethod=nested(predecessors).lists
shortview=false
Task - Show progress status of predecessors
displayname=Predecessor progress status
listdelimiter=<br>
listmethod=nested(predecessors).lists
shortview=false
stretch=0
textmode=true
type=iterate
valueexpression=IF({predecessor}.{progressStatus}="OT","On Time",IF({predecessor}.{progressStatus}="LT","Late",IF({predecessor}.{progressStatus}="BH","Behind","At Risk")))
valueformat=HTML
width=90
Task - Show percent complete of the cross-project predecessor’s project
displayname=Predecessor project percent complete
listdelimiter=<br>
listmethod=nested(predecessors).lists
namekey=group.plural
textmode=true
type=iterate
valueexpression=IF({isCP}=true,CONCAT({predecessor}.{project}.{percentComplete},"%"),"")
valueformat=HTML
width=150
Task - Iteration showing all of the people assigned and who assigned each one
displayname=All assignees and requesters
listdelimiter=<p>
listmethod=nested(assignments).lists
textmode=true
type=iterate
valueexpression=CONCAT("Assigned To: ",{assignedTo}.{name},"; Requested By: ",{assignedBy}.{name})
valueformat=HTML
Task/Project - Iteration showing all custom forms on a project or task
displayname=All Forms Assigned
listdelimiter=<p>
listmethod=nested(objectCategories).lists
textmode=true
type=iterate
valuefield=category:name
valueformat=HTML
Project - Iteration showing all primary contacts for resolvables in project view
displayname=Requestor
listdelimiter=<br>
listmethod=nested(resolvables).lists
namekey=group.plural
textmode=true
type=iterate
valuefield=owner:name
valueformat=HTML
width=150
Project - Iteration showing all project team members
displayname=Project Team Members
listdelimiter=<br>
listmethod=nested(projectUsers).lists
namekey=group.plural
textmode=true
type=iterate
valuefield=user:name
valueformat=HTML
Project - Iteration showing the entryDate of all resolvable issues for a project
displayname=Resolvables entry date
linkedname=direct
listdelimiter=<br>
listmethod=nested(project.resolvables).lists
listsort=string(description)
querysort=description
section=0
textmode=true
type=iterate
valuefield=entryDate
valueformat=HTML
Project - Show the home group of the original project requestor
displayname=Requestor home group
linkedname=direct
namekey=name
querysort=convertedOpTaskOriginator:homeGroup:name
textmode=true
valuefield=convertedOpTaskOriginator:homeGroup:name
valueformat=HTML
Project - Show if the project is a request queue
querysort=queueDef:isPublic
valueformat=val
description=0 (None), 1 (Public), 2 (Private), 3 (Company), 4 (Group)
linkedname=direct
textmode=true
enumtype=PROJ
valuefield=queueDef:isPublic
namekey=status
type=enum
enumclass=com.attask.common.constants.ProjectStatusEnum
displayname=Public Selection
Issue - Iteration showing all resolve project team members
displayname=Resolve Project: Team Members
listdelimiter=<br>
listmethod=nested(resolveProject.projectUsers).lists
namekey=group.plural
textmode=true
type=iterate
valuefield=user:name
valueformat=HTML
width=150
Issue - Iteration showing all teams of the issue’s primary contact
displayname=Requestor Teams
listdelimiter=<br>
listmethod=nested(owner.teams).lists
namekey=group.plural
textmode=true
type=iterate
valuefield=name
valueformat=HTML
width=150
Document - Iteration showing folder in a document report
displayname=Folder
listdelimiter=<br><br>
listmethod=nested(folders).lists
textmode=true
type=iterate
valuefield=name
valueformat=HTML
Document - Iteration showing parent folder in a document report
displayname=Parent Folder
listdelimiter=<br><br>
listmethod=nested(folders).lists
textmode=true
type=iterate
valuefield=parent:name
valueformat=HTML
Document - Document approval dates
displayname=Document approval dates
valueformat=HTML
listdelimiter=<br>
linkedname=direct
textmode=true
listsort=string(description)
valuefield=approvalDate
type=iterate
listmethod=nested(approvals).lists
shortview=false
section=0
Proof Approvals
Proof Approval - Show project name
displayname=Project Name
textmode=true
valuefield=documentVersion:document:project:name
valueformat=HTML
Proof Approval - Show task name
displayname=Task Name
textmode=true
valuefield=documentVersion:document:task:name
valueformat=HTML
recommendation-more-help
c9fbcf61-6d19-481e-a9ab-f54a0ae0ee8a