Transaction.Start

This widget could not be displayed.

Transaction.Start

Anonymous
Not applicable

I am trying to insert an element into the active document and I have been stuck on getting the transaction to start. Below is a screen shot of the code I am running and the current documents properties are also visible. I understand the doc current state: isReadOnlyFile is false, meaning the document is meant to be modified at some point. isModifiable and isReadOnly are properties that cannot be directly manipulated. What am I missing to get the transaction started? I thought transaction internally took care of these things(isReadOnly, isModifiable). 

0 Likes
Reply
Accepted solutions (1)
1,489 Views
6 Replies
Replies (6)

Anonymous
Not applicable
    Public Function Execute(commandData As ExternalCommandData, ByRef message As String, elements As ElementSet) As Result Implements IExternalCommand.Execute

        Dim app As Autodesk.Revit.UI.UIApplication = commandData.Application

        Dim uiDoc As UIDocument = app.ActiveUIDocument
        Dim doc As Document = uiDoc.Document
        Dim inLevel As ElementId
        Dim collector As New FilteredElementCollector(doc)
        Dim collection As ICollection(Of Element) = collector.OfClass(GetType(Level)).ToElements()
        For Each e As Element In collection
            Dim level As Level = TryCast(e, Level)

            If level IsNot Nothing Then
                If level.Name.Equals("Level 1") Then
                    inLevel = level.Id
                End If
            End If
        Next


        Using T As New Transaction(doc, "Make Stuff")

            If T.Start() = TransactionStatus.Started Then

                CreateWall(doc, inLevel)
                ' Ask the end user whether the changes are to be committed or not
                Dim taskDialog__1 As New TaskDialog("Revit")
                taskDialog__1.MainContent = "Click either [OK] to Commit, or [Cancel] to Roll back the transaction."
                Dim buttons As TaskDialogCommonButtons = TaskDialogCommonButtons.Ok Or TaskDialogCommonButtons.Cancel
                taskDialog__1.CommonButtons = buttons

                If TaskDialogResult.Ok = taskDialog__1.Show() Then
                    ' For many various reasons, a transaction may not be committed
                    ' if the changes made during the transaction do not result a valid model.
                    ' If committing a transaction fails or is canceled by the end user,
                    ' the resulting status would be RolledBack instead of Committed.
                    If TransactionStatus.Committed <> T.Commit() Then
                        TaskDialog.Show("Failure", "Transaction could not be committed")
                    End If
                Else
                    T.RollBack()
                End If

            End If
        End Using

        Return Autodesk.Revit.UI.Result.Succeeded
    End Function

Here's the code in text 😅

0 Likes

sragan
Collaborator
Collaborator

I don't see a t.start();  line, although its really hard to tell what is going on when we can only see a few lines of your code.

 

And what does it say if you hit the "details" button on that error message.

0 Likes

sragan
Collaborator
Collaborator

OK, you posted more code while I was posting.


You need a t.start() and a t.commit () line.

 

0 Likes

Anonymous
Not applicable

I can expand some fields if needed

0 Likes

RPTHOMAS108
Mentor
Mentor

That is an odd way of doing things to be honest i.e. to do something and then ask the user via task dialogue if they want to commit the transaction or not.

 

Would be better to move the user interaction i.e. taskdialog lines out of the transaction. When a task dialogue is showing the document status changes, perhaps.

 

Also what is your transaction mode attribute set to?

0 Likes

Anonymous
Not applicable
Accepted solution

I solved it, I had ommited the access modifier statements just above the class declaration. It was set to <Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.ReadOnly)> when i needed

<Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)>. Oops. Thank you all for your time and effort.

0 Likes