Expand my Community achievements bar.

The next phase for Workfront Community ideas is coming soon. Learn all about it in our blog!
SOLVED

Project tab custom filter not working

Avatar

Level 4

Our projects can be closed and reopened later with additional sets of the templated tasks added (for things that have activity in a later season). Our team really uses the Projects tab to manage their work (My Projects/Work isn't a good fit for us based on our build). We have a custom filter that only will have projects show up when a task is assigned to the users that is still in a "Current" state.

However, a user doesn't have open tasks, but the projects are still open, and a few are showing up in his Projects tab.

For more info, the task set is basically a parent task, a task assigned to another team, and then 2 tasks assigned to the user's team, which they then assign to themselves. He was assigned to a task in the first set, which are all marked "Complete". He is not assigned to the additional set of tasks (just his team). Here's the textmode:

EXISTS:A:$$OBJCODE=ASSGN

EXISTS:A:assignedToID=$$USER.ID

EXISTS:A:projectID=FIELD:ID

status=CUR

What do I need to tweak? I'm still pretty new to text mode - my consultant (when we had one) built this.

Thank you!

Topics

Topics help categorize Community content and increase your ability to discover relevant content.

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

I think this help article will be pretty helpful to you if you're able to get through it.

https://one.workfront.com/s/document-item?bundleId=the-new-workfront-experience&topicId=Content%2FRe...

In particular, compare the generic code to your code above. Here's the generic code as compared to your code:

1) EXISTS:A:$$OBJCODE=<Object code of the Linking Object>

your line 1 = the linking object is the "assignment" object

2) EXISTS:A:<Linking Field on the Linking Object>=FIELD:<Linking Field displayed on the Original Object>

your line 3 = the linking field is the project ID field. In the assignment object, the "projectID" is what they use to refer to the project's ID (the linking field on the linking object). In the project report, the way they refer to the project's ID is "ID". (the linking field on the original object -- the project is the original object)

3) EXISTS:A:<Target Object>:<Target Field>=<Your value for the Target Field>

your line 2 = your target object target field is the assignedToID field, and your value is the user's ID ($$USER.ID)

Your final line isn't tied to the exists statement at all, so it simply says "project status should be CUR".

All this to say that your exists code simply says that you're looking for assignments that are assigned to the user who is looking at the report, and that the project status is the one aligned to CUR (usually this status is something like "Active"). Hopefully you'll make future consultants document their code in this way.

At any rate, your custom filter is working fine. Here's what your filter isn't saying:

- There's nothing about any other project status. If you have any other custom project statuses that equate to some flavor of active, these will not be counted. (for additional statuses, you would need to locate their three-character abbreviation and tack those to the end of your status line, separated by a tab character. You could similarly switch to using "statusEquatesWith")

- There's definitely nothing about whether the tasks should be in any kind of current state (this would have showed up as an extra line prefaced with "EXISTS:A:_____")

- There's also nothing about whether the assignment needs to be completed or not. (this also would have similarly showed up prefaced with "EXISTS:A_____")

You'll want to add all this, and I always tell people not to reinvent the wheel at this point. There's no need to come up with any of this text mode. For those of us who aren't made of textmode, it will always be easier to generate the code in standard mode, and then switch to copy and paste. Here's how.

1) You're going to steal all your assignment code from an assignment report.

Create an assignment report and figure out what you want to say about task statuses or assignment statuses in the filter tab. For example, try something like "task status is not equal to cancelled or complete" and "assignment status not equal to Done". Switch to text mode, and copy the two filters. Since these filters belong to the linking object, these 4 lines will be prefaced with "EXISTS:A:"

2) If you happen to have more than one project status that equates to "active", and you care about that, you're going to steal all your project code from a project report.

Create a project report and figure out a better filter to express the set of projects you want to comb through. I don't really care what you use. It could be "status equates with is equal to active" or "status equals active, absolutely approved, in progress, and whatever else you got talked into creating by your users". Switch over to text mode and copy this filter. The project report is your original object, so no need to preface these lines with anything.

Summary:

These two lines are correct, and they say "hey I have a linking object and they are linked through the project's ID".

EXISTS:A:$$OBJCODE=ASSGN

EXISTS:A:projectID=FIELD:ID

This line is also correct, and it's a filter that says "I'm just looking for everything assigned to whoever is looking at the report"

EXISTS:A:assignedToID=$$USER.ID

