Механизм, предназначенный для описания реакции программы на возможные программные и аппаратные ошибки, которые могут возникнуть при выполнении программы и приводят к невозможности или бессмысленности дальнейшей отработки программой её базового алгоритма.
Механизм обработки исключений позволяет отделить программный код обработки ошибок от смыслового кода.
В языке ISBL существует 2 конструкции для обработки исключений:
• | блок try … finally … endfinally; |
Синтаксис:
try
[statements]
finally
[finallystatements]
endfinally
Параметр |
Описание |
---|---|
statements |
Операторы, во время выполнения которых потенциально может произойти исключение |
finallystatements |
Операторы, которые выполняются независимо от того, произошло исключение в процессе выполнения блока statements или нет |
В рамках программного кода, помеченного ключевым словом finally, рекомендуется выполнять завершающие операции: закрытие файлов и наборов данных, уничтожение объектов, освобождение других ресурсов, задействованных в анализируемом участке кода;
• | блок try … except … endexcept. |
Синтаксис:
try
[statements]
except
[exceptstatements]
endexcept
Параметр |
Описание |
---|---|
statements |
Операторы, во время выполнения которых потенциально может произойти исключение |
exceptstatements |
Операторы, которые выполняются только в том случае, если в блоке statements произошло исключение |
В рамках программного кода, помеченного ключевым словом except, выполняется обработка исключений.
Примечание
Слова try, finally, except, endfinally, endexcept являются ключевыми. Их нельзя использовать в качестве идентификаторов.
Пример 1:
// Получить гиперссылку на документ.
try
Doc = EDocuments.GetObjectByID(DocID)
HyperLink = Doc.HyperLink(hltText)
finally
Doc = nil
endfinally
Пример 2:
// Получить наименование документа из параметра "Документ" задачи Task.
// Если параметр не заполнен, вывести понятное пользователю исключение.
DocumentInfo = Task.WorkflowParams.ValuByName("Документ").Value
try
DocumentName = DocumentInfo.Name
except
Raise(CreateException('ParamIsEmpty'; 'Невозможно получить имя документа, параметр задачи "Документ" пуст'; ecWarning))
endexcept
Пример 3:
// Экспортировать документы из системы 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
© 2016 Компания DIRECTUM | Сообщество пользователей DIRECTUM |