Owl Adapters

1. Introduccion

Owl Adapter es un conjunto de librerias que permite cargar documentos en objetos .Net mediante un archivo de configuración (Owl Input Config), también provee los métodos para obtener y modificar los valores de los objetos.

2. Estructura de Owl Adapter

Para poder trabajar con Owl Adapter se requiere lo siguiente:

2.1 Owl Input Config

En este archivo es donde se define la estructura del archivo a cargar, el siguiente ejemplo muestra un archivo de configuración:

<?xml version="1.0" encoding="utf-8" ?>
<owl version="1.0">
  <section id="ENC" name="ENC">
    <element name="enc_0" start-position="0" length="3" />
    <element name="enc_1" start-position="3" length="5" />
    <element name="enc_2" start-position="8" length="5" />
    <element name="enc_3" start-position="13" length="8" />
  </section>

  <section id="DET" name="DET">
    <element name="det_0" start-position="0" length="3" />
    <element name="det_1" start-position="3" length="3" />
    <element name="det_2" start-position="6" length="12" />
    <element name="det_3" start-position="18" length="2" />

    <section id="LOC" name="LOC">
      <element name="loc_0" start-position="0" length="3" />
      <element name="loc_1" start-position="3" length="3" />
    </section>
  </section>
</owl>

2.2 OwlConfig

Clase que representa la configuración en objetos .Net, cada adaptador implementa su propia clase ()

XmlDocument xml = new XmlDocument();
xml.Load(@"C:\path\owl.xml");
OwlConfig owlConfig = XmlExtension.Deserialize<OwlConfig>(xml);

2.3 Document

Cada Owl Adapter expone su propia clase para la carga del documento (FlatFileDocument, EDIDocument, ANSIDocument), con estas clases se pueden cargar los documentos en objetos y retornar a la cadena original, adicional es posible al modificar los objetos y generar la nueva cadena del documento con los cambios realizados.

3. Manejo de Excepciones

Owl Adapter valida el archivo a cargar con el Owl Input Config, dentro de estas validaciones se pueden generar las siguientes excepción:

Las excepciónes dan información detallada de en qué parte del proceso se generó el error.

3.1 OwlAdapterException

Excepción que se produce cuando se presenta algún error de configuración en el adaptador.

3.2 OwlContentException

Excepción que se produce cuando se presenta algún error en la carga del contenido del documento, en caso de que el error sea porque el documento no cumple con la estructura configurada, en el mensaje se puede obtener la posición donde se produjo el error.

3.3 OwlDataTypeException

Excepción que se produce cuando un campo no cumple con el tipo de dato configurado.

3.4 OwlLengthException

Excepción que se produce cuando un campo excede la longitud configurada.

3.5 OwlRequiredException

Excepción que se produce cuando un campo obligatorio no se envia en el documento de entrada.

4. Formatos Owl Adapter

Owl Adapter provee algunos formatos de entrada para la carga de los datos.

4.1 Configuración General

A continuación se detalla la configuración general para todos los formatos.

Configuración a nivel de Sección:

Propiedad Tipo Dato Obligatoriedad Descripcion
id String Opcional Id de la sección
name String Obligatorio Nombre de la sección
description String Opcional Descripcion de la sección

Cuando se requiera configurar grupos de secciones, se deben incluir las secciones hijas como subetiquetas de la sección principal

Una vez se carga el documento en los objetos .Net se disponen de las siguientes opciones comunes:

Para convertir el objeto de nuevo a la cadena se realiza de la siguiente forma:

string content = document.ToString();

Nota: Si al objeto se le han realizado cambios en los datos, esto se verá reflejado en el nuevo contenido

Para acceder a las secciones cargadas dentro del objeto se puede realizar de las siguientes formas:

Nota: En caso de obtener una sección que se repite por medio del índice, siempre retorna la primera ocurrencia

Nota: Se debe tener en cuenta que si la sección configurada no está dentro del documento cargado, el valor retornado es Null para el índice y Array vacío para el método

4.2 EDI

Nombre dll: Fiive.Owl.EDI.dll

Define un archivo con formato EDI, la configuración se realiza de la siguiente forma:

EDISegmentBase: Clase base de todos los segmentos EDI, una vez se carga el documento todos los segmentos se instancian con este tipo, en caso de requerir trabajar directamente con el tipo específico se debe hacer el CAST, ejemplo: UNH unh = (UNH)document["UNH"]

Ejemplo de la configuración:

<!--Configuración de un segmentos-->
<Seccion Nombre="ISA" />
<!--Configuración de un grupo de segmentos-->
<Seccion Nombre="LIN">
 <Seccion Nombre="REF" />
</Seccion>

Para carga un documento se realiza de la siguiente forma:

EDIDocument document = new EDIDocument();
document.LoadContent(config, ediContent);

4.3 ANSI

Nombre dll: Fiive.Owl.ANSI.dll

Define un archivo con formato ANSI, la configuración se realiza de la siguiente forma:

ANSISegmentBase: Clase base de todos los segmentos ANSI, una vez se carga el documento todos los segmentos se instancian con este tipo, en caso de requerir trabajar directamente con el tipo específico se debe hacer el CAST, ejemplo: ISA isa = (ISA)document["ISA"]

Ejemplo de la configuración

<!--Configuración de un segmentos-->
<Seccion Nombre="ISA" />
<!--Configuración de un grupo de segmentos-->
<Seccion Nombre="LIN">
 <Seccion Nombre="REF" />
</Seccion>

Para carga un documento se realiza de la siguiente forma:

ANSIDocument document = new ANSIDocument();
document.LoadContent(config, ansiContent);

4.4 Flat File

Nombre dll: Fiive.Owl.FlatFile.dll

Define un archivo genérico con formato plano, la configuración se realiza de la siguiente forma:

Section: Clase base de todos los segmentos del archivo plano, una vez se carga el documento todos los segmentos se instancian con este tipo.

Adicional a la configuración estándar soporta los siguientes atributos. Configuración a nivel de Sección:

Propiedad Tipo Dato Obligatoriedad Descripcion
separator String Opcional Separador de campos

Configuración a nivel de Elemento:

Propiedad Tipo Dato Obligatoriedad Descripcion
name String Obligatorio Nombre del elemento
start-position Int Opcional Posición inicial del valor, aplica para archivos de ancho fijo
length Int Opcional Largo del valor, si se configura el separator a nivel de section, se valida que el valor no supere la longitud configurada, si no se configura el separator es la longitud a tomar a partir del valor configurado en start-position
data-type Enum (int, decimal y string) Opcional Tipo de dato del campo
required Boolean Opcional Indica si el campo es obligatorio

Actualmente se soportan 2 tipos de archivos planos:

Ejemplo de la configuración con separador

<?xml version="1.0" encoding="utf-8" ?>
<owl version="1.0">
  <section id="ENC" name="ENC" separator=";">
    <element name="enc_0" length="3" />
    <element name="enc_1" length="5" />
    <element name="enc_2" length="5" />
    <element name="enc_3" length="8" />
  </section>

  <section id="DET" name="DET" separator=";">
    <element name="det_0" length="3" />
    <element name="det_1" length="3" />
    <element name="det_2" length="12" />
    <element name="det_3" length="2" />

    <section id="LOC" name="LOC" separator=";">
      <element name="loc_0" length="3" />
      <element name="loc_1" length="2" />
    </section>
  </section>
</owl>

Ejemplo de la configuración con ancho fijo

<?xml version="1.0" encoding="utf-8" ?>
<owl version="1.0">
  <section id="ENC" name="ENC">
    <element name="enc_0" start-position="0" length="3" />
    <element name="enc_1" start-position="3" length="5" data-type="int" />
    <element name="enc_2" start-position="8" length="5" />
    <element name="enc_3" start-position="13" length="8" />
  </section>

  <section id="DET" name="DET">
    <element name="det_0" start-position="0" length="3" />
    <element name="det_1" start-position="3" length="3" />
    <element name="det_2" start-position="6" length="12" />
    <element name="det_3" start-position="18" length="2" />

    <section id="LOC" name="LOC">
      <element name="loc_0" start-position="0" length="3" />
      <element name="loc_1" start-position="3" length="3" />
    </section>
  </section>
</owl>

Para carga un documento se realiza de la siguiente forma:

FlatFileDocument document = new FlatFileDocument();
document.LoadContent(config, flatFileContent);