/// <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); } }
/// <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); } }