Problema creacion de ALV OO y refresco

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • ballan
    Senior Member
    • oct
    • 671

    #16
    Si el parametro lifetime no esta indicado por defecto toma lifetime_transaction
    que significa que el control existira mientras exista el modo que lo creo

    El metodo IS_ALIVE es un metodo de instancia, lo que significa que tienes que tener la clase instanciada (has tenido que hacer previamente un create object)
    si te da dump es porque la clase no esta instanciada o porque el lifetime ha expirado y el objeto ha "muerto" (aunque tu debugenado veas que la variable NO ES INICIAL)

    De hecho hablar de INITIAL para variables declaradas con type ref no es del todo correcto por esta razon, para objetos type ref en lugar de utilizar IS INITIAL seria mas correcto utilizar IS BOUND

    Comentario

    • Jonathan Barrio
      Junior Member
      • nov
      • 25

      #17
      ¿ con BOUND tal vez?

      Ya no me acuerdo de esto de los objetos y los ALV.

      Pero? para llamar a los metodos no tenían que estár capturados mediante una sentencia? Cómo el del doble click...

      ¿ Si en vez de preguntar si es initial o llamar a ese metodo haces un
      IF objeto IS BOUND.
      ENDIF.
      podría valer ?

      Comentario

      • DavidXD_XD
        Moderator
        • ago
        • 1255

        #18
        Hola, a mi me ha tocado hace poco realizar ese tipo de tratamiento de objetos con 2 ALV, uno que siempre existira y el cual llama a otro para mostrar diferentes reportes a partir de un solo contenedor, lo que pasaba era que en la primera ejecucion de la segunda pantalla siempre funcionaba y me mostraba x ejemplo 5 registros, luego regresaba a la pantalla anterior y cuando modificaba datos en otras transaccion para que se reflejara cambios en la segunda pantalla resulta q siempre me salian esos 5 registros y nunca refrescaba, pero justo trabaje con una funcion llamada MD_PEGGING y en la ultima parte llama a un screen 1000, esa funcion me muestra un ALV y en el cual a la hora de darle BACK, EXIT o CANCEL te mata todos los objetos

        1. Ir a la parte final de la funcion y entrar al dynpro 1000
        2. Ir al module check_fcode
        3. No tomar en cuenta el cl_gui_cfw=>dispatch xq matara tu primer ALV
        4. Ir al PERFORM check_fcode
        5. Ir al PERFORM exit_from_alv el cual como veras se encuentra habilitado para los botones BACK, ENDE, STOP, OTHR
        6. Mirar la rutina y de que manera mata los objetos para que cuando los vuelvas a llamar nuevamente los instancies (CREATE OBJECT) como si fuera la primera vez
        7. Fijate que mata sobretodo el grid y el contenedor con un metodo publico de instancia FREE, y luego al final matas la instancia de la clase local si es que has creado el ALV desde una ...

        Espero q esta info t sirva xq yo lo aplique y si me funciono ...

        PD: Lei el primer post y los 3 ultimos xq son un monton , y tal vez estoy dando una mala interpretacion del problema
        David Carballido Córdova

        Comentario

        • Siem
          Member
          • jul
          • 33

          #19
          Originalmente publicado por ballan
          Si el parametro lifetime no esta indicado por defecto toma lifetime_transaction
          que significa que el control existira mientras exista el modo que lo creo

          El metodo IS_ALIVE es un metodo de instancia, lo que significa que tienes que tener la clase instanciada (has tenido que hacer previamente un create object)
          si te da dump es porque la clase no esta instanciada o porque el lifetime ha expirado y el objeto ha "muerto" (aunque tu debugenado veas que la variable NO ES INICIAL)

          De hecho hablar de INITIAL para variables declaradas con type ref no es del todo correcto por esta razon, para objetos type ref en lugar de utilizar IS INITIAL seria mas correcto utilizar IS BOUND
          Disculpa que haya tardado en responder, pero es que he estado un poco enfermo. (Los aires acondicionados, que son muy traicioneros).

          El IS BOUND tambien lo habia probado, pero el resultado es el mismo.

          Si el lifetime es por defecto lifetime_transaction (yo no pongo nada en ese parametro, asi que debe serlo) y eso quiere decir que debe durar mientras dure el modo, entonces puede ser ese el problema.

          ¿Cuando haces un CALL SCREEN 0300 STARTING AT 20 5, se supone que la ventana modal que abre es otro modo? Si es eso, entonces esta claro que si el ALV, al haber cerrado la ventana donde se creo, no me permite hacer el metodo refresh_table_display.


          DavidXD_XD, el problema que comentas me suena que me ha pasado cuando uso el plan B, que es destruir el ALV y volverlo a crear. En ese caso el ALV me mostraba algo distinto a mi tabla interna, pero creo recordar que la primera vez si lo mostraba correctamente. Se parece mucho al problema que comentas.

          Gracias a los dos. Parece que ya va estando mas cerca la explicacion de este problema.

          Comentario

          Trabajando...