Press "Enter" to skip to content

SAP BW Creación de fuentes de extracción utilizando módulos de función

admin 0

SAP BW Creación de fuentes de extracción utilizando módulos de función

La creación de fuentes desde un SAP ECC a BW puede ser variada, desde una simple vista replicada a BW, un infoset, una tabla, donde los datos pueden ser datos maestros, textos o bien transaccionales, es decir que conforman datos del día a día en una empresa ( Pedidos, facturas, ordenes compra, etc), en este artículo intentare explicar el uso de uno de los más elaborados por no decir complejo, el de los creados a partir de un módulo de función, donde principalmente se utiliza ABAP como herramienta de desarrollo, esto se realiza del lado del emisor de datos en este caso SAP ECC.

Lo requerido es basarnos en una función existente llamada RSAX_BIW_GET_DATA_SIMPLE de naturaleza FULL, es decir que los datos que obtiene son masivos y no diferencia previas cargas, aunque se puede ajustar para manipular ejecuciones DELTA analizaremos un ejemplo sencillo de carga FULL con los modelos SFLIGHT que incorpora SAP:

Lo primero es ajustar la estructura de salida de datos, que se amarra con el campo de Tablas
E_T_DATA en este ejemplo esta SFLIGHT porque es igual a lo que deseamos sacar, si deseamos combinar tablas la estructura debe tener la totalidad de campos a mostrar en la extracción.

Código:

FUNCTION RSAX_BIW_GET_DATA_SIMPLE.
*»———————————————————————-
*»*»Lokale Schnittstelle:
*»  IMPORTING
*»     VALUE(I_REQUNR) TYPE  SRSC_S_IF_SIMPLE-REQUNR
*»     VALUE(I_DSOURCE) TYPE  SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL
*»     VALUE(I_MAXSIZE) TYPE  SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL
*»     VALUE(I_INITFLAG) TYPE  SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL
*»     VALUE(I_READ_ONLY) TYPE  SRSC_S_IF_SIMPLE-READONLY OPTIONAL
*»     VALUE(I_REMOTE_CALL) TYPE  SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF
*»  TABLES
*»      I_T_SELECT TYPE  SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL
*»      I_T_FIELDS TYPE  SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL
*»      E_T_DATA STRUCTURE  SFLIGHT OPTIONAL
*»  EXCEPTIONS
*»      NO_MORE_DATA
*»      ERROR_PASSED_TO_MESS_HANDLER
*»———————————————————————-

* Example: DataSource for table SFLIGHT
TABLESSFLIGHT.
«este parametro es adjustable dependiendo los datos que requerimos se declaran las tablas necesarias

* Auxiliary Selection criteria structure
DATAL_S_SELECT TYPE SRSC_S_SELECT.

* Maximum number of lines for DB table
STATICSS_S_IF TYPE SRSC_S_IF_SIMPLE,

* counter
S_COUNTER_DATAPAKID LIKE SYTABIX,

* cursor
S_CURSOR TYPE CURSOR.
* Select ranges
RANGESL_R_CARRID  FOR SFLIGHTCARRID, «definicion de Rangos para
L_R_CONNID  FOR SFLIGHTCONNID. «filtros

* Initialization mode (first call by SAPI) or data transfer mode
* (following calls) ?
IF I_INITFLAG SBIWA_C_FLAG_ON.

************************************************************************
* Initialization: check input parameters
*                 buffer input parameters
*                 prepare data selection
************************************************************************

* Check DataSource validity
CASE I_DSOURCE.
WHEN ‘0SAPI_SFLIGHT_SIMPLE’.»Nombre del datasource en RSO2 definido
WHEN OTHERS.
IF 2MESSAGE E009(R3). ENDIF.
* this is a typical log call. Please write every error message like this
LOG_WRITE ‘E’                  «message type
‘R3’                 «message class
‘009’                «message number
I_DSOURCE   «message variable 1
‘ ‘.                 «message variable 2
RAISE ERROR_PASSED_TO_MESS_HANDLER.
ENDCASE.

APPEND LINES OF I_T_SELECT TO S_S_IFT_SELECT.

