- REPORT ZSAVE_ALL.
- * Tabla de campos en tabla. CUIDADO con colisiones o repeticiones.
- TABLES: DD03L.
- *Constante que se utiliza como almacenamiento Mximo
- CONSTANTS: MEMMAX TYPE I VALUE 65497. "Longiud Mxima del Registro
- * Tabla Interna que se utiliza como pila
- DATA: BEGIN OF SAVE_ALL OCCURS 0,
- COMIT TYPE I,
- MODO(1),
- TABLA(30),
- DATOS(MEMMAX),
- END OF SAVE_ALL.
- * Rutina y programa de comprobacin de errores.
- DATA: _RUTINA(30),
- _PROGRAMA(30),
- _COMMIT TYPE I VALUE 0.
- *-------------------- Ejemplo
- TABLES: ZM340.
- BREAK-POINT.
- SELECT * FROM ZM340.
- PERFORM SAVE_TO_MEM USING 'UZM340'.
- IF SY-DBCNT >= 4.
- EXIT.
- ENDIF.
- ENDSELECT.
- *-------------------- Ejemplo
- FORM SEEK_FROM_MEM USING TABLA RUTINA PROGRAMA.
- FIELD-SYMBOLS: <F>.
- LOOP AT SAVE_ALL WHERE TABLA = TABLA.
- ASSIGN (SAVE_ALL-TABLA) TO <F>.
- <F> = SAVE_ALL-DATOS.
- IF NOT _RUTINA IS INITIAL AND NOT _PROGRAMA IS INITIAL.
- PERFORM (_RUTINA) IN PROGRAM (_PROGRAMA) IF FOUND.
- ENDIF.
- ENDLOOP.
- ENDFORM.
- FORM SAVE_ALL_MEM_TO_DB.
- FIELD-SYMBOLS: <F>.
- DATA: TODO(31).
- LOOP AT SAVE_ALL.
- CONCATENATE SAVE_ALL-MODO SAVE_ALL-TABLA INTO TODO.
- ASSIGN (SAVE_ALL-TABLA) TO <F>.
- <F> = SAVE_ALL-DATOS.
- PERFORM SAVE_TO_DB USING TODO.
- ENDLOOP.
- PERFORM SAVE_REFRESH.
- ENDFORM.
- FORM SAVE_TO_MEM USING TABLA.
- FIELD-SYMBOLS: <F>.
- CLEAR: SAVE_ALL.
- SAVE_ALL-TABLA = TABLA.
- SHIFT SAVE_ALL LEFT.
- SAVE_ALL-COMIT = _COMMIT.
- ASSIGN (SAVE_ALL-TABLA) TO <F>.
- SAVE_ALL-DATOS = <F>.
- APPEND SAVE_ALL.
- ENDFORM.
- FORM SAVE_TO_DB USING TABLA.
- FIELD-SYMBOLS: <TAB>, <TABI>, <TABY>.
- DATA: MTAB(30), CAMPO(40), TIPOM(1),
- WTAB(72) OCCURS 0 WITH HEADER LINE.
- MTAB = TABLA.
- TIPOM = TABLA+0(1).
- SHIFT MTAB LEFT. ASSIGN (MTAB) TO <TAB>. ASSIGN (MTAB) TO <TABI>.
- IF TIPOM CA 'DU'.
- * Antes de UPDATE o DELETE nos hemos de posicionar.
- CLEAR WTAB. REFRESH WTAB.
- SELECT * FROM DD03L WHERE TABNAME = MTAB AND
- KEYFLAG = 'X' AND
- FIELDNAME NE 'MANDT'
- ORDER BY POSITION.
- WTAB = 'AND'.
- IF SY-DBCNT = 1. CLEAR WTAB. ENDIF.
- CONCATENATE WTAB DD03L-FIELDNAME '=' INTO WTAB SEPARATED BY ' '.
- CONCATENATE MTAB '-' DD03L-FIELDNAME INTO CAMPO.
- ASSIGN (CAMPO) TO <TABY>.
- CASE DD03L-INTTYPE.
- WHEN 'C' OR 'N'.
- CONCATENATE WTAB ' ''' <TABY> '''' INTO WTAB.
- ENDCASE.
- APPEND WTAB.
- ENDSELECT. BREAK-POINT.
- SELECT SINGLE * FROM (MTAB) INTO <TABI> WHERE (WTAB).
- IF SY-SUBRC NE 0.
- IF NOT _RUTINA IS INITIAL AND NOT _PROGRAMA IS INITIAL.
- PERFORM (_RUTINA) IN PROGRAM (_PROGRAMA).
- ENDIF.
- CHECK 1 = 2.
- ELSE.
- <TAB> = SAVE_ALL-DATOS.
- ENDIF.
- ENDIF.
- CASE TIPOM.
- WHEN 'D'. DELETE (MTAB) FROM <TAB>.
- WHEN 'U'. UPDATE (MTAB) FROM <TAB>.
- WHEN 'I'. INSERT (MTAB) FROM <TAB>.
- WHEN 'M'. MODIFY (MTAB) FROM <TAB>.
- ENDCASE.
- CHECK ( NOT _RUTINA IS INITIAL AND NOT _PROGRAMA IS INITIAL ).
- PERFORM (_RUTINA) IN PROGRAM (_PROGRAMA).
- ENDFORM.
- FORM SAVE_COMMIT_MEM. ADD 1 TO _COMMIT. ENDFORM.
- FORM SAVE_ROLLBACK_MEM.
- CHECK _COMMIT > 0.
- LOOP AT SAVE_ALL WHERE COMIT = _COMMIT.
- DELETE SAVE_ALL.
- ENDLOOP.
- _COMMIT = _COMMIT - 1.
- ENDFORM.
- FORM SAVE_REFRESH. REFRESH SAVE_ALL. CLEAR SAVE_ALL. ENDFORM.
Última modificación de la página el 04 November 2015 a las 15h04
Powered by
PmWiki