Задание 5. Вызов серверной процедуры из клиентской процедуры
Задание
Создать тестовую процедуру для вызова внешней процедуры из проекта Server. Перед запуском тестовой процедуры вы должны добавить серверные каталоги Server\src и Server\bin в PROPATH проекта Server, для этого воспользуйтесь инструкцией из раздела «Определение местоположения процедуры во время вызова».
Реализация
Создайте новый каталог с именем Test в каталоге src проекта Client:
- В Project Explorer щёлкните правой кнопкой мыши на каталоге Client\src и выберите New -> Folder.
- В поле Folder name введите Test.
- Щёлкните мышью по кнопке Finish.
В каталоге Test создайте новую ABL-процедуру с именем Test_GenPO.p
- Щёлкните правой кнопкой мыши на каталоге Test и выберите New -> ABL procedure
- В поле File name введите имя процедурного файла Test_GenPO.p
- Щёлкните мышью по кнопке Finish
Опишите переменные в секции Definitions следуя следующим требованиям:
- CustomerNumber – переменная с типом integer и начальным значением 999.
- POValue – переменная с типом character и начальным значением «PO-AA».
- POStatus – переменная с типом character.
Добавьте описания переменных сразу после оператора обработки ошибок:
/* *************************** Definitions ************************** */ block-level on error undo, throw. define variable CustomerNumber as integer no-undo initial 999. define variable POValue as character no-undo initial "PO-AA-". define variable POStatus as character no-undo.
Добавьте в основной блок оператор для вызова процедуры GenPO с указанием параметров в виде описанных вами переменных. Ещё раз обращаем внимание, чтобы AVM могла найти процедурный файл GenPO.p, вы должны в PROPATH проекта Client добавить каталог Server\src. Также вы должны использовать относительный путь Utility\GenPO, так как каталог Utility отсутствует в клиентском PROPATH. Код вызова процедуры следующий:
/* *************************** Main Block *************************** */ run Utility\GenPO(input CustomerNumber,input-output POValue, output POStatus).
Для вывода на экран полученных из процедуры GenPO() значений переменных POValue и POStatus добавьте оператор message. Данные должны быть выведены в виде alert-box.
/* *************************** Main Block *************************** */ run Utility\GenPO(input CustomerNumber,input-output POValue, output POStatus). message "New PO is: " POValue skip "Status returned is: " POStatus view-as alert-box.
В качестве последнего оператора процедуры добавьте оператор return.
Сохраните изменения и убедитесь в отсутствии ошибок компиляции.
Выполните процедуру Test_GenPO.p
- Находясь в Procedure Editor с открытым файлом Test_GenPO.p щёлкните по иконке Run
- Если будет запрошено, то выберите Select OpenEdge Application.
В случае успешного выполнения вы должны получить на экране следующее сообщение:
Если вы не изменили клиентский PROPATH, то вы получите сообщение об ошибке:
В этом случае добавьте каталог \Server\bin\ в PROPATH проекта Client и повторите выполнение процедуры Test_GenPO.p.
Вопрос: почему мы добавили в PROPATH каталог \Server\bin\, а не каталог \Server\bin\Utility\?
Вы можете ответить в комментариях ниже.
Есть вопрос? Спросите...
Для отправки комментария вам необходимо авторизоваться.
1 Комментарий
Здравствуйте!
Не совсем понятно, зачем необходимо добавлять в PROPATH значение Server\src, если без Server\bin процедура не запускается? И с точки зрения безопасности, крайне странно хранение на сервере исходников в общем доступе.
Ответ на вопрос состоит в том, что у нас в PROPATH прописан Server\bin, соответственно относительно этого каталога и происходит поиск. Если же мы пропишем в PROPATH \Server\bin\Utility\, то и в процедуре вызов должен быть без каталога Utility,
т.е. run GenPO(….