Обработка исключений
Механизм, предназначенный для описания реакции программы на возможные программные и аппаратные ошибки, которые могут возникнуть при выполнении программы и приводят к невозможности или бессмысленности дальнейшей отработки программой её базового алгоритма.
Механизм обработки исключений позволяет отделить программный код обработки ошибок от смыслового кода.
В языке ISBL существует 2 конструкции для обработки исключений:
• | блок try … finally … endfinally; |
Синтаксис:
try [statements] finally [finallystatements] endfinally
Если при выполнении операторов [statements] возникает исключение, то сначала выполняются операторы блока [finallystatements], после чего генерируется исключение. Генерация исключений при использовании такой конструкции не блокируется. В рамках программного кода, помеченного ключевым словом finally, рекомендуется выполнять завершающие операции: закрытие файлов и наборов данных, уничтожение объектов, освобождение других ресурсов, задействованных в анализируемом участке кода; |
• | блок try … except … endexcept |
Синтаксис:
try [statements] except [exceptstatements] endexcept
Если при выполнении операторов [statements] возникает исключение, то выполняются операторы блока [exceptstatements]. Исключение, возникшее в блоке try, блокируется. В блоке except осуществляется пользовательская обработка исключений. |
Примечание
Слова try, finally, except, endfinally, endexcept являются ключевыми. Их нельзя использовать в качестве идентификаторов.
// Получить гиперссылку на документ. try Doc = EDocuments.GetObjectByID(DocID) HyperLink = Doc.HyperLink(hltText) finally Doc = nil endfinally
|
// Получить наименование документа из параметра "Документ" задачи Task. // Если параметр не заполнен, вывести понятное пользователю исключение.
DocumentInfo = Task.WorkflowParams.ValuByName("Документ").Value try DocumentName = DocumentInfo.Name except Raise(CreateException('ParamIsEmpty'; 'Невозможно получить имя документа, параметр задачи "Документ" пуст'; ecWarning)) endexcept
|
/* Экспортировать документы из системы Directum с преобразованием в формат PDF. EDocumentList – список документов. Элементами списка являются IEDocumentInfo. DocumentsFolder – каталог экспорта документов. */
/* Преобразовать последние версии документов в формат PDF с настройками по умолчанию. В параметре TransformationName функции FCConvertEDocumentToPDF задается способ преобразования в PDF. В качестве значения параметра указывается имя записи из справочника Настройки преобразования в PDF. Если параметр не задан, применяются настройки из записи справочника, используемой по умолчанию. */
// Преобразовать последние версии документов в PDF-формат. foreach EDocumentInfo in EDocumentList ConvertingFailed = FALSE try EDocument = EDocumentInfo.Document FCConvertEDocumentToPDF(EDocument;;TRUE) except ConvertingFailed = TRUE endexcept
Versions = EDocument.Versions VersionNumber = GetLastEDocumentVersionNum(EDocument)
if not ConvertingFailed // PDF-версии документов экспортировать в подкаталог ConvertToPDFSuccess. FileName = Format('%s\ConvertToPDFSuccess\%s.%s'; ArrayOf(DocumentsFolder; EDocument.ID; Versions.ValueByName( VersionNumber).Editor.Extension)) EDocument.Export(VersionNumber; FileName; False) else /* Последние версии документов, для которых не удалось выполнить преобразование, экспортировать в подкаталог ConvertToPDFFailed. */ FileName = Format('%s\ConvertToPDFFailed\%s.%s'; ArrayOf(DocumentsFolder; EDocument.ID; Versions.ValueByName( VersionNumber).Editor.Extension)) EDocument.Export(VersionNumber; FileName; False) endif endforeach
|
// Удалить временный файл и COM-объект.
TmpFileName = GetTempFolder() & 'NewFile.xml' RegExp = CreateObject("VBScript.RegExp") try … WriteFile(TmpFileName;; FileText) … finally DeleteFile(TmpFileName) RegExp = nil endfinally
|
© Компания Directum, 2020 | Сообщество пользователей Directum |