
Aquellos de ustedes que hayan asistido al curso de capacitación SAP BC400, que es la introducción al desarrollo ABAP, comenzarán escribiendo un programa que actúa como una simple calculadora.
Se basa en PARÁMETROS ABAP para entradas, declaraciones ABAP WRITE para salidas, y está diseñado para mostrar las construcciones básicas de la mayoría de los lenguajes de programación, introduciendo los conceptos de modularización, flujos de programas condicionales, manejo de errores, etc.
En el tranquilo período de fin de año, decidí ver si podía hacer algo similar con conceptos más modernos.
El front-end tenía que estar basado en UI5, por lo que la lógica del back-end debía estar basada en OData.
Ya tenía un pequeño proyecto SEGW que usaba para generar estados de mosaico aleatorios de Fiori Launchpad, así que agregué una nueva entidad a ese proyecto. La entidad tiene tres propiedades clave, dos enteros para los operandos y una cadena de caracteres para el operador, y una propiedad para el resultado y cualquier mensaje de error.
El repositorio de GitHub se puede encontrar en https://github.com/michaelnicholls/ux100.git.
La lógica para GET_ENTITYSET es recorrer una lista de operadores válidos y ejecutar mi método CALC con ese operador y 2 operandos aleatorios.
La lógica para GET_ENTITY es simplemente ejecutar el método CALC.
La aplicación UI5 se creó a mano, ya que no había una plantilla obvia. Consta de dos s para los operandos y un
Mi segundo intento para el servicio OData fue crear una vista de CDS que acepte los tres parámetros y devuelva el resultado basado en una instrucción CASE anidada.
La vista se basa en una declaración de selección de la tabla T000, ya que esta era la única tabla en la que podía pensar que sabía que siempre tendría al menos un valor.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'entity'
@OData.publish: true
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
serviceQuality: #X,
sizeCategory: #S,
dataClass: #MIXED
}
define view entity ZCALC with parameters
op1 :int4,
op2 :int4,
op :char1
as select from t000
{
// key $parameters.op1 as operand1,
// key $parameters.op2 as operand2,
// key $parameters.op as operator,
key '' as x,
case $parameters.op
when '+' then
$parameters.op1 + $parameters.op2
when '-' then
$parameters.op1 - $parameters.op2
when '*' then
$parameters.op1 * $parameters.op2
when '/' then
case $parameters.op2 when 0 then 0
//
// handle division by 0
//
else division($parameters.op1, $parameters.op2, 2 )
end
when '%' then
case $parameters.op2 when 0 then 0
//
// handle percentage of 0
//
else div(100 * $parameters.op1, $parameters.op2 )
end
else
0
end as res,
case $parameters.op
when '+' then
''
when '-' then
''
when '*' then
''
when '/' then
case $parameters.op2 when 0 then 'No division by 0'
else
''
end
when '%' then
case $parameters.op2 when 0 then 'No percentage of 0'
else
''
end
else
'Bad operator'
end as error
}
where
mandt="000"
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073