Копировать ссылку на страницу

Обработка исключений

Механизм, предназначенный для описания реакции программы на возможные программные и аппаратные ошибки, которые могут возникнуть при выполнении программы и приводят к невозможности или бессмысленности дальнейшей отработки программой её базового алгоритма.

Механизм обработки исключений позволяет отделить программный код обработки ошибок от смыслового кода.

В языке 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