Lenguaje AL – Sintaxis de las propiedades de campos – Parte I

por | 28 septiembre, 2017

En artículos anteriores hemos visto:

En este artículo vamos a repasar la Sintaxis del lenguaje AL para asignar propiedades a los campos.

Para ello voy a repasar campos del estándard de Navision, y voy a explicar cómo replicar en Visual Studio Code lo que haciamos en el entorno C/SIDE.

Propiedad CaptionML

//Campo 3 de la tabla 17 G/L Entry
field(3;"G/L Account No.";Code[20])
{
  CaptionML = ENU='G/L Account No.',ESP='Nº cuenta';
}

 

  • Para indicar la propiedad se debe escribir CaptionML =
  • A continuación indicar el código del idioma, y el signo =.
    Por ejemplo:
    ENU=
    ESP=
  • Escribir el caption entre comillas simples ‘ ‘
  • Si necesitas incluir la comilla simple como parte del caption, tienes que usar dos comillas simples.
    Por ejemplo, para escribir el Caption Don’t show indicariamos:

    CaptionML = ENU=’Don»t show’,ESP=’No mostrar’;
  • La propiedad puede incluir la traducción a múltiples idiomas. Hay que separar cada uno de ellos con una coma.
  • Al final, escribir punto y coma ;
  • Esta propiedad es obligatoria según los manuales de buena praxis a la hora de programar.
  • Nota: Es posible que en un futuro próximo se cambie la forma de indicar los captions, centralizando las traducciones en un único archivo de traducciones, en lugar de indicarlo campo a campo. Ver más información aquí.

Propiedad OptionCaptionML

// Campo 5 de la tabla 17 G/L Entry
field(5;"Document Type";Option)
{
  OptionMembers = " ",Payment,Invoice,"Credit Memo","Finance Charge Memo",Reminder,Refund;
  OptionCaptionML = ENU=' ,Payment,Invoice,Credit Memo,Finance Charge Memo,Reminder,Refund',
                    ESP=' ,Pago,Factura,Abono,Docs. interés,Recordatorio,Reembolso';
 }
  • Para indicar la propiedad se debe escribir OptionCaptionML =
  • A continuación indicar el código del idioma, y el signo =.
  • Escribir los captions de las opciones entre comillas simples ‘ ‘
  • Si necesitas incluir la comilla simple como parte del caption, tienes que usar dos comillas simples.
  • La propiedad puede incluir la traducción a múltiples idiomas. Hay que separar cada uno de ellos con una coma.
  • Al final, escribir punto y coma ;
  • Esta propiedad es obligatoria según los manuales de buena praxis a la hora de programar.
  • Nota: Es posible que en un futuro próximo se cambie la forma de indicar los captions, centralizando las traducciones en un único archivo de traducciones, en lugar de indicarlo campo a campo. Ver más información aquí.

Propiedad TableRelation

A continuación vamos a ver unos cuantos ejemplo de campos del estándar que usan la propiedad TableRelation, en sus distintas variantes.

// Campo 3 de la tabla 17 G/L Entry
field(3;"G/L Account No.";Code[20])
{
  TableRelation = "G/L Account";
}
  • Se relaciona el campo con una tabla. Si no se indica nada más, la relación es con el campo que conforma la clave primaria de la tabla relacionada.
  • Esta propiedad por si sola no valida que el valor exista en la tabla relacionada.
    De eso se encarga la propiedad ValidateTableRelation, aunque por defecto su valor es True, por lo que no es necesario indicarla explícitamente.
  • La propiedad TestTableRelation, que acompañaba a TableRelationValidateTableRelation, no está disponible en el lenguaje AL.
// Campo 27 de la tabla 17 G/L Entry
field(27;"User ID";Code[50])
{
  TableRelation = User."User Name";
  ValidateTableRelation = false;
}
  • Se relaciona con el campo «User Name» de la tabla relacionada User.
  • Como «User Name» no forma parte de la clave primaria de la tabla User, tenemos que poner la propiedad ValidateTableRelation a false.
// Campo 83 de la tabla 18 Customer
field(83;"Location Code";Code[10])
{
   TableRelation = Location where ("Use As In-Transit"=const(false));
}

// El código en el entorno C/SIDE, se escribe así:
// TableRelation = Location WHERE (Use As In-Transit=CONST(No))
  • Se relaciona con la tabla Location.
  • De la tabla Location, únicamente podemos seleccionar aquellos almacenes que no se usen como tránsito.
    El filtro es constante, por lo que usamos el CONST.
  • Notar las siguientes diferencias de AL con respecto a C/AL:
    • Los campos booleanos en C/SIDE se indicaban como Yes/No.
      En VSCode se indican como true/false.
    • Los campos que tienen espacios o caracteres especiales, ahora hay que indicarlos entre comillas dobles
// Campo 288 de la tabla 18 Customer
field(288;"Preferred Bank Account Code";Code[10])
{
   TableRelation = "Customer Bank Account".Code where ("Customer No."=field("No."));
}

// El código en el entorno C/SIDE, se escribe así:
// TableRelation = "Customer Bank Account".Code WHERE (Customer No.=FIELD(No.))
  • Se relaciona con la tabla «Customer Bank Account».
  • Como la tabla relacionada tiene 2 campos que conforman la clave primaria, tenemos que indicar con qué campo lo relacionamos. En este caso con el campo Code.
  • Notar las siguientes diferencias de AL con respecto a C/AL:
    • Los campos que tienen espacios o caracteres especiales, ahora hay que indicarlos entre comillas dobles

 

// Campo 6 de la tabla 37 Sales Line
field(6;"No.";Code[20])
{
  TableRelation = 
         if (Type=CONST(" ")) "Standard Text"
    else if (Type=CONST("G/L Account"),"System-Created Entry"=CONST(false)) "G/L Account" 
             where ("Direct Posting"=CONST(true),"Account Type"=CONST(Posting),Blocked=CONST(false)) 
    else if (Type=CONST("G/L Account"),"System-Created Entry"=CONST(true)) "G/L Account" 
    else if (Type=CONST(Resource)) Resource 
    else if (Type=CONST("Fixed Asset")) "Fixed Asset" 
    else if (Type=CONST("Charge (Item)")) "Item Charge" 
    else if (Type=CONST(Item)) Item; 
 }
}

// El código en el entorno C/SIDE, se escribe así:
// TableRelation = IF (Type=CONST(" ")) "Standard Text" ELSE IF (Type=CONST(G/L Account),System-Created Entry=CONST(No)) "G/L Account" WHERE (Direct Posting=CONST(Yes),Account Type=CONST(Posting),Blocked=CONST(No)) ELSE IF (Type=CONST(G/L Account),System-Created Entry=CONST(Yes)) "G/L Account" ELSE IF (Type=CONST(Resource)) Resource ELSE IF (Type=CONST(Fixed Asset)) "Fixed Asset" ELSE IF (Type=CONST("Charge (Item)")) "Item Charge" ELSE IF (Type=CONST(Item)) Item
  • En función del valor del campo Type, se relaciona con distintas tablas, algunas de ellas con filtros.
  • Notar las siguientes diferencias de AL con respecto a C/AL:
    • Los campos que tienen espacios o caracteres especiales, ahora hay que indicarlos entre comillas dobles
    • Los campos booleanos en C/SIDE se indicaban como Yes/No.
      En VSCode se indican como true/false.
  • En Visual Studio Code es posible poner todo el código en una misma línea, o hacer saltos de linea para que sea más fácil de leer.
  • En el entorno C/SIDE teníamos estas pantallas que nos ayudaban a crear la propiedad:

    En VSCode el IntelliSense todavía no nos ayuda mucho… de forma que para crear TableRelation complejos recomiendo crearlo en C/SIDE, copiar el código y pegarlo en VSCode, haciendo los ajustes necesarios.

 

 

En el próximo artículo vamos a seguir con más propiedades, para ver cual es la sintaxis en AL.

Salut!
Laura Nicolàs

Categoría: Sin categoría

Acerca de Laura Nicolàs

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 ClipDynamics.com +40 cursos y +450 lecciones. Hay cursos para usuarios, para consultores y para programadores.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.