Your consultant should have put in a couple more filters to express that you're only looking for tasks that are not complete, and assignments that aren't complete. You can do that in a number of ways, using task percent complete, task status, and/or assignment status, and your company should have developed agreed-on conventions to filter these. All of these filters should be included in the exists statement you started with your first three lines (by this I mean, they all should start with "EXISTS:A:___"

Finally, you have one "status=CUR" line, and this is fine but the red flag is, it's not sustainable. As soon as you add a new custom status, you're back to square one, so think about how much maintenance you want to open yourself up to.

Hope this helps!

View solution in original post

3 Replies

Avatar

Correct answer by
Community Advisor

I think this help article will be pretty helpful to you if you're able to get through it.

https://one.workfront.com/s/document-item?bundleId=the-new-workfront-experience&topicId=Content%2FRe...

In particular, compare the generic code to your code above. Here's the generic code as compared to your code:

1) EXISTS:A:$$OBJCODE=<Object code of the Linking Object>

your line 1 = the linking object is the "assignment" object

2) EXISTS:A:<Linking Field on the Linking Object>=FIELD:<Linking Field displayed on the Original Object>

your line 3 = the linking field is the project ID field. In the assignment object, the "projectID" is what they use to refer to the project's ID (the linking field on the linking object). In the project report, the way they refer to the project's ID is "ID". (the linking field on the original object -- the project is the original object)

3) EXISTS:A:<Target Object>:<Target Field>=<Your value for the Target Field>

your line 2 = your target object target field is the assignedToID field, and your value is the user's ID ($$USER.ID)

Your final line isn't tied to the exists statement at all, so it simply says "project status should be CUR".

All this to say that your exists code simply says that you're looking for assignments that are assigned to the user who is looking at the report, and that the project status is the one aligned to CUR (usually this status is something like "Active"). Hopefully you'll make future consultants document their code in this way.

At any rate, your custom filter is working fine. Here's what your filter isn't saying:

- There's nothing about any other project status. If you have any other custom project statuses that equate to some flavor of active, these will not be counted. (for additional statuses, you would need to locate their three-character abbreviation and tack those to the end of your status line, separated by a tab character. You could similarly switch to using "statusEquatesWith")

- There's definitely nothing about whether the tasks should be in any kind of current state (this would have showed up as an extra line prefaced with "EXISTS:A:_____")

- There's also nothing about whether the assignment needs to be completed or not. (this also would have similarly showed up prefaced with "EXISTS:A_____")

You'll want to add all this, and I always tell people not to reinvent the wheel at this point. There's no need to come up with any of this text mode. For those of us who aren't made of textmode, it will always be easier to generate the code in standard mode, and then switch to copy and paste. Here's how.

1) You're going to steal all your assignment code from an assignment report.

Create an assignment report and figure out what you want to say about task statuses or assignment statuses in the filter tab. For example, try something like "task status is not equal to cancelled or complete" and "assignment status not equal to Done". Switch to text mode, and copy the two filters. Since these filters belong to the linking object, these 4 lines will be prefaced with "EXISTS:A:"

2) If you happen to have more than one project status that equates to "active", and you care about that, you're going to steal all your project code from a project report.

Create a project report and figure out a better filter to express the set of projects you want to comb through. I don't really care what you use. It could be "status equates with is equal to active" or "status equals active, absolutely approved, in progress, and whatever else you got talked into creating by your users". Switch over to text mode and copy this filter. The project report is your original object, so no need to preface these lines with anything.

Summary:

These two lines are correct, and they say "hey I have a linking object and they are linked through the project's ID".

EXISTS:A:$$OBJCODE=ASSGN

EXISTS:A:projectID=FIELD:ID

This line is also correct, and it's a filter that says "I'm just looking for everything assigned to whoever is looking at the report"

EXISTS:A:assignedToID=$$USER.ID

Your consultant should have put in a couple more filters to express that you're only looking for tasks that are not complete, and assignments that aren't complete. You can do that in a number of ways, using task percent complete, task status, and/or assignment status, and your company should have developed agreed-on conventions to filter these. All of these filters should be included in the exists statement you started with your first three lines (by this I mean, they all should start with "EXISTS:A:___"

Finally, you have one "status=CUR" line, and this is fine but the red flag is, it's not sustainable. As soon as you add a new custom status, you're back to square one, so think about how much maintenance you want to open yourself up to.

Hope this helps!

Avatar

Level 4

Thank you! This is wildly helpful - digging into this today. I really, really appreciate the time!

Avatar

Community Advisor

yep no problem. Remember, creating reports is free! You should be able to create an assignment report with filters that give you exactly the result you are looking for and then somehow copy these filters into a project report prefaced with "EXISTS:A:___" in order to get a similar result. The only difference is that if you use any project filters in your assignment report, you can just "translate" them into regular filters on a project report.

In fact if you group the assignment report by project name and then look at the summary tab of the assignment report, that list of projects should be the same as the list in your projects report.

This is a very handy troubleshooting tool for some of us -- me -- who never quite trust the exists filters to do their thing. If you have a filter in one report that isn't in your other report, something's wrong.