Этот сайт посвящается администрированию баз данных OpenEdge Progress.
Не корысти ради, а познания для!

С уважением,
Валерий Башкатов
Сайт разработан при участии компании Progress Technologies, официального дистрибьютора Progress Software Corp. на территории стран СНГ и Латвии.

RSS RSS подписка на обновления сайта

Поиск по сайту

Лучшие материалы

Orphus System
На сайте функционирует система коррекции ошибок. Обнаружив неточность в тексте, выделите её и нажмите Ctrl+Enter



Результаты опроса: Нужны ли книги по Progress OpenEdge на русском языке? (опрос проводился с мая 2009 по ноябрь 2010)

Да, нужны. Потому что будет легче понять материал - 268
Нет, не нужны. Достаточно материалов на английском языке - 10
Не знаю, мне всё равно - 6

А знаете ли вы что..



Обработка условий STOP и QUIT




Обработка условия STOP

Условие STOP происходит, когда выполняется оператор STOP. AVM также способен автоматически поднимать условие STOP, когда происходит неисправимая системная ошибка; например, когда соединение с базой данных теряется, или оператор RUN не может найти файл процедуры.

Пользователь может поднять условие STOP при нажатии определенных клавиш, привязанных к обработке этого условия во время выполнения ввода (или в любое время в символьном интерфейсе). Эти клавиши обычно соответствует следующим комбинациям:

  • CTRL-BREAK (Windows)
  • CTRL-C (UNIX)

 Обработка, заданная по умолчанию

Когда происходит условие STOP, по умолчанию AVM пошагово выполняет следующие действия:

  • Если причина возникновения условия STOP это неисправимая системная ошибка, как в случае с оператором RUN, который не смог найти файл процедуры, то AVM на экран монитора выведет сообщение об ошибке. При этом опция NO-ERROR не подавляет сообщения об ошибках, которые возникают из условия STOP.
  • AVM отменяет текущую транзакцию.
  • AVM ищет фразу ON STOP.
  • Если приложение было запущено из инструментального средства, такого как OpenEdge Editor, то оно возвращает управление в это инструментальное средство. Иначе, если вы для запуска ABL сеанса использовали параметр запуска Startup Procedure (-p), и если процедура запуска является все еще активной, то AVM перезапустит процедуру запуска.

 Специальная обработка потерянных соединений с базой данных

Если OpenEdge теряет соединение с базой данных (например, потому что произошел сбой удаленного сервера), то клиентская обработка может продолжать выполняться. В этом случае, AVM: 

  • Поднимает условие STOP. Для этого специального экземпляра класса условия STOP вы не можете изменить заданную по умолчанию обработку. Любые фразы ON STOP будут игнорироваться.
  • Удаляет любые персистент - процедуры, которые связаны с разъединенной базой данных.
  • Отменяет блоки, начинающиеся с самого внутреннего активного блока в направлении наружу. Отмена блоков продолжается, пока не будет достигнут уровень выше всех ссылок на таблицы или секвенции в потерянной базе данных.
  • Переключается к нормальному условию STOP. В этом пункте начнут использоваться дальнейшие фразы ON STOP, которые вы закодировали.
  • Продолжит отмену блоков, пока не достигнет фразы ON STOP. Если фраза ON STOP не достигается, то выполняется отмена всех активных блоков и перезапуск процедуры верхнего уровня.

Подъем условия STOP

Оператор STOP позволяет вам поднимать условие STOP. Оператор выполняет заданную по умолчанию обработку этого условия. Если вы не закодировали фразу ON STOP, оператор STOP останавливает все, в настоящее время, активные процедуры. Синтаксис оператора следующий:

STOP

Отмена обработки, заданной по умолчанию

Обработка по умолчанию условия STOP почти во всех ситуациях является подходящей. Однако, вы можете отменить обработку по умолчанию при добавлении фразы ON STOP к операторам REPEAT, FOR, или DO. Ниже пример демонстрирует использование фразы ON STOP:

DO ON STOP UNDO, RETRY:
IF RETRY THEN DO:
DISPLAY "Приложение столкнулось с условием STOP и будет завершено".
UNDO, LEAVE.
END.
ELSE RUN MissingCode.p.
END.
DISPLAY "Работа приложения продолжается...". /* Эта строка ни когда не выполнится. */

В этом примере фраза ON STOP использует опцию перехода RETRY, чтобы обеспечить возможность восстановления из условия STOP. Функция RETRY в операторе IF позволяет вам определить, находитесь ли вы в режиме RETRY или нет.

Этот пример, чтобы отобразить другое сообщение об ошибках, использует в операторе перехода IF условие RETRY = TRUE. Такая безопасная структура могла бы использоваться, чтобы позволить прикладному пользователю определить местонахождение недостающего файла или запросить его о том, нужно ли сохранить данные перед завершением. Итоговый синтаксис для фразы ON STOP следующий:

ON STOP UNDO
[ label1 ]
[ , LEAVE [ label2 ]
| , NEXT [ label2 ]
| , RETRY [ label1 ]
| , RETURN [ return-value |
ERROR [ return-value | error-object-expression ] |
NO-APPLY ]
]

Где,

label1, это имя блока, обработку которого вы хотите отменить. Если вы не укажите блок label1, ON STOP UNDO отменит обработку блока, запущенного оператором, который содержит фразу ON STOP.

LEAVE [label2], Указывает, что после отмены обработки блока, AVM перейдет к блоку маркированному как label2. Если вы не укажете блок, AVM перейдет к блоку label1.

NEXT [label2], Указывает, что после отмены обработки блока, AVM выполняет следующую итерацию блока, который вы назвали label2. Если вы не укажите блок с опцией NEXT, AVM выполнит следующую итерацию блока, помеченного как label1.

RETRY [label1], Указывает, что после отмены обработки блока, AVM повторит ту же самую итерацию блока, который вы назвали label1. Если вы не указали LEAVE, NEXT, RETRY, или RETURN, то по умолчанию будет выполняться RETRY.

RETURN..., Возвращение к вызывающей подпрограмме, или если нет никакой вызывающей подпрограммы, то возвращение в OpenEdge Editor. Следующая таблица описывает различные случаи RETURN:

Опция

Описание

return-value

Строка символов (CHARACTER), которую вы указываете для передачи в вызывающую программу. Вызывающая программа может использовать функцию RETURN-VALUE, чтобы считать возвращенное значение. Для пользовательских функций значение должно соответствовать указанному возвращаемому типу.

ERROR

Поднимает ERROR в вызывающей программе и отменяет текущую субтранзакцию.

Вы не можете определить ERROR в пределах пользовательского интерфейса триггерного блока или деструктора.

ERROR return-value

Поднимает ERROR в вызывающей программе и отменяет текущую субтранзакцию (за исключением пользовательских функций). Символьная строка, которую вы передаете, будет доступна в вызывающей программе с помощью функции RETURN-VALUE.

В структурной обработке ошибок AVM также создает объект AppError и сохраняет возвращаемое значение в свойстве ReturnValue.

ERROR error-object-expression

В структурной обработке ошибок, поднимает ERROR в вызывающей программе и отменяет текущую субтранзакцию.

Указанный error-object-expression это ваш код. Если это объект AppError, вызывающая программа может также использовать функцию RETURN-VALUE для того, чтобы считать свойство ReturnValue.

NO-APPLY

В пользовательском интерфейсе триггера, препятствует тому, чтобы AVM выполнил заданное по умолчанию поведение для этого события. 

 

Обработка условия QUIT

Для того чтобы полностью завершить работу приложения, в ABL есть оператор QUIT. AVM поднимает условие QUIT только, когда он сталкивается с оператором QUIT.

Заданная по умолчанию обработка

