SAP Business Application Studio: Desarrollo ABAP basado en navegador

Kategorie
DevOps
Veröffentlicht
Autor
Johannes

SAP Business Application Studio (BAS) es el entorno de desarrollo cloud-native de SAP que se ejecuta completamente en el navegador. Con la extensión de desarrollo ABAP, puedes desarrollar aplicaciones ABAP Cloud sin necesidad de instalar software local.

¿Qué es SAP Business Application Studio?

BAS es un IDE basado en web que se basa en Eclipse Theia y está especialmente optimizado para el desarrollo SAP:

CaracterísticaDescripción
Basado en la nubeSe ejecuta completamente en el navegador
Dev SpacesEntornos de desarrollo preconfigurados
Soporte ABAPDesarrollo completo de ABAP Cloud
IntegradoConexión con BTP y S/4HANA Cloud

Ventajas de BAS

  • Sin instalación: Solo se requiere navegador
  • Utilizable en cualquier lugar: Trabaja desde cualquier dispositivo
  • Siempre actualizado: SAP mantiene el entorno
  • Uniforme: Mismo entorno para todos los desarrolladores
  • Integrado: Integración nativa con BTP

Configurar Dev Space

1. Acceso a BAS

Para usar BAS necesitas:

  • Cuenta SAP BTP (Trial o productiva)
  • Suscripción a SAP Business Application Studio
  • Permisos para crear Dev Spaces

2. Crear Dev Space

Pasos para crear un ABAP Dev Space:
1. Abrir SAP BTP Cockpit
2. Seleccionar Subaccount → Services → Instances and Subscriptions
3. Abrir SAP Business Application Studio
4. Clic en "Create Dev Space"
5. Ingresar nombre: "ABAP_Development"
6. Dev Space Type: Seleccionar "SAP ABAP Development"
7. Confirmar "Create Dev Space"

Tipos de Dev Space para ABAP

Tipo de Dev SpaceDescripciónCaso de uso
SAP ABAP DevelopmentDesarrollo ABAP CloudBTP ABAP Environment
Full Stack Cloud ApplicationFiori + BackendProyectos Full-Stack
SAP FioriDesarrollo de UIAplicaciones Fiori puras

3. Iniciar Dev Space

1. Estado del Dev Space: "STOPPED"
2. Clic en el botón Play para iniciar
3. Esperar hasta que el estado sea: "RUNNING" (aprox. 1-2 minutos)
4. Clic en "Open" para abrir el IDE

Nota: Los Dev Spaces se detienen automáticamente después de inactividad (aprox. 1 hora). Tu trabajo permanece guardado.

Crear y conectar proyecto ABAP

Configurar conexión al sistema

Antes de poder desarrollar, debes establecer una conexión a tu sistema ABAP.

Conexión a BTP ABAP Environment:
1. View → Command Palette (Ctrl+Shift+P)
2. Escribir "ABAP: Create Service Instance"
3. Pegar Service Key del BTP ABAP Environment
4. Asignar nombre de conexión: "BTP_DEV"
5. La conexión se prueba y guarda

Crear Service Key

Para establecer la conexión, necesitas un Service Key:

En BTP Cockpit:
1. Subaccount → Cloud Foundry → Spaces
2. Abrir Space → Service Instances
3. Seleccionar instancia ABAP Environment
4. "Create" → Service Key
5. Nombre: "BAS_Connection"
6. Copiar datos del key (JSON)

Crear proyecto ABAP

Nuevo proyecto ABAP Cloud:
1. View → Command Palette (Ctrl+Shift+P)
2. Escribir "ABAP: Create Project"
3. Seleccionar conexión al sistema
4. Ingresar Package: "ZRAP_DEMO"
5. Nombre del proyecto: "rap-demo"
6. El proyecto se crea y abre

Estructura del proyecto en BAS

rap-demo/
├── .abap/
│ └── service-binding.json
├── src/
│ └── zrap_demo/
│ ├── zcl_example_class.clas.abap
│ └── zif_example_interface.intf.abap
└── package.json

Características y extensiones importantes

Características específicas de ABAP

