martes, 18 de octubre de 2016

ABAP a SQL Server

En este turorial se enseñará cómo eliminar e insertar datos de ABAP a tablas de SQL server:

Se crea una clase SE24

ZCL_BC_EXTRACTOR_QV


METHOD INSERT_QV.
  DATALO_CONNECT   TYPE REF TO CL_SQL_CONNECTION,
        LO_SQL_ERROR TYPE REF TO CX_SY_OPEN_SQL_ERROR,
        LS_TEXTO     TYPE STRING.

* Lógica para insertar los datos a Qlikview
  TRY.

*     Verificar tabla
      IF DATA IS NOT INITIAL.
*       Insertar los  datos en la tabla de Qlikview
        INSERT (TABNAMECONNECTION (CON_NAMEFROM TABLE DATA.
        IF SY-SUBRC IS INITIAL.
          COMMIT WORK.
        ELSE.
          ROLLBACK WORK.
        ENDIF.

      ENDIF.
    CATCH CX_SY_OPEN_SQL_ERROR INTO LO_SQL_ERROR.
      LS_TEXTO LO_SQL_ERROR->GET_LONGTEXT).
      MESSAGE S001(ZTASAWITH LS_TEXTO.
  ENDTRY.
ENDMETHOD.



METHOD FORMAT_DATE.
  CONSTANTSLC_SPACE TYPE CHAR15 VALUE '               ',
             LC_SEP   TYPE CHAR01 VALUE '-'.

  IF DATE IS NOT INITIAL OR DATE NE '00000000'.
*   Formatea la fecha  en formato SAP al formato en SQL
    CONCATENATE DATE+0(4LC_SEP DATE+4(2LC_SEP DATE+6(2LC_SPACE
    INTO DATE_CHAR RESPECTING BLANKS.
  ENDIF.
ENDMETHOD.




METHOD DELETE_QV.
  DATALO_CONNECT   TYPE REF TO CL_SQL_CONNECTION,
        LO_SQL_ERROR TYPE REF TO CX_SY_NATIVE_SQL_ERROR,
        LS_TEXTO     TYPE STRING.

* Lógica para borrar los datos a Qlikview
  TRY.
*       Borrar los  datos en la tabla de Qlikview
      DELETE FROM (TABNAMECONNECTION (CON_NAMEWHERE (CONDICION).
      IF SY-SUBRC IS INITIAL.
        COMMIT WORK.
      ELSE.
        ROLLBACK WORK.
      ENDIF.

    CATCH CX_SY_NATIVE_SQL_ERROR INTO LO_SQL_ERROR.
    LS_TEXTO LO_SQL_ERROR->GET_LONGTEXT).
    MESSAGE S001(ZTASAWITH LS_TEXTO.
  ENDTRY.


ENDMETHOD.




METHOD DELETE_ALL_QV.
  DATALO_CONNECT   TYPE REF TO CL_SQL_CONNECTION,
        LO_SQL_ERROR TYPE REF TO CX_SY_NATIVE_SQL_ERROR.

* Lógica para borrar los datos a Qlikview
  TRY.
*       Borrar los  datos en la tabla de Qlikview
      DELETE FROM (TABNAMECONNECTION (CON_NAME).
      IF SY-SUBRC IS INITIAL.
        COMMIT WORK.
      ELSE.
        ROLLBACK WORK.
      ENDIF.

    CATCH CX_SY_NATIVE_SQL_ERROR INTO LO_SQL_ERROR.

  ENDTRY.


ENDMETHOD.




Se crea un programa un programa ABAP, una tabla en R3 y una tabla en SQL con la misma estructura y nombre.

Nombre será el nombre de la tabla creada y PO_TABLA es el nombre de la tabla interna


* Clase conexión a base de datos QV
  DATA LO_EXTRACTOR TYPE REF TO ZCL_BC_EXTRACTOR_QV,
         LS_FILTRO TYPE STRING,
         LS_INICIO TYPE CHAR50,
         LS_FIN TYPE CHAR50.
  FIELD-SYMBOLS<LS_FECHA> LIKE LINE OF GR_FECHA.


* Inicializar clase de conexión
*   Creo el objeto
    CREATE OBJECT LO_EXTRACTOR.

    READ TABLE GR_FECHA ASSIGNING <LS_FECHA> INDEX 1.
    IF SY-SUBRC 0.
      IF <LS_FECHA>-OPTION 'BT'.
        LS_INICIO <LS_FECHA>-LOW.
        LS_FIN <LS_FECHA>-HIGH.
        CONCATENATE 'FECHA BETWEEN ''' LS_INICIO ''' AND  '''
        LS_FIN '''' INTO LS_FILTRO RESPECTING BLANKS.
      ELSEIF <LS_FECHA>-OPTION 'EQ'.
        LS_INICIO <LS_FECHA>-LOW.
        CONCATENATE 'FECHA = ''' LS_INICIO INTO LS_FILTRO RESPECTING BLANKS.
      ENDIF.

*   Borramos los registros
      CALL METHOD LO_EXTRACTOR->DELETE_QV
        EXPORTING
          CON_NAME  = ''BD_QLIKVIEW''
          TABNAME   NOMBRE
          CONDICION LS_FILTRO.
    ENDIF.

*   Insertamos los registros
    CALL METHOD LO_EXTRACTOR->INSERT_QV
      EXPORTING
        CON_NAME = 'BD_QLIKVIEW'
        TABNAME  NOMBRE
        DATA     PO_TABLA.

No hay comentarios:

Publicar un comentario