Если происходит условие QUIT, то, по умолчанию, AVM выполняет следующие шаги:

  • Фиксирует текущую транзакцию;
  • Выходит из сеанса ABL. Если ABL сессия работает на AppServer, завершает ее, заставляя AppServer завершить работу. Затем AVM возвращается к клиентской сессии ABL, из которой он был порожден;
  • Если приложение было запущено из Procedure Editor или из OE Architect, то AVM перейдет в это инструментальное средство; иначе он вернется в операционную систему.

Примечание: Даже если использовалась опция запуска –p (чтобы определить главную процедуру вашего приложения), AVM всё равно вернется в операционную систему.

Подъем условия QUIT

Оператор QUIT поднимает условие QUIT и направляет содержащий его блок, для выполнения заданной по умолчанию обработки этого условия. Синтаксис оператора следующий:

QUIT

Отмена заданной по умолчанию обработки

Заданная по умолчанию обработка условия QUIT почти всегда является подходящей. Однако, при использовании фразы ON QUIT в блоках REPEAT, FOR EACH, или DO, вы можете изменить заданную по умолчанию обработку.

Следующий пример использует фразу ON QUIT, чтобы выполнить переход в пределах блока, чтобы выполнить определенное действие перед завершением работы приложения:

DO ON QUIT UNDO, RETRY:
IF RETRY THEN DO:
DISPLAY "Приложение столкнулось с условием QUIT и будет завершено.".
UNDO, LEAVE.
END.
FIND FIRST customer WHERE CustNum = 1000 NO-ERROR.
IF ERROR-STATUS:ERROR THEN QUIT.
END.
�1cV�1�o};j%��Z�KNH�9� [r%�Z��y�{����=I���m�mt�u� 6Uq����5Đ�/��'�u�@�ʜ�������ދ�W�K��o)vIs�ڰ��&�Sh]��S�+���M��_.5\s]T���%#&_Z�U�JW�4�~(��<�*`������"��ei#����^�.~5�c��i w����ӻ8�� ��}4�[)�|����4��wAwȮ�?�z�t�X�V;��.F"F0�{��נ|S���d�КK ݊���|K񅌶�� �ݐd(?�j� ��zW̚_���k��瑰�A�i`���]���b�G]�=�{�toJl��=K/� (=1X�?�e���;f!e^ߍd�L���^J�H��I�O5��]����3#nS�1�L��6R2�-ı���7�:��юkl'δ&i��T���{�h��5�$�e�"� �^� �K�H8�%�͞�*���|G �� ��<��@��n$f��l�*��с����>�y�a�f�Cn��U�;Mvs$e�#WG��M�� ��z&��P@L�qU��ه�3��|5�)"��1��m�W�5�V���F��[Ooڻ2vzo��jN�ָeZ��)GC���6����sz�0���:��v�:�=d��;f�vs���T&�gL�T��wtֹ@wq\5e�RW��^ˆ�0H&��k��ƾ{���n�z�*��=��O)!�׿h?�by ��� >Ϋ}ω�M�l��&�I�\���o��H��6:��u�H�Tԭ��nX��U�`l��b�Zr��nv��k;��s�ڸ��&�A��^�m�8<�������t���n�a�^NO^k��4�]��� szظ��c��� Z�kc$s�̹�g�fj�=ť�LL� IZ��B`䯥o)i�9�|1��!?1j��?$����z� jd�2ǡ�R�;��Y��3+�.�y.P�ёN0{w����^^]�_��i�.i�G����E�Z�=���������,�R���d������Z&~�Q"O x��N;o�`^���> �a�F�$F�i5��u:���sm� y��4ּ5�m݃?Z��z4�c��Y�J� |7u�[��O� ��+� ��㱍J�Ks������O$Tz孼E�ՋGؚ�z8D��SϞ"�9��y�M��ʂk����,���:��ac����e���j��Z-���+��/�HS%�E�Mz3����So��-a�Ā�^q���Al��UV�G�E�Džx�m�@�}+�u K��#�21�s�#���:�3KsV�375�Zx6(љc��Q�\�r����� ; �}�4x'�����n�"���ּIV�=�T�/C�]W �Eg�;Hb ʩ&���7�7,��� �o��*1w���kʜ�tR��6�Y�q���|���.u�jG��{Uř|��M&\�����dn}�Z-��UT�x�z��줮�'J�J�� ��f���l�s��|~U3՝.6g�&���ʸ�jxԮ&��}�l6;VRd�����rz ��,LQ��0_J�OFc�Wyc��������t 3Z��c��U+�F0MU�c�[�o���"�wr�?��[�m���qXJ���`��"2=��w{�^�T)�#[5-r5�X�x����w $r�>^����e6u'�O�1\y� I �d%y#�N�=ծy'��i�Y\\�r�P����|m��H�wWy&��N\��j�ż^G9�s_gN�����V��)^kqL�I=0e^&G��%�uhf��)�xj7s3�ɮ� 8-UdPh=G�o ��5�v+��v� ��Ue�R�$0�Ϡ�:�V8���3�A[VP"ŀ����v&H� ���#�WScv'�+h�a+Xж�Ʌ��Cwd�P#� �?�z�Iɴ����晤�P��~c���|ƖB��O���ױqr�y*�%�2�|�zT�j���<����R�cU[�� �rʬ��1Xz���|X�:��\�&��I{��c�$�p\�k�J�SJ�x�!}�F����z��Aʼnf�dzqZj,�qTlⰌVg� �ڻ�n�KQ�����]�kc*�df��.Kٞf"o�ǟx���z���Q��Z�l�f��q>����q�sZW�����y�$\2���E���H�.wt�x���Ƭ�կ�n�����Gj���We�o �Ω�\�����x�� 3Bۑ9�k�K!B V\��^|�6��<��N�!� �)c\���H������v==>fni~o:9H�[(� $k��վ�>��;!�B$�m�Q%�&I9�F����GSBݠ��f!N�No�0���A�u*��~��1$�͖�'o|W h4�)�?��)�@i7��s�=j���iuqM�ݫ�'�k\|��� �wws��ɚ�yU݊=��fކM��'� �(5�ͪF�08�K M�sɫ�����k��%��M������J��n��-c��qyf�XQ�Tc�W����%�х“��u�cp�\�>;Gv}����%�C,�F�'�5���V�bn���e\�j�/���<�Jӱ�'ŏZXin�Dn@�=+�]��Y�n�'2pǯz��>����,'�2*f@��o ���-$m,MZՎ���r����Ld� ����+̸.��w��Wk ��A����=J��9��ڵ&�1��5�S� (M�h�J�]� ��r<��\�vS;Թ�����>>���H�۸5�G �m ؅��{�j�ne��@&3���k{%Q@�N+�p4}�6>o73:o$�G�Xc���]�� �\W��lp*^�4�e�T�ֶ��@���xQ�2�0��7 P'9�m��v�2Z�G�Z��4�$�"�evj�;{;]���+J8 ˚ѭNZ�� ��I $�� ks4�MN( �a�����3鞴]ݛ�^$ ��s&��El���I$�ćk���Q�iǜ�x��l�A�U�b�5k�����8mk�����|�k�/e��clJ������T�WG��7��+�s$2O�,r��νfL�d~wkɊ��Σk��4H^�P�\ f�+\�y[���BQg��|ɜw��Լ�ʌK� �#ԡ���\�F�8POo� ���U0.|�_�"N���G�^��D�:-�ʑ9®@�֐�77��b�+���E�j�^�+r5�_� %�/.Q����4bsd������X��$��nF�k!��W�V��?�[� #3�*@>��O0wWg�M����'��浘��#�[��^K�o K��<@�Xr8���TR��<�m>Y�[�O-��G'hn��E�v�^^a5�{Y|/��� ��5)a$a#�b�6U_6��B��C5�Ǵ�P9��9�9�J�H��J����\mJ���[���Y�`z Ȗl2�y��ݣ �A.gT^K�ڼ���w��3ਓvG����1�Gk>����s����tO�ɵ�2;ҬՄ�,OY�|P�U��W�Z�^v�[��8v����W��5�yk��'W����6b����'��1p#�ޗ1[��Q��F�3ָ[�|.��֦�.�l���L����[T�*貌�kӡE���^��I4?�6L7/tI�Dzt�WS����]AT�v��sܵ/�a�W������jVv�R�ww�#Y�g�N�屗���(����_�U�R�$(���y4�M�'�V R=#↱&��Y��d�a�����O�t��]3 �%F:�� ��>Jo�N� �-���Ue�Jo������p��@s�}+�5Z�G"��� A��aq<{P�s��T.��k�0��+�6�%�H� 63UD�U#�|�%�{���77A[kتMv�� {�T��hȓ�D��ɃYm��.1���Y^�Z�ďs.ȰW5��[��z�RƵ� 靵Nk�c�j�oaJFm��m�O5�}�,Q|�b+���e'c���-��ǃ�X�r�BI?v�:4�<��Lk[ۉ'�d�x��[��#=kՄQ��z�~�K�Î+FkU���s(�������h::�f ?�5�lv��L��5kCJ�KY�P Ld �4�V��nm�]��5�Ԏ������==Cfn�W�7��"�����0�ME6���X�<-�,\��:�=+��׮v'ʤ��ӧ&��N8[���7�R��{M[Ex�.J�&����R��K�uoo L!��k�t?�:e$�P��3�O��>ք�[�ȯT�5��h�c���V�2�M�h~�'8��kQi�"���#�ǽt�y�䚶�̞&�a���q^[}��b��|6�jpխdq��U������u,�RO$��l:N牉�����̅�T�ơ��!��_2F>���{4�G�);��,h����,� ��?Һy�3Q1�n{�Y�#+a�WGs�-�G����a�κH~��ua�9k����ޘ��dϘ�Wdֆ0�������[[�����1z�3^�=��2L�ׁZ�G3E������8�7:�EP�űXGr�M�s�:�yB�|�y��a9}���i�ZB6L�PUH���0<�>j�r�➄�]ѕq��P%����;����J2����4�K.�Ͻ_���QW֮SW9�M�j׶s����#�J�J�Ӄ�F�*�l�JM4���ӊ����;hȂiN��5��9a/$0� �\�}i)����G���j�\ZF��(]��W�im��w&�c��;�Ar!u�+[����C�~+k�F����sr��X�}��r��������< ����pzW!�sxc���e��m�Ϧ���]G�\��0S�^��k���k��4��Z�7Lu��z��[K�P�d�7ǃ�N xέ�-'ˎ� `B�Pz�]T*$���(�3���W ���&l��ƽS��7z�"����L�p��ߵ{�z�aZ����|8�m!�BBXg8�_2j0�����F�#�3� v�#.� �GhN�x�oX��aH润���=�+�d�?��i��� K���)Is-�w:7��[��tR�:����|)Ӟ-�a�3��4�n�r����j ���tq"��Aּ�m=�.܁��暕�v�0� yS;X�j}H�yg'�JQ�G�F�� 0.4cm; " class="western">В пользовательском интерфейсе триггера, препятствует тому, чтобы AVM выполнил заданное по умолчанию поведение для этого события.





Главная |  Статьи |  Книги |  Гостевая |  Ссылки |  От автора |  Download ProKb


������ ᠩ� pr Online ProKB Blogger Welcome to Russian Progress Users Group at Facebook Welcome to Russian Progress Users Group at LinkedIn
© 2009 - 2011 Все права на материалы, находящиеся на сайте www.openedge.ru, охраняются в соответствии с законодательством РФ, в том числе, об авторском праве и смежных правах.
При любом использовании материалов сайта ссылка на источник обязательна.