Текущее время: Ср, апр 24 2024, 02:28

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: фм в режиме in update task
СообщениеДобавлено: Пн, янв 25 2021, 10:35 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
Добрый день!
Есть z* ФМ, в котором создаётся запись в z*таблице Базы данных.
Вызываю этот ФМ(Модуль обновления->Немедленный запуск) в режиме in update task. После ФМ идёт команда COMMIT WORK AND WAIT.
И почему-то не всегда после COMMIT WORK AND WAIT есть запись созданная в БД ФМ. Запись может создаваться и после команды COMMIT WORK AND WAIT. Есть ли команда в abap, которая гарантирует создание записей в Базе данных? Или придётся насильно после commit work and wait проверять, что запись в БД появилась?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: фм в режиме in update task
СообщениеДобавлено: Пн, янв 25 2021, 12:01 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Приведите пример кода, с вызовом ФМ и commit work and wait.
Вообще commit work and wait как раз гарантирует, что будет ждать пока не отработают все V1 процессы обновления, запущенные в update task.

Если вы наблюдаете другую картину, скорее всего у вас между вызовом ФМ и commit work and wait стоит еще спрятанный где-то паразитный вызов commit work (без wait).
Такой паразитный вызов проще всего отследить, использовав в отладчике функцию установки точки прерывания на операторе commit work.

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: фм в режиме in update task
СообщениеДобавлено: Пн, янв 25 2021, 12:19 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
LKU написал:
Приведите пример кода, с вызовом ФМ и commit work and wait.
Вообще commit work and wait как раз гарантирует, что будет ждать пока не отработают все V1 процессы обновления, запущенные в update task.

Если вы наблюдаете другую картину, скорее всего у вас между вызовом ФМ и commit work and wait стоит еще спрятанный где-то паразитный вызов commit work (без wait).
Такой паразитный вызов проще всего отследить, использовав в отладчике функцию установки точки прерывания на операторе commit work.



Code:
FUNCTION  ZUPDATE_ZTABLE
*"  IMPORTING
*"     VALUE(IS_ZTABLE) TYPE  ZTABLE
  INSERT ztable FROM is_ztable.
ENDFUNCTION.

Программа:
      CALL FUNCTION 'ZUPDATE_ZTABLE' IN UPDATE TASK
        EXPORTING
          IS_ZTABLE  = ls_ztable.
      COMMIT WORK AND WAIT.
Бывают случаи, когда после commit пока ещё нет записи в таблице ztable. И она появится чуть позже.



Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: фм в режиме in update task
СообщениеДобавлено: Пн, янв 25 2021, 13:03 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
Цитата:
Бывают случаи, когда после commit пока ещё нет записи в таблице ztable. И она появится чуть позже.

Такого быть не может.
Вы как проверяете наличие записей в таблице?
Помечена ли таблица как буферизованная?

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: фм в режиме in update task
СообщениеДобавлено: Пн, янв 25 2021, 13:06 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
То есть условно если вы после commit work and wait напишите
Code:
select from ztable bypassing buffer
where <id записи = id в отправленной на сохранение строки>.

,то такой селект обязан вернуть результат

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: фм в режиме in update task
СообщениеДобавлено: Пн, янв 25 2021, 13:16 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 08:40
Сообщения: 226
LKU написал:
То есть условно если вы после commit work and wait напишите
Code:
select from ztable bypassing buffer
where <id записи = id в отправленной на сохранение строки>.

,то такой селект обязан вернуть результат

LKU, спасибо! Наверное, bypassing buffer не хватало. ztable буферизованная таблица.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: фм в режиме in update task
СообщениеДобавлено: Пн, янв 25 2021, 20:06 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Вт, май 17 2005, 13:35
Сообщения: 4842
Откуда: Москва
Пол: Мужской
skaa написал(а):
LKU, спасибо! Наверное, bypassing buffer не хватало. ztable буферизованная таблица.


Ну да, тогда все понятно.
"commit work and wait" гарантирует, что дождется окончания транзакции в БД, но вот немедленного обновления буфера на уровне сервера приложений вам никто не обещал )

_________________
Удача - результат нашего желания (© А. Нортон)


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB