La instrucción CASE es una instrucción de control en C/AL.
Al igual que la instrucción IF, CASE es una instrucción condicional. Se evalúa una condición y se ejecutan distintos bloques de código según el resultado.
CASE se utiliza cuando hay más de dos opciones.
Nunca uses IF anidados si lo puedes sustituir por CASE
Los IF anidados se usan cuando la condición que se está evaluando es distinta. Si la condición es la misma, entonces hay que usar CASE.
La razón es muy sencilla: Tu código se podrá leer de forma mucho más fácil.
Fíjate en los siguientes bloques de código. Los dos hacen lo mismo. Ahora dime, ¿cuál de los dos te parece más fácil de leer?
//*** BLOQUE 1 *********** CASE SalesLine.Type OF SalesLine.Type::Item : ;//Código SalesLine.Type::"G/L Account": ;//Código SalesLine.Type::" " : ;//Código SalesLine.Type::"Fixed Asset": ;//Código ELSE //Código END;
//*** BLOQUE 2 ********** IF SalesLine.Type = SalesLine.Type::Item THEN BEGIN // Código END ELSE IF SalesLine.Type = SalesLine.Type::"G/L Account" THEN BEGIN // Código END ELSE IF SalesLine.Type = SalesLine.Type::" " THEN BEGIN // Código END ELSE IF SalesLine.Type = SalesLine.Type::"Fixed Asset" THEN BEGIN // Código END;
Está claro que el BLOQUE 1 es mucho más elegante y fácil de seguir. Sobre todo cuando el código no se limita a una sola línea, sino a un bloque más o menos grande.
[magicactionbox id=”313″]
Sintaxis de la instrucción CASE en C/AL
La sintaxis es sencilla. Puedes ver la definición oficial en la página de la MSDN C/AL Conditional Statements.
// SINTAXI DE CASE CASE Campo/Variable/Expresión OF Valor 1: Bloque código 1; Valor 2: Bloque código 2; [...] ELSE Bloque de código END;
- Detrás del CASE se pone el campo, variable o expresión que se quiere evaluar y que tiene más de 2 resultados posibles.
- El campo / variable / expresión puede ser de cualquier tipo de dato: bool, integer, text, option, decimal, etc.
- El apartado ELSE es opcional.
- Si los bloques de código contienen más de una instrucción, estas se tienen que encapsular con un BEGIN – END.
- El CASE ejecuta el primer bloque de código válido y después sale. Si una segunda condición es cierta ya no se ejecuta ese bloque.
Ejemplos de CASE en objetos estándard de Navision
En el siguiente ejemplo:
- Se está haciendo CASE sobre el campo “VAT Rounding Type”, que es de tipo Option
- El campo puede contener 3 valores distintos.
- Se ejecuta una única instrucción por cada opción
// OBJECT Table 4 Currency // PROCEDURE VATRoundingDirection CASE "VAT Rounding Type" OF "VAT Rounding Type"::Nearest: EXIT('='); "VAT Rounding Type"::Up: EXIT('>'); "VAT Rounding Type"::Down: EXIT('<'); END;
En el ejemplo de abajo:
- Se ejecutará el mismo código para los valores 1, 2 y 3. Para ello se ponen los valores separados por comas.
// OBJECT Table 14 Location // PROCEDURE GetBinCode CASE FlushingMethod OF FlushingMethod::Manual, FlushingMethod::"Pick + Forward", FlushingMethod::"Pick + Backward": EXIT("To-Production Bin Code"); FlushingMethod::Forward, FlushingMethod::Backward: EXIT("Open Shop Floor Bin Code"); END;
Para darle una vuelta más de tuerca, revisa el siguiente CASE TRUE OF.
- El primero que evalúe a TRUE será el que se ejecutará
// OBJECT Table 37 Sales Line // PROCEDURE UpdateWithWarehouseShip CASE TRUE OF ("Document Type" IN ["Document Type"::Quote,"Document Type"::Order]) AND (Quantity >= 0): // CODIGO ("Document Type" IN ["Document Type"::Quote,"Document Type"::Order]) AND (Quantity < 0): // CODIGO ("Document Type" = "Document Type"::"Return Order") AND (Quantity >= 0): // CODIGO ("Document Type" = "Document Type"::"Return Order") AND (Quantity < 0): // CODIGO END;
Para entender definitivamente cómo funciona, intenta re-escribir esto usando IF y verás como se empieza a complicar…
- Pedido Y Cantidad positiva –> código 1
- Pedido Y Cantidad negativa –> código 2
- Devolución Y Cantidad positiva –> código 3
- Devolución Y Cantidad negativa –> Código 4
Esto es todo por hoy. Espero que te haya resultado útil.
Si me he dejado algún detalle, deja un comentario y lo revisaré.
Salut!
Laura Nicolàs
Debe iniciar sesión para crear nuevos temas.

Soy Laura Nicolàs, una de las gemelas del Navision.
Llevo más de 14 años trabajando con Business Central (antes conocido como Dynamics NAV o Navision). Hago consultoría, análisis, desarrollo, implantación, migraciones, actualizaciones de versión (upgrade), instalación, soporte y formación.
La formación es una de mis pasiones, así que estoy siempre grabando cursos que tienes disponibles en ClipPlatform.com
+40 cursos y +450 lecciones. Hay cursos para usuarios, para consultores y para programadores.
Comentarios