Упражнение 6.3: Установка и извлечение атрибута ERROR-STRING
Задание 3
В этой части вы измените процедуру обновления на сервере так, чтобы при возникновении ошибки в SAVE-ROW-CHANGES информация о неудачной строке добавлялась в ERROR-STRING для буфера before-таблицей. Для клиента вы напишете код для отправки изменений на сервер и, а после возвращения ответа с сервера получите ERROR-STRING.
Шаг |
Действие |
1 | В процедуре update_dsPO_3 определите HANDLE-переменную с именем hAfterBuffer.
DEFINE VARIABLE hAfterBuffer AS HANDLE NO-UNDO. |
2 | В цикле после вызова SAVE-ROW-CHANGES, добавьте тестовый блок, который проверяет, есть ли ошибка в буфере before, а состояние строки в before-буфере является ROW-CREATED.
hBeforeBuffer:SAVE-ROW-CHANGES() NO-ERROR. IF hBeforeBuffer:ERROR AND hBeforeBuffer:ROW-STATE = ROW-CREATED THEN DO: END. |
3 | В этот блок добавьте код для:
hAfterBuffer = phChangeDataSet:GET-BUFFER-HANDLE(iBufferCount). hAfterBuffer:FIND-BY-ROWID (hBeforeBuffer:AFTER-ROWID). hAfterBuffer:ERROR-STRING ="Cannot create " + hAfterBuffer:NAME + " record with PONum of " + STRING(hAfterBuffer::PONum). |
4 | Сохраните эту процедуру, убедившись, что она компилируется без ошибок. |
5 | В файле access_dsPO_process.p скопируйте весь код сценария, который вы создали во второй части этого практического занятия, и вставьте в конце файла перед комментарием «clean up». |
6 | Измените комментарий сценария и имя лог-файла на TestingErrorString_dsPO.log.
*---------------------------------- Тестирование установки и извлечения атрибута ERROR-STRING ------------------*/ OUTPUT TO "C:\OpenEdge\WRK\ProDataSets\log\TestingErrorString_dsPO.log". |
7 | Измените 2 итерации через таблицы набора изменений, чтобы проверить значение hBuffer:ERROR и, если оно установлено, записать значение ERROR-STRING в выходной файл.
Добавьте этот код после проверки атрибута буфера REJECTED: ELSE IF hBuffer:ERROR THEN MESSAGE hBuffer:ERROR-STRING. |
8 | Сохраните эту процедуру, убедившись, что она компилируется без ошибок. |
9 | Поскольку вы изменили код на стороне сервера, перезапустите сервер приложений ProDataSets-Instance. Убедитесь, что сервер приложений перешёл в состояние «Started, Synchronized». |
10 | Выполните эту процедуру. Добавление записей PurchaseOrder и POLine для PONum 6000 должно завершиться ошибкой, а строка ошибки должна быть возвращена клиенту и записана в файл журнала.
Change dataset ERROR attribute is: yes ttPurchaseOrder ERROR attribute is: yes Cannot create ttPurchaseOrder record with PONum of 60000 PurchaseOrder 60001 was rejected. ttPOLine ERROR attribute is: yes Cannot create ttPOLine record with PONum of 60000 Cannot create ttPOLine record with PONum of 60000 POLine 60001 Line 1 was rejected. POLine 60001 Line 2 was rejected. ***********After updates are merged: |