* Fill parameter buffer for data extraction calls
S_S_IFREQUNR    I_REQUNR.
S_S_IFDSOURCE I_DSOURCE.
S_S_IFMAXSIZE   I_MAXSIZE.

* Fill field list table for an optimized select statement
* (in case that there is no 1:1 relation between InfoSource fields
* and database table fields this may be far from beeing trivial)
APPEND LINES OF I_T_FIELDS TO S_S_IFT_FIELDS.

ELSE.                 «Initialization mode or data extraction ?

************************************************************************
* Data transfer: First Call      OPEN CURSOR + FETCH
*                Following Calls FETCH only
************************************************************************

* First data package -> OPEN CURSOR
IF S_COUNTER_DATAPAKID 0.

* Fill range tables BW will only pass down simple selection criteria
* of the type SIGN = ‘I’ and OPTION = ‘EQ’ or OPTION = ‘BT’.

*Rellenar campos para filtro
LOOP AT S_S_IFT_SELECT INTO L_S_SELECT WHERE FIELDNM ‘CARRID’.
MOVE-CORRESPONDING L_S_SELECT TO L_R_CARRID.
APPEND L_R_CARRID.
ENDLOOP.

LOOP AT S_S_IFT_SELECT INTO L_S_SELECT WHERE FIELDNM ‘CONNID’.
MOVE-CORRESPONDING L_S_SELECT TO L_R_CONNID.
APPEND L_R_CONNID.
ENDLOOP.

* Determine number of database records to be read per FETCH statement
* from input parameter I_MAXSIZE. If there is a one to one relation
* between DataSource table lines and database entries, this is trivial.
* In other cases, it may be impossible and some estimated value has to
* be determined.
OPEN CURSOR WITH HOLD S_CURSOR FOR

*Definicion de SQL que obtendra la información y la pasara al puntero
      
SELECT (S_S_IFT_FIELDSFROM SFLIGHT
WHERE CARRID  IN L_R_CARRID AND
CONNID  IN L_R_CONNID.

ENDIF.                             «First data package ?

* Fetch records into interface table.
*   named E_T_’Name of extract structure’.
FETCH NEXT CURSOR S_CURSOR
APPENDING CORRESPONDING FIELDS
OF TABLE E_T_DATA
PACKAGE SIZE S_S_IFMAXSIZE.

IF SYSUBRC <> 0.
CLOSE CURSOR S_CURSOR.
RAISE NO_MORE_DATA.
ENDIF.

S_COUNTER_DATAPAKID S_COUNTER_DATAPAKID + 1.

ENDIF.              «Initialization mode or data extraction ?

ENDFUNCTION.

Después de ajustar la información mencionada podremos probar el extractor, no sin antes definir el datasource en la transacción RSO2 en el apartado Extracción Vía módulo de funciones, se asigna función y estructura ejemplo:

También es posible probar nuestra extracción vía el test de módulo de funciones:

Si la tabla SFLIGHT contiene información esta será impresa como resultado en E_T_DATA, con esto garantizamos que el extractor es funcional de manera FULL.

Existen varias formas de crear extracciones DELTA basadas principalmente en cronomarcador, Día Natural o Puntero Numérico

1. Cronomarcador – El campo es un campo DEC15 que siempre contiene el cronomarcador de la última modificación de un registro en hora local.

2. Día natural – El campo es un campo DATS8 que siempre contiene el día de la última modificación generalmente ERDAT.

3. Puntero numérico – El campo contiene otro puntero numérico que se incrementa con cada registro nuevo como por ejemplo la serializacion de facturas o Documentos que son incrementales y no se repiten.

En la definición de nuestro datasource podremos encontrar una opción llamada Delta Genérico
al accesarla encontraremos la siguiente ventana:

Dependiendo el tipo de extractor las opciones DELTA son recortadas, en este ejemplo no se visualiza Puntero Numérico porque es de un módulo de función

Límite superior intervalo seguridad selección delta

Este campo es utilizado por fuentes de datos que determinan de forma genérica su delta mediante un campo ascendente de forma monótona de la estructura de extracción.

Incluye la distancia entre el estado máximo actual en el momento de la extracción del delta o de la extracción DeltaInit y los datos realmente leídos.

Si el valor es inicial existe el peligro de que durante la extracción no puedan extraerse registros generados.

Ejemplo: Para determinr el delta se utiliza un cronomarcador. El último cronomarcador leído está fijado en 12:00:00. La siguiente extracción del delta comienza a las 12:30:00. El intervalo de selección es por tanto de 12:00:00 a 12:30:00. Al final de la extracción, el puntero se fija en 12:30:00.

Un registro, por ejemplo un documento, se crea a las 12:25 pero no se graba hasta las 12:35. No se encuentra incluido en los datos extraídos pero, debido a su cronomarcador, tampoco se extrae la próxima vez.

Por este motivo, la distancia de seguridad entre los datos leídos y los transferidos debe ser siempre mayor que el tiempo que puede durar como máximo la creación de un registro para esta fuente de datos (en el caso de delta de cronomarcador) o representar un intervalo lo suficientemente grande (en el caso de determinación del delta mediante un número correlativo).

Límite inferior interv.seguridad

Este campo contiene el valor que debe ser extraído del stock máximo de la última extracción para determinar el valor mínimo del cronomarcador de la siguiente extracción delta.

Ejemplo: Para determinar el delta se utiliza un cronomarcador. Los datos extraídos son datos maestros: se transfieren sólo After-Images que sobrescriben el status en el BW. Con este tipo de datos es posible por tanto extraer sin problemas un registro dos veces en el BW.

Teniendo en cuenta este hecho, al efectuar una extracción se puede utilizar como límite superior siempre el cronomarcador actual: sin embargo, el límite inferior de la siguiente extracción no se enlaza simplemente al límite superior de la última extracción, sino que acepta un valor que equivale a este límite superior menos un intervalo de seguridad. Este intervalo de seguridad debe ser tan grande como para que todos los valores que en el momento de la última extracción contengan ya un cronomarcador pero aún no hayan sido leídos estén contenidos en la extracción. Naturalmente, también se transfieren registros dos veces pero debido a las razones mencionadas esto no tiene importancia.

Fuente datos es posible en tiempo real

El indicador «susceptible de tiempo real» determina si una fuente de datos susceptible de delta puede utilizarse como proveedor de datos para un demon en tiempo real.

Si la fuente de datos determina el delta de forma genérica mediante un campo relevante para delta, tenga en cuenta lo siguiente en relación con los intervalos de seguridad:

  • Si el intervalo de seguridad está en el límite inferior, cabe la posibilidad de que los datos lleguen de forma redundante al BW. Para los InfoCubos y los objetos ODS con ratios actualizados de forma aditiva, estos datos no son apropiados. Asimismo, en el caso de una actualización en tiempo real, la redundancia de los datos aumenta debido a los cortos períodos de tiempo entre las diferentes ejecuciones del demon en tiempo real. Con un intervalo de tiempo inferior de dos minutos y una frecuencia de demon uno por minuto, todos los datos están potencialmente tres veces en el PSA.
  • El intervalo de seguridad en el límite superior reduce la actualidad de los datos. La actualidad de los datos en tiempo real es siempre la suma del intervalo de seguridad superior y el período entre dos ejecuciones del demon.

Tipo delta de datos extraídos

Mediante el tipo de delta se especifica cómo deben interpretarse en el Business Information Warehouse los datos extraídos y en qué destinos de datos pueden contabilizarse.

Se diferencia entre:

1. Delta adicional

Los ratios de los datos extraídos se suman en el Business Information Warehouse. Las fuentes de datos con este tipo de delta pueden proporcionar objetos ODS e InfoCubos con datos.

2. Nuevo estado para registros modificados

Cada registro a cargar proporciona el estado nuevo para los ratios y las características. Las fuentes de datos con este tipo delta pueden escribir en objetos ODS o tablas de datos maestros.

 SAP BW Creación de fuentes de extracción utilizando módulos de función

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *