Siempre hay que buscar la forma de mejorar el rendimiento a la hora de cargar datos en BW. Una de esas formas es utilizar field-symbols. Siempre se debe utilizar field-symbols para recorrer tanto el source_package como el result_package, debido a que es mucho más rápido que su alternativa, el área de trabajo, y su uso es mucho más sencillo.

¿Qué son los field-symbols?

Un field symbols es un nombre simbólico a un objeto existente. Para entender qué es eso de enlace simbólico, se puede tomar de referencia la siguiente imagen:

Working Area y FIELD_SYMBOLS, comparación

Como se ve en la imagen, un work area (o área de trabajo) es una copia de cada línea de la tabla en un elemento de datos aparte. En cada iteración del LOOP va copiando los valores de la siguiente línea que le toca, de modo que un cambio en el área de trabajo no afecta a la tabla interna hasta que se hace MODIFY t_clientes FROM wa_clientes.

En cambio, un field-symbols afecta directamente a la tabla interna, de modo que en cada iteración de un LOOP se tienen los datos de la tabla (como en el área de trabajo), pero accediendo a ellos de forma directa. De este modo, nos podemos olvidar del MODIFY, APPEND o cualquier otra aproximación que utilizamos cuando modificamos una tabla interna utilizando un área de trabajo.

Field-symbols, un ejemplo práctico

Vamos a ver ahora un ejemplo de cómo se utilizan en la rutina final. En la rutina de inicio se pueden utilizar de forma análoga.

Para contextualizar brevemente el ejemplo, quiero mostrar cómo se utilizan los field-symbols para modificar los datos del result package, cargando datos de otro ODS. Al buscar datos en otro ODS hay que pensar en obtener el mejor rendimiento, por lo que, siempre que sea posible, es mejor utilizar las reglas de transformación que permiten las propias características.

Rutina de inicio, cargando los datos necesarios a una tabla interna

Para obtener los datos del ODS que se necesitan para completar la información se hace un SELECT en la rutina de inicio, cargando todos los datos necesarios en una tabla interna:

Rutina final, ejemplo de acceso y modificación del result_package

En la rutina final recorremos el RESULT_PACKAGE haciendo uso del FIELD-SYMBOLS que SAP nos genera automáticamente:

Para poder utilizar un FIELD-SYMBOLS, hay que asignarlo previamente. En este caso se hace directamente en la sentencia LOOP del siguiente modo:

En este punto, como si de un área de trabajo se tratase, tenemos por cada iteración del LOOP, cada fila del RESULT_PACKAGE, cuando sy-tabix es 1, en el <result_fields> tenemos:

Que no es más que los datos de la primera fila de nuestro fichero, ya que no se aplica ninguna modificación sobre los datos iniciales:

Con el resto de campos en <result_fields> inicializados a cero:

Se accede al dato utilizando READ TABLE, de modo que, utilizando la opción BINARY SEARCH que ofrece, se aumenta el rendimiento de la transformación:

Finalmente, podemos modificar el RESULT_PACKAGE sin necesidad de hacer ni APPEND ni MODIFY en ningún momento, del siguiente modo:

Y para ver cómo actúa directamente sobre el dato de la tabla interna, se puede recurrir al debugger o depurador:

Datos antes de esas dos sentencias (RESULT_PACKAGE):

Datos después de esas dos sentencias (RESULT_PACKAGE):

El código completo es el siguiente:

Rutina de inicio:

Rutina final:

Esperamos que este artículo te haya ayudado a dar el paso y utilizar field-symbols en la rutina de inicio y rutina final en tus transformaciones. No dudes en dejarnos tus preguntas en los comentarios.