¿Cómo puedo crear dinámicamente los objetos basados en una tabla interna en ABAP?

Tengo una tabla interna llena con el tipo de referencia para los objetos que desea crear, como así (primera línea es el encabezado de la tabla interna ITAB):

+==========+===============+
| OBJ_TYPE | OBJ_CLASS_REF |
+==========+===============+
| TYPE1    | ZCL_CLASS1    |
|---------- | ---------------|
| TYPE2    | ZCL_CLASS2    |
+----------+---------------+

Lo que me gustaría hacer en mi programa es esto (pongo los números de línea):

1   LOOP AT itab
2    "Concatenate LO_ and the value of ITAB-OBJ_TYPE
3     CONCATENATE 'LO_' itab-obj_type INTO v_obj_name.
4    "Create a reference object
5     CREATE DATA (v_obj_name) TYPE REF TO itab-obj_type.
6     CREATE OBJECT (v_obj_name).
7   ENDLOOP

¿Cómo puedo hacerlo con éxito las líneas 5 y 6?

  • Saludos, ¿qué quieres hacer con esos objetos ? Qué tienen en común los métodos o propiedades que desea utilizar ?
  • Por ahora, no tienen en común los métodos o propiedades. Estoy tratando de crear una funcionalidad similar a SCII en crear una nueva clase con el uso de plantillas CL_CI_CATEGORY y CL_CI_SCAN para cuando desea agregar comprobaciones adicionales de la SCI. Lo que pensaba hacer era crear un custom z-tabla que contenga todos los valores de las pruebas optativas que el usuario quiera hacer. Por lo tanto crear dinámicamente los objetos en tiempo de ejecución porque no es hasta entonces que el programa sé lo que comprueba que el usuario desee ejecutar. No sé si mi diseño es bueno, así que por favor avise.
InformationsquelleAutor Eric | 2012-03-13

1 Kommentar

  1. 7

    Primero de todo, es una buena idea para proporcionar una interfaz o un resumen de la superclase y tienen sus diferentes clases implementan la interfaz o subclase de que clase abstracta – esto le ahorrará un montón de innecesario de fundición. Así que digamos que usted tiene ZIF_FOO con clases ZCL_BAR y ZCL_BAZ aplicación. La tabla podría ser

    TYPES: BEGIN OF t_line
             type_name TYPE seoclass,
             instance  TYPE REF TO zif_foo,
           END OF t_line.
    DATA: lt_instances TYPE STANDARD TABLE OF t_line,
          ls_instance  TYPE t_line.
    

    A continuación, puede rellenar la tabla como esta:

    ls_instance-type_name = 'ZCL_BAR'. " or wherever you get this value from
    CREATE OBJECT ls_instance-instance TYPE (ls_instance-type_name).
    

    Si quieres para el uso local de las clases, usted puede hacer lo mismo – sólo tiene que utilizar más el nombre del tipo (SEOCLASS con sus 30 caracteres no será suficiente) y especifique el nombre del tipo, como se describe en la documentación en línea de la RTTI:

    ls_instance-typename = '\PROGRAM=ZMYREPORT\CLASS=LCL_MYCLASS'.
    

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea