Tinderbox Forum

Next actions in projects

Hello, all.

Just getting started but am amazed at the power of Tinderbox.

I’m setting up a task/project management system and need a nudge on how to accomplish something. My task items have a boolean attribute called “Focus” that I use to query them into different collections for my attention. I also have a boolean attribute called “Done” that tells me whether or not the task is done.

If I have a task (Task1) connected to another (Task2) through an outbound link called “Next Action”, is there a way to set Task2’s “Focus” attribute to “true” as soon as Task1’s “Done” attribute is checked?

This would allow me to link tasks and automatically put focus on the next actions, whenever one action in a project is completed.

One simple way to do this is to add a rule to Task2:

if($Done(/Task1)==true) { $Focus=true; }

This will periodically check to see if Task1 is done. If it is, we have the focus.

Now, we could be more elaborate. And perhaps we could be more efficient. But, lots of the time, this approach is what you need.


Perhaps you have thousands of tasks, each with a rule. The inefficiency adds up. Perhaps you don’t really need to check every 5 seconds whether a task is done yet; the answer is probably just what it was five seconds ago! In this case, we might use an Edict instead of a Rule; edicts are, in essence, low-priority rules that run less often.


Perhaps you have lots and lots of rules, each of which is pretty much like this one — except each rule checks $Done on a different note. You might neaten things up a little bit by storing that path of the note to check in an attribute — we’ll call it $PrecedingTask. Then our test becomes

if($Done($PrecedingTask)==true) { $Focus=true; }

And you might do even more complex things, like check whether any one of a list of tasks has been finished, or check whether every task in a list of tasks has been finished. My recommendation is, don’t worry too much about such things until you need them.. They’re not difficult, and it’s comforting to know it’s there in case you need it.

Thank you! This is putting me on the right path. Can you help me with a newbie thing, though? How do I set up $PrecedingTask to store the previous note that’s linked to the current one with a link type of “Next action”?

Assumptions:

  1. only a single note is linked this way: if more than one this action will set the first of several as per lowest $OutlineOrder.
  2. PrecedingTask is a String -type user attribute.
  3. Link type names are case-sensitvive (i.e. ‘Next action’ and ‘next action’ are different).

The action in a an agent or rule:

$PrecedingTask = links(original).inbound."Next action".$Path

Given the assumptions above, $PrecedingTask should now hold the $Path to the desired note.

I’ll add an unsolicited tip - do watch Michael Becker’s video where he’s built - and deconstructs - a great Daily Journal and Time Tracker in Tinderbox. The actual project file is also available for download and study. Some great tips and ideas to be gleaned.

Hey there, you might find this video helpful: Tinderbox Training Video 26 - Daily Journal Time Tracking Project Management Part 1.

1 Like

hahaha beat you to it…!

1 Like

Thank you all! This is working perfectly now. I’ll watch those videos!

In this, is there a way to change the link from “Next action” to another type, so that the rule does not continually trigger?

Via links()? In short no, but only because links collects data, it doesn’t alter it. A further complication is that whilst you can delete a link type “some action” and make one of type “different action” you cannot—using an existing action operator—change the link type of an existing link. You can do it in the UI via Browse Links. I do recall this being suggested as a feature some time in the past, but at at v9.0.0 is it not possible.

The operator you are after (feature suggestion?) would be something like (N.B. this does not exist!):

changeLinkType(sourceNote, targetNote, oldLinkType, newLinkType);

Instead we have to use a rather awkward kludge. This is an action - or rather set of actions that need to run in sequence:

  • identify notes affected by some event
  • identify they have a link of a type than needs changing
  • replicate that link using a different link type.
  • delete the link using the old type.

Pro Tip: Don’t delete the ‘old’ link before creating the new one or you may find you are essentially sawing off the branch upon which you are sitting. The old link might be the only way, within the context of the action, to correctly define the source/destination of the new link!