/// <summary> /// Formats the event according to the channel properties. /// </summary> public EventFormatted FormatEvent(Event ev) { if (ev == null) { throw new ArgumentNullException(nameof(ev)); } EventFormatted eventFormatted = new EventFormatted { Time = TimeZoneInfo.ConvertTimeFromUtc(ev.Timestamp, timeZone).ToLocalizedString() }; // object if (ev.ObjNum > 0) { eventFormatted.Obj = configDataset.ObjTable.GetItem(ev.ObjNum)?.Name ?? ""; } // device if (ev.DeviceNum > 0) { eventFormatted.Dev = configDataset.DeviceTable.GetItem(ev.DeviceNum)?.Name ?? ""; } // channel Cnl cnl = null; if (ev.CnlNum > 0) { cnl = configDataset.CnlTable.GetItem(ev.CnlNum); eventFormatted.Cnl = cnl?.Name ?? ""; } // description StringBuilder sbDescr = new StringBuilder(); CnlDataFormatted dataFormatted; if (ev.TextFormat == EventTextFormat.Command) { // Command Value, Data. Custom text sbDescr.Append(CommonPhrases.CommandDescrPrefix); dataFormatted = FormatCnlData(new CnlData(ev.CnlVal, CnlStatusID.Defined), DataTypeID.Double, cnl?.FormatID ?? 0, cnl?.UnitID ?? 0); if (ev.CnlStat > 0) { sbDescr.Append(dataFormatted.DispVal); } if (ev.Data != null && ev.Data.Length > 0) { sbDescr .Append(ev.CnlStat > 0 ? ", " : "") .Append("0x") .Append(ScadaUtils.BytesToHex(ev.Data, 0, Math.Min(DataDisplayLength, ev.Data.Length))) .Append(DataDisplayLength < ev.Data.Length ? "..." : ""); } } else { // Status, Value. Custom text dataFormatted = FormatCnlData(new CnlData(ev.CnlVal, ev.CnlStat), cnl, true); if (ev.TextFormat == EventTextFormat.Full || ev.TextFormat == EventTextFormat.AutoText) { string statusName = configDataset.CnlStatusTable.GetItem(ev.CnlStat)?.Name ?? string.Format(CommonPhrases.StatusFormat, ev.CnlStat); sbDescr.Append(statusName).Append(", ").Append(dataFormatted.DispVal); } } if (!string.IsNullOrEmpty(ev.Text) && ev.TextFormat != EventTextFormat.AutoText) { if (sbDescr.Length > 0) { sbDescr.Append(". "); } sbDescr.Append(ev.Text); } eventFormatted.Descr = sbDescr.ToString(); // severity int knownSeverity = Severity.Closest(ev.Severity); if (knownSeverity != Severity.Undefined) { switch (knownSeverity) { case Severity.Critical: eventFormatted.Sev = CommonPhrases.CriticalSeverity; break; case Severity.Major: eventFormatted.Sev = CommonPhrases.MajorSeverity; break; case Severity.Minor: eventFormatted.Sev = CommonPhrases.MinorSeverity; break; case Severity.Info: eventFormatted.Sev = CommonPhrases.InfoSeverity; break; } eventFormatted.Sev += ", " + ev.Severity; } // acknowledgement if (ev.Ack) { eventFormatted.Ack = string.Join(", ", configDataset.UserTable.GetItem(ev.AckUserID)?.Name, TimeZoneInfo.ConvertTimeFromUtc(ev.AckTimestamp, timeZone).ToLocalizedString()); } // color if (dataFormatted.Colors.Length > 0) { eventFormatted.Color = dataFormatted.Colors[0]; } // beep if (cnl != null && new EventMask(cnl.EventMask).Beep) { eventFormatted.Beep = true; } return(eventFormatted); }