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

Часовой пояс: 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 часа


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

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


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

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