Обработка исключений
Механизм, предназначенный для описания реакции программы на возможные программные и аппаратные ошибки, которые могут возникнуть при выполнении программы и приводят к невозможности или бессмысленности дальнейшей отработки программой её базового алгоритма.
Механизм обработки исключений позволяет отделить программный код обработки ошибок от смыслового кода.
В языке 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 – каталог экспорта документов.
// Получить константу, содержащую адрес сервиса преобразования. DCTSConvertToPDFWSDL = GetAssignedConst("DCTSConvertToPDFWSDL")
// Преобразовать последние версии документов в PDF-формат. foreach EDocumentInfo in EDocumentList ConvertingFailed = FALSE try EDocument = EDocumentInfo.Document DCTSConvertEDocumentToPDF(DCTSConvertToPDFWSDL; 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, 2018 | Сообщество пользователей DIRECTUM |