From a0be60a1b9e0aa145ac76be5adc48768318545e6 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Sat, 7 Mar 2026 22:38:18 -0500 Subject: [PATCH 1/4] B2026-025_Unicode_removed_from_RO_menu_titles_in_treeview --- .../LibSource/RODBInterface/RODBInterface.cs | 20 ++++++++++++++++--- .../LibSource/RODBInterface/VlnXml.cs | 5 ++++- PROMS/Volian.Controls.Library/StepRTB.cs | 2 +- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs b/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs index f6ba23fe..a92492ee 100644 --- a/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs +++ b/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs @@ -2186,6 +2186,20 @@ namespace RODBInterface } string xmlstr = GenerateXmlString(ro, false); + StringBuilder xmlstrTmp = new StringBuilder(); // B2026-025 prep the info field data so it will be saved correctly. + char[] chrAry = xmlstr.ToCharArray(); + foreach (int chr in chrAry) + { + if (chr > 160) + { + xmlstrTmp.Append($"\\u{(int)chr}?"); + } + else + { + xmlstrTmp.Append((char)chr); + } + } + string wraccid = null; if (ro.HasAttribute("AccPageID")) { @@ -2209,13 +2223,13 @@ namespace RODBInterface // strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, AccPageID, ModDateTime, Info ) "; strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, ModDateTime, AccPageID, Info ) "; strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.Group + ",'" + ro.GetAttribute("ParentID"); - strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstr + "');"; + strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstrTmp + "');"; } else { strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, ModDateTime, Info ) "; strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.Group + ",'" + ro.GetAttribute("ParentID"); - strInsert = strInsert + "','" + dt + "','" + xmlstr + "');"; + strInsert = strInsert + "','" + dt + "','" + xmlstrTmp + "');"; } } @@ -2223,7 +2237,7 @@ namespace RODBInterface { strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, AccPageId, ModDateTime, Info ) "; strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.RRO + ",'" + ro.GetAttribute("ParentID"); - strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstr + "');"; + strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstrTmp + "');"; } try diff --git a/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs b/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs index eb5f1c20..d2ddc83a 100644 --- a/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs +++ b/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs @@ -96,6 +96,7 @@ using System.IO; using System.Windows.Forms; using ROFields; using VlnStatus; +using System.Text.RegularExpressions; //using VlnProfiler; //don't forget to add VlnProfiler to the reference list namespace RODBInterface @@ -517,7 +518,9 @@ namespace RODBInterface strtmp.Append(" "); cnt++; } - if ((cnt + text.Length) > frmt2) // longer than the field length? + // string sym = symbcode < 256 ? ((char)symbcode).ToString() : string.Format(@"\u{0}", symbcode); + text = Regex.Replace(text, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString()); //B2026-025 Unicode removed from RO menu titles in treeview. + if ((cnt + text.Length) > frmt2) // longer than the field length? strtmp.Append(text.Substring(0,frmt2-cnt)); else strtmp.Append(text); diff --git a/PROMS/Volian.Controls.Library/StepRTB.cs b/PROMS/Volian.Controls.Library/StepRTB.cs index 0556dbba..c0661359 100644 --- a/PROMS/Volian.Controls.Library/StepRTB.cs +++ b/PROMS/Volian.Controls.Library/StepRTB.cs @@ -1404,7 +1404,7 @@ namespace Volian.Controls.Library var pattern = @"\\u([0-9]{1,4})\?"; // RO Editor add symbols C2022 - 003 foreach (Match match in Regex.Matches(linkValue, pattern, RegexOptions.IgnoreCase)) { - linkValue = linkValue.Replace(match.Value, "\\f1 " + match.Value + " \\f0"); + linkValue = linkValue.Replace(match.Value, "\\f1 " + match.Value + "\\f0"); } linkValue = linkValue.Replace(@"{", @"\{"); -- 2.49.1 From 955ffc48d384ef86ee352eba7bbc31d0ea27fab6 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 9 Mar 2026 11:41:13 -0400 Subject: [PATCH 2/4] B2026-025_Unicode_removed_from_RO_menu_titles_in_treeview --- .../LibSource/RODBInterface/RODBInterface.cs | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs b/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs index a92492ee..d68d0c14 100644 --- a/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs +++ b/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs @@ -2142,7 +2142,20 @@ namespace RODBInterface wraccid = accid; string dt = string.Format("{0:yyyyMMddHHmmss}", System.DateTime.Now); string xmlstr = GenerateXmlString(ro, false); - string strUpdate = "UPDATE " + ro.GetAttribute("Table") + " SET Info = '" + xmlstr + "'"; + StringBuilder xmlstrTmp = new StringBuilder(); // B2026-025 prep the info field data so it will be saved correctly. + char[] chrAry = xmlstr.ToCharArray(); + foreach (int chr in chrAry) + { + if (chr > 160) + { + xmlstrTmp.Append($"\\u{(int)chr}?"); + } + else + { + xmlstrTmp.Append((char)chr); + } + } + string strUpdate = "UPDATE " + ro.GetAttribute("Table") + " SET Info = '" + xmlstrTmp + "'"; if (movedRO) { VlnXmlElement parent = (VlnXmlElement)ro.ParentNode; @@ -2645,7 +2658,20 @@ namespace RODBInterface } } StatMsgWindow.StatusMessage = echild.GetAttribute("MenuTitle"); - str = "UPDATE " + echild.GetAttribute("Table") + " SET Info = '" + tinfo2 + "'"; + StringBuilder tinfo2Tmp = new StringBuilder(); // B2026-025 prep the info field data so it will be saved correctly. + char[] chrAry = tinfo2.ToCharArray(); + foreach (int chr in chrAry) + { + if (chr > 160) + { + tinfo2Tmp.Append($"\\u{(int)chr}?"); + } + else + { + tinfo2Tmp.Append((char)chr); + } + } + str = "UPDATE " + echild.GetAttribute("Table") + " SET Info = '" + tinfo2Tmp + "'"; str = str + ", ModDateTime = '" + dt + "' WHERE RecID = '" + echild.GetAttribute("RecID") + "';"; DBE.Command(str); DBE.Reader(); -- 2.49.1 From 33cc6508719e18c6bc5736d4e35c25ac66bd7afa Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Mon, 9 Mar 2026 14:26:19 -0400 Subject: [PATCH 3/4] B2026-025_Unicode_removed_from_RO_menu_titles_in_treeview --- .../LibSource/RODBInterface/RODBInterface.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs b/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs index d68d0c14..d4f5b170 100644 --- a/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs +++ b/PROMS/ReferencedObjects/LibSource/RODBInterface/RODBInterface.cs @@ -2146,7 +2146,7 @@ namespace RODBInterface char[] chrAry = xmlstr.ToCharArray(); foreach (int chr in chrAry) { - if (chr > 160) + if (chr > 166) { xmlstrTmp.Append($"\\u{(int)chr}?"); } @@ -2155,7 +2155,7 @@ namespace RODBInterface xmlstrTmp.Append((char)chr); } } - string strUpdate = "UPDATE " + ro.GetAttribute("Table") + " SET Info = '" + xmlstrTmp + "'"; + string strUpdate = "UPDATE " + ro.GetAttribute("Table") + " SET Info = '" + xmlstrTmp.ToString() + "'"; if (movedRO) { VlnXmlElement parent = (VlnXmlElement)ro.ParentNode; @@ -2203,7 +2203,7 @@ namespace RODBInterface char[] chrAry = xmlstr.ToCharArray(); foreach (int chr in chrAry) { - if (chr > 160) + if (chr > 166) { xmlstrTmp.Append($"\\u{(int)chr}?"); } @@ -2236,13 +2236,13 @@ namespace RODBInterface // strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, AccPageID, ModDateTime, Info ) "; strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, ModDateTime, AccPageID, Info ) "; strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.Group + ",'" + ro.GetAttribute("ParentID"); - strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstrTmp + "');"; + strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstrTmp.ToString() + "');"; } else { strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, ModDateTime, Info ) "; strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.Group + ",'" + ro.GetAttribute("ParentID"); - strInsert = strInsert + "','" + dt + "','" + xmlstrTmp + "');"; + strInsert = strInsert + "','" + dt + "','" + xmlstrTmp.ToString() + "');"; } } @@ -2250,7 +2250,7 @@ namespace RODBInterface { strInsert = "INSERT INTO " + parent.GetAttribute("Table") + "( RecID, RecType, ParentID, AccPageId, ModDateTime, Info ) "; strInsert = strInsert + " VALUES ('" + ro.GetAttribute("RecID") + "'," + (uint)RecordType.RRO + ",'" + ro.GetAttribute("ParentID"); - strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstrTmp + "');"; + strInsert = strInsert + "','" + wraccid + "','" + dt + "','" + xmlstrTmp.ToString() + "');"; } try @@ -2662,7 +2662,7 @@ namespace RODBInterface char[] chrAry = tinfo2.ToCharArray(); foreach (int chr in chrAry) { - if (chr > 160) + if (chr > 166) { tinfo2Tmp.Append($"\\u{(int)chr}?"); } @@ -2671,7 +2671,7 @@ namespace RODBInterface tinfo2Tmp.Append((char)chr); } } - str = "UPDATE " + echild.GetAttribute("Table") + " SET Info = '" + tinfo2Tmp + "'"; + str = "UPDATE " + echild.GetAttribute("Table") + " SET Info = '" + tinfo2Tmp.ToString() + "'"; str = str + ", ModDateTime = '" + dt + "' WHERE RecID = '" + echild.GetAttribute("RecID") + "';"; DBE.Command(str); DBE.Reader(); -- 2.49.1 From 13b03f4f890f40feb161260d2c24e794bd340083 Mon Sep 17 00:00:00 2001 From: Paul Larsen Date: Tue, 10 Mar 2026 11:50:21 -0400 Subject: [PATCH 4/4] B2026-025_Unicode_removed_from_RO_menu_titles_in_treeview --- PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs b/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs index d2ddc83a..6a0c10db 100644 --- a/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs +++ b/PROMS/ReferencedObjects/LibSource/RODBInterface/VlnXml.cs @@ -518,8 +518,7 @@ namespace RODBInterface strtmp.Append(" "); cnt++; } - // string sym = symbcode < 256 ? ((char)symbcode).ToString() : string.Format(@"\u{0}", symbcode); - text = Regex.Replace(text, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString()); //B2026-025 Unicode removed from RO menu titles in treeview. + text = Regex.Replace(text, @"\\u([0-9]{1,4})\?", m => int.TryParse(m?.Groups[1]?.Value, out int result) ? Convert.ToChar(result).ToString() : ""); //B2026-025 Unicode removed from RO menu titles in treeview. if ((cnt + text.Length) > frmt2) // longer than the field length? strtmp.Append(text.Substring(0,frmt2-cnt)); else -- 2.49.1