Get and Set parameters of a Linked File

It’s probably better to unload and reload the link to make it work for non-workshard files as well.

# Code by Einar Raknes, 2017
import clr
# Import List ( ICollection(ElementId) = List[ElementId]() )
clr.AddReference('System')
from System.Collections.Generic import List

# Import Revit API
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

# Import ToDSType(bool) extension method
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

# Import DocumentManager and TransactionManager
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
app = DocumentManager.Instance.CurrentUIApplication.Application

link = UnwrapElement(IN[0])
comment = IN[1]

linkPath = link.GetLinkDocument().PathName
linkType = doc.GetElement(link.GetTypeId())

TransactionManager.Instance.ForceCloseTransaction()
linkType.Unload(None)

linkDoc = app.OpenDocumentFile(linkPath)
el = FilteredElementCollector(linkDoc).OfCategory(BuiltInCategory.OST_Site).WhereElementIsNotElementType().ToElements()[0]

TransactionManager.Instance.EnsureInTransaction(linkDoc)
el.get_Parameter(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS).Set(comment);
TransactionManager.Instance.TransactionTaskDone()
TransactionManager.Instance.ForceCloseTransaction()
linkDoc.Close()
linkType.Reload()

Without linkType.Unload() I get the message mentioned above:

3 Likes