Ситуация N лет назад был написан функционал, который при HOTSPOT определяет есть ли для поля спец ФМ для просмотра значения и если он есть, то этот ФМ вызывается. Вызов ФМ-а был реализован через создание динамической программы, в которой формировался код для вызова. В эту динамическую программу передавалась таблица параметров.
К примеру есть ALV отчет, в нем есть номер проводки - по HOTSPOT по нему вызывается транзакция FB03.
Технически это реализовалось так:
1. Создаем динамическую программу с подпрограммой SHOW_HOTSPOT
2. Добавляем программу INSERT REPORT <rogname> FROM <lt_code>.
3. Вызываем подпрограмму SHOW_HOTSPOT
4. После вызова подпрограммы делаем DELETE REPORT <progname>.
Все это работало, но через N лет обнаружилось много лишних динамических программ, который возникли из-за того, что пользователи закрывали сеанс во время вызванной подпрограммы SHOW_HOTSPOT. Т.е. к примеру нажали на номер проводки, открылась FB3, посмотрели проводку и закрыли сеанс. Соответственно управление до пп.4 не дошло и программа осталась висеть в TRDIR.
В результате оптимизации этого процесса обнаружил, что можно делать
Code:
DELETE REPORT sy-repid
в начале подпрограммы SHOW_HOTSPOT и в этом случае программа удаляется даже если закрыли сеанс во время нахождения управления в ней. Однако меня "пугает" тот факт что получается удалить программу которая сейчас выполняет.
Могут коллеги назвать причину почему нельзя таким образом вызывать DELETE REPORT sy-repid?p.s.Реализовано все через INSERT REPORT было для того, чтобы обойти ограничение в 36 запусков, так как отчеты бывают большие и переходов по HOTSPOT-у может быть много.