Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP Ahora después de ver las múltiples herramientas de desarrollo de ABAP, podemos ver los detalles del lenguaje: El lenguaje ABAP tiene ciertas características generales, que debes conocer: • Tiene tipos de datos definidos o estándar, como char, number, etc. • Permite construir aplicaciones multi-lenguaje, mediante la definición de descripciones en diferentes lenguajes • Tiene un SQL dentro, hace referencia a Open SQL • Ha sido ampliado para orientado a objetos, con declaración de clases, instancias o clases persistentes • Es independiente de la plataforma, siempre tiene el mismo significado y función en diferentes motores de bases de datos o sistemas operativos • Es compatible con versiones anteriores Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP Estructura general de una instrucción ABAP: Como ABAP es digitado, está constituido por instrucciones (instructions) o sentencias (statement). • • • Cada sentencia consta de una palabra reservada o clave (key Word) Una serie de operandos que cambian de acuerdo a la palabra clave Y un punto final para terminar la sentencia. PALABRA CLAVE OPERANDOS (dependiendo de la palabra clave) Punto como símbolo para el cierre de la cuenta de ABAP DATA wa_scarr TYPE scarr. Observe que el editor resalta las palabras clave y no olvide el punto final. START-OF-SELECTIÓN. SELECT * FROM scarr INTO CORRESPONDING FIELD OF wa_scarr. NEW-LINE. WRITE wa_scarr-carrid. WRITE wa_scarr-carrname. WRITE wa_scarr-url. ENDSELECT. Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP Los comentarios indispensables para explicar un programa, pueden darse a nivel de toda la línea o parte de línea. * Comentarios … * Comentarios … * Comentarios … Comentarios DATA wa_scarr type scarr. START-OF-SELECTION. SELECT * FROM scarr “ comentarios … INTO CORRESPONDING FIELDS OF wa_scarr. WRITE: NEW-LINE. wa_scarr-carrid, wa_scarr-carrname, wa_scarr-url, Declaración encadenada ENDSELECT. También puede definirse instrucciones encadenadas (chained statement) donde se tiene una sola palabra clave dos puntos ( : ) y separadas por coma (,) como puede verse en WRITE. Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP Actividad: Ahora ingresar por la transacción SE80 y copiar el siguiente programa: *&-----------------------------------------------------* *& Report ZPRUEBA_ANG *& *&-----------------------------------------------------* *& Programa de prueba * *&-----------------------------------------------------* REPORT zprueba. * Declaración de variables globales DATA wa_ekko TYPE ekko. "tabla de pedidos de compras MM * Declara parametro de entrada PARAMETERS: p_ebeln TYPE ebeln. "Numero pedido *---------- Inicio de procesos -----------* START-OF-SELECTION. "Inicio del programa * Lee datos de cabecera del pedido SELECT SINGLE * FROM ekko INTO wa_ekko WHERE ebeln = p_ebeln. IF sy-subrc = 0. WRITE:'Documento ', wa_ekko-ebeln, 'Sociedad ', wa_ekko-bukrs, 'Fecha ', wa_ekko-aedat. ELSE. WRITE 'NO EXISTE PEDIDO'. ENDIF. Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP Veamos que significa cada sentencia del programa inicial: * Declaración de variables globales DATA wa_ekko TYPE ekko. "tabla de pedidos de compras MM El programa en primer lugar, declara una estructura semejante a la tabla de cabecera de pedidos EKKO, dando doble clic sobre EKKO lo lleva a esta tabla estándar del módulo MM(mantenimiento materiales). * Declara parametro de entrada PARAMETERS: p_ebeln TYPE ebeln. "Numero pedido Declara la variable p_ebeln como parámetro de entrada del programa de tipo EBELN que es un tipo estándar de SAP, dando doble clic lo lleva a su elemento de dato. Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP *---------- Inicio de procesos -----------* START-OF-SELECTION. "Inicio del programa Esta sentencia como puede verse es especial, se denomina evento (event) permite iniciar las sentencias de la lógica del programa. * Lee datos de cabecera del pedido SELECT SINGLE * FROM ekko INTO wa_ekko WHERE ebeln = p_ebeln. Esta sentencia como puede notar accede a la base de datos mediante un dialecto derivado del SQL ANSI que se denomina Open SQL, mencionado anteriormente. Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP IF sy-subrc = 0. WRITE:'Documento ', wa_ekko-ebeln, 'Sociedad ', wa_ekko-bukrs, 'Fecha ', wa_ekko-aedat. ELSE. WRITE 'NO EXISTE PEDIDO'. ENDIF. ENDIF. La variable sy-subrc (junto con las demás de la tabla SYST) es especial ya que devuelve el resultado de la sentencia anterior, si es igual a cero, la sentencia fue correcta, de lo contrario la sentencia fue incorrecta, para el caso del SELECT si sy-subrc = 0, indica que leyó correctamente la tabla, si es diferente no fue posible leer ningún dato de la tabla. Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP Otras variables muy utilizadas que también están en SYST son: • • sy-datum: devuelve la fecha actual del sistema o servidor de aplicación. sy-uzeit: devuelve la hora actual del sistema. Cuando el código ya esté en el editor, debe guardarlo con el botón GRABAR. Luego el programa debe COMPILARSE, realiza la verificación sintáctica. Luego debe ACTIVARSE para que pueda ser utilizado por otros usuarios. Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP Pero antes de ser ejecutado completamente, sería interesante ver que hace paso a paso el programa (debug), ABAP tiene una poderosa herramienta de depuración de programas: Existen varias maneras de ejecutar en modo debug: • Ejecutar con F8 y luego digitar /H en la línea de comandos y luego reloj: • Ejecutar por el menú: Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP O la manera más fácil, asignar un break-point lógico: ubicar el apuntador del cursor en la columna gris del sector derecho y dar clic sobre la línea 18, y luego F8 para ejecutar: Inmediatamente se ejecuta el programa, muestra esta pantalla: Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP 1- En este momento vemos que el programa tiene un título, el cual se encuentra guardado como parámetro, si el programa fue creado desde el principio usted llenó esta información, si tomó un programa que ya existía, puede cambiarlo ingresando por el menú siguiente: Pasar a > Atributos > Adicionalmente indica: •Tipo de programa: 1-Programa ejecutable •Paquete: que para el caso es $TMP es decir, local que no será transportado a otros ambientes o mandantes. Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP 2- Solicita el parámetro de entrada, como puede ver muestra el texto con el nombre de la variable, lo cual no es muy claro para el usuario final que utilizará el programa, para corregir esto detenga la ejecución para regresar al editor ABAP, allí ingrese al menú, Pasar a > Elementos de texto > Textos de selección, allí puede ingresar el texto deseado o si es una variable que proviene del estándar marca la última columna. Presione la tecla Activar para guardar este cambio y luego F3 para regresar al editor ABAP. Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP Sigamos con la ejecución nuevamente: Puede verse que ha cambiado el título y el texto del parametro, ingrese un número de pedido válido de acuerdo a su instalación y continúe su ejecución F8 e ingresa al modo debugging. Fundamentos de programación en ABAP - Lección 5 ESTRUCTURA DEL LENGUAJE ABAP La flecha azul de la izquierda muestra la línea actual ejecutada, para avanzar tenemos nuevas teclas, como puede verse en la línea superior • • • • F5-para avanzar paso a paso, por línea F6-para avanzar hasta el fin del bloque actual F7-para retornar a un subprograma anterior F8-continuar hasta el próximo break-point o fin del programa Watchpoint: permiten asignar puntos de parada con cierta condición Al dar F5 para ver paso a paso, puede ver el contenido de las variables con doble clic, o solo posicionando el cursor sobre la variable según su instalación tenga activada una versión anterior o nueva del debug.