Added better logic to catch null references when PROMS tries to convert an older Word section to use the Docx file format. The real issue was bad data where the tree view looks like it’s a step editor section, but the PROMS editor depicts it as a Word section (with the arrow icon instead of a plus icon). When printed or approved, PROMS tries to process it as Word section but some information in that database record is null. PROMS will now handle these pieces of information that is null and record the issue in the error log and not try to convert it to a Docx, allowing to continue printing or approving.

This commit is contained in:
John Jenko 2023-11-03 09:55:48 -04:00
parent 911a86dbf1
commit 7b4b6323bf

View File

@ -164,11 +164,10 @@ namespace VEPROMS.CSLA.Library
// B2023-093 This method is called before editing or printing a Word section and will convert it the Word .DOCX format if needed.
// Note that the core logic was taken from frmSectionProperties.cs and modified to convert both .RTF and .DOC files
// The conversion to DOCX is needs to be done only one time per Word section
// B2023-109 Moved the setting of docInfo in the try block to handle if itmInfo, MyContent, MyEntry, MyDocument is null
// Also modified the error log statements in the Catch to put the ItemID and the section number and title out to the error log
public static void ConvertWordSectionToDOCX(ItemInfo itmInfo)
{
// check the Word file extension that is saved in the tblDocuments SQL database table
DocumentInfo docInfo = itmInfo.MyContent.MyEntry.MyDocument;
if (docInfo.FileExtension.ToUpper() == ".DOCX") return; // already a DOCX - no need to convert
FrmPopupStatusMessage pmsg = null;
DSOFile myfile = null;
LBWordLibrary.LBApplicationClass ap = null;
@ -180,9 +179,13 @@ namespace VEPROMS.CSLA.Library
SectionInfo msi = null;
Section sec = null;
SectionConfig cfg = null;
DocumentInfo docInfo = null;
try
{
// check the Word file extension that is saved in the tblDocuments SQL database table
docInfo = itmInfo.MyContent.MyEntry.MyDocument;
if (docInfo.FileExtension.ToUpper() == ".DOCX") return; // already a DOCX - no need to convert
// show user a status window of the Word section being converted to DOCX
// use the section number (DisplayNumber) unless the length is zero, then use the section title (DisplayText)
string statMsg = itmInfo.DisplayNumber;
@ -236,19 +239,25 @@ namespace VEPROMS.CSLA.Library
cfg.MySection.MyContent.MyEntry.MyDocument.MarkDirty();
cfg.MySection.MyContent.MyEntry.Save();
_MyLog.InfoFormat("Converted Word Section to DOCX - Old ID {0} - New ID {1} - {2}", docInfo.DocID, myDoc.DocID, statMsg); // record in log file (aka error log) that conversion was done
// delete the temporary files
// record in log file (aka error log) that conversion was done
_MyLog.InfoFormat("Converted Word Section to DOCX - Old ID {0} - New ID {1} - {2}", docInfo.DocID, myDoc.DocID, statMsg);
FileInfo orgFile = new FileInfo(orgFilename);
orgFile.Delete();// delete the old temporary Word file (.DOC or .RTF)
}
catch (Exception ex)
{
_MyLog.ErrorFormat("Error converting Word section to DOCX - {0}", ex.Message);
_MyLog.ErrorFormat("Error converting Word section to DOCX - ConvertWordSetionToDOXX: ItemID ={0} DOCID={1} LibTitle = {2}", itmInfo, docInfo.DocID, docInfo.LibTitle);
if (docInfo == null)
{
_MyLog.ErrorFormat("Error converting Word section to DOCX - ConvertWordSetionToDOXX: ItemID ={0} {1} {2}", itmInfo.ItemID, itmInfo.MyContent.Number, itmInfo.MyContent.Text);
}
else
_MyLog.ErrorFormat("Error converting Word section to DOCX - ConvertWordSetionToDOXX: ItemID ={0} {1} {2} DOCID={3} LibTitle = {4}", itmInfo.ItemID, itmInfo.MyContent.Number, itmInfo.MyContent.Text, docInfo.DocID, docInfo.LibTitle);
}
finally
{
if (pmsg != null)
if (pmsg != null)
pmsg.Close();// close the statue message
if (ap != null)
ap.Quit(); // close the Word app