Inicio del área de contenido

Ejemplo Llamada de función Localizar documento en árbol de navegación

Este ejemplo se sirve de una acción para mostrar cómo se pueden utilizar las funciones para la inferencia de valores.

Por ejemplo, se puede utilizar una función para enlazar valores de varias características, y que esos valores formen el valor de otra característica.

En nuestro ejemplo, un fabricante de ordenadores desea utilizar etiquetas en sus PCs para que de un vistazo se pueda saber el tipo de caja que posee el PC, la capacidad del disco duro y el tipo de procesador que lleva instalado.

El PC posee la característica CAJA para la caja, CPU para el procesador y HD para el disco duro. El texto de la etiqueta es el valor de la característica LABEL_ID.

Para calcular el valor de la característica LABEL_ID, se crea el módulo de función Z_LABEL_ID y una función con el mismo nombre y se asigna las características CAJA, CPU, HD y LABEL_ID a la función. Se ha definido la primera alternativa de evaluación de modo que las características CAJA, CPU y HD sean parámetros para input para determinar el valor de la característica LABEL_ID.

Utilice esta función en una acción del siguiente modo:

FUNCTION Z_LABEL_ID

(CAJA = $ROOT.CAJA,
CPU = $ROOT.CPU,
HD = $ROOT.HD,
LABEL_ID = $SELF.LABEL_ID)

Las características situadas a la izquierda son las características de la función. Las características situadas a la derecha son las características del PC. Se debe referir a la característica LABEL_ID con la variable $SELF, porque la característica LABEL_ID es una característica del objeto actualmente en tratamiento. De lo contrario, no se podrá deducir valores. El objeto $ROOT por defecto se da por supuesto para las otras características.

Esa acción se asignará al perfil de configuración del material PC.

Tan pronto como se asignen valores a las características CAJA, CPU y HD, la función fijará un valor para la característica LABEL_ID.

Configura el PC, asignando los valores siguientes a las características CAJA, CPU, y HD:

CAJA = ‘TW’ (formato alfanumérico)

CPU = ‘586’ (formato alfanumérico)

HD = 1275 (formato numérico)

Esos valores se trasladarán al módulo de funciones Z_LABEL_ID como parámetros para import en la tabla QUERY. En el módulo de funciones Z_LABEL_ID, se leerán las características y valores desde la tabla de la interfase mediante el módulo de funciones CUOV_GET_FUNCTION_ARGUMENT.

Si desea formatear el valor de una característica numérica como entero (por ejemplo, 1275) y no como decimal (por ejemplo, 1.275,00), el valor trasladado por el módulo de funciones CUOV_GET_FUNCTION_ARGUMENT se deberá convertir en entero. Para ello, utilice la operación 'move value_num to value_int'.

Si se desea utilizar los valores para realizar operaciones de cálculo, probablemente sería mejor utilizar decimales en vez de convertirlos en enteros.

Los nombres de las características deben introducirse para el código en mayúsculas. Las minúsculas no se convierten automáticamente.

El comando CONCATENATE de ABAP enlaza valores de características para formar un string. Valores individuales se separan mediante guiones. Este string se traslada a ID_CHAR. El módulo de funciones CUOV_SET_FUNCTION_ARGUMENT devolverá el valor para la característica LABEL_ID y trasladará ese valor a la tabla MATCH.

En esta configuración se fija el valor 'TW-586-1275' para la característica LABEL_ID.

El código en el módulo de funciones relativo a la función es el siguiente:

Ejemplo de código para el módulo de funciones Z_LABEL_ID

function Z_LABEL_ID.

*"----------------------------------------------------------------------

*"*"Interfase local:

*" IMPORTING

*" VALUE(GLOBALS) LIKE CUOV_00 STRUCTURE CUOV_00

*" TABLES

*" QUERY STRUCTURE CUOV_01

*" MATCH STRUCTURE CUOV_01

*" EXCEPTIONS

*" FAIL

*" INTERNAL_ERROR

*"----------------------------------------------------------------------

data: id_char like cuov_01-atwrt, para el resultado de la concatenación

valor1 like cuov_01-atwrt, para la característica CAJA'

valor2 like cuov_01-atwrt, para la característica 'CPU'

valor3_num like cuov_01-atflv, para la característica numérica 'HD'

valor3_int(4) type N

dash(1) type c value '-'.

*..inicializar la tabla con parámetros para export.............................*

refresh match.

 

*..Obtener valor de característica requerida CAJA

call function 'CUOV_GET_FUNCTION_ARGUMENT'

exporting

argument = 'CAJA'

importing

sym_val = valor1

tables

query = query

exceptions

arg_not_found = 01.

if sy-subrc <> 0.

raise internal_error.

endif.

*..Obtener valor de característica requerida CPU

call function 'CUOV_GET_FUNCTION_ARGUMENT'

exporting

argument = 'CPU'

importing

sym_val = valor2

tables

query = query

exceptions

arg_not_found = 01.

if sy-subrc <> 0.

raise internal_error.

endif.

*..Obtener valor de característica requerida HD

call function 'CUOV_GET_FUNCTION_ARGUMENT'

exporting

argument = 'HD'

importing

num_val = valor3_num

tables

query = query

exceptions

arg_not_found = 01.

if sy-subrc <> 0.

raise internal_error.

endif.

*..Todas las características numéricas necesitarían ser

*.. convertidas en campos de número entero, porque el CUOV_GET_FUNCTION_ARGUMENT

*..los suministra como holguras.

move valor3_num to valor3_int

*..Efectuar la concatenación

concatenate valor1

dash

valor2

dash

valor3_int

into id_char.

*.. añadir el resultado a la tabla de características de edición

call function 'CUOV_SET_FUNCTION_ARGUMENT'

exporting

argument = 'LABEL_ID'

vtype = 'CHAR'

sym_val = id_char

tables

match = match

exceptions

existing_value_replaced = 01.

 

endfunction.

 

 

 

 

Fin del área de contenido