Текущее время: Чт, мар 28 2024, 18:30

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: CALL FUNCTION '' IN UPDATE TASK
СообщениеДобавлено: Пн, апр 10 2006, 16:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
В BSP-скрипте вызываю функцию в UPDATE TASK.
Функция вставляет данные в таблицы и работает с функциями BPS.

В диалоговом режиме все работает корректно.
В UPDATE TASK работает около 2-х минут, потом завершает работу, результатов которой не видно :(


Что может быть?
(если нужны уточнения - сообщу)
Может такая функция ничего не должна возвращать (в описании EXPORTING нет, есть только TABLES)?
Или наоборот что-то должна возвращать?
В свойствах выставлено:
Модуль обновления -> Немедленный запуск

Спасибо!

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 10 2006, 16:11 
Президент
Президент
Аватара пользователя

Зарегистрирован:
Ср, янв 12 2005, 13:39
Сообщения: 2811
Откуда: замкадыш
она изменяет таблицы БД?

_________________
Что бы выловить случайную ошибку нужно добиться устойчивости её появления.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 10 2006, 16:12 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Да...

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 10 2006, 16:12 
Президент
Президент
Аватара пользователя

Зарегистрирован:
Ср, янв 12 2005, 13:39
Сообщения: 2811
Откуда: замкадыш
COMMIT WORK.
не забыли???

_________________
Что бы выловить случайную ошибку нужно добиться устойчивости её появления.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 10 2006, 16:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Хороший вопрос!
В вызывающем есть
и в вызываемом есть
Я тут еще погонял функцию, выпадает в дамп на ROLLBACK WORK.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 10 2006, 16:54 
Президент
Президент
Аватара пользователя

Зарегистрирован:
Ср, янв 12 2005, 13:39
Сообщения: 2811
Откуда: замкадыш
А почему???

_________________
Что бы выловить случайную ошибку нужно добиться устойчивости её появления.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 10 2006, 16:57 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
ROLLBACK is not allowed during an update (CALL FUNCTION ... IN UPDATE TASK)

хм... а как бы и рыбку и ...
т.е. асинхронно вызвать функцию и чтоб коммит или ролбэк в ней отработал корректно.

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 10 2006, 17:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Из кода функции обновления уберите COMMIT WORK - этого нельзя. COMMIT должен быть только в вызывающей функции.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 11 2006, 08:45 
Президент
Президент
Аватара пользователя

Зарегистрирован:
Ср, янв 12 2005, 13:39
Сообщения: 2811
Откуда: замкадыш
Сергей Королев написал:
Из кода функции обновления уберите COMMIT WORK - этого нельзя. COMMIT должен быть только в вызывающей функции.


О как! Надо будет запомнить. А причину такого запрета в двух словах не опишите?????

_________________
Что бы выловить случайную ошибку нужно добиться устойчивости её появления.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, апр 11 2006, 09:24 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1246
2 G: Нужно просто правильно продумать процедуру сохранения. Тогда возможно отпадет вариант с не совсем верными желаниями

2 Loyso: А это просто принцип сохранения такой. Модули, которые вызываются в UPDATE TASK начинают свою работу, в тот момент, когда в вызывающей программе отрабатывает COMMIT WORK. Т.е. вызываете последовательно несколько таких модулей, потом один раз говорите коммит и все обновления массой сливаются в базу. Подробнее - курс BC 414 + help на слова LUW и "обработка транзакций"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 12 2006, 09:38 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Loyso написал(а):
Сергей Королев написал:
Из кода функции обновления уберите COMMIT WORK - этого нельзя. COMMIT должен быть только в вызывающей функции.


О как! Надо будет запомнить. А причину такого запрета в двух словах не опишите?????


Дело в том, что COMMIT WORK есть в том числе и явный вызов database commit. А если внутри одного из модулей обновления в процессе самого обновления отработает database commit, то тогда может произойти ситуация, когда часть обновлений пройдёт, а часть - нет. А именно для того, чтобы избежать этой ситуации и был придуман механизм модулей обновления. Поэтому внутри модулей обновления запрещены все операторы, которые могут спровоцировать - явно или неявно - database commit или database rollback.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 12 2006, 09:51 
Президент
Президент
Аватара пользователя

Зарегистрирован:
Ср, янв 12 2005, 13:39
Сообщения: 2811
Откуда: замкадыш
Спасибо за инфо

_________________
Что бы выловить случайную ошибку нужно добиться устойчивости её появления.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 12 2006, 10:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, окт 11 2005, 12:10
Сообщения: 687
Откуда: Москва
Пол: Мужской
Вполне понятно почему нельзя делать коммит в UPDATE TASK
(мне нужен был асинхронный режим выполнения ФМ потому я перешел на использование BACKGROUND TASK там коммит -- не преступление).

Можно поподробнее вот об этом:
Цитата:
то тогда может произойти ситуация, когда часть обновлений пройдёт, а часть - нет. А именно для того, чтобы избежать этой ситуации и был придуман механизм модулей обновления.
?
Для того чтобы прошли все обновления или ни одного был придуман механизм транзакций. А вот для чего механизм UPDATE TASK мне не очень понятно.
Предполагаю, чтобы асинхронно выполнить длительные вычисления в рамках текущей транзакции (тогда чем отличается от BACKGROUND TASK?).

_________________
Глаза боятся, а руки крюки


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 12 2006, 12:32 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
G написал:
Вполне понятно почему нельзя делать коммит в UPDATE TASK
(мне нужен был асинхронный режим выполнения ФМ потому я перешел на использование BACKGROUND TASK там коммит -- не преступление).

Можно поподробнее вот об этом:
Цитата:
то тогда может произойти ситуация, когда часть обновлений пройдёт, а часть - нет. А именно для того, чтобы избежать этой ситуации и был придуман механизм модулей обновления.
?
Для того чтобы прошли все обновления или ни одного был придуман механизм транзакций. А вот для чего механизм UPDATE TASK мне не очень понятно.
Предполагаю, чтобы асинхронно выполнить длительные вычисления в рамках текущей транзакции (тогда чем отличается от BACKGROUND TASK?).


Дело в том, что когда в программе выполняется последовательность модулей обновления Вы вольны делать database commit когда угодно - на обновление БД это не повлияет. Полная последовательность этих модулей будет выполнена (или не выполнена) в процессе обновления, который буде запущен после COMMIT WORK. Когда же выполняется непосредственно обновление внутри процесса обновления операторы, инициирующие database commit/rollback внутри модулей обновления делят весь процесс на части.

Если интересно, посмотрите по-подробнее о понятиях Database LUW и SAP LUW.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, апр 12 2006, 13:48 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пн, мар 28 2005, 15:38
Сообщения: 1246
Цитата:
Для того чтобы прошли все обновления или ни одного был придуман механизм транзакций. А вот для чего механизм UPDATE TASK мне не очень понятно.
Предполагаю, чтобы асинхронно выполнить длительные вычисления в рамках текущей транзакции (тогда чем отличается от BACKGROUND TASK?).


1) Можно вызвать обновления БД непосредственно в программе, тогда в случае сбоя, все обрабатывать надо самому + т.к. СУБД по традиции это узкое место : занимаются ресурсы, что есть нехорошо.
2) Обновления в UPDATE TASK или гарантировано все доедут или гарантированно все не доедут в рамках 1-ого LUW. В случае, если они не доехали, есть возможность через sm13 посмотреть и как-то исправить ситуацию. Так же, т.к. это работает через предопределенные разработчикми Р3-механизмы, достигается экономия ресурсов. Самое главное: это не асинхронный вызов, т.е. по идее программа дождается подтверждения сохранения.(Как пример: можно воткнуть точку остановки в проводке, когда она будет достигнута - остановить обновления в системе, и продолжить проводку. Все повиснет :-) )
3) BACKGROUND TASK - асинхронный вызов + транзакционный вызов в RFC


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

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


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

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


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

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