/// <summary> /// Executes integrity check. /// </summary> public void Execute() { try { string resultFileName = Path.Combine(appData.AppDirs.LogDir, ResultFileName); using (StreamWriter writer = new StreamWriter(resultFileName, false, Encoding.UTF8)) { writer.WriteLine(AppPhrases.IntegrityCheckTitle); writer.WriteLine(new string('-', AppPhrases.IntegrityCheckTitle.Length)); bool hasErrors = false; foreach (IBaseTable baseTable in configBase.AllTables) { writer.Write(baseTable.Title); writer.Write("..."); SortedSet <int> requiredKeys = new SortedSet <int>(); List <int> lostKeys = new List <int>(); foreach (TableRelation relation in baseTable.Dependent) { if (relation.ChildTable.TryGetIndex(relation.ChildColumn, out TableIndex index)) { foreach (int indexKey in index.ItemGroups.Keys) { // if index.AllowNull then 0 means NULL, otherwise 0 is 0 if (indexKey != 0 || !index.AllowNull) { requiredKeys.Add(indexKey); } } } else { throw new ScadaException(AdminPhrases.IndexNotFound); } } foreach (int key in requiredKeys) { if (!baseTable.PkExists(key)) { lostKeys.Add(key); } } if (lostKeys.Count > 0) { hasErrors = true; writer.WriteLine(AppPhrases.TableHasErrors); writer.WriteLine(AppPhrases.LostPrimaryKeys + string.Join(", ", lostKeys)); writer.WriteLine(); } else { writer.WriteLine(AppPhrases.TableCorrect); } } writer.WriteLine(hasErrors ? AppPhrases.BaseHasErrors : AppPhrases.BaseCorrect); } AppUtils.OpenTextFile(resultFileName); } catch (Exception ex) { appData.ProcError(ex, AppPhrases.IntegrityCheckError); } }
/// <summary> /// Generates a channel map. /// </summary> public void Generate() { try { string mapFileName = Path.Combine(appData.AppDirs.LogDir, MapFileName); string indexedColumn = GroupByDevices ? "KPNum" : "ObjNum"; using (StreamWriter writer = new StreamWriter(mapFileName, false, Encoding.UTF8)) { string title = GroupByDevices ? AppPhrases.CnlMapByDevice : AppPhrases.CnlMapByObject; writer.WriteLine(title); writer.WriteLine(new string('-', title.Length)); if (configBase.InCnlTable.TryGetIndex(indexedColumn, out TableIndex index1) && configBase.CtrlCnlTable.TryGetIndex(indexedColumn, out TableIndex index2)) { if (GroupByDevices) { foreach (KP kp in configBase.KPTable.EnumerateItems()) { writer.WriteLine(string.Format(AppPhrases.DeviceCaption, kp.KPNum, kp.Name)); if (IncludeInCnls) { writer.Write(AppPhrases.InCnlsCaption); WriteCnls(writer, index1, kp.KPNum); } if (IncludeOutCnls) { writer.Write(AppPhrases.OutCnlsCaption); WriteCnls(writer, index2, kp.KPNum); } writer.WriteLine(); } writer.WriteLine(AppPhrases.EmptyDevice); } else { foreach (Obj obj in configBase.ObjTable.EnumerateItems()) { writer.WriteLine(string.Format(AppPhrases.ObjectCaption, obj.ObjNum, obj.Name)); if (IncludeInCnls) { writer.Write(AppPhrases.InCnlsCaption); WriteCnls(writer, index1, obj.ObjNum); } if (IncludeOutCnls) { writer.Write(AppPhrases.OutCnlsCaption); WriteCnls(writer, index2, obj.ObjNum); } writer.WriteLine(); } writer.WriteLine(AppPhrases.EmptyObject); } // channels with unspecified device or object if (IncludeInCnls) { writer.Write(AppPhrases.InCnlsCaption); WriteCnls(writer, index1, 0); } if (IncludeOutCnls) { writer.Write(AppPhrases.OutCnlsCaption); WriteCnls(writer, index2, 0); } } else { throw new ScadaException(AdminPhrases.IndexNotFound); } } AppUtils.OpenTextFile(mapFileName); } catch (Exception ex) { appData.ProcError(ex, AppPhrases.GenerateCnlMapError); } }