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.
DATA: LO_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 (TABNAME) CONNECTION (CON_NAME) FROM 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(ZTASA) WITH LS_TEXTO.
ENDTRY.
ENDMETHOD.
METHOD FORMAT_DATE.
CONSTANTS: LC_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(4) LC_SEP DATE+4(2) LC_SEP DATE+6(2) LC_SPACE
INTO DATE_CHAR RESPECTING BLANKS.
ENDIF.
ENDMETHOD.
METHOD DELETE_QV.
DATA: LO_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 (TABNAME) CONNECTION (CON_NAME) WHERE (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(ZTASA) WITH LS_TEXTO.
ENDTRY.
ENDMETHOD.
METHOD DELETE_ALL_QV.
DATA: LO_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 (TABNAME) CONNECTION (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.