Validación a nivel de carácteres
MapForce permite definir reglas avanzadas de validación para campos que necesitan ser validados no sólo a nivel de campo, sino también a nivel de caracteres. Un ejemplo de un campo que necesita ese tipo de validación es el elemento de datos 8155 de la recomendación ONU/EDIFACT. Este campo no sólo acepta valores de código definidos en el estándar ONU/EDIFACT, sino también códigos externos especificados en el estándar ISO 6346 Recuerde que la norma ISO 6346 que mencionamos aquí es solamente un ejemplo. Los archivos de configuración de MapForce ya incluyen reglas de validación para ella.
Si necesita validar un campo a nivel de los caracteres, agregue los valores de código de forma global, como mostramos en el apartado Adaptar valores de código de fuentes externas.
ISO 6346
ISO 6346 es un estándar internacional que proporciona información sobre contenedores de carga. ISO 6346 usa códigos de tamaño y tipo especiales que consisten en varios caracteres:
•El primer carácter indica la longitud del contenedor.
•El segundo indica la altura y el ancho del contenedor.
•El tercero y el cuarto describen el tipo de contenedor.
Un ejemplo de este tipo de código es 20G0, que representa un contenedor de propósitos generales.
ISO6346.Codelist
Puede configurar MapForce de forma que valide el elemento de datos 8155 no solamente en función de los valores de código ONU/EDIFACT, sino también con ISO 6346. En el extracto de código de más abajo se ve parte del archivo ISO6346.Codelist que se encuentra en el directorio MapForceEDI\EDIFACT de la carpeta de la aplicación. En este extracto, cada elemento <Field> tiene un conjunto de valores que corresponden a los valores aceptables de cada uno de los caracteres de más arriba (p. ej.: G0 en el tercer elemento Field).
<?xml version="1.0" encoding="UTF-8"?>
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="5" xsi:noNamespaceSchemaLocation="../EDIConfig5.xsd">
<Codelist>
<Field Name="F8155" Type="Alphanumeric" ListName="ISO6346" Length="1" Offset="1">
<Title>ISO 6346</Title>
<Description>Code specifying seagoing container type.</Description>
<Values>
<Value Code="1"/>
<...>
<Value Code="N"/>
</Values>
</Field>
<Field Name="F8155" Type="Alphanumeric" ListName="ISO6346" Length="1" Offset="2">
<Title>ISO 6346</Title>
<Description>Code specifying seagoing container type.</Description>
<Values>
<Value Code="0"/>
<...>
<Value Code="F"/>
</Values>
</Field>
<Field Name="F8155" Type="Alphanumeric" ListName="ISO6346" Length="2" Offset="3">
<Title>ISO 6346</Title>
<Description>Code specifying seagoing container type.</Description>
<Values>
<Value Code="G0"/>
<...>
<Value Code="A0"/>
</Values>
</Field>
</Codelist>
</Config>
En el extracto de código anterior, cada elemento <Field> tiene estos atributos:
•El atributo Name hace referencia al nombre del campo (campo F8155 en nuestro ejemplo).
•El atributo Type indica el tipo de datos del elemento de datos (alfanumérico en este caso).
•El atributo ListName contiene el nombre de una lista de códigos (en este ejemplo, ISO6346 para los tres conjuntos de valores de código).
•El atributo Length especifica el número de caracteres que se deben validar. Cada uno de los valores de los conjuntos primero y segundo tiene un solo carácter de longitud, mientras que los valores del tercer conjunto son cada uno dos caracteres de largo.
•El atributo Offset especifica la posición en la que MapForce (o el equipo externo de ejecución) debe empezar a leer los caracteres del campo de datos que se va a validar. Por ejemplo, en el código de tamaño y tipo 20G0, 2 tiene el valor de desviación 1, 0 tiene el valor de desviación 2 y G0 tiene el valor de desviación 3.
Si el atributo Length está definido, el atributo Offset también se debe definir. Además, tanto el valor de Length como el de Offset debe ser mayor que cero.
Cada combinación Length-Offset, junto con los valores de código definidos en <Values>, representa una condición de validación a nivel de caracteres. Para que la validación de campos se ejecute correctamente deben cumplirse todas las condiciones a nivel de caracteres que tengan el mismo valor en el atributo ListName. Si alguna de las condiciones no se cumple, el valor del campo no se considera. Un campo puede tener más de una lista de posibles valores de código. Para que se considere válido, el valor del campo debe presentar al menos una lista.