Главная страница
Навигация по странице:

  • Создание временных программ

  • программы

  • Вызов подпрограммы из другой программы с помощью внешней команды

  • Обработка синтаксических ошибок

  • Автоматическая генерация программы 283

  • Пример из реальной жизни

  • Генерация постоянных программ

  • Автоматическая генерация программы 285 При динамическом создании совершенно новой программы следует убедиться, что

  • Часть VIII Открытые интерфейсы Глава 26. Передача файлов Глава 27. Вызовы удаленных функций Глава 28. Автоматическая обработка OLE

  • Применение RFC и OLE Automation рассматривается в главах 27 и Интерфейс работы с файлом

  • Передача файлов 291 Открытие файла

  • Если к содержимому файла только дописать данные, следует использовать команду open dataset с дополнением for

  • При возникновении сбоя в процессе

  • Импорт данных из файла рассматривается в разделе "Чтение данных из файла".

  • Убедиться, что структура данных при записи и чтении файла одинакова, можно, обратив- шись к Dictionary и используя для обеих программ общие файлы Include (включения)

  • Описание архитектуры приведено в приложении А.

  • Передача файлов 295 Резюме

  • Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4. Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР. Разработкаприложений sap r3Рюдигер Кречмерна языкеВольфганг Вейс


    Скачать 28.36 Mb.
    НазваниеРазработкаприложений sap r3Рюдигер Кречмерна языкеВольфганг Вейс
    АнкорР. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4.pdf
    Дата21.12.2017
    Размер28.36 Mb.
    Формат файлаpdf
    Имя файлаР. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР.pdf
    ТипКнига
    #12433
    страница20 из 24
    1   ...   16   17   18   19   20   21   22   23   24
    Глава 25
    Автоматическая
    генерация программы
    Создание временных программ в процессе
    выполнения
    • Подпрограммы во временных программах
    • Динамическое создание постоянно
    сохраняемых программ

    282 Глава 25
    В АВАР/4 наиболее важные статические языковые конструкции имеют свои динамические вари- анты. К ним относятся операции с таблицами и вызовы подпрограмм, которые могут задаваться в про- цессе выполнения, как описано в главе 23. Поля типа Field Symbol (см. главу 24) используют механизмы,
    подобные указателям, что обеспечивает дополнительную гибкость конструкциям языка АВАР/4. Однако иногда этих динамических средств может оказаться недостаточно: например, при создании программы,
    выводящей на экран содержимое таблицы, название которой должен задавать конечный пользователь во время выполнения. Средства АВАР/4 позволяют в режиме выполнения написать исходный текст целой программы и тут же ее выполнить, т.е. пользователь может создавать программы динамически по мере их необходимости. Другими словами, разработчик может отложить на более поздний срок решение о том, как будет выглядеть конечный вариант программы. Данную технологию можно приме- нять как для построения обычных программ, сохраняемых в АВАР/4 Repository, так и для временных,
    которые, как правило, исчезают после завершения их выполнения.
    Создание временных программ
    Для создания временной программы в процессе выполнения другой программы нужно, прежде всего,
    исходный текст временной программы записать во внутренней таблице. После этого временную про- грамму необходимо сгенерировать с помощью команды generate subroutine pool. И, наконец, во времен- ной программе следует выполнить некоторую форму, используя внешнюю команду perform.
    Генерация программы рассматривается в разделе "Режим компиляции и выполнения"
    главы 1.
    Предположим, что нужно создать программу с формой, которая выполняет один единственный опе- ратор write, и записать ее в таблицу source_table:
    Б этом примере внутренняя таблица source_table содержит объявление report и определение формы display с оператором
    После этого можно сгенерировать временную программу с помощью команды:
    g e n e r a t e s u b r o u t i n e p o o l s o u r c e _ t a b l e name program name.
    Эта команда генерирует программу, сохраненную во внутренней таблице source_table, и возвращает ее имя в содержимом поля program_name. Система автоматически создает и присваивает программе имя. Это имя исчезает вместе с текстом временной программы после завершения выполнения. С по- мощью внешней команды perform разрешается также вызывать подпрограмму временной программы:
    perform d i s p l a y in program (program_name) .
    Оператор выполняет подпрограмму display в программе, имя которой записано в поле gram_name.
    Вызов подпрограммы из другой программы с помощью внешней команды perform
    рассмотрен в
    Как видно из приведенного примера, имя временной программы можно получить с помощью допол- нения name команды generate subroutine pool и затем использовать в операторе perform, однако знать содержимое этого поля разработчику вовсе не обязательно.
    Временная программа сохраняется до тех пор, пока выполняется сгенерировавшая ее программа, и,
    следовательно, позволяет вызывать подпрограммы многократно.
    Обработка синтаксических ошибок
    При создании исходного текста временной программы могут быть допущены синтаксические ошиб- ки. Временная программа не подвергается проверке при синтаксическом контроле основной програм- мы. Проверка временной программы происходит только при выполнении команды generate subroutine pool. Поэтому, если во временной программе допущена ошибка, она не может быть сгенерирована, и

    Автоматическая генерация программы 283
    ноле, содержащее имя программы, останется пустым, что приведет к ошибке выполнения во внешнем операторе perform.
    Во избежание ошибок подобного рода нужно всегда проверять код возврата на наличие син- таксических ошибок после выполнения команды generate subroutine pool. Кроме того, от Syntax Check можно получить сообщение об ошибке и строку исходного текста, которая вызвала ошибку. Пример:
    В результате после выполнения команды generate subroutine pool система возвращает ненулевое зна- чение кода возврата, так как после оператора endform нет точки. Текст сообщения об ошибке содер- жится в поле а номер строки — в поле
    В данном примере в строке 4
    появится следующий текст сообщения об ошибке: "The last statement is not complete
    ("Последний оператор не имеет завершения (отсутствует точка).".
    Пример из реальной жизни
    В главе 24 приведена программа, которая выводит на экран содержимое одной из таблиц, в част- ности, customers. Для создания программы, в которой имя таблицы вводится пользователем и стано- вится известным только на этапе выполнения, нужно сгенерировать временную программу и вызвать из нее форму. В примере этого раздела объясняется, как построить такую программу.
    Ниже приводятся основные шаги по созданию программы для вывода на экран содержимого таблицы:
    В этой части программы с помощью стандартного экрана выбора пользователь задает имя таблицы в параметре
    В форме строится исходный текст временной программы,
    которая включает подпрограмму display_table. Команда generate subroutine pool и передача управления во внешнюю подпрограмму с помощью оператора perform выполняются так же, как и в предыдущем примере.
    Ниже приводится текст программы отображения основной таблицы:

    284 Глава 25
    Имя таблицы, которое пользователь задает при выполнении передается в формальном параметре f_name. Его содержимое добавляется к внутренней таблице source_table в процессе выполне- ния, поэтому при записи оператора append параметр f_name не должен заключаться в апострофы.
    Генерация постоянных программ
    Разработчик может также в динамическом режиме создавать постоянные программы с помощью ко- манды insert report, которая переписывает исходный текст программы из внутренней таблицы в таблицу базы данных:
    В данном примере отчет zgenprog содержит только две строки: первый оператор — объявление port, и второй — команда write. Команда insert report считывает исходный текст из внутренней таблицы и записывает его в Repository
    После этого разработчик может выполнить отчет zgenprog, ис- пользуя команду submit с дополнением and return (если необходим возврат в вызывающую программу):
    and r e t u r n .
    Записанную a Repository программу можно всегда считать во внутреннюю таблицу, используя аль- тернативную команду report. Многократно генерировать одну и ту же программу можно так:
    В этом примере исходный текст zgenprog извлекается из Repository и записывается во внутреннюю таблицу source_table. Ненулевой код возврата после выполнения оператора report означает, что программа в Repository не найдена.

    Автоматическая генерация программы 285
    При динамическом создании совершенно новой программы следует убедиться, что
    программа с таким именем не существует, иначе команда insert report запишет новую
    программу "поверх" имеющейся (разрушив старый код).
    В отличие от временных программ, которые запускаются только как подпрограммы с помощью внешней команды perform, программы, сохраненные оператором insert report, выполняются как обыч- ные (однако использование команды perform тоже допустимо). Заметим, что применение временных подпрограмм ускоряет выполнение программы, так как запись в Repository исходных текстов постоян- ных программ тоже требует времени.
    Резюме
    • Временные программы создаются с помощью команды generate subroutine pool.
    • Сгенерированный исходный текст программы можно сделать постоянным, используя команду insert report.
    • Исходный текст постоянной программы считывается с помощью команды read report.
    В следующей части обсуждается интерфейс АВАР/4 с внешними приложениями.
    И
    65

    Часть VIII
    Открытые интерфейсы
    Глава 26. Передача файлов
    Глава 27. Вызовы удаленных функций
    Глава 28. Автоматическая обработка OLE

    Глава 26
    Передача файлов
    Операции открытия и закрытия файла
    Запись данных в файл
    Чтение данных из файла

    290 Глава 26
    До сих пор все данные, с которыми работали программы, хранились в виде таблиц в базе данных.
    Способы их записи в систему R/3 не рассматривались. Не обсуждались и проблемы внешней связи с сис- темой. Существует несколько способов записи и считывания данных системы. Наиболее прозрачный га них — ввод данных пользователем с помощью клавиатуры. В части V детально рассматривались возможности такого (ручного) ввода с использованием экранов и транзакций. Преимуществом этого способа является то, что каждое заданное значение легко проверяется, а пользователь в интерактивном режиме получает сообщение об ошибке и может ее исправить. Однако для ввода большого количества информации данный способ неприемлем. Кроме того, все чаще связь человек — компьютер уступает место связи ком- пьютер — компьютер, примером чего служит подключение разных компьютеров к сети (и нередко к гло- бальной). Многие компании больше не регистрируют заказы вручную, а обрабатывают документы,
    поступающие в ИС предприятия, с помощью систем электронного обмена данными.
    В АВАР/4 существуют различные открытые интерфейсы для связи с внешними системами и их ком- понентами. Наиболее простым из них является интерфейс для работы с файлами, позволяющий счи- тывать внешние данные из файла или записывать внутренние данные в файл, принадлежащий какой-нибудь файловой системе. После этого с таким файлом могут работать другие программы. По- дробному описанию работы с файлами и посвящена данная глава.
    На заре вычислительной техники файлы были единственным способом обмена данными между разными компьютерами.
    Даже сегодня этот способ удобен, если получателю срочно не требуется какая-либо информация. К примеру,
    для передачи данных можно использовать накопитель в виде дискеты или CD-ROM. Однако для оперативного обмена информацией данный способ не подходит. Наиболее эффективным решением является непосредственная связь между про- граммами, которые могут работать на разных компьютерах и даже в разных
    Средства ЛВАР/4 обеспечивают такую программную связь за счет расширения возможностей вызова функций. Этот способ называется удаленным вызовом функций
    (Remote Function Call, RFC). Две системы R/З могут напрямую обмениваться данными, не используя при этом файлы.
    Кроме того, RFC обеспечивает связь с системой R/2, установленной на мэйнфрейме, и с внешними программами.
    ствуют также специальные функции RFC для работы с автоматически исполняемыми объектами OLE (Object Linking and.
    Embedding) Automation, которые значительно упрощают вызов приложений в стандарте OLE Automation из программ,
    написанных на языке АВАР/4. В вызывающих программах обеспечивается задание свойств внешних объектов, активизация методов и, следовательно, поддерживается возможность обмена данными между внешними объектами и системой R/3.
    Применение RFC и OLE Automation рассматривается в главах 27 и
    Интерфейс работы с файлом
    При использовании файлового интерфейса, позволяющего считывать внешние данные из файла или записывать внутренние в файл, необходимо обеспечить работу с этими файлами и других программ.
    Если данные не требуются получателю срочно, то такой способ вполне приемлем. Применение файло- вого интерфейса включает в себя три основных действия:
    1. Открытие файла
    2. Запись или чтение
    3. Закрытие файла
    Вновь обратимся к примеру программы для туристического агентства. Предположим, на языке
    АВАР/4 нужно написать программу, которая переносила бы данные о клиентах из таблицы базы данных customers во внутреннюю таблицу all_customers, сортировала эту таблицу по городам и создавала по- дробный список. Для последующего применения этих данных в другом приложении их необходимо перенести в файл. Ниже приведена первая часть этой программы;
    После выполнения этих кодов все данные получены и готовы для экспорта в файл.

    Передача файлов 291
    Открытие файла
    ДЛЯ открытия файла, принадлежащего файловой системе, используется оператор open затем указывается имя файла:
    В данной части программы пользователь может задать имя файла на экране выбора. Для этого пред- усмотрен параметр filename, имеющий атрибут lower case (символы в нижнем регистре), поскольку за- писи пути доступа и имени файла в некоторых ОС чувствительны к регистру. Если файла с таким именем не существует, то команда open dataset создаст его. В противном случае (при наличии такого файла) впоследствии в него будет записана новая информация.
    Если к содержимому файла
    только дописать данные, следует использовать
    команду open dataset с дополнением for appending. Тогда новые данные будут записаны
    после существующих.
    Дополнение output команды open dataset означает, что данный файл открывается программой
    АВАР/4 для записи в него выходных данных (результатов). Синтаксис открытия файла для ввода дан- ных аналогичен —
    input (программа АВАР/4 будет считывать данные из файла). Следующее допол- нение команды open dataset — in text mode (в текстовом виде) — сообщает программе, что данные в файле будут представлены в виде строк текста. Разрешается использовать принятое по умолчанию до- полнение in binary mode (в двоичном виде). Двоичные записи применяются для неструктурированных и необработанных данных, которые невозможно интерпретировать при стандартных операциях ввода/вывода. Так, исполняемые программы всегда передаются в виде двоичных кодов.
    Вообще система R/3 позволяет разработчику не задумываться обо всех требованиях операционной системы. Однако работа с файлом означает работу с данными непосредственно в файловой системе,
    поэтому здесь надо учитывать особенности ОС. В частности, файл, открываемый оператором open dataset, должен быть доступен системе R/3. Указанное в программе имя файла содержит полный путь доступа, который должен существовать в базовой файловой системе и соответствовать соглашениям,
    принятым в данной ОС. Если файл недоступен, система возвращает ненулевой код завершения опера- тора в переменной
    Текст сообщения об ошибке передается в поле которое следует за дополнением message. Примером подобной ситуации может служить отсутствие заданного пути до- ступа или соответствующих прав доступа к файлу.
    Запись данных в файл
    На следующем этапе программы нужно переслать данные в файл, используя оператор transfer:
    В этой части программы фамилии всех пользователей, содержащиеся во внутренней таблице all_cus- tomers, пересылаются в файл, имя которого записано в переменной filename.
    При возникновении сбоя в процессе выполнении команды transfer система выводит на
    экран сообщение об ошибке исполнения. Возможно, на диске не хватает свободного
    пространства для записи файла.
    Разрешается пересылать всю запись с сохранением ее структуры, используя одну операцию. Тогда программа чтения из файла должна обеспечить такую же структуру записи. Например, данные экспор- тируются как следующая запись:

    292 Глава 26
    В этом случае запись типа customers пересылается в файл. Любая программа, которая будет читать данный файл, в качестве контейнера должна использовать запись того же типа.
    Импорт данных из файла рассматривается
    в разделе "Чтение данных из файла".
    По умолчанию передаваемые данные имеют размер соответствующего поля или структуры. Если тре- буется переслать другое количество байт, используется дополнение length команды transfer, после ко- торого указывается фактическая длина:
    Фактическое число символов в фамилии клиента определяется посредством функции strlen. В файл записывается количество символов фамилии, равное этой величине.
    Закрытие файла
    Несмотря на то что система закрывает все открытые программой файлы после ее в
    программировании считается хорошим тоном после завершения работы с файлом закрывать его в явном виде с помощью оператора close:
    c l o s e d a t a s e t
    После того как файл закрыт и открыт вновь, каждая последующая операция transfer и read dataset
    (запись или чтение) выполняется с начала файла.
    Чтение данных из файла
    До сих пор рассматривалась только операция записи данных в файл. Обратная операция — чтение содержимого файла — выполняется оператором read
    Эта часть примера будет выглядеть следу- ющим образом:
    Б данном случае файл открывается для чтения, на это указывает дополнение команды dataset —
    input. Если система возвращает код не равный нулю, файл открыть нельзя. В противном случае программа продолжает исполняться и команда dataset считывает из файла в цикле все фа- милии клиентов. Поскольку обычно неизвестно, сколько элементов данных записано в файле, во избе- жание бесконечного цикла следует запросить (и обработать) системный код возврата. При достижении

    Передача файлов 293
    конца файла код возврата становится ненулевым, и чтение прекращается. В конце программы содер- жимое внутренней таблицы выводится на экран в цикле.
    В разделе "Запись данных в файл" рассматривались приемы пересылки в файл всей записи с помо- щью одной операции. Тогда соответствующая программа чтения тоже должна считывать данные в за- пись того же типа (что и до записи в файл):
    В примере все поля строки заголовка внутренней таблицы заполняются при каждой операции чтения dataset.
    Убедиться, что структура данных при записи и чтении файла одинакова, можно, обратив-
    шись к Dictionary и используя для обеих программ общие файлы Include (включения),
    содержащие определения структур данных.
    Применение файлов в распределенной среде R/3
    Работая с файлами в программах АВАР/4, следует обратить внимание на архитектуру системы
    В небольшой системе персональный компьютер (или рабочая станция) одновременно является и сервером представления данных, и сервером приложений, В этом случае пользователь всегда работает с файловой системой ПК и вполне может обходиться рассмотренными ранее командами записи и чте- ния файла. В крупных системах сервер приложений обычно устанавливается на другом компьютере.
    Описание архитектуры
    приведено в приложении А.
    Поскольку исполнительная система АВАР/4 работает на сервере приложений, программные коман- ды transfer и read dataset будут работать с файлами файловой системы сервера приложений. Если же разработчик хочет использовать файловую систему ПК и его сервер представления данных, то следует применять специальные функции АВАР/4:

    — для сохранения внутренней таблицы в виде файла на сервере представления данных

    — для загрузки размещенного на сервере представления данных файла во внутрен- нюю таблицу
    Рассмотрим программу, работающую с локальной файловой системой ПК или рабочей станции. Ее первая часть записывает данные в файл
    ПК:

    294 Глава 26
    В данном случае имя файла задается пользователем на экране выбора. Чтение данных из таблицы базы customers внутреннюю таблицу all_customers происходит так же, как и в предыдущих примерах.
    После этого вызывается функция для которой в качестве параметра применяется имя файла, а в качестве источника данных для чтения — внутренняя таблица
    Кроме того, при вызове функции описывается набор исключений. Первое явно указывает на обработку ошибки при от- крытии файла а другие включают возможные ситуации последующей обработки, ис- пользуя общее исключение others. Обратите внимание, что функция содержит все функции управления для работы с
    Обратная операция чтение из файла, размещенного на ПК или рабочей станции, исполняется согласно следующей части программы:
    Данные считываются с помощью функции во внутреннюю таблицу и
    затем выводятся на экран в завершающем цикле.

    Передача файлов 295
    Резюме
    • Файл открывается с помощью оператора open dataset. Если системный код возврата указывает на ошибку, на экран выводится сообщение об ошибке.
    • Запись данных в файл обеспечивает команда transfer.
    • Оператор close dataset завершает пересылку данных в файл.
    • Для чтения данных применяется команда read dataset. Конец файла определяется ненулевым зна- чением системного кода возврата.
    • Если сервер представления данных и сервер приложений установлены на разных компьютерах,
    для обмена данными через файл следует использовать специальные функции ABAP/4 Development
    Workbench.
    В следующей главе будет показано, как установить непосредственную связь между программами с помощью механизма удаленного вызова функций.

    1   ...   16   17   18   19   20   21   22   23   24


    написать администратору сайта