示例#1
0
        public static MDPart CreatePart(ArticleReference articleReference)
        {
            // Need to lock project
            var project = articleReference.Project;

            project.SmartLock();
            if (articleReference.ParentObject != null)
            {
                articleReference.ParentObject.SmartLock();
            }
            articleReference.SmartLock();

            // Init
            var partsDatabase = new MDPartsManagement().OpenDatabase();

            articleReference.SmartLock();
            var    partNr      = articleReference.PartNr;
            var    partVariant = articleReference.VariantNr;
            MDPart part        = partsDatabase.GetPart(partNr, partVariant);

            // Create new part
            if (part == null)
            {
                articleReference.SmartLock();
                // ReSharper disable once RedundantAssignment
                part = partsDatabase.AddPart(partNr, partVariant);
                using (new LockingUtility.SeplaLockingVector())
                {
                    new EplApplication().ShowPartSelectionDialog(ref partNr, ref partVariant);
                }
                partsDatabase = new MDPartsManagement().OpenDatabase(); // Second Call needed to get new part
                part          = partsDatabase.GetPart(partNr, partVariant);
            }

            // Load data
            var article = project.Articles
                          .FirstOrDefault(obj =>
                                          obj.PartNr.Equals(partNr) && obj.VariantNr.Equals(partVariant)
                                          );

            if (article != null)
            {
                article.SmartLock();
                article.LoadFromMasterdata();
            }

            return(part);
        }
示例#2
0
        public static MDPart CreatePart(ArticleReference articleReference)
        {
            // Need to lock project
            var project = articleReference.Project;

            project.SmartLock();
            if (articleReference.ParentObject != null)
            {
                articleReference.ParentObject.SmartLock();
            }
            articleReference.SmartLock();

            // Init
            var partsDatabase = new MDPartsManagement().OpenDatabase();

            //var articleReference = function.ArticleReferences.First();
            articleReference.SmartLock();
            var    partNr      = articleReference.PartNr;
            var    partVariant = articleReference.VariantNr;
            MDPart part        = partsDatabase.GetPart(partNr, partVariant);

            // Create new part
            if (part == null)
            {
                part = partsDatabase.AddPart(partNr, partVariant);

                // PartSelection to edit data
                new EplApplication().ShowPartSelectionDialog(ref partNr, ref partVariant);

                //partsDatabase = new MDPartsManagement().OpenDatabase(); // Second Call needed to get new part
                //part = partsDatabase.GetPart(partNr, partVariant);
            }

            // Load data
            var article = project.Articles
                          .FirstOrDefault(obj =>
                                          obj.PartNr.Equals(partNr) && obj.VariantNr.Equals(partVariant)
                                          );

            if (article != null)
            {
                article.SmartLock();
                article.LoadFromMasterdata();
            }

            return(part);
        }
示例#3
0
        public static MDPart CreateOrUpdatePart(ArticleReference articleReference, bool updateFunctionTemplate)
        {
            // Need to lock project
            var project = articleReference.Project;

            project.SmartLock();
            //if (articleReference.ParentObject != null) articleReference.ParentObject.SmartLock();
            articleReference.SmartLock();

            // Init
            var partsDatabase = new MDPartsManagement().OpenDatabase();

            //var articleReference = function.ArticleReferences.First();
            articleReference.SmartLock();
            var    partNr      = articleReference.PartNr;
            var    partVariant = articleReference.VariantNr;
            MDPart part        = partsDatabase.GetPart(partNr, partVariant);

            // Check if article is in project and remove, because the eplan action to create is not possible
            var existingArticle = project.Articles
                                  .FirstOrDefault(obj =>
                                                  obj.PartNr.Equals(partNr) && obj.VariantNr.Equals(partVariant)
                                                  );

            if (existingArticle != null)
            {
                existingArticle.SmartLock();
                existingArticle.Remove();
            }

            // Need to focus again if its lost
            if (articleReference.ParentObject is Placement placementToBringInFront)
            {
                new Edit().BringToFront(placementToBringInFront);
            }

            // Create new part
            if (part == null)
            {
                // LockingVector is needed because of locking exception from EPLAN action (no catch possible)
                using (new LockingUtility.SeplaLockingVector())
                {
                    new CommandLineInterpreter().Execute("XPameCreateType");
                }

                partsDatabase = new MDPartsManagement().OpenDatabase(); // Second Call needed to get new part
                part          = partsDatabase.GetPart(partNr, partVariant);
            }
            // Existing part
            else
            {
                // Check if pro panel, because there is no update possible
                bool isProPanel = articleReference.ParentObject is Component;

                string partNrTemp = partNr;
                if (!isProPanel)
                {
                    // Rename part
                    string suffix = "_temp";
                    partNrTemp = part.PartNr + suffix;
                    try
                    {
                        articleReference.PartNr = partNrTemp;
                        articleReference.ParentObject.SmartLock();
                        articleReference.StoreToObject();

                        // Quiet create temp part
                        var application = new EplApplication();
                        var quiteMode   = application.QuietMode;
                        application.QuietMode = EplApplication.QuietModes.ShowNoDialogs;
                        using (new LockingUtility.SeplaLockingVector())
                        {
                            new CommandLineInterpreter().Execute("XPameCreateType");
                        }
                        application.QuietMode = quiteMode;
                    }
                    finally
                    {
                        // Rename back
                        articleReference.PartNr = partNr;
                        articleReference.StoreToObject();
                    }

                    // Copy FunctionTemplate
                    if (updateFunctionTemplate)
                    {
                        partsDatabase = new MDPartsManagement().OpenDatabase(); // Second Call needed to get new part
                        MDPart partDuplicate = partsDatabase.GetPart(partNrTemp, partVariant);
                        foreach (var partFunctionTemplatePosition in part.FunctionTemplatePositions)
                        {
                            part.RemoveFunctionTemplatePosition(partFunctionTemplatePosition);
                        }
                        foreach (var partDuplicateFunctionTemplatePosition in partDuplicate.FunctionTemplatePositions)
                        {
                            part.AddFunctionTemplatePosition(partDuplicateFunctionTemplatePosition);
                        }
                        partsDatabase.RemovePart(partDuplicate);
                    }
                }


                // Check if article is in project
                var existingTempArticle = project.Articles
                                          .FirstOrDefault(obj =>
                                                          obj.PartNr.Equals(partNrTemp) && obj.VariantNr.Equals(partVariant)
                                                          );
                if (existingTempArticle != null)
                {
                    existingTempArticle.SmartLock();
                    existingTempArticle.Remove();
                }
            }

            // Load data
            var article = project.Articles
                          .FirstOrDefault(obj =>
                                          obj.PartNr.Equals(partNr) && obj.VariantNr.Equals(partVariant)
                                          );

            if (article != null)
            {
                article.SmartLock();
                article.LoadFromMasterdata();
            }

            return(part);
        }