Revision Tracking for Revit Sheets

Hello everyone, I was able to Track Revisions on my sheets by assigning the revisions to a project parameter. (The idea for this graphic was thanks to Sheet List with Revision Matrix)

The graphic works great; however, it involves human error because we have to run the dynamo every time we add a new revision. Is there a way to have these values set up from dynamo and not from the user end? so that eveytime we run the dynamo, it only updates the parameters already assigned.

Thank you in advance!!

Revision Tracking.dyn (648.2 KB)


Apologies I’m just trying to get my head around the graph…

Assuming I’m reading it correctly…

So let’s say you have a project that has 2000 revisions, do you need 2000 parameters to add your X?

You can get Sheet.Revisions to auto populate them I guess… You can even auto create your parameters Orchid would let you with AddSharedParameter… (I would then pull the revision number, not an X)

It’s maybe just being sure that this is the best process before we begin?

Instead of making all the parameters, you could this with a Dynamo created Excel… Or if it had to stay entirely within Revit, you could probably have a bunch of lines and text fields which Dynamo created for you on a sheet every time you run it? So it looked like a schedule?

Apologies if that’s off topic :slight_smile:


Or… A key schedule.

Hi Jacob,

A key schedule would be great, do you have an example of it working as the OP’s example?



@Mark.Ackerley, the graph would need 2000 parameters if I have 2000 Revisions :frowning: and I have to run the graph and assign parameters every time something changes. It’s not practical.

I’d like to stay within Revit. The idea to auto create shared parameter and populate the revision number would be perfect. I guess it sounds I could even use Key Schedules with project parameters instead of creating shared parameters as @JacobSmall suggests?

I am not sure I understand the last part about Dynamo creating lines as a schedule, that sounds interesting but I’m not sure how it would work.

Thank you so much for helping!!

Hmm… Apologies just thinking aloud…

A different option might be to use Cell Headers? That would give you the table structure and you can input information wihtout being tied to reading parameter values…

If you’re not familiar, you can make a schedule, set the filter to ensure there’s nothing in it, then just create lots of header cells to make a schedule you can type into.


Then you could maybe populate those cells with parameter values…

Steam nodes has a Schedule.GetTextFromHeader node which is worth a look…

Does that sound like method worth exploring?



@Mark.Ackerley I’d rather a schedule with parameters columns so that I can filter parameters and other people can easily use it as they are more familiar with schedules, unless you think this is the only best way.

Oh I’m sure it’s possible :slight_smile:

Apologies, I’m speculating slightly because I don’t have an rvt but I guess the revision sequence is a useful thing? Presumably ‘ISSUE 2000’ will be sequence 2000? If that’s right, then this would work…?

I’m asking for too much, but do you think it would be possible to call instead of X the revision numbers? And an X only for the first submission? If I can’t get the X for the first submission, it’s okay. But if I can pull the revision number, I’m sure that will be very very useful!

Also, just for me to make sure I understand, could you walk me through the last part of the code? We are creating a Project Parameter or a Shared Parameter? And it is going to start from ISSUE “n”?

Thank you soo much!

Hum… So… I’ve run out of time I’m afraid…

Edit : Maybe you can make this work with lists?



1 Like

Thank you for all your help!

1 Like

I can’t get my lists to work :frowning:

Final Version, thanks to Kenny with the Python :slight_smile:

revision tracking-MKA-2.dyn (21.6 KB)

# Copyright(c) 2015, Konrad K Sobon
# @arch_laboratory,
# Thanks Kenny

import clr
# Import Element wrapper extension methods
import Revit

# Import DocumentManager and TransactionManager
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument

# Import RevitAPI
import Autodesk
from Autodesk.Revit.DB import *

import sys
pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'

revisions = UnwrapElement(IN[0])
sheets = UnwrapElement(IN[1])

Output = []

for sheet, revision in zip(sheets, revisions):
    revnum = []
    for rev in revision:
        r = Autodesk.Revit.DB.ViewSheet.GetRevisionNumberOnSheet(sheet, rev.Id) 
OUT = Output

Edit: Just a couple of other thoughts…

I’ve added a bit to the beginning of the graph to Clear all the Issue values. Otherwise if someone’s put something in where it should be blank, that would remain.

You’ll likely want a way of recording the sending out of drawings at the same issue. E.G. you send tender drawings to the client, then a week later you’re asked to send the same drawings at the same revision to a contractor. Perhaps you could use the ‘Issued to’ revision parameter to log those and Dynamo could read them somehow?

1 Like

@Mark.Ackerley I have tried running the first graphic, it only works for one sheet. It reads only one list “List [0]”

Also, I tried to run the last graphic with the Python code and it shows me empty lists :frowning: I am probably doing something wrong.

Hey, no worries, could you restart Dynamo, run it again and expand the other nodes? Something’s gone wrong right up at the start, as all those nodes are empty…

I think I know where the error starts, I have tried to fix it.

When I edit the node I see this:

I uninstall the old versions and replaced the old node. It fixes “TurnIntoList” node. The Graph still shows empty and the tittle of “Document.ProjectParametersByCategory” is still grey:

When I close and re-open the Dynamo Graph, I get the same error and I have to go through the same process to make it work :frowning:

Oh right, can you use a different node entirely?

I also tried to apply default values, but I get warnings in other nodes

Try this instead…

I get this: