Пример #1
0
        private bool UpdateRevision(Revision revision, List <ElementId> paramIds)
        {
            bool updated = false;

            try
            {
                LinkedRevision linkedRevision = dataManager.GetLinkedRevision(revision.UniqueId, linkedProjectId);
                if (null != linkedRevision)
                {
                    foreach (ElementId paramId in paramIds)
                    {
                        string    paramName = revisionParameters[paramId];
                        Parameter param     = revision.LookupParameter(paramName);
                        if (null != param)
                        {
                            string paramValue = "";
                            switch (paramId.IntegerValue)
                            {
                            case (int)BuiltInParameter.PROJECT_REVISION_SEQUENCE_NUM:
                                paramValue = param.AsInteger().ToString();
                                updated    = SheetDataWriter.ChangeLinkedRevision(linkedRevision.Id, "LinkedRevision_Sequence", paramValue, CommandType.UPDATE);
                                break;

                            case (int)BuiltInParameter.PROJECT_REVISION_REVISION_NUM:
                                paramValue = param.AsString();
                                updated    = SheetDataWriter.ChangeLinkedRevision(linkedRevision.Id, "LinkedRevision_Number", paramValue, CommandType.UPDATE);
                                break;

                            case (int)BuiltInParameter.PROJECT_REVISION_REVISION_DESCRIPTION:
                                paramValue = param.AsString();
                                updated    = SheetDataWriter.ChangeRevisionItem(linkedRevision.RevisionId.ToString(), "Revision_Description", paramValue);
                                break;

                            case (int)BuiltInParameter.PROJECT_REVISION_REVISION_DATE:
                                paramValue = param.AsString();
                                updated    = SheetDataWriter.ChangeRevisionItem(linkedRevision.RevisionId.ToString(), "Revision_Date", paramValue);
                                break;

                            case (int)BuiltInParameter.PROJECT_REVISION_REVISION_ISSUED_TO:
                                paramValue = param.AsString();
                                updated    = SheetDataWriter.ChangeRevisionItem(linkedRevision.RevisionId.ToString(), "Revision_IssuedTo", paramValue);
                                break;

                            case (int)BuiltInParameter.PROJECT_REVISION_REVISION_ISSUED_BY:
                                paramValue = param.AsString();
                                updated    = SheetDataWriter.ChangeRevisionItem(linkedRevision.RevisionId.ToString(), "Revision_IssuedBy", paramValue);
                                break;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(updated);
        }
Пример #2
0
        public static bool ChangeLinkedRevision(LinkedRevision item, CommandType cmdType)
        {
            bool result = false;

            try
            {
                if (null != connection && null != command)
                {
                    switch (cmdType)
                    {
                    case CommandType.INSERT:
                        command.CommandText = @"INSERT INTO LinkedRevisions (LinkedRevision_Id, LinkedRevision_Sequence, LinkedRevision_Number, LinkedRevision_NumberType, LinkedRevision_Revision_Id, LinkedRevision_Project_Id, LinkedRevision_Element_Id, LinkedRevision_IsSource)" +
                                              "VALUES ('" + item.Id.ToString() + "', " + item.Sequence + ", '" + item.Number + "', '" + item.NumberType.ToString() + "', '" + item.RevisionId.ToString() + "', '" + item.LinkProject.Id.ToString() + "', '" + item.LinkedElementId + "', @isSource)";
                        command.Parameters["@isSource"].Value = item.IsSource;
                        if (command.ExecuteNonQuery() > 0)
                        {
                            result = true;
                        }
                        break;

                    case CommandType.UPDATE:
                        command.CommandText = @"UPDATE LinkedRevisions SET LinkedRevision_Sequence = " + item.Sequence + ", LinkedRevision_Number = '" + item.Number + "', " +
                                              "LinkedRevision_NumberType ='" + item.NumberType.ToString() + "', LinkedRevision_Revision_Id = '" + item.RevisionId.ToString() + "', LinkedRevision_Project_Id = '" + item.LinkProject.Id.ToString() + "', " +
                                              "LinkedRevision_Element_Id = '" + item.LinkedElementId + "', LinkedRevision_IsSource = @isSource" +
                                              " WHERE LinkedRevision_Id = '" + item.Id.ToString() + "'";
                        command.Parameters["@isSource"].Value = item.IsSource;
                        if (command.ExecuteNonQuery() > 0)
                        {
                            result = true;
                        }
                        break;

                    case CommandType.DELETE:
                        command.CommandText = "DELETE FROM LinkedRevisions WHERE LinkedRevision_Id = '" + item.Id.ToString() + "'";
                        if (command.ExecuteNonQuery() > 0)
                        {
                            result = true;
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(result);
        }
Пример #3
0
        private bool DeleteRevision(ElementId revisionId)
        {
            bool deleted = false;

            try
            {
                if (idMaps.ContainsKey(revisionId))
                {
                    string         uniqueId       = idMaps[revisionId];
                    LinkedRevision linkedRevision = dataManager.GetLinkedRevision(uniqueId, linkedProjectId);
                    if (null != linkedRevision)
                    {
                        if (linkedRevision.IsSource)
                        {
                            MessageBoxResult msgResult = MessageBox.Show("Would you like to delete the revision item in the linked database?", "Delete Revision Source Item", MessageBoxButton.YesNo, MessageBoxImage.Question);
                            if (msgResult == MessageBoxResult.Yes)
                            {
                                RevitRevision rvtRevision = new RevitRevision();
                                rvtRevision.Id = linkedRevision.RevisionId;

                                bool revisionDeleted = SheetDataWriter.ChangeRevisionItem(rvtRevision, CommandType.DELETE);
                                bool rosDeleted      = SheetDataWriter.DeleteRevisionOnSheet("RevisionsOnSheet_Revision_Id", rvtRevision.Id.ToString());
                                bool linkDeleted     = SheetDataWriter.ChangeLinkedRevision(linkedRevision, CommandType.DELETE);
                                deleted = (revisionDeleted && rosDeleted && linkDeleted) ? true : false;
                            }
                            else
                            {
                                deleted = SheetDataWriter.ChangeLinkedRevision(linkedRevision, CommandType.DELETE);
                            }
                        }
                        else
                        {
                            deleted = SheetDataWriter.ChangeLinkedRevision(linkedRevision, CommandType.DELETE);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(deleted);
        }
Пример #4
0
        private static void CheckRevisionLinks(Document doc, Guid projectId, ref RevitSheetData sheetData)
        {
            try
            {
                for (int i = 0; i < sheetData.Revisions.Count; i++)
                {
                    RevitRevision rvtRevision = sheetData.Revisions[i];

                    var linkedRevisionFound = from lrevision in sheetData.Revisions[i].LinkedRevisions where lrevision.LinkProject.Id == projectId select lrevision;
                    if (linkedRevisionFound.Count() > 0)
                    {
                        LinkedRevision linkedRevision = linkedRevisionFound.First();
                        Revision       revision       = doc.GetElement(linkedRevision.LinkedElementId) as Revision;
                        if (null != revision)
                        {
                            sheetData.Revisions[i].LinkStatus.IsLinked        = true;
                            sheetData.Revisions[i].LinkStatus.CurrentLinkedId = linkedRevision.LinkedElementId;
                            sheetData.Revisions[i].LinkStatus.LinkedElementId = revision.Id.IntegerValue;
                            sheetData.Revisions[i].LinkStatus.ToolTip         = "Linked Revision ElementId: " + revision.Id.IntegerValue;

                            if (revision.Description != rvtRevision.Description || revision.IssuedBy != rvtRevision.IssuedBy || revision.IssuedTo != rvtRevision.IssuedTo || revision.RevisionDate != rvtRevision.Date)
                            {
                                sheetData.Revisions[i].LinkStatus.Modified = true;
                                sheetData.Revisions[i].LinkStatus.ToolTip  = "Revision parameter values are different from the linked element.";
                            }
                        }
                        else
                        {
                            //item deleted
                            sheetData.Revisions[i].LinkStatus.Modified = true;
                            sheetData.Revisions[i].LinkStatus.ToolTip  = "Linked Revision Not Found.";
                            sheetData.Revisions[i].LinkedRevisions.Remove(linkedRevision);
                            //bool revisionDBUpdated = SheetDataWriter.ChangeLinkedRevision(linkedRevision, CommandType.DELETE);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to check link status of revisions.\n" + ex.Message, "Sheet Manager Updater - Check Revision Links", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }
Пример #5
0
        public static bool InsertNewRevision(Revision revision, Guid projectId, ref RevitSheetData sheetData)
        {
            bool inserted = false;

            try
            {
                RevitRevision  rvtRevision    = new RevitRevision(Guid.NewGuid(), revision.Description, revision.IssuedBy, revision.IssuedTo, revision.RevisionDate);
                NumberType     revNumType     = (NumberType)Enum.Parse(typeof(NumberType), revision.NumberType.ToString());
                LinkedRevision linkedRevision = new LinkedRevision(Guid.NewGuid(), rvtRevision.Id, revision.SequenceNumber, revision.RevisionNumber, revNumType, projectId, revision.UniqueId, true);
                rvtRevision.LinkedRevisions.Add(linkedRevision);

                RevitLinkStatus linkStatus = new RevitLinkStatus();
                linkStatus.IsLinked        = true;
                linkStatus.CurrentLinkedId = revision.UniqueId;
                linkStatus.LinkedElementId = revision.Id.IntegerValue;
                linkStatus.ToolTip         = "Linked Revision ElementId: " + revision.Id.IntegerValue;

                rvtRevision.LinkStatus = linkStatus;

                sheetData.Revisions.Add(rvtRevision);
                bool revisionDBUpdated       = SheetDataWriter.ChangeRevisionItem(rvtRevision, CommandType.INSERT);
                bool linkedRevisionDBUpdated = SheetDataWriter.ChangeLinkedRevision(linkedRevision, CommandType.INSERT);

                List <RevisionOnSheet> rosList = new List <RevisionOnSheet>();
                for (int sheetIndex = 0; sheetIndex < sheetData.Sheets.Count; sheetIndex++)
                {
                    RevisionOnSheet ros = new RevisionOnSheet(Guid.NewGuid(), sheetData.Sheets[sheetIndex].Id, rvtRevision, false);
                    sheetData.Sheets[sheetIndex].SheetRevisions.Add(rvtRevision.Id, ros);
                    rosList.Add(ros);
                }

                bool rosDBUpdated = SheetDataWriter.InsertMultipleRevisionOnSheet(rosList);
                inserted = (revisionDBUpdated && linkedRevisionDBUpdated && rosDBUpdated) ? true : false;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to insert a new revision element.\n" + ex.Message, "Insert New Revision", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            return(inserted);
        }
        public LinkedRevision GetLinkedRevision(string uniqueId, Guid projectGuid)
        {
            LinkedRevision lRevision = null;

            try
            {
                if (null != connection && null != command)
                {
                    using (SQLiteCommand cmd = new SQLiteCommand(connection))
                    {
                        cmd.CommandText = "SELECT * FROM LinkedRevisions WHERE LinkedRevision_Element_Id= '" + uniqueId + "' AND LinkedRevision_Project_Id = '" + projectGuid.ToString() + "'";
                        using (SQLiteDataReader reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                lRevision            = new LinkedRevision();
                                lRevision.Id         = reader.GetGuid(reader.GetOrdinal("LinkedRevision_Id"));
                                lRevision.RevisionId = reader.GetGuid(reader.GetOrdinal("LinkedRevision_Revision_Id"));
                                lRevision.Sequence   = reader.GetInt32(reader.GetOrdinal("LinkedRevision_Sequence"));
                                lRevision.Number     = reader.GetString(reader.GetOrdinal("LinkedRevision_Number"));
                                lRevision.NumberType = (NumberType)Enum.Parse(typeof(NumberType), reader.GetString(reader.GetOrdinal("LinkedRevision_NumberType")));

                                Guid projectId = reader.GetGuid(reader.GetOrdinal("LinkedRevision_Project_Id"));
                                lRevision.LinkProject = new LinkedProject(projectId);

                                lRevision.LinkedElementId = reader.GetString(reader.GetOrdinal("LinkedRevision_Element_Id"));
                                lRevision.IsSource        = reader.GetBoolean(reader.GetOrdinal("LinkedRevision_IsSource"));
                                break;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(lRevision);
        }
        private bool InsertRevisionToDB(Revision revision, List <Guid> sheetIds)
        {
            bool inserted = false;

            try
            {
                RevitRevision  rvtRevision    = new RevitRevision(Guid.NewGuid(), revision.Description, revision.IssuedBy, revision.IssuedTo, revision.RevisionDate);
                NumberType     revNumType     = (NumberType)Enum.Parse(typeof(NumberType), revision.NumberType.ToString());
                LinkedRevision linkedRevision = new LinkedRevision(Guid.NewGuid(), rvtRevision.Id, revision.SequenceNumber, revision.RevisionNumber, revNumType, linkedProjectId, revision.UniqueId, true);
                rvtRevision.LinkStatus.IsLinked        = true;
                rvtRevision.LinkStatus.IsSelected      = false;
                rvtRevision.LinkStatus.Modified        = false;
                rvtRevision.LinkStatus.CurrentLinkedId = revision.UniqueId;
                rvtRevision.LinkStatus.LinkedElementId = revision.Id.IntegerValue;
                rvtRevision.LinkStatus.ToolTip         = "Linked Revision ElementId: " + revision.Id.IntegerValue;
                rvtRevision.LinkedRevisions.Add(linkedRevision);
                rvtSheetData.Revisions.Add(rvtRevision);

                bool revisionDBUpdated       = SheetDataWriter.ChangeRevisionItem(rvtRevision, CommandType.INSERT);
                bool linkedRevisionDBUpdated = SheetDataWriter.ChangeLinkedRevision(linkedRevision, CommandType.INSERT);

                List <RevisionOnSheet> rosList = new List <RevisionOnSheet>();
                foreach (Guid sheetId in sheetIds)
                {
                    RevisionOnSheet ros = new RevisionOnSheet(Guid.NewGuid(), sheetId, rvtRevision, false);
                    rosList.Add(ros);
                }

                bool rosDBUpdated = SheetDataWriter.InsertMultipleRevisionOnSheet(rosList);
                inserted = (revisionDBUpdated && linkedRevisionDBUpdated && rosDBUpdated) ? true : false;
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(inserted);
        }
Пример #8
0
        private bool InsertRevision(Revision revision)
        {
            bool revisionInserted = false;

            try
            {
                RevitRevision  rvtRevision    = new RevitRevision(Guid.NewGuid(), revision.Description, revision.IssuedBy, revision.IssuedTo, revision.RevisionDate);
                NumberType     revNumType     = (NumberType)Enum.Parse(typeof(NumberType), revision.NumberType.ToString());
                LinkedRevision linkedRevision = new LinkedRevision(Guid.NewGuid(), rvtRevision.Id, revision.SequenceNumber, revision.RevisionNumber, revNumType, linkedProjectId, revision.UniqueId, true);
                rvtRevision.LinkedRevisions.Add(linkedRevision);

                bool revisionDBUpdated       = SheetDataWriter.ChangeRevisionItem(rvtRevision, CommandType.INSERT);
                bool linkedRevisionDBUpdated = SheetDataWriter.ChangeLinkedRevision(linkedRevision, CommandType.INSERT);

                List <RevisionOnSheet> rosList  = new List <RevisionOnSheet>();
                List <Guid>            sheetIds = dataManager.GetSheetIds();
                foreach (Guid sheetId in sheetIds)
                {
                    RevisionOnSheet ros = new RevisionOnSheet(Guid.NewGuid(), sheetId, rvtRevision, false);
                    rosList.Add(ros);
                }

                bool rosDBUpdated = SheetDataWriter.InsertMultipleRevisionOnSheet(rosList);
                revisionInserted = (revisionDBUpdated && linkedRevisionDBUpdated && rosDBUpdated) ? true : false;

                if (!idMaps.ContainsKey(revision.Id))
                {
                    idMaps.Add(revision.Id, revision.UniqueId);
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
            return(revisionInserted);
        }
Пример #9
0
        private static void ReadRevisions(ref RevitSheetData sheetData)
        {
            try
            {
                ObservableCollection <LinkedRevision> linkedRevisions = new ObservableCollection <LinkedRevision>();
                using (SQLiteCommand cmd = new SQLiteCommand(connection))
                {
                    cmd.CommandText = "SELECT * FROM LinkedRevisions";
                    using (SQLiteDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            LinkedRevision lRevision = new LinkedRevision();
                            lRevision.Id         = reader.GetGuid(reader.GetOrdinal("LinkedRevision_Id"));
                            lRevision.RevisionId = reader.GetGuid(reader.GetOrdinal("LinkedRevision_Revision_Id"));
                            lRevision.Sequence   = reader.GetInt32(reader.GetOrdinal("LinkedRevision_Sequence"));
                            lRevision.Number     = reader.GetString(reader.GetOrdinal("LinkedRevision_Number"));
                            lRevision.NumberType = (NumberType)Enum.Parse(typeof(NumberType), reader.GetString(reader.GetOrdinal("LinkedRevision_NumberType")));

                            Guid projectId    = reader.GetGuid(reader.GetOrdinal("LinkedRevision_Project_Id"));
                            var  projectFound = from project in sheetData.LinkedProjects where project.Id == projectId select project;
                            if (projectFound.Count() > 0)
                            {
                                LinkedProject project = projectFound.First();
                                lRevision.LinkProject = project;
                            }

                            lRevision.LinkedElementId = reader.GetString(reader.GetOrdinal("LinkedRevision_Element_Id"));
                            lRevision.IsSource        = reader.GetBoolean(reader.GetOrdinal("LinkedRevision_IsSource"));

                            linkedRevisions.Add(lRevision);
                        }
                    }
                }

                ObservableCollection <RevisionDocument> revisionDocuments = new ObservableCollection <RevisionDocument>();
                using (SQLiteCommand cmd = new SQLiteCommand(connection))
                {
                    cmd.CommandText = "SELECT * FROM RevisionDocuments";
                    using (SQLiteDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            RevisionDocument document = new RevisionDocument();
                            document.Id    = reader.GetGuid(reader.GetOrdinal("Document_Id"));
                            document.Title = reader.GetString(reader.GetOrdinal("Document_Title"));
                            document.Path  = reader.GetString(reader.GetOrdinal("Document_Path"));
                            if (reader["Document_Contents"] != System.DBNull.Value)
                            {
                                document.Contents = (byte[])reader["Document_Contents"];
                            }

                            revisionDocuments.Add(document);
                        }
                    }
                }

                sheetData.Revisions.Clear();
                using (SQLiteCommand cmd = new SQLiteCommand(connection))
                {
                    cmd.CommandText = "SELECT * FROM Revisions";
                    using (SQLiteDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            RevitRevision revision = new RevitRevision();
                            revision.Id          = reader.GetGuid(reader.GetOrdinal("Revision_Id"));
                            revision.Description = reader.GetString(reader.GetOrdinal("Revision_Description"));
                            revision.IssuedBy    = reader.GetString(reader.GetOrdinal("Revision_IssuedBy"));
                            revision.IssuedTo    = reader.GetString(reader.GetOrdinal("Revision_IssuedTo"));
                            revision.Date        = reader.GetString(reader.GetOrdinal("Revision_Date"));

                            Guid documentId    = reader.GetGuid(reader.GetOrdinal("Revision_Document_Id"));
                            var  documentFound = from document in revisionDocuments where document.Id == documentId select document;
                            if (documentFound.Count() > 0)
                            {
                                revision.Document = documentFound.First();
                            }

                            var linkedRevisionFound = from link in linkedRevisions where link.RevisionId == revision.Id select link;
                            if (linkedRevisionFound.Count() > 0)
                            {
                                revision.LinkedRevisions = new ObservableCollection <LinkedRevision>(linkedRevisionFound.ToList());
                            }
                            sheetData.Revisions.Add(revision);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
        }