TransactWithCentralOptions Class


Options to customize Revit behavior when accessing the central model.

Namespace: Autodesk.Revit.DB
Assembly: RevitAPI (in RevitAPI.dll) Version: 24.0.0.0 (24.0.0.0)
Since:  2014

Syntax

C#
public class TransactWithCentralOptions : IDisposable
Visual Basic
Public Class TransactWithCentralOptions _
	Implements IDisposable
Visual C++
public ref class TransactWithCentralOptions : IDisposable

Examples

CopyC#
public static void SynchWithCentralWithMessage(Document doc)
{
    // Checkout workset (for use with "keep checked out worksets" option later)
    FilteredWorksetCollector fwc = new FilteredWorksetCollector(doc);
    fwc.OfKind(WorksetKind.UserWorkset);
    Workset workset1 = fwc.First<Workset>(ws => ws.Name == "Workset1");

    WorksharingUtils.CheckoutWorksets(doc, new WorksetId[] { workset1.Id });

    // Make a change
    using (Transaction t = new Transaction(doc, "Add Level"))
    {
        t.Start();
        Level.Create(doc, 100);
        t.Commit();
    }

    // Tell user what we're doing
    TaskDialog td = new TaskDialog("Alert");
    td.MainInstruction = "Application 'Automatic element creator' has made changes and is prepared to synchronize with central.";
    td.MainContent = "This will update central with all changes currently made in the project by the application or by the user.  This operation " +
                     "may take some time depending on the number of changes made by the app and by the user.";

    td.AddCommandLink(TaskDialogCommandLinkId.CommandLink1, "Do not synchronize at this time.");
    td.AddCommandLink(TaskDialogCommandLinkId.CommandLink2, "Synchronize and relinquish all elements.");
    td.AddCommandLink(TaskDialogCommandLinkId.CommandLink3, "Synchronize but keep checked out worksets.");
    td.DefaultButton = TaskDialogResult.CommandLink1;

    TaskDialogResult result = td.Show();

    switch (result)
    {
        case TaskDialogResult.CommandLink1:
        default:
            {
                // Do not synch.  Nothing to do.
                break;
            }
        case TaskDialogResult.CommandLink2:
        case TaskDialogResult.CommandLink3:
            {
                // Prepare to synch
                // TransactWithCentralOptions has to do with the behavior related to locked or busy central models.
                // We'll use the default behavior.
                TransactWithCentralOptions twcOpts = new TransactWithCentralOptions();

                // Setup synch-with-central options (add a comment about our change)
                SynchronizeWithCentralOptions swcOpts = new SynchronizeWithCentralOptions();
                swcOpts.Comment = "Synchronized by 'Automatic element creator' with user acceptance.";

                if (result == TaskDialogResult.CommandLink3)
                {
                    // Setup relinquish options to keep user worksets checked out
                    RelinquishOptions rOptions = new RelinquishOptions(true);
                    rOptions.UserWorksets = false;
                    swcOpts.SetRelinquishOptions(rOptions);
                }

                doc.SynchronizeWithCentral(twcOpts, swcOpts);

                break;
            }
    }
}
CopyVB.NET
Public Shared Sub SynchWithCentralWithMessage(doc As Document)
    ' Checkout workset (for use with "keep checked out worksets" option later)
    Dim fwc As New FilteredWorksetCollector(doc)
    fwc.OfKind(WorksetKind.UserWorkset)
    Dim workset1 As Workset = fwc.First(Function(ws) ws.Name = "Workset1")

    WorksharingUtils.CheckoutWorksets(doc, New WorksetId() {workset1.Id})

    ' Make a change
    Using t As New Transaction(doc, "Add Level")
        t.Start()
        Level.Create(doc, 100)
        t.Commit()
    End Using

    ' Tell user what we're doing
    Dim td As New TaskDialog("Alert")
    td.MainInstruction = "Application 'Automatic element creator' has made changes and is prepared to synchronize with central."
    td.MainContent = "This will update central with all changes currently made in the project by the application or by the user.  This operation " + "may take some time depending on the number of changes made by the app and by the user."

    td.AddCommandLink(TaskDialogCommandLinkId.CommandLink1, "Do not synchronize at this time.")
    td.AddCommandLink(TaskDialogCommandLinkId.CommandLink2, "Synchronize and relinquish all elements.")
    td.AddCommandLink(TaskDialogCommandLinkId.CommandLink3, "Synchronize but keep checked out worksets.")
    td.DefaultButton = TaskDialogResult.CommandLink1

    Dim result As TaskDialogResult = td.Show()

    Select Case result
        Case TaskDialogResult.CommandLink1
            If True Then
                ' Do not synch.  Nothing to do.
                Exit Select
            End If
        Case TaskDialogResult.CommandLink2, TaskDialogResult.CommandLink3
            If True Then
                ' Prepare to synch
                ' TransactWithCentralOptions has to do with the behavior related to locked or busy central models.
                ' We'll use the default behavior.
                Dim twcOpts As New TransactWithCentralOptions()

                ' Setup synch-with-central options (add a comment about our change)
                Dim swcOpts As New SynchronizeWithCentralOptions()
                swcOpts.Comment = "Synchronized by 'Automatic element creator' with user acceptance."

                If result = TaskDialogResult.CommandLink3 Then
                    ' Setup relinquish options to keep user worksets checked out
                    Dim rOptions As New RelinquishOptions(True)
                    rOptions.UserWorksets = False
                    swcOpts.SetRelinquishOptions(rOptions)
                End If

                doc.SynchronizeWithCentral(twcOpts, swcOpts)

                Exit Select
            End If
    End Select
End Sub

Inheritance Hierarchy

SystemObject
  Autodesk.Revit.DBTransactWithCentralOptions

See Also

ArchiLabs

Stop fighting Revit automation.

Build repeatable BIM design and documentation workflows with scripts, data, and AI in one place, without wrestling brittle one-off automations.

Try ArchiLabs →