Текущее время: Ср, апр 17 2024, 00:37

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: BAPI_OBJCL_CHANGE и ожидание завершения обновления
СообщениеДобавлено: Пн, мар 05 2018, 09:47 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 16:38
Сообщения: 301
Есть программа, которая меняет признаки. Работает просто - для каждого ЕО вызывается BAPI_OBJCL_CHANGE. Если ошибок нет, то
Code:
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

Попросили добавить добавить вывод значения признака ДО внесения изменений и ПОСЛЕ. Проблема в том, что без параметра WAIT нет ожидания, когда данные внесутся в таблицы. Поэтому иногда при чтении новых значений читается старое значение, так как новое не успевает лечь в таблицу.
Прикрутил эвристику в виде "если успешно изменилось, а значения не равны, то давайте попробуем подождать 10 секунд и опять считать значения". Но какое-то кривое решение, на мой взгляд. К тому же не дающее 100% гарантии верности значений.

Может, есть более прямые решения, которые я не вижу?

p.s. Само собой, добавление параметра WAIT = 'X' поможет, но тогда скорость уменьшится.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожадние завершения обновления
СообщениеДобавлено: Пн, мар 05 2018, 10:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
А если попробовать ставить WAIT после последнего вызова BAPI?
Один COMMIT после вызова всех BAPI, как я понимаю, не получится сделать (записей много?), также как и брать значения из параметров с которыми запускаются BAPI в качестве выводимых в отчет значений "ПОСЛЕ" (могут отработать экзиты и процедуры в классификации?).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожадние завершения обновления
СообщениеДобавлено: Пн, мар 05 2018, 10:32 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 16:38
Сообщения: 301
troy написал(а):
А если попробовать ставить WAIT после последнего вызова BAPI?

Честно говоря не пробовал потмоу что как-то сомнительно что дополнительный вызов
Code:
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
Будет ждать все предыдыщие вызовы.
Получается что если вызвать "COMMIT WORK AND WAIT." то он будет ожидать все предыдыушие "COMMIT WORK."?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожадние завершения обновления
СообщениеДобавлено: Пн, мар 05 2018, 10:50 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Вт, сен 05 2017, 23:56
Сообщения: 537
Валерка написал(а):
troy написал(а):
А если попробовать ставить WAIT после последнего вызова BAPI?

Честно говоря не пробовал потмоу что как-то сомнительно что дополнительный вызов
Code:
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
Будет ждать все предыдыщие вызовы.
Получается что если вызвать "COMMIT WORK AND WAIT." то он будет ожидать все предыдыушие "COMMIT WORK."?



вот код 'BAPI_TRANSACTION_COMMIT'

Code:
FUNCTION BAPI_TRANSACTION_COMMIT.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"       IMPORTING
*"             VALUE(WAIT) LIKE  BAPITA-WAIT OPTIONAL
*"       EXPORTING
*"             VALUE(RETURN) LIKE  BAPIRET2 STRUCTURE  BAPIRET2
*"----------------------------------------------------------------------

IF WAIT EQ SPACE.
  COMMIT WORK.
ELSE.
  COMMIT WORK AND WAIT.
  IF SY-SUBRC NE 0.
    CALL FUNCTION 'BALW_BAPIRETURN_GET2'
         EXPORTING
              TYPE       = 'E'
              CL         = 'S&'
              NUMBER     = '150'
         IMPORTING
              RETURN     = RETURN.
  ENDIF.
ENDIF.
CALL FUNCTION 'BUFFER_REFRESH_ALL'.


т.е этот фм делает коммит и чистит буффер и все.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожадние завершения обновления
СообщениеДобавлено: Пн, мар 05 2018, 11:01 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 16:38
Сообщения: 301
Код ФМ-а я смотрел. Т.е. если сделать 10 раз "COMMIT WORK.", а потом один раз "COMMIT WORK AND WAIT.", то этот последний коммит будет ждать пока все 11 коммитов не внесут данные в таблицу?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожадние завершения обновления
СообщениеДобавлено: Пн, мар 05 2018, 13:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Посмотрите в сторону SET UPDATE TASK LOCAL ...

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожидание завершения обновления
СообщениеДобавлено: Пн, мар 05 2018, 16:34 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 179
Валерка написал(а):
p.s. Само собой, добавление параметра WAIT = 'X' поможет, но тогда скорость уменьшится.

Если скорость важна и признаки меняет Ваша программа, то почему тогда нельзя новые значения признаков брать сразу из параметров BAPI_OBJCL_CHANGE?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожидание завершения обновления
СообщениеДобавлено: Пн, мар 05 2018, 19:45 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
UKY написал(а):
Если скорость важна и признаки меняет Ваша программа, то почему тогда нельзя новые значения признаков брать сразу из параметров BAPI_OBJCL_CHANGE?

Потому что то, что подается в BAPI, и что в итоге пишется в БД, в общем случае не одно и то же.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожидание завершения обновления
СообщениеДобавлено: Вт, мар 13 2018, 11:33 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Валерка написал(а):
p.s. Само собой, добавление параметра WAIT = 'X' поможет, но тогда скорость уменьшится.


А ждать 10 сек или селектиться в цикле это лучше? :)
Почитайте что такое синхронное и асинхронное обновление и сразу станет понятно.
В чем проблема в wait? что у Вас там за объемы такие?
Ну и как посоветовал nicky про локальное обновление (это синхрон тоже)

По существу задачи, зачем городить это, ДО/ПОСЛЕ, если стандартные механизмы - журнал изменений (change docs), там все видно, кто изменил, когда, какое старое значение, какое новое...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожидание завершения обновления
СообщениеДобавлено: Ср, мар 14 2018, 21:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
Валерка написал(а):
Прикрутил эвристику в виде "если успешно изменилось, а значения не равны, то давайте попробуем подождать 10 секунд и опять считать значения". Но какое-то кривое решение, на мой взгляд. К тому же не дающее 100% гарантии верности значений.

Может, есть более прямые решения, которые я не вижу?

p.s. Само собой, добавление параметра WAIT = 'X' поможет, но тогда скорость уменьшится.

1. Модули обновления используют блокировки. Поэтому перед чтением смотрите, есть ли блокировки на классификацию
2. Скорость уменьшится, если использовать шаг 10 с.
3. Прислушайтесь к Besa по поводу журнала изменений. И кстати, старое значение вам известно, новое тоже. Если ФМ BAPI_OBJCL_CHANGE отработал успешно, зачем ждать, когда изменения отразятся в БД? :?

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожидание завершения обновления
СообщениеДобавлено: Ср, мар 14 2018, 21:26 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
troy написал(а):
UKY написал(а):
Если скорость важна и признаки меняет Ваша программа, то почему тогда нельзя новые значения признаков брать сразу из параметров BAPI_OBJCL_CHANGE?

Потому что то, что подается в BAPI, и что в итоге пишется в БД, в общем случае не одно и то же.

В данном случае это как раз одно и то же. "Зависшими" обновлениями занимаются базисники :roll:

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_OBJCL_CHANGE и ожидание завершения обновления
СообщениеДобавлено: Пн, апр 02 2018, 16:32 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, апр 24 2007, 15:56
Сообщения: 1402
Удав написал(а):
В данном случае это как раз одно и то же. "Зависшими" обновлениями занимаются базисники :roll:

Может в конкретном случае и так, мы не знаем. Но в общем случае нет.
Речь не про зависшие обновления, а про то, что внутри BAPI могут производиться "махинации" с входными данными (userexit и прочий Z). И на выходе (в БД) может быть вообще всё что угодно. Я только в этом случае вижу необходимость проверять значения ДО/ПОСЛЕ.


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

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


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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