Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР4. Р. Кречмер, В. Вейс - Разработка приложений SAP R3 на языке АВАР. Разработкаприложений sap r3Рюдигер Кречмерна языкеВольфганг Вейс
Скачать 28.36 Mb.
|
Глава 20 Сообщения, стандартизованные диалоговые окна и исключения • Использование различных типов сообщений об ошибках • Вывод на экран стандартных диалоговых окон • Исключения функционального модуля 236 Глава 20 Диалоговая программа должна запрашивать повторный ввод данных, если при первой попытке поль- зователь вводит некорректные данные. Сообщение об успешной операции появляется на экране, если в базе данных сделаны изменения. Этот простой диалог с пользователем легко реализуется с помощью ко- манды message, которая сопровождается типом сообщения и текстом на естественном языке. Если диалог требует альтернативных действий пользователя (например, ответа Yes, No или Cancel), можно использовать некоторые стандартные функции АВАР/4 Development Workbench, обсуждаемые в этой главе. В приложение, как правило, входит несколько программ, следовательно, может возникнуть следую- щая ситуация: одна и та же функция, вызываемая из нескольких программ, может обнаружить ошибки, причем каждая вызывающая программа должна реагировать на них по-разному. Например, в одной про- грамме в случае ошибки пользователю придется вводить новые данные, а другая программа должна быть завершена, так как исправить ошибку невозможно. Поэтому вызываемая программа должна предо- ставить подробную информацию о типе ошибки, не приводя к завершению вызывающей программы. Механизм исключений, применяемый в функциях языка АВАР/4, позволяет выполнить эти требования. Несколько технических приемов, описанных в этой главе, можно использовать для обработки исклю- чений, явно не заданных в вызывающей программе. Это облегчает связь с функциями АВАР/4, когда в течение "жизненного цикла" функции добавляются новые исключения. Работа с сообщениями Этот раздел описывает использование в программе сообщений об ошибках и редактирование их текста. Существует несколько типов сообщений, по-разному влияющих на выполнение программы после того, как они выводятся на экран. Вывод сообщения из программы Применение команды message позволяет предусмотреть вывод сообщения об ошибке при вводе поль- зователем неправильных или недопустимых данных: message e001. Данный оператор останавливает выполнение программы и посылает конечному пользователю сооб- щение об ошибке. В префиксе к номеру сообщения кодируется его тип, например, "е" означает сооб- щение об ошибке. Текст сообщения можно задать или вывести на экран, дважды щелкнув мышью на номере ошибки в исходном тексте на экране редактора Editor. В результате раскрывается экран Display Messages (отображение сообщения) (см. рис. 20.1), в котором можно отредактировать текст сообщения, дважды щелкнув мышью на соответствующей строке. Тексты выводятся на экран на разных языках, перевод осуществляется без изменения исходного текста программы. Рис. 20.1 Экран отображения и сопровождения текста сообщения Сообщения, стандартизованные диалоговые окна и исключения 237 Кроме номера сообщения, текст определяется идентификатором, который обычно задается после дополнения message-id в декларации program: program message-id Идентификатор и тип сообщения устанавливать динамически в команде message: data: l i k e v a l u e l i k e v a l u e ' E' , l i k e sy-msgno v a l u e ' 0 0 1 ' . message id msgid t y p e msgty number msgno. Используя символ в текст можно включать сообщения, состоящие максимум из четырех пере- менных. Допускается также задавать значения текстовых переменных с помощью дополнения with опе- ратора сообщения message: message w i t h customers-паше. Сообщения на экране ввода данных Передача сообщений об ошибках может выполняться по событию process after input (PAI). При обработке такого сообщения управление возвращается к текущему экрану, и система выводит диалого- вое окно с текстом сообщения. После подтверждения получения сообщения поля текущего модуля снова готовы для повторного ввода. Например, можно объединить вместе несколько полей с помощью кон- струкции что позволит обрабатывать неправильный ввод для этих полей как единое целое. В примере программы из главы 19 присутствует модуль типа PAI с сообщением об ошибке: module when * Check f o r a v a l i d c o n n e c t i o n perform changing i f = message " F l i g h t c o n n e c t i o n n o t a v a i l a b l e e l s e . s e t s c r e e n " Next s c r e e n l e a v e При возникновении ошибки текст сообщения появляется на экране в небольшом диалоговом окне, как показано на рис. 20.2. В данном примере это может произойти в том случае, если нет авиарейса для заданного конечного пункта, даты и авиакомпании. Рис. 20.2 Диалоговое окно с сообщением об ошибке, которое появляется на экране в случае неправильного ввода данных 238 Глава 20 Щелкнув мышью в диалоговом окне на экранной клавише Confirm (подтвердить), пользователь воз- вращается к исходному экрану, все поля которого готовы к повторному вводу. Клавиша Help диалого- вого окна сообщения об ошибке позволяет получить подробную информацию об ошибочной ситуации. Разработчик может самостоятельно создавать справочную информацию об ошибке с помощью кнопки Long text (длинный текст) на экране Message Display (отображение сообщения). Различные типы сообщений и реакция программы АВАР/4 поддерживает следующие типы сообщений, приводимые в порядке значимости (т.е. в зави- симости от уровня прерывания текущей операции в системе): Тип сообщения Значение а ненормальное завершение е ошибка w предупреждение i информация s успешное завершение При завершении" выполнение текущей программы прекращается, и на экран выводится текст сообщения. Конечный пользователь не может исправить данные и должен выбрать новую функ- цию меню для начала другого диалога. Сообщение типа "ошибка" прерывает выполнение модуля выводит на экран диалоговое окно и раз- решает пользователю задать новые данные. После повторного ввода снова обрабатывается событие Сообщение типа аналогично сообщению типа "ошибка": выполнение текущего моду- ля PAI прерывается, и на экран выводится диалоговое окно. Оно содержит текст сообщения и две кнопки, сделать выбор: либо изменить введенные данные (кнопка New Entry), либо продолжить выполнение (кнопка Continue) прерванного модуля с оператора, следующего в программе сразу после оператора message (см. рис. 20.3). Сообщение типа "информация" также отображает текст в диалоговом окне. Однако это сообщение не прерывает выполнение программы, причем работа продолжается с оператора, расположенного сразу за оператором message. Наконец, сообщение типа "успешное завершение" является аналогом информационного сообщения. От- личие заключается только в том, что текст сообщения выводится на следующем экране. Приведенные выше типы сообщений используются прежде всего при разработке диалоговых про- грамм, имеющих экраны ввода данных. Кроме того, их можно с успехом применять при проверке ввода данных на экране выбора критериев отбора информации для отчета, т.е. в комбинации с событием at (см. главу 16). Если при выполнении отчета передавать на экран сообщение об ошибке, используя для этого события start of selection, get table и end of selection, то система всегда будет за- вершать выполнение отчета после вывода сообщения, причем сообщение типа "е" будет преобразовано в сообщение типа "а", так как в данном случае экран для коррекции вводимых данных не предусмотрен. Рис. 20.3 Пример диалогового окна "предупреждения" с экранными клавишами для выбора варианта продолжения программы Сообщения, стандартизованные диалоговые окна и исключения 239 Стандартизованные диалоговые окна Элементарные диалоговые окна, предназначенные для вывода предупреждений и сообщений об ошибках, неудобно использовать для организации сложных диалогов конечного пользователя с програм- мой АВАР/4. Средства Development Workbench поддерживают целый ряд функций для разработки стан- дартного диалога пользователя. Например, существует несколько функций для создания различных диалоговых окон: • Подтверждение в ответ на запрос программы • Выбор одной из альтернатив • Вывод значений данных • Отображение текста на экране В качестве примера диалоговой функции, относящейся к первой категории, можно использовать функцию С ее помощью строится диалоговое окно, в котором пользователю задается вопрос, хочет ли он выполнить следующий шаг обработки с возможной потерей данных (см. рис. 20.4). Для диалогового окна можно задать заголовок и текст вопроса. Функция выводит на экран текст предупреждения ("Данные могут быть потеряны"), а также пользователю ва- рианты ответов (Yes, No или Cancel). По умолчанию в интерфейсе установлен ответ No, эту установку изменить нельзя. Ответ пользователя No или Cancel) передается в параметре answer. Пример вы- зова функции: c a l l f u n c t i o n e x p o r t i n g t i t l e = ' customer l i s t ' = ' R e a l l y i m p o r t i n g answer • В качестве примера диалоговой функции второй категории можно привести функцию которая создает диалоговое окно, предлагающее выбрать один из двух способов обработки или отказаться от нее. Описание действий пользователя, вопрос и возможные альтернативы передаются в функцию как параметры. Кроме того, в возвращаемом параметре содержится ответ поль- зователя (альтернатива 1, альтернатива 2, отказ). К третьей категории можно отнести функции и которые выводят содержимое таблиц базы данных. Параметр функции задает вывод на экран в стандартном списке или с использованием заданного формата. В этих Рис. 20.4 Пример диалогового окна предупреждения с двумя вариантами ответа 240 Глава 20 окнах пользователь может выбирать поля, задавать порядок последовательность столбцов и заголовки. Функция отображает данные таблиц, структура кото- рых известна в п р о г р а м м е . В п р о т и в н о м случае данные выводятся на экран функцией Полное описание функций стандартизованного диалога можно получить в подсистеме оперативной справки (Online Help) системы с помощью следующей цепочки элементов меню Help R/3 Library (библиотека R/3) > Basis Components (основные компоненты) > АВАР/4 Development Workbench > Extended Applications Function Library (расширенная библиотека функций приложения) > Standardized Dialogs (стандартизованные диалоги). Исключения при вычислении функций ЕСЛИ В функции, вызываемой из нескольких программ, обнаруживается ошибка, то управление долж- но быть возвращено в вызывающую программу. Способ обработки ошибки различен для каждой про- граммы. Для обработки ошибок рекомендуется использовать исключения функций языка АВАР/4, определяемые в интерфейсе функции (см. главу 10). Передача управления на исключение осуществля- ется оператором raise или дополнением raising оператора message. Например, исключение может быть задано в функции такими способами: 1. raise not: found. 2. message raising В обоих случаях при обработке исключения в программе функция сразу завершается, а управление немедленно передается в программу, вызвавшую данную функцию, причем экспортные параметры функ- ции не возвращаются. Приведенные выше способы различаются только тогда, когда вызывающая про- грамма не обрабатывает исключение. В первом случае (оператор raise в функции) возникает системная ошибка выполнения, и программа завершается. Во втором случае (конструкция raising в операторе mes- sage) пользователь получит заданный в операторе message текст сообщения. На практике новые исключения часто добавляются во время "жизненного цикла" функции, и их бывает сложно учесть во всех вызывающих программах. Применение в вызывающих программах стан- дартного исключения others (другие) обеспечивает обработку исключений в непредусмотренных ситуа- циях. Однако, если функция везде использует исключения в форме message с дополнением raising, то нет необходимости обрабатывать исключения others. Исключения могут также инициироваться подпрограммами (формами), принадлежащими функциям. В этом случае все формы удаляются из стека, функция завершается, а вызывающая программа должна обработать исключение. Резюме • Сообщение выводится на экран с помощью команды message, за которой указываются идентифи- катор сообщения, его тип и номер. Идентификатор сообщения может быть также задан в опера- торах объявления program и report. • Существуют различные типы сообщений: "ненормальное завершение", "ошибка", "предупреждение", "информация" и "успешное завершение". • Номер сообщения определяет текст, который может выводиться на экран на разных естественных языках, причем перевод сообщения осуществляется без изменения исходного текста программы. • Предусмотрено несколько функций для поддержки стандартизованного диалога пользователя, на- пример диалоговые окна для подтверждений или для выбора одной из альтернатив. • Оператор raise и дополнение raising оператора message обеспечивают обработку исключений. Если вызывающая программа не обрабатывает исключения, то система по-разному реагирует на данные синтаксические конструкции исключений. В следующей главе вводится понятие транзакции в системе R/3, а также описывается внесение изменений в базу с поддержкой непротиворечивости данных. Глава 21 Изменение объектов в базе данных с помощью транзакций • Концепция транзакции • Блокировка объектов при выполнении транзакции • Работа с заданиями по изменению данных 242 Глава 21 В языке АВАР/4 для обеспечения непротиворечивости данных в сложных приложениях принята концепция сложной транзакции, не зависящая от используемой СУБД. Например, если в туристическом агентстве бронируются места на авиарейс, то должна быть уверенность в том, что клиент получит в день отправления посадочный талон. С другой стороны, если все места забронированы, сотрудник ту- ристического агентства должен сообщить клиенту, на какой рейс он может заказать билет. Очень важно, чтобы другие агентства, занимающиеся бронированием мест на тот же самый рейс, имели пра- вильную информацию о числе свободных мест на момент заказа. Это позволит избежать бронирования одних и тех же мест различными агентствами. Под транзакцией понимается диалоговая программа (использующая один или более экранов), кото- рая изменяет объекты в базе, сохраняя при этом непротиворечивость данных. Программная логика транзакции может быть разделена на один или несколько логических рабочих блоков (Logical Units of Work, LUW). При возникновении ошибки все изменения в пределах текущего LUW отменяются, в ре- зультате содержимое таблиц базы данных всегда остается непротиворечивым. Механизмы блокировки транзакций гарантируют, что в каждый момент времени только один пользователь может изменять некоторый объект данных. Блокировки устанавливаются или отменяются с помощью стандартных функ- ций, которые АВАР/4 Development Workbench создает автоматически. Срок действия блокировки огра- ничивается одним LUW. С помощью АВАР/4 Development Workbench можно создавать транзакции, работающие в распреде- ленных средах клиент/сервер. Часто самым "узким" местом в системе является сервер базы данных. Update Task — специальное задание по изменению данных — позволяет минимизировать время ответа для всех диалоговых программ и гарантирует непротиворечивость данных. Концепция транзакции и использование рабочих логических блоков (LUW) — подход, хорошо известный среди разработчиков и пользователей. Подчеркнем, что система R/3 поддерживает различные СУБД и имеет трехуровневую архитектуру, поэтому в АВАР/4 реализованы специальный механизм блокировки и концепция LUW, отличная от общепринятой. Логический рабочий блок (LUW) В примере программы бронирования мест (см. главу 19) предприняты некоторые меры, гарантирую- щие целостность данных. Например, проверка таблиц не позволяет забронировать места на несущест- вующие авиарейсы. Кроме того, отдельная подпрограмма проверяет наличие достаточного количества свободных мест. Если два (или более) туристических агентства одновременно используют эту программу бронирования, то возможна ситуация бронирования сверхнормативного числа мест. Во избежание та- кого нарушения непротиворечивости данных можно использовать механизмы блокировки АВАР/4 Development Workbench. Механизм блокировки системы R/3 Для блокировки объекта можно вызвать стандартную функцию, создающую специальную запись (так называемый элемент блокировки) в глобальной системной таблице. Блокировка снимается при вызове другой стандартной функции или при инициализации системного разрешения на снятие блокировки по концу транзакции. Если пользователь пытается блокировать уже заблокированный объект, то функция блокировки возвращает исключение. Фактически, механизм блокировки определяет LUW. Начало LUW соответствует созданию записи блокировки (элемента блокировки) в системной таблице, а конец — сня- тию блокировки, Механизм блокировки R/3 распространяется на все поддерживаемые системой базы данных. Разра- ботчик может свободно определять блокируемые объекты, не заботясь об организации данных в таб- лицах базы. В отличие от R/3, многие СУБД блокируют весь набор записей таблицы, хотя достаточно заблокировать отдельную запись. Следствием этого являются ситуации, когда конечный пользователь не может получить доступ к объекту базы, так как должен ждать завершения блокировки. Иногда это приводит к тупиковым взаимным блокировкам. Данные проблемы разрешаются путем блокирования не- большого объема данных с помощью механизма блокировки R/3. Система R/3 рассчитана на многопользовательские приложения (до нескольких тысяч пользовате- лей), поэтому она должна уметь распределять общие ресурсы между ними. Очевидно, что к таким ре- сурсам относится и база данных. Множество реальных пользователей R/3 должно отображаться на единственного "пользователя" базы данных, а фактическое обновление данных должно происходить каж- дый раз при передаче экрана одному из пользователей R/3. Другими словами, LUW системы R/3 со- стоит из одного или нескольких LUW базы данных. Для того чтобы гарантировать непротиворечивость данных приложения, зсе изменения в базе должны выполняться в пределах одного LUW базы данных. Для этого допускается использование одного из двух способов организации выполнения транзакции: Изменение объектов в базе данных с помощью транзакций 243 1. Все данные транзакции записываются во внутренних таблицах, и изменения а базе осуществля- ются по событию PAI после последнего экрана транзакции. Разработчик может воспользоваться системными средствами Update Tasks, которые позволяют собрать все данные и изменения {см. ниже) для последующего внесения а базу. Наиболее простой способ определения блокируемых объектов в рамках механизма блоки- ровки требует, чтобы все программы, изменяющие конкретный объект, использовали один и тот же блокируемый объект. Создание блокируемых объектов ДЛЯ создания блокируемого объекта на экране Object Browser выбрать Dictionary Objects и на следующем экране в поле ввода Lock Object задать имя нового объекта. Введите краткое описание и имя таблицы базы данных, как показано па рис. 21.1. В общем случае блокируемый может иметь ссылки на несколько таблиц базы данных. При этом для каждой такой таблицы можно определить поля, аргументами блокировки (см. рис. 21.2). Рис. 21.1 Создание блокируемого объекта Рис. 21.2 Задание аргументов блокировки 244 Глава 21 Для инициализации блокируемого объекта следует нажать кнопку Generate (создать). В процессе вы- полнения система автоматически назначает функции установки и снятия блокировки объекта. Создание элемента блокировки Функции, которые система R/3 связывает с инициализированным блокируемым объектом, называ- ются Enqueue (поставить в очередь) и Dequeue (удалить из очереди). Их внутренними именами являются и , за которыми следует имя блокируемого объекта. Блокировки объекта можно установить, например, так: Исключение обрабатывается функцией Enqueue в том случае, если элемент блокировки уже существует. Другие исключения указывают на сбой в работе системы. В обоих ситуациях программа выдает пользователю сообщение и прекращает свою работу. Механизм блокировки поддерживается для элементов, принадлежащих различным уровням структуризации объектов данных. Если в интерфейсе функции Enqueue указаны все ключевые поля таблицы, то блокируется одна запись. Если же не указано ни одного параметра-поля, блокируется вся таблица целиком. При определении в Enqueue правильных подмножеств табличных полей обеспечива- ются некоторые промежуточные варианты блокировки. Составные объекты прикладных программ можно заблокировать с помощью одной операции, если блокируемый объект создан из нескольких таб- лиц базы данных. После того как для всех объектов базы данных установлены блокировки, можно вносить изменения, например можно вставить новую запись в таблицу. Все изменения, внесенные в базу данных в текущем становятся постоянными после выполнения команды commit work (зафиксировать). При возник- новении ошибки рекомендуется использовать команду rollback work (отменить), отменяющую все изме- нения, внесенные в базу данных в текущем LUW. Удаление элемента блокировки Удаление элемента блокировки выполняется при вызове функции Dequeue. В приведенном выше при- мере функция отменяет блокировку, сделанную функцией Кроме того, завершение транзакции прекращает выполнение и отменяет все блокировки. Если при этом используется служба Update Task (см. раздел функций Update Task"), то ко- манда work выполняется не сразу, и немедленной фиксации изменений в базе не происходит. Эта инструкция передается асинхронному процессу, который обрабатывает все изменения данных и снимает все блокировки. Использование транзакций Транзакция — это диалоговая программа, которая изменяет объекты базы данных, не нарушая их непротиворечивость. Транзакция может использовать один или несколько экранов. В системе любая транзакция имеет имя и должна быть зарегистрирована в среде Development Workbench. Создание и вызов транзакции Для создания транзакции необходимо на экране Object Browser ввести ее имя в поле ввода объекта типа Transaction и в следующем диалоговом окне указать ее тип как Dialog Transaction (диалоговая транзакция) (см. рис. 21.3). Появится дополнительное диалоговое окно, в котором нужно ввести крат- Изменение объектов в базе данных с помощью транзакций 245 Рис. 21.3 Определение транзакции кий поясняющий текст, имя программы и номер начального экрана, отображаемого при вызове данной транзакции. Кроме диалогового типа, средства Development Workbench поддерживают и другие типы транзакций. Например, транзакция отчета (Report Transaction) осуществляет запуск отчетов, которые используют стандартный экран выбора и создают список данных (см. главы 15-18). Транзакция вариантов (Variant Transaction) выводит на экран значения полей вариантов транзакции, используемых для одного или нескольких экранов. Аналогично вариантам отчета, варианты транзакций позволяют сделать экранные поля только отображаемыми и даже отменить их (закрыть доступ). Использование этой технологии обеспечивает внесение необходимых требований пользователя без изменения исходных текстов. Для вызова транзакции из диалогового экрана следует создать функцию меню типа Т. используя экран сопровождения статусов интерфейса. Например, код транзакции SAAB (см. главу 19) добавляется к элементам меню (см. рис. 21.4). Рис. 21.4 Добавление транзакции к элементам меню 246 Глава 21 В данном примере транзакция SAAB появляется а меню Flight connections. При вызван- ной транзакции система передает управление в вызывающую программу. На программном уровне транзакция может запускаться одним из следующих 1. Командой call transaction (вызвать транзакцию) 2. Командой leave to transaction (завершить и перейти к транзакции) 3. Стандартизованной функцией с вариантом в качестве параметра При использовании команды call transaction отображается экран транзакции, при этом поль- зователь может вводить значения и продолжать с меню этой транзакции. Например, транзакция SAAB (см. главу 19) вызывается так: c a l l t r a n s a c t i o n По завершении работы с вызванной транзакцией система возвращает управление в вызывающую программу. В отличие от этого, использование для запуска транзакции команды leave to transaction при- водит к немедленному завершению вызывающей транзакции без возможности вернуться к ней. Система удаляет все данные о ней из стека вызовов транзакций. Применение дополнения and skip first screen (и пропустить первый экран) в командах call transaction и leave to transaction дает возможность отменить вызов начального экрана транзакции. Такой прием рекомендуется использовать, если все значения начального экрана уже заданы вызывающей программой. Способ задания экранных полей рассматривается в главе 22. Варианты в транзакциях Для вызова т р а н з а к ц и и , использующей варианты, следует задать функцию Начиная с версии Release доступ к работе с вариантами под- держивается из любого экрана системы через меню System. Прежде всего необходимо определить транзакцию и вариант {см. рис. 21.5). При нажатии на экранную кнопку Create появляется экран (см. рис. на котором можно ввести краткое описание варианта и сохранить его, щелкнув мышью на кнопке Save. Кнопка Screen Entries экрана атрибутов варианта транзакции обеспечивает доступ к выбранной тран- закции и ввод необходимых значений. После вывода каждого экрана транзакции появляется диалоговое окно для ввода значений, которые следует использовать в данном варианте. Разрешается сделать неко- торые поля экрана невидимыми или закрыть доступ ко всему экрану. Нажатие кнопки Exit and Save Рис. 21.5 Создание варианта транзакции Изменение объектов в базе данных с помощью транзакций 247 (завершить и сохранить) приводит к прекращению выполнения транзакции, начиная с текущего экрана, и дает возможность сохранить значения полей варианта транзакции на другом, дополнительном, экране. 21.6 Атрибуты варианта транзакции Задания по изменению данных Задания по изменению данных (Update Task) устанавливают службу асинхронною изменения базы данных, благодаря чему достигается минимизация времени отклика во всех диалогах пользователя и гарантируется непротиворечивость данных. Использование Update упрощает программирование и позволяет разработчику не формировать внутренние таблицы из вводимых данных и не изыскивать возможность для успешного завершения команды commit В частности, это избавляет от необхо- димости прогнозировать шаги выполнения программы при многократном вызове функций из разных контекстов. Работа с функциями изменения данных При использовании Update Task программируется целый набор функций, выполняющих операции по изменению базы данных внутри транзакции, например insert или delete. Полобные функции (назы- ваемые функциями модификации) следует отнести к категории Update With Start Immediately (обновить сразу при запуске) (см. экран администрирования функций). Рассмотрим программу бронирования авиа- билетов (см. главу 19), использующую функции модификации: i n s e r t bookings u p d a t e a c t f l i from Эта функция модификации может вызываться с помощью дополнения in update task команды call function: c a l l f u n c t i o n i n u p d a t e t a s k e x p o r t i n g i_bookinga = bookings i _ a c t f l i • a c t f l i . * o t h e r s t a t e m e n t s may follow (далее могут следовать другие операторы) 248 Глава 21 В данном примере добавление in update task приведет к тому, что функция не будет вызываться немедленно. Напротив, вызов и параметры интерфейса будут переданы в промежуточную системную область. При использовании этого дополнения команда commit work не выполняется сразу, а передает инструкции "фиксировать изменения" асинхронному заданию, которое немедленно извлекает данные из промежуточной системной области, выполняет функцию модификации и освобождает все заблокиро- ванные объекты вызванной диалоговой транзакции. Если диалоговая программа вызывает несколько функций модификации, то они группируются в последовательность для модификации (Update Order). Все функции, объединенные в этой последовательности, выполняются после оператора commit Блокировки снимаются по завершении выполнения Update Order. При возникновении ошибки выпол- нения она записывается а log-файл, а на экран выводится диалоговое окно, информирующее о том, что пользователю доставлено срочное почтовое сообщение от системы сообщений с информацией об ошибке. Для получения статуса ошибки Update Order необходимо последовательно указать элементы меню Tools Administration Monitoring Update. Асинхронный механизм Update Task После выполнения оператора commit work диалоговая программа не ожидает отклика от Update Task — пользователь может работать даже при очень высокой загрузке Использование асин- хронности обеспечивает минимизацию времени отклика во всех диалогах пользователя. В общем случае изменение данных с помощью Update Task выполняется сразу. Но если система занята (выполнением другого процесса), то происходит небольшая задержка. Поэтому выполнение LUW вызывающей тран- закции может занимать больше времени, чем видимое выполнейие диалоговой программы. Однако сис- тема всегда гарантирует н е п р о т и в о р е ч и в о с т ь данных, так как з а б л о к и р о в а н н ы е элементы освобождаются только после завершения последовательности для модификации (Update Order). Для увеличения общей производительности R/3 системный администратор может определить несколько заданий Update Task. В этом случае система сама перераспределяет последовательности для модификации относительно выполняемых заданий из списка Update Task, оптимизируя загрузку системы. Резюме • Концепция транзакций R/3 гарантирует сохранение непротиворечивости данных в распределен- ной среде клиент/сервер, независимо от системы управления базы данных. • Разработчик может создавать блокированные объекты, входящие в состав Dictionary. • Объект разрешается блокировать с помощью стандартной функции, создающей элементы блоки- ровки в глобальной системной таблице. • Logical Units of Work (логические рабочие блоки) определяются "временем жизни" элементов бло- кировки R/3. • Элементы блокировки удаляются с помощью стандартных функций или при завершении транзакции. • Транзакции определяются с помощью Object Browser. • Вызов транзакций обеспечивается функциями меню или командами call transaction или leave to transaction. • Функции модификации в заданиях Update Task выполняют все изменения базы данных асинхрон- но, что минимизирует время отклика системы. В следующей главе рассматриваются диалоговые программы с более сложными функциями графи- ческого интерфейса пользователя. |