W Pub: ABAP Rut Time Out

  1. * Ini --- ATimeOut v1.0 (C) 2006 Alex Bergonzini #######################
  2. ********************************************* Ini Configuracin
  3. constants: _rt_activo(1) value 'X',      "Activamos ATimeOut
  4.            _rt_aviso type i value 30,    "Segundos de GAP
  5.            _rt_Aviso1(1) value ' ',      "Damos un primer aviso
  6.            _rt_aviso2(1) value 'X',      "Damos el aviso de DUMP
  7.            _rt_sav(1) value ' '.         "Proteccin BBDD.
  8. ********************************************* Fin Configuracin
  9.  
  10. ********************************************* Documentacin
  11. *# start_time : Inicializamos el contador
  12. *# get_time   : Controla el tiempo consumido,
  13. *#              salta mensaje y actua en consecuencia
  14. *# save_time  : Debe colocarse despus de cada modificacin de BBDD
  15. *# Si la proteccin de  BBDD est activa y ha habido una modificacin de
  16. *# BBDD, el programa dar el Dump de TimeOut.
  17.  
  18.  
  19. data: _rt_start type i,
  20.       _rt_now   type i,
  21.       _rt_lim   type i,
  22.       _rt_lim2  type i,
  23.       _rt_gap1  type i,
  24.       _rt_gap2  type i,
  25.       _rt_sec   type i,
  26.       _rt_answ(1),
  27.       _rt_save(1).
  28.  
  29. data: begin of par_usub occurs 0,
  30.         status       like sy-index,
  31.         pname(60),
  32.         user_wert    like par_usub-pname,
  33.         default_wert like par_usub-pname,
  34.       end of par_usub.
  35. data: par_sub like par_usub occurs 0 with header line.
  36.  
  37. define save_time.
  38.    _rt_save = sy-ABCDE+0(1).
  39. end-of-definition.
  40.  
  41. define start_time.
  42.    if not _rt_activo is initial and _rt_sec is initial.
  43.       free: par_usub, par_sub.
  44.       _rt_sec = 1000000.
  45.       call 'C_SAPGALLPARAM' id 'PAR_USUB' field par_usub-*sys*
  46.                             id 'PAR_SUB'  field par_sub-*sys*.
  47.       read table par_usub with key pname  = 'rdisp/max_wprun_time'.
  48.       _rt_lim2 = _rt_lim = par_usub-USER_WERT.
  49.       _rt_gap1 = _rt_lim - _rt_aviso.
  50.       add _rt_lim2 to _rt_lim2.
  51.       _rt_gap2 = _rt_lim2 - _rt_aviso.
  52.       clear _rt_save.
  53.       get run time field _rt_start.
  54.    endif.
  55. end-of-definition.
  56.  
  57. define call_function.
  58.    call function 'POPUP_TO_DECIDE_INFO'
  59.    exporting
  60.       TEXTLINE1     = 'Aceptar - Continuar con el programa'
  61.       TEXTLINE2     = 'Cancelar - Se cancela el programa'
  62.       titel         = &1
  63.       START_ROW     = 6
  64.    IMPORTING
  65.       ANSWER        = _rt_answ.
  66.    if _rt_answ = sy-ABCDE+0(1).
  67.       leave program.
  68.    endif.
  69. end-of-definition.
  70.  
  71. define get_time.
  72.    if not _rt_activo is initial and
  73.       ( ( not _rt_sav is initial and
  74.          _rt_save is initial ) or
  75.         ( _rt_sav is initial )
  76.       ).
  77.       get run time field _rt_now.
  78.       _rt_start = _rt_now / _rt_sec.
  79.       if not _rt_aviso1 is initial and
  80.          _rt_start < _rt_lim and _rt_start > _rt_gap1. " DefCon 3
  81.          call_function '1er AVISO de DUMP'.
  82.       endif.
  83.       if not _rt_aviso2 is initial and
  84.          _rt_start < _rt_lim2 and _rt_start > _rt_gap2. "Defcon 1
  85.          call_function 'DUMP INMINENTE'.
  86.       endif.
  87.    endif.
  88. end-of-definition.
  89. * Fin --- ATimeOut v1.0 (C) 2006 Alex Bergonzini #######################
  90.  
  91. end-of-selection.
  92. *######################## Demo
  93.  
  94.   start_time.
  95.  
  96.   do 100000 times.
  97. * Tu Cdigo fuente
  98.      get_time.
  99.   enddo.
  100.  
  101.   do. "<- Este bucle debera dar el DUMP pero lo evitamos con ATimeOut
  102. * Tu Cdigo fuente
  103.      get_time.
  104.   enddo.