Ejemplo n.º 1
0
        /// <summary>
        /// Imports the table.
        /// </summary>
        private bool ImportTable(string fileName, IBaseTable baseTable, BaseTableFormat format,
                                 int srcStartID, int srcEndID, int destStartID)
        {
            if (!File.Exists(fileName))
            {
                ScadaUiUtils.ShowError(CommonPhrases.FileNotFound);
                return(false);
            }

            try
            {
                // open source table
                IBaseTable srcTable = BaseTableFactory.GetBaseTable(baseTable);

                switch (format)
                {
                case BaseTableFormat.DAT:
                    new BaseTableAdapter {
                        FileName = fileName
                    }.Fill(srcTable);
                    break;

                case BaseTableFormat.XML:
                    srcTable.Load(fileName);
                    break;

                case BaseTableFormat.CSV:
                    using (StreamReader reader = new(fileName))
                    {
                        using CsvReader csvReader = new(reader, Locale.Culture);
                        foreach (object record in csvReader.GetRecords(srcTable.ItemType))
                        {
                            srcTable.AddObject(record);
                        }
                    }
                    break;
                }

                // copy data from source table to destination
                ExtensionUtils.NormalizeIdRange(0, ConfigDatabase.MaxID,
                                                ref srcStartID, ref srcEndID, destStartID, out int idOffset);
                int affectedRows = 0;

                foreach (object item in srcTable.EnumerateItems())
                {
                    int itemID = srcTable.GetPkValue(item);

                    if (itemID < srcStartID)
                    {
                        continue;
                    }
                    else if (itemID > srcEndID)
                    {
                        break;
                    }
                    else
                    {
                        if (idOffset != 0)
                        {
                            srcTable.SetPkValue(item, itemID + idOffset);
                        }

                        baseTable.AddObject(item);
                        affectedRows++;
                    }
                }

                if (affectedRows > 0)
                {
                    baseTable.Modified = true;
                }

                ScadaUiUtils.ShowInfo(string.Format(ExtensionPhrases.ImportTableCompleted, affectedRows));
                return(true);
            }
            catch (Exception ex)
            {
                log.HandleError(ex, ExtensionPhrases.ImportTableError);
                return(false);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Clones channels with the specified parameters.
        /// </summary>
        private bool CloneChannels(int srcStartNum, int srcEndNum, int destStartNum,
                                   int replaceObjNum, int replaceDeviceNum, bool updateFormulas)
        {
            try
            {
                BaseTable <Cnl> cnlTable     = configDatabase.CnlTable;
                int             affectedRows = 0;

                if (srcStartNum <= srcEndNum)
                {
                    // create new channels
                    ExtensionUtils.NormalizeIdRange(ConfigDatabase.MinID, ConfigDatabase.MaxID,
                                                    ref srcStartNum, ref srcEndNum, destStartNum, out int numOffset);
                    List <Cnl> cnlsToAdd = new(srcEndNum - srcStartNum + 1);

                    foreach (Cnl cnl in cnlTable.EnumerateItems())
                    {
                        if (cnl.CnlNum < srcStartNum)
                        {
                            continue;
                        }
                        else if (cnl.CnlNum > srcEndNum)
                        {
                            break;
                        }
                        else if (!cnlTable.PkExists(cnl.CnlNum + numOffset))
                        {
                            Cnl newCnl = ScadaUtils.DeepClone(cnl);
                            newCnl.CnlNum = cnl.CnlNum + numOffset;

                            if (replaceObjNum >= 0)
                            {
                                newCnl.ObjNum = replaceObjNum > 0 ? replaceObjNum : null;
                            }

                            if (replaceDeviceNum >= 0)
                            {
                                newCnl.DeviceNum = replaceDeviceNum > 0 ? replaceDeviceNum : null;
                            }

                            if (updateFormulas)
                            {
                                newCnl.InFormula  = UpdateFormula(newCnl.InFormula, numOffset);
                                newCnl.OutFormula = UpdateFormula(newCnl.OutFormula, numOffset);
                            }

                            cnlsToAdd.Add(newCnl);
                        }
                    }

                    // add created channels
                    cnlsToAdd.ForEach(cnl => cnlTable.AddItem(cnl));
                    affectedRows = cnlsToAdd.Count;
                }

                if (affectedRows > 0)
                {
                    cnlTable.Modified = true;
                }

                ScadaUiUtils.ShowInfo(string.Format(ExtensionPhrases.CloneChannelsCompleted, affectedRows));
                return(true);
            }
            catch (Exception ex)
            {
                adminContext.ErrLog.HandleError(ex, ExtensionPhrases.CloneChannelsError);
                return(false);
            }
        }