Вызов внутренних процедур другими частями приложения
Вы уже знаете, как вызвать внешнюю процедуру из другой части приложения с помощью оператора run. Теперь рассмотрим, как вызываются внутренние.
Для того чтобы вызвать внутреннюю процедуру из другой части приложения используются handle-переменные. Сценарий вызова:
- Описать handle-переменную, которая будет содержать дескриптор для процедурного файла, содержащего внутреннюю процедуру.
- Создать handle для процедуры.
- Для каждой вызываемой внутренней процедуры использовать handle процедуры и имя внутренней процедуры с указанием её параметров.
- После вызова внутренней процедуры и завершения её работы удалить handle процедуры.
Когда создаётся handle для процедуры, процедурный файл загружается в AVM. После этого приложение может вызывать любую внутреннюю процедуру из этого процедурного файла. Если после вызова требуемых внутренних процедур вы больше не планируете их повторный вызов или вызов других внутренних процедур, то считается хорошей практикой удалять handle процедуры. Такой подход позволяет контролировать используемую память и не допускать её «утечки».
Синтаксис вызова внутренней процедуры из другой части приложения:
define variable <proc-handle> as handle no-undo. . . . run <proc-file> set <proc-handle>. . . . run <internal-proc> single-run in <proc-handle> ([<parameter-list>]). . . . /* Удаление дескриптора процедуры после использования */ delete procedure <proc-handle>.
proc–handle
Переменная с типом данных handle.
proc–file
Имя процедурного файла. Вы можете использовать полный или относительный путь к файлу. Относительный путь можно использовать при условии соответствующей настройки PROPATH. В противном случае процедурный файл не будет найден AVM.
internal–proc
Имя внутренней процедуры из процедурного файла.
parameter–list
Необязательный параметр для описания параметров процедуры
Пример кода из проекта Client для вызова внутренней процедуры, которая находится в проекте Server:
block-level on error undo, throw. define variable CustomerNumber as integer no-undo initial 777. define variable POValue as character no-undo initial "PO-AA-". define variable POStatus as character no-undo. define variable hProc as handle no-undo. run Utility\GenPOProcs single-run set hProc. run GenPOFromCustNum in hProc (input CustomerNumber, input-output POValue, output POStatus). message "New PO is: " POValue skip "Status returned is: " POStatus view-as alert-box. delete procedure hProc. return.