B2023-093 added a Try Catch to the Convert method per suggestion from review

This commit is contained in:
John Jenko 2023-09-13 16:27:13 -04:00
parent ef3efe2380
commit 6d5d87f04d

View File

@ -169,67 +169,96 @@ namespace VEPROMS.CSLA.Library
// 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;
LBWordLibrary.LBDocumentClass doc = null;
string orgFilename = null;
string filename = null;
FileInfo fi = null;
FileStream fs = null;
SectionInfo msi = null;
Section sec = null;
SectionConfig cfg = null;
// 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;
if (statMsg.Length == 0)
statMsg = itmInfo.DisplayText;
FrmPopupStatusMessage pmsg = new FrmPopupStatusMessage("Converting This Section to Word DOCX", statMsg);
pmsg.Show();
try
{
// 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;
if (statMsg.Length == 0)
statMsg = itmInfo.DisplayText;
pmsg = new FrmPopupStatusMessage("Converting This Section to Word DOCX", statMsg);
pmsg.Show();
// Get Document as file - it's placed in the user's temporary folder (like we do when we edit a Word section)
DSOFile myfile = new DSOFile(docInfo);
// Get Document as file - it's placed in the user's temporary folder (like we do when we edit a Word section)
myfile = new DSOFile(docInfo);
// Open MSWord App
LBWordLibrary.LBApplicationClass ap = new LBWordLibrary.LBApplicationClass();
LBWordLibrary.LBDocumentClass doc = ap.Documents.Open(myfile.FullName);
// Open MSWord App
ap = new LBWordLibrary.LBApplicationClass();
doc = ap.Documents.Open(myfile.FullName);
// Older versions of PROMS saved the Word section as either a RTF or the old-style Word DOC file
// In either case, we want to convert it to a Word DOCX file
// So now create a file name with the .DOCX extension
string orgFilename = myfile.FullName.ToUpper();
string filename = orgFilename.Replace(".RTF", ".DOCX").Replace(".DOC", ".DOCX"); // we want to convert either .RTF or .DOC Word sections
// Older versions of PROMS saved the Word section as either a RTF or the old-style Word DOC file
// In either case, we want to convert it to a Word DOCX file
// So now create a file name with the .DOCX extension
orgFilename = myfile.FullName.ToUpper();
filename = orgFilename.Replace(".RTF", ".DOCX").Replace(".DOC", ".DOCX"); // we want to convert either .RTF or .DOC Word sections
// This calls Word's convert function to convert the opened .DOC or .RTF to DOCX and save it to our new DOCX file name
doc.SaveAs(filename, LBWordLibrary.LBWdSaveFormat.wdFormatXMLDocument); // Convert to Word DOCX
doc.Close();
ap.Quit(); // close the Word app
// This calls Word's convert function to convert the opened .DOC or .RTF to DOCX and save it to our new DOCX file name
doc.SaveAs(filename, LBWordLibrary.LBWdSaveFormat.wdFormatXMLDocument); // Convert to Word DOCX
doc.Close();
doc = null;
// Now read in the new .DOCX file and save the contents to the SQL database
FileInfo fi = new FileInfo(filename);
FileStream fs = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);// B2016-053
long len = fs.Length;
byte[] ByteArray = new byte[len];
int nBytesRead = fs.Read(ByteArray, 0, (int)len);
fs.Close();
// Now read in the new .DOCX file and save the contents to the SQL database
fi = new FileInfo(filename);
fs = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);// B2016-053
long len = fs.Length;
byte[] ByteArray = new byte[len];
int nBytesRead = fs.Read(ByteArray, 0, (int)len);
bool isLibraryDocument = (docInfo.LibTitle != null && docInfo.LibTitle != "");
Document myDoc = null;
if (isLibraryDocument)
myDoc = Document.Get(docInfo.DocID);
else
myDoc = Document.MakeDocument(null, ByteArray, docInfo.DocAscii, docInfo.Config, ".DOCX");
bool isLibraryDocument = (docInfo.LibTitle != null && docInfo.LibTitle != "");
Document myDoc = null;
if (isLibraryDocument)
myDoc = Document.Get(docInfo.DocID);
else
myDoc = Document.MakeDocument(null, ByteArray, docInfo.DocAscii, docInfo.Config, ".DOCX");
// update the document information in the database
SectionInfo msi = itmInfo as SectionInfo;
Section sec = msi.Get();
SectionConfig cfg = sec.SectionConfig;
if (!isLibraryDocument)
cfg.MySection.MyContent.MyEntry.MyDocument = myDoc; // resetting MyDocument will clear the library doc link - so don't do if a library document
else
cfg.MySection.MyContent.MyEntry.MyDocument.DocContent = ByteArray; // only update .DocContent for library documents
cfg.MySection.MyContent.MyEntry.MyDocument.FileExtension = ".DOCX"; // make sure the Word file extension is .DOCX
cfg.MySection.MyContent.MyEntry.MyDocument.DTS = fi.LastWriteTimeUtc;
cfg.MySection.MyContent.MyEntry.MyDocument.MarkDirty();
cfg.MySection.MyContent.MyEntry.Save();
// update the document information in the database
msi = itmInfo as SectionInfo;
sec = msi.Get();
cfg = sec.SectionConfig;
if (!isLibraryDocument)
cfg.MySection.MyContent.MyEntry.MyDocument = myDoc; // resetting MyDocument will clear the library doc link - so don't do if a library document
else
cfg.MySection.MyContent.MyEntry.MyDocument.DocContent = ByteArray; // only update .DocContent for library documents
cfg.MySection.MyContent.MyEntry.MyDocument.FileExtension = ".DOCX"; // make sure the Word file extension is .DOCX
cfg.MySection.MyContent.MyEntry.MyDocument.DTS = fi.LastWriteTimeUtc;
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
fi.Delete();// delete the temporary .DOCX file
FileInfo orgFile = new FileInfo(orgFilename);
orgFile.Delete();// delete the old temporary Word file (.DOC or .RTF)
pmsg.Close(); // close the statue message
_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
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);
}
finally
{
if (pmsg != null)
pmsg.Close();// close the statue message
if (ap != null)
ap.Quit(); // close the Word app
if (doc != null)
doc.Close();
if (fs != null)
fs.Close();
if (fi != null && fi.Exists)
fi.Delete();// delete the temporary .DOCX file
}
}
/// <summary>