Текущее время: Пн, июл 23 2018, 00:37

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


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


ВНИМАНИЕ!

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



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

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

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

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

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


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

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


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

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

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


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

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 324
Валерка написал(а):
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, 12:01 
Специалист
Специалист
Аватара пользователя

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


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

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

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


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

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

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


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

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

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


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

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


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

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


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

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

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

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

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

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


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

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

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

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

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


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

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

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


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

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


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

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


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

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