Diccionario de Datos

DICCIONARIO DE DATOS Diccionario de datos El diccionario de datos es la “fuente” de información centralizada de todo e

Views 78 Downloads 0 File size 170KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

DICCIONARIO DE DATOS

Diccionario de datos El diccionario de datos es la “fuente” de información centralizada de todo el sistema SAP, allí se encuentra (y almacena) todos los datos que se procesan en el sistema; es, digamos, el corazón de SAP. En el Diccionario de Datos (de ahora en adelante el diccionario), encontramos la siguiente estructura de objetos, ordenados desde su capa más inferior: • • • • •

Dominio. Elemento de Datos. Campo. Estructura de Datos. Tablas.

El DOMINIO describe el campo de valores posibles, es de un carácter técnico, es el nivel más bajo que existe para determinar el tipo de dato de un objeto. Ejemplo; un dominio denominado tiene un tipo de dato CHAR de tamaño 10 (una cadena de caracteres de 10 posiciones).

Diccionario de Datos – RichardRey.com - 2

El ELEMENTO DE DATOS describe el significado de un campo independientemente de las tablas donde se utilice. Tiene un carácter semántico. Un elemento de datos está asociado a un dominio, y puede ser utilizado en múltiples tablas, incluso ser referenciado directamente desde un programa al momento de declarar una nueva variable. Siguiendo el ejemplo anterior, tenemos un elemento de datos llamado , que hace referencia al tipo de avión, y está formado por el dominio , mostrado antes.

NOTA: Desde el editor de un programa ABAP, podemos declarar una variable que haga referencia a un elemento de datos; de esta forma, la variable tomará el tipo de datos del dominio asociado a dicho elemento de datos. Siguiendo con el ejemplo: DATA: var TYPE S_PLANETYE.

En este caso, la variable denominada será una cadena de caracteres de 10 posiciones, o dicho de otra manera, un campo tipo texto de 10 posiciones; porque le indicamos que tome las propiedades del elemento de datos , y ese elemento de datos tiene como dominio el objeto , que como vimos arriba, se trata de un tipo CHAR de 10 posiciones. Si te confunde un poco, lo siguiente lo esclarecerá. DATA: var TYPE S_PLANETYE. DATA: var TYPE char10.

Diccionario de Datos – RichardRey.com - 3

Las dos instrucciones escritas arriba obtienen exactamente el mismo resultado, la variable será un tipo CHAR de 10 posiciones. La ventaja de esta forma de estructurar el diccionario es que si cuentas con una serie de tablas, con campos del mismo tipo, por ejemplo CHAR10, si bien se permite asignarle a cada campo directamente el tipo de datos CHAR de 10 posiciones; hacerlo de esta manera implica que, al momento de ser solicitado un cambio del tipo de datos, (digamos que piden cambiarlo a un CHAR de 12 posiciones), te corresponde modificar tabla por tabla para ajustar todos los campos afectados. Si en su lugar, se crea un elemento de datos cuyo dominio sea un objeto de tipo CHAR10, pongámosle por nombre ; y le asignamos el ED a los campos de cada tabla; al momento de requerir el ajuste a CHAR12, bastará con cambiar el dominio del elemento de datos para que el cambio se replique en TODAS las tablas que lo contengan; es decir, haríamos el cambio una sola vez, y éste se replica en todas las tablas que hacen referencia al elemento de datos. EL CAMPO, como su nombre lo indica, es el renglón o columna de una estructura de datos. Si recuerdas del capítulo anterior el momento en que mencionábamos la creación de una estructura de datos, cuya sentencia sería la siguiente: DATA: BEGIN OF nombre_estructura, var1 TYPE i, var2 TYPE i, END OF nombre_estructura.

Las variables y serán campos de la estructura de datos creada. Lo mismo ocurre con el diccionario de datos, el campo es el espacio o columna única de cada tabla o estructura de datos; y a cada campo se le asigna un elemento de datos existente, absorbiendo el campo las propiedades del elemento de datos.

Diccionario de Datos – RichardRey.com - 4

Como vemos en la gráfica, un campo llamado perteneciente a la tabla SFLIGHT y está formado por el elemento de datos que vimos anteriormente.

La ESTRUCTURA DE DATOS la vimos un poco en el capítulo anterior (Tipos de Datos en ABAP), se trata de un conjunto de campos relacionados lógicamente entre sí en un único objeto, que recibe por nombre Estructura de Datos. Lo que en ABAP se conoce como Estructura de Datos, en otros lenguajes de programación podrían conocerse como Arreglos o Registros, sería de manera general una analogía válida. En el capítulo de los Tipos de Datos, pudimos ver cómo se pueden crear estructuras de datos directamente desde el editor ABAP.

Diccionario de Datos – RichardRey.com - 5

a) Declarando las variables (campos) en el mismo editor. DATA: BEGIN OF nombre_estructura, var1 TYPE i, var2 TYPE i, END OF nombre_estructura. b) Tomando como referencia una estructura de datos ya creada en el Diccionario. DATA BEGIN OF sociedad. INCLUDE STRUCTURE SYST. DATA END OF sociedad.

También, las estructuras de datos pueden crearse en el Diccionario, como la estructura usada en el ejemplo anterior, que contiene las variables del sistema.

Una Estructura de Datos contiene un único registro; si deseamos guardar múltiples registros con la misma estructura, tendremos que pasar a crear una tabla basada en dicha estructura de datos.

Diccionario de Datos – RichardRey.com - 6

Las TABLAS son objetos, basados en estructuras de datos, capaces de almacenar gran cantidad de información en múltiples líneas de registros. Un ejemplo de tablas en el Diccionario de Datos lo vimos en la imagen que reflejaba la tabla SFLIGHT; y si en un programa quisiéramos crear una tabla cuya forma sea similar a la estructura de datos ; lo podríamos hacer de la siguiente manera: DATA: itab TYPE TABLE OF SYST.

Tipos de tablas. Existen diversos tipos de tablas: • • •

Tablas TRANSP (transparentes): Tablas normales relacionales (SQL). Tablas POOL: Tablas SAP que se guardan junto a otras tablas SAP en una única tabla física de Base de Datos. Mejorando el acceso a los registros. Tablas CLUSTER: Varias tablas que se guardan en un cluster de Base de Datos. Se guardan registros de varias tablas SAP con la misma clave cluster, en el mismo cluster físico de la base de datos.

Las que usaremos cada día serán las tablas transparentes, que es el nombre que le da SAP a las tablas de Base de Datos relacionales. De hecho, los dos términos más comunes utilizados en el día a día de un Consultor ABAP son “tablas transparentes” y “tablas internas”; ya comprendimos que las primeras son las tablas del Diccionario de Datos, y las segundas son espacios de memoria que se utilizan dentro de un programa, cuya existencia es únicamente en tiempo de ejecución del programa en cuestión.

Los datos en SAP. Los datos en SAP se pueden clasificar de la siguiente manera: • • •

Datos maestros: Son datos que no se modifican muy a menudo. Ejemplo: Materiales, Cuentas, Bancos, Clientes. Se almacenarán en tablas transparentes. Datos de movimientos: Datos muy volátiles y con gran volumen de generación. Ejemplo: Facturas, Pedidos. Se suelen guardar en tablas tipo CLUSTER todos ellos con formato parecido (documentos). Datos del sistema o de control: Muchas tablas con pocos datos. Se suelen guardar en tablas de tipo POOL.

Diccionario de Datos – RichardRey.com - 7

Instrucciones SQL de ABAP. El lenguaje ABAP tiene un conjunto de sentencias SQL para su aplicación sobre tablas de la base de datos SAP. Algo muy interesante de este entorno de programación, es que, a diferencia de otros lenguajes, no se requiere realizar ningún tipo de protocolo de conexión con la base de datos; escribimos directamente las sentencias SQL y el sistema se encarga de comunicarse con el diccionario de datos de manera implícita para nosotros. Éstas son las instrucciones SQL permitidas: • • • • • • •

SELECT INSERT UPDATE MODIFY DELETE COMMIT WORK ROLLBACK WORK

Adicionalmente, contamos con las siguientes variables del sistema: •



SY-SUBRC: Código de retorno de una operación. El valor 0 indica que la instrucción fue satisfactoria y se cumplió el objetivo, bien sea obtener datos de una tabla, o insertar/modificarlos; un retorno con valor 4 indica que la consulta no arrojó datos, o bien no se pudo insertar/modificar en un tabla del diccionario. SY-DBCNT: Cantidad de registros afectados por la operación procesada si se trata de una modificación/inserción, o bien la cantidad de registros encontrados en una consulta.

SELECT: Instrucción fundamental para leer información de la base de datos. Lectura de un único registro: SELECT SINGLE * FROM WHERE . Si SY-SUBRC = 0.

Registro encontrado. Resultado en .

Si SY-SUBRC = 4.

No existe el registro buscado.

Lectura Iterativa: Selección de un grupo de registros. SELECT * FROM (WHERE ). ENDSELECT.

Diccionario de Datos – RichardRey.com - 8

Selecciona cada uno de los registros que cumplan la condición de la cláusula WHERE, (o todos en caso de no utilizarla). El resultado lo tendremos en el área de trabajo . En cada iteración del ciclo SELECT - ENDSELECT se procesa un único registro encontrado, y el ciclo se repetirá tantas veces como registros se consigan. Es útil si se desea realizar algún tratamiento a cada registro encontrado de una vez. Si SY-SUBRC = 0.

Algún registro encontrado.

Si SY-SUBRC = 4.

No existe ningún registro que cumpla la condición del WHERE.

Ejemplo: SELECT * FROM mara WHERE matnr = itab-matnr. WRITE: mara-matnr. ENDSELECT. Por cada registro encontrado, se imprime en pantalla el valor de dicho registro y se sigue leyendo en la tabla en búsqueda de más registros. Otras posibilidades del WHERE: SELECT * FROM WHERE ... BETWEEN AND . Si está entre los valores y . LIKE . Si cumple la condición. También se pueden utilizar: • • •

‘_’ como caracter cualquiera. ‘%’ como una cadena de caracteres. IN (, ...). Si esta en el conjunto de valores , ...

Otras lecturas: Podemos leer una tabla de base de datos y simultáneamente llenar una tabla interna con el resultado de la lectura. SELECT * FROM INTO TABLE (WHERE ).

Diccionario de Datos – RichardRey.com - 9

Esta instrucción lee la base de datos, obtiene todos los registros que cumplan con la condición, y los almacena en una tabla interna llamada . A diferencia del ciclo SELECT – ENDSELECT, en el que por cada acierto se procede a leer en la base de datos; aquí se realiza un único acceso a las tablas para extraer todos los registros que cumplan con la condición. Si bien ambas opciones cumplen con el mismo resultado, por temas de rendimiento recomiendo utilizar esta última ya que se consumen menos recursos con un único acceso a BD, para obtener todas las coincidencias en una tabla interna, y luego procesar esos resultados desde la tabla interna, que como ya sabemos, es un objeto propio del programa en ejecución. Veamos cómo queda el mismo ejemplo del caso anterior: SELECT * INTO TABLE itab FROM mara WHERE matnr = itab-matnr. LOOP AT itab. WRITE: itab-matnr. ENDLOOP. NOTA: En un capítulo posterior veremos que es un LOOP.

Podemos indicar un orden en el proceso de selección de registros. SELECT *...ORDER BY . No requiere mayor explicación salvo que el criterio de ordenamiento siempre es prevaleciendo el campo de la izquierda.

Diccionario de Datos – RichardRey.com - 10

INSERT: Permite introducir registros sencillos o el contenido de una tabla interna en una base de datos SAP. INSERT . Grabará en la BD el contenido de la estructura . Si SY-SUBRC = 0.

Registro insertado.

Si SY-SUBRC > 0.

La clave del registro que queríamos insertar ya existía en la tabla.

También es posible introducir datos desde una tabla interna. INSERT FROM TABLE . Si SY-SUBRC = 0.

Registros insertados.

Si existe algún registro en la BD (base de datos) con clave igual a algún registro de la tabla interna, se producirá un error de ejecución del programa. (Por registro duplicado).

UPDATE: Permite modificar el contenido de uno o varios registros. UPDATE . Modifica el registro de la base de datos que está especificado en la estructura . Si queremos modificar el contenido de más de un registro a la vez: UPDATE SET = WHERE . Con este UPDATE, todos los registros que cumplan modificarán el contenido del por . Es posible modificar registros desde una tabla interna: UPDATE FROM TABLE . Si el sistema no puede actualizar un registro, el proceso no finalizará sino que continuará con el siguiente registro.

Diccionario de Datos – RichardRey.com - 11

Si SY-SUBRC = 0.

Todos los registros modificados.

Si SY-SUBRC = 4.

No todos los registros han sido modificados.

En SY-DBCNT Tendremos la cantidad de registros modificados.

MODIFY: Se utiliza cuando no se sepa con certeza si un registro existe o no, para modificarlo o añadirlo. MODIFY . MODIFY FROM TABLE .

NOTA: En caso de que conocerse la existencia o no de un registro, se recomienda utilizar INSERT o UPDATE.

DELETE: Se utiliza para realizar borrados de datos en una BD del Diccionario. DELETE . Borrará el registro que especifiquemos en el área de trabajo. DELETE FROM WHERE . cumplan la condición ).

Para borrar más de un registro (todos los que

DELETE FROM FROM TABLE . Para borrar en la tabla transparente , todos los registros contenidos en la tabla interna . Si SY-SUBRC = 0.

Todos los registros han sido borrados.

Si SY-SUBRC = 4.

No todos los registros han sido borrados.

En SY-DBCNT tendremos la cantidad de registros borrados.

Diccionario de Datos – RichardRey.com - 12

Otros aspectos del Diccionario de Datos. El control de mandante (ese numerito que representa el sistema al que estamos conectados), es automático. Siempre se procesará el mandante en uso; en caso de requerir procesar datos de otro cliente/mandante diferente al que estamos conectados, utilizaremos la instrucción CLIENT SPECIFIED en nuestras consultas al Diccionario. Debemos evitar el uso de las instrucciones INSERT, DELETE, MODIFY y UPDATE sobre las tablas del Diccionario; si requerimos hacer un cambio a nivel de datos, éstos se harán vía transacciones estándar, módulos de funciones (BAPI) o Bath Input; ya que los datos que se guardan en una transacción suelen estar replicados en diferentes tablas, y si modificamos el contenido de una tabla en particular, podríamos generar inconsistencias importantes en el sistema.

Actualización de la Base de Datos. Si deseamos forzar un cambio que afecta alguna tabla de la Base de Datos, debemos ejecutar la sentencia COMMIT WORK en nuestros programas, esta sentencia realiza un UPDATE físico en la BD, haciendo irrevocable cualquier modificación. Si deseamos deshacer los cambios hechos luego del último COMMIT WORK, utilizaremos la sentencia ROLLBACK WORK, esta sentencia nos reversa los cambios hasta el estado en que se encontraban tras el último COMMIT WORK ejecutado.

Chequeo de autorizaciones. Todas las consultas SQL en SAP no realizan verificación alguna sobre autorizaciones de usuarios, siendo esto es algo que debemos controlar para evitar que todos los usuarios puedan acceder a determinado tipo de información. Este control es responsabilidad del consultor ABAP, determinar si un usuario tiene o no autorización a nuestros desarrollos. Para determinar la autorización de los usuarios en nuestros desarrollos se utilizará el siguiente trozo de código:

Diccionario de Datos – RichardRey.com - 13

AUTHORITY-CHECK. AUTHORITY-CHECK OBJECT ID FIELD ID FIELD ID DUMMY. ...

Esto se conoce como OBJETO DE AUTORIZACIÓN o AUTHORITY-CHECK, en el uso diario solemos escucharlo de ambas maneras, veamos los campos que contiene: son los campos de autorización del objeto. (se le indica sobre que campos del sistema se va a evaluar la autorización). son los valores posibles de autorización de dichos campos. (leer, modificar, ambos, ninguno). DUMMY es un parámetro que indica que no es necesario verificar este campo.

Si al procesar el objeto, el campo del sistema SY-SUBRC es igual a 0, es que el usuario está autorizado a ver/procesar la información, de lo contrario, indica que no tiene los permisos para ello. Lo común es que en nuestros desarrollos, indiquemos este objeto al comienzo del mismo, y luego verifiquemos el SY-SUBRC, permitiendo continuar con la ejecución solo si el valor del campo es 0. Veamos un ejemplo de cómo se llenan los campos para el objeto de autorización: Vamos a verificar el authority check “Acreedor: Autorizaciones para Sociedades” para saber si un usuario puede visualizar proveedores en la sociedad 0001. Este objeto de autorización estándar se llama ‘F_LFA1_BUK’. La operación visualizar responde al código ‘01’ y el campo sobre el cual queremos evaluar la propiedad de visualización se llama ‘ACTVT’. El campo sociedad, por su parte, se llama ‘BUKRS’.

Diccionario de Datos – RichardRey.com - 14

Así quedaría el authority check: AUTHORITY CHECK OBJECT ‘F_LFA1_BUK’ ID ‘ACTVT’ FIELD ‘01’ ID ‘BUKRS’ FIELD ‘0001’.

Con esto cubrimos el apartado del Diccionario de Datos, el siguiente tema a estudiar serán las Tablas Internas.

Te saluda,

Richard Rey http://aprendeabap.com

Diccionario de Datos – RichardRey.com - 15