CaracterísticaAtajoDescripción
Code CompletionCtrl+SpaceCompletado inteligente
Quick FixCtrl+.Corrección rápida de errores
Go to DefinitionF12Ir a la definición
Find ReferencesShift+F12Encontrar usos
Rename SymbolF2Renombrar
Format DocumentShift+Alt+FFormatear código

Syntax Highlighting e IntelliSense

BAS ofrece soporte completo de sintaxis ABAP:

CLASS zcl_bas_demo DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
METHODS calculate_total
IMPORTING
it_items TYPE STANDARD TABLE
RETURNING
VALUE(rv_total) TYPE p.
ENDCLASS.
CLASS zcl_bas_demo IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
" BAS ofrece aquí:
" - Syntax Highlighting
" - IntelliSense para métodos
" - Documentación inline
" - Marcado de errores en tiempo real
out->write( 'Hello from BAS!' ).
ENDMETHOD.
METHOD calculate_total.
" Code Completion muestra operaciones de tabla
LOOP AT it_items ASSIGNING FIELD-SYMBOL(<item>).
rv_total = rv_total + <item>-amount.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

Herramientas integradas

Terminal: Terminal integrada para Git y herramientas CLI

View → Terminal (Ctrl+`)

Integración Git: Control de versiones directamente en BAS

Source Control View (Ctrl+Shift+G)
- Stage Changes
- Commit
- Push/Pull

Problems View: Todos los errores y advertencias de un vistazo

View → Problems (Ctrl+Shift+M)

Extensiones recomendadas

BAS viene con extensiones preinstaladas para ABAP:

ExtensiónFunción
ABAP Language SupportSintaxis, Completion, Navegación
ABAP CDS Language SupportDesarrollo de CDS Views
SAP Fiori ToolsGenerador de Fiori Elements
SAP HANA Database ExplorerAcceso a base de datos

Comparación con ADT/Eclipse

Comparación de características

CaracterísticaBASADT (Eclipse)
InstalaciónNinguna (navegador)Eclipse + Plugin
ActualizacionesAutomáticasManuales
RendimientoDependiente de redLocal, más rápido
Trabajo offlineNo posiblePosible limitado
ABAP DebuggerDisponibleCompleto
ABAP ProfilerLimitadoCompleto
Desarrollo CDS
Desarrollo RAP
Integración GitNativaVia Plugin
Gestión de transportes

¿Cuándo usar BAS?

  • Cloud-First: Desarrollo en BTP ABAP Environment
  • Onboarding de equipos: Inicio rápido sin configuración
  • Trabajo remoto: Desarrollo desde cualquier lugar
  • Estandarización: Entorno uniforme en el equipo

¿Cuándo usar ADT?

  • On-Premise: Sistemas S/4HANA On-Premise
  • Rendimiento: Proyectos grandes con muchos archivos
  • Offline: Conexión a internet limitada
  • Herramientas especiales: ABAP Profiler, Memory Inspector

Uso híbrido

Ambas herramientas pueden usarse en paralelo:

Flujo de trabajo típico:
1. ADT para desarrollo en S/4HANA On-Premise
2. BAS para BTP ABAP Environment
3. Git como base de código común
4. Mismo código, diferentes IDEs

Ejemplos prácticos

Ejemplo 1: Crear RAP Business Object

Crea un RAP Business Object simple en BAS:

" Paso 1: Database Table
" Creado via Command Palette: ABAP: New → Database Table
@EndUserText.label : 'Travel Bookings'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
define table ztab_travel {
key client : abap.clnt not null;
key travel_id : abap.numc(8) not null;
description : abap.char(255);
begin_date : abap.dats;
end_date : abap.dats;
total_price : abap.curr(15,2);
currency_code : abap.cuky;
status : abap.char(1);
created_by : abap.uname;
created_at : timestampl;
last_changed_by : abap.uname;
last_changed_at : timestampl;
}
" Paso 2: CDS View Entity
" Command Palette: ABAP: New → Data Definition
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Travel Booking View'
define root view entity ZI_Travel
as select from ztab_travel
{
key travel_id as TravelId,
description as Description,
begin_date as BeginDate,
end_date as EndDate,
@Semantics.amount.currencyCode: 'CurrencyCode'
total_price as TotalPrice,
currency_code as CurrencyCode,
status as Status,
@Semantics.user.createdBy: true
created_by as CreatedBy,
@Semantics.systemDateTime.createdAt: true
created_at as CreatedAt,
@Semantics.user.lastChangedBy: true
last_changed_by as LastChangedBy,
@Semantics.systemDateTime.lastChangedAt: true
last_changed_at as LastChangedAt
}
" Paso 3: Behavior Definition
" Command Palette: ABAP: New → Behavior Definition
managed implementation in class zbp_i_travel unique;
strict ( 2 );
with draft;
define behavior for ZI_Travel alias Travel
persistent table ztab_travel
draft table ztab_d_travel
lock master total etag LastChangedAt
authorization master ( instance )
{
create;
update;
delete;
field ( numbering : managed, readonly ) TravelId;
field ( readonly ) CreatedBy, CreatedAt, LastChangedBy, LastChangedAt;
determination setDefaults on modify { create; }
validation validateDates on save { field BeginDate, EndDate; }
draft action Edit;
draft action Activate;
draft action Discard;
draft action Resume;
draft determine action Prepare;
mapping for ztab_travel corresponding
{
TravelId = travel_id;
Description = description;
BeginDate = begin_date;
EndDate = end_date;
TotalPrice = total_price;
CurrencyCode = currency_code;
Status = status;
CreatedBy = created_by;
CreatedAt = created_at;
LastChangedBy = last_changed_by;
LastChangedAt = last_changed_at;
}
}

Ejemplo 2: CDS View con asociaciones

" Consumption View con anotaciones
" BAS ofrece Auto-Complete para todas las anotaciones
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Travel Consumption View'
@Metadata.allowExtensions: true
define root view entity ZC_Travel
provider contract transactional_query
as projection on ZI_Travel
{
@UI.facet: [
{ id: 'Travel',
purpose: #STANDARD,
type: #IDENTIFICATION_REFERENCE,
label: 'Travel',
position: 10 }
]
@UI.lineItem: [{ position: 10, importance: #HIGH }]
@UI.identification: [{ position: 10 }]
key TravelId,
@UI.lineItem: [{ position: 20, importance: #HIGH }]
@UI.identification: [{ position: 20 }]
Description,
@UI.lineItem: [{ position: 30 }]
@UI.identification: [{ position: 30 }]
BeginDate,
@UI.lineItem: [{ position: 40 }]
@UI.identification: [{ position: 40 }]
EndDate,
@UI.lineItem: [{ position: 50 }]
@UI.identification: [{ position: 50 }]
TotalPrice,
CurrencyCode,
@UI.lineItem: [{ position: 60, criticality: 'StatusCriticality' }]
Status,
/* Virtual Element para Status-Criticality */
case Status
when 'O' then 2 " Open - Amarillo
when 'A' then 3 " Approved - Verde
when 'R' then 1 " Rejected - Rojo
else 0
end as StatusCriticality,
/* Campos de administración */
CreatedBy,
CreatedAt,
LastChangedBy,
LastChangedAt
}

Ejemplo 3: Behavior Implementation con Debugging

CLASS lhc_travel DEFINITION INHERITING FROM cl_abap_behavior_handler.
PRIVATE SECTION.
METHODS setDefaults FOR DETERMINE ON MODIFY
IMPORTING keys FOR Travel~setDefaults.
METHODS validateDates FOR VALIDATE ON SAVE
IMPORTING keys FOR Travel~validateDates.
ENDCLASS.
CLASS lhc_travel IMPLEMENTATION.
METHOD setDefaults.
" Leer las entidades para las keys pasadas
READ ENTITIES OF ZI_Travel IN LOCAL MODE
ENTITY Travel
FIELDS ( TravelId )
WITH CORRESPONDING #( keys )
RESULT DATA(travels).
" Establecer valores por defecto para nuevas entradas
MODIFY ENTITIES OF ZI_Travel IN LOCAL MODE
ENTITY Travel
UPDATE
FIELDS ( Status CurrencyCode )
WITH VALUE #( FOR travel IN travels
( %tky = travel-%tky
Status = 'O' " Open
CurrencyCode = 'EUR' ) )
REPORTED DATA(reported).
" En BAS: Establecer breakpoint con clic a la izquierda del número de línea
" Iniciar debugging via Run → Start Debugging
ENDMETHOD.
METHOD validateDates.
" Validación: BeginDate debe ser anterior a EndDate
READ ENTITIES OF ZI_Travel IN LOCAL MODE
ENTITY Travel
FIELDS ( BeginDate EndDate )
WITH CORRESPONDING #( keys )
RESULT DATA(travels).
LOOP AT travels ASSIGNING FIELD-SYMBOL(<travel>).
IF <travel>-BeginDate > <travel>-EndDate.
APPEND VALUE #(
%tky = <travel>-%tky
%msg = new_message_with_text(
severity = if_abap_behv_message=>severity-error
text = 'La fecha de inicio debe ser anterior a la fecha de fin'
)
%element-BeginDate = if_abap_behv=>mk-on
%element-EndDate = if_abap_behv=>mk-on
) TO reported-travel.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

Debugging en BAS:

1. Establecer breakpoint: Clic a la izquierda del número de línea
2. Configuración de debug: Run → Add Configuration
3. Seleccionar sistema ABAP
4. Iniciar app y ejecutar acción
5. El debugger se detiene en el breakpoint
6. Variables View muestra valores de variables
7. Step Over (F10), Step Into (F11), Continue (F5)

Consejos y mejores prácticas

Optimizar rendimiento

1. Cargar solo los packages necesarios
→ Proyectos más pequeños = mejor rendimiento
2. Reiniciar Dev Space regularmente
→ Limpia memoria y caché
3. Cerrar pestañas no necesarias
→ Reduce consumo de memoria
4. Usar conexión a internet estable
→ BAS depende de la red

Atajos de teclado

AcciónWindows/LinuxMac
Command PaletteCtrl+Shift+PCmd+Shift+P
Quick OpenCtrl+PCmd+P
Go to DefinitionF12F12
Find All ReferencesShift+F12Shift+F12
Rename SymbolF2F2
Format DocumentShift+Alt+FShift+Option+F
Toggle TerminalCtrl+`Cmd+`
SaveCtrl+SCmd+S
ActivateCtrl+F3Cmd+F3

Organización del Workspace

Estructura de Workspace recomendada:
workspace/
├── project-rap-demo/ # Proyecto RAP
├── project-fiori-app/ # App Fiori
├── project-api-integration/ # Integración API
└── .vscode/
└── settings.json # Configuración del Workspace

Solución de problemas

Problemas comunes

Dev Space no inicia:

Solución:
1. Limpiar caché del navegador
2. Eliminar Dev Space y recrear
3. Verificar suscripción BTP

Conexión al sistema ABAP defectuosa:

Solución:
1. Recrear Service Key
2. Crear nueva conexión en BAS
3. Verificar configuración de red/firewall

Rendimiento lento:

Solución:
1. Desactivar extensiones no necesarias
2. Reducir tamaño del proyecto
3. Aislar pestaña del navegador
4. Reiniciar Dev Space

Code Completion no funciona:

Solución:
1. Verificar estado del ABAP Language Server (abajo a la derecha)
2. Verificar conexión al sistema ABAP
3. Recargar proyecto: Command Palette → Developer: Reload Window

Conclusión

SAP Business Application Studio ofrece un entorno de desarrollo moderno y cloud-native para ABAP Cloud:

  • Zero Installation: Listo para usar inmediatamente en el navegador
  • Soporte ABAP completo: CDS, RAP, Debugging
  • Herramientas integradas: Git, Terminal, Extensiones
  • Optimizado para la nube: Integración nativa con BTP

Para BTP ABAP Environment y desarrollo basado en la nube, BAS es la primera opción. Para sistemas On-Premise y características avanzadas de debugging, ADT sigue siendo la opción más completa.

Recursos adicionales

Artículos relacionados