DataObjects OVERVIEW
By Rolando Fernรกndez Benavidez
NO WARRANTIES OF ANY NATURE ARE EXTENDED BY THIS DOCUMENT Any product or related information described herein is only furnished pursuant and subject to the terms and conditions of a duly executed agreement to purchase or lease equipment or to license software. The only warranties made by Nova32 Development Software, if any, with respect to the products described in this document are set forth in such agreement. Nova32 Development Software cannot accept any financial or other responsibility that may be the result of your use of the information in this document or software material, including direct, special, or consequential damages. You should be very careful to ensure that the use of this information and/or software material complies with the laws, rules, and regulations of the jurisdictions with respect to which it is used. The information contained herein is subject to change without notice. Revisions may be issued to advise of such changes and/or additions. Notice to End Users: This is commercial computer software or hardware documentation developed at private expense. Use, reproduction, or disclosure by the Government is subject to the terms of Nova32 Development Software standard commercial license for the products, and where applicable, the restricted/limited rights provisions of the contract data rights clauses.
DataObjects OVERVIEW
BLAST XC 1.0
DataObjects  Para manejar información proveniente de la
Base de Datos, y poder compartirla entre procesos y funciones, asi como exportarla a otros lenguajes como Berly, es necesario utilizar un conjunto de objetos especializados en dicha manipulaciĂłn. Cost Clients
Providers
DataObjects in BLAST XC
RECORD TAPE FILLER
DataObjects in BLAST XC
RECORD
DataObject para almacenar Rows ( Filas ) , muy utilizado para replicar Filas de Tablas existentes en la Base de Datos. Tamaño de Objeto: 1 Kilobyte.
TAPE
DataObject para almacenar Tables ( Tablas ) , muy utilizado para replicar Tablas pequeñas existentes en la Base de Datos. Tamaño de Objeto: 33 Kilobytes.
FILLER
DataObject para almacenar Tables ( Tablas ) , muy utilizado para replicar Tablas existentes en la Base de Datos. Tamaño de Objeto: 64 Kilobytes.
DataObjects Size in BLAST XC  Los DataObjects RECORD, TAPE y FILLER de BLAST disponen de una capacidad maxima de almacenamiento en Kilobytes, debido principalmente a que la plataforma BLAST esta diseùada para ser altamente portable y eficiente, para ser explotada por aplicaciones distribuidas por la Web o en plataformas Host, consumiendo el minimo posible de recursos Hardware que en conjunto integran una poderosa y rapida interfaz de transferencia de datos.
Example 1: Creating Data Table in BLAST using TAPE object.
1. Crear las Variables en la WORKING-STORAGE-SECTION de tu programa BLAST
GLOBAL
TAPE
CLIENTES
.
GLOBAL
RECORD
FILA
.
GLOBAL
STRING
CLAVE
PICTURE
“ “ .
GLOBAL
STRING
NOMBRE
PICTURE
“ “ .
GLOBAL
STRING
EDAD
PICTURE
“ “ .
Esto nos permitira crear una tabla tipo TAPE, similar a la siguiente figura:
CLAVE
NOMBRE
EDAD
1000
ANA HERNANDEZ
22
2000
LUIS PEREZ
18
3000
ELSA PEREZ
35
2. Dentro de un PROCESS o una FUNCTION, utilizar las funciones de bajo nivel del Lenguaje BLAST: LET ( CLIENTES )
.
FIELDSIZE
MOVE
130
.
RECORDSIZE
MOVE
390
.
REWIND ( 0 ) .
POKE
( FILA )
.
En este momento hemos definido la estructura de nuestra TABLA, Campos de tamaño maximo de 130 bytes, Registros (Filas) de tamaño maximo de 390 bytes., es decir hemos definido una tabla de 3 campos cada uno de 130 bytes, por lo tanto el tamaño de cada Fila es de 390 bytes, con capacidad para almacenar 86 Filas. 86 Filas = Capacidad de un TAPE en Bytes. / Tamaño de las Filas en Bytes. En caso de que el campo sea menor, BLAST ajusta automaticamente el tamaño para ocupar el menor espacio en memoria RAM, lo mismo aplica al tamaño de la Fila o Registro. El tamaño Maximo para un campo es de 256 bytes, y el tamaño maximo de una Fila o Registro es de 1024 Bytes.
130 bytes.
130 bytes. 390 bytes en RAM. 390 bytes en RAM. 390 bytes en RAM.
130 bytes.
3. Ahora vamos a agregar los encabezados de campos y registro (Fila) para posteriormente almacenar los datos en el objeto CLIENTES. COPY ( CLAVE , “CLAVE“ ) . COPY ( NOMBRE , “NOMBRE“ ) . COPY ( EDAD , “EDAD“ ) . WRITE WRITE WRITE PUT
( ( ( (
FILA , CLAVE FILA , NOMBRE FILA , EDAD 1 , 1 , FILA ) .
, 1 ) . , 2 ) . , 3 ) .
La instrucción COPY permite agregar los datos a las variables previamente definidas en la WORKING-STORAGE-SECTION, la instrucción WRITE permite agregar un campo a un Objeto tipo RECORD (DataRow), la función PUT almacena en la Tabla en uso el contenido completo del RECORD, es decir almacenamos la Fila en la Tabla creada con el comando LET. Sintaxis: WRITE ( RECORD ,
STRING , INTEGER ) .
RECORD = Fila STRING = Campo INTEGER = El número de campo secuencial a agregar en la Fila. PUT ( INTEGER-REC , INTEGER -RECS , RECORD ) . INTEGER –REC = Registro para Almacenar, número de Fila consecutiva INTEGER-RECS = Cantidad de Filas existentes actualmente en la Tabla. RECORD = Fila a guardar en la Tabla en uso.
CLAVE
NOMBRE
EDAD
4. De la misma forma procedemos a guadar ahora los datos de cada Fila en el objeto CLIENTES. COPY ( CLAVE , “1000“ ) . COPY ( NOMBRE , “ANA HERNANDEZ“ ) . COPY ( EDAD , “22“ ) . WRITE WRITE WRITE PUT
( ( ( (
FILA , CLAVE FILA , NOMBRE FILA , EDAD 2 , 2 , FILA ) .
, 1 ) . , 2 ) . , 3 ) .
COPY ( CLAVE , “2000“ ) . COPY ( NOMBRE , “LUIS PEREZ“ ) . COPY ( EDAD , “18“ ) . WRITE WRITE WRITE PUT
( ( ( (
FILA , CLAVE FILA , NOMBRE FILA , EDAD 3 , 3 , FILA ) .
, 1 ) . , 2 ) . , 3 ) .
COPY ( CLAVE , “CLAVE“ ) . COPY ( NOMBRE , “NOMBRE“ ) . COPY ( EDAD , “EDAD“ ) . WRITE WRITE WRITE PUT
( ( ( (
FILA , CLAVE FILA , NOMBRE FILA , EDAD 4 , 4 , FILA ) .
, 1 ) . , 2 ) . , 3 ) .
Listo el objeto TAPE CLIENTES ahora contiene encabezados de columna y 3 filas de datos, podemos manipularlos dentro del mismo BLAST o exportarlos a otros Lenguajes de programación, incluso entre diferentes plataformas de Hardware y Sistemas Operativos.
Example 2: Read Data Table in BLAST using TAPE object.
1. Crear las Variables en la WORKING-STORAGE-SECTION de tu programa BLAST, en caso de que no esten creadas aun. GLOBAL
TAPE
CLIENTES
.
GLOBAL
RECORD
FILA
.
GLOBAL
STRING
CLAVE
PICTURE
“ “ .
GLOBAL
STRING
NOMBRE
PICTURE
“ “ .
GLOBAL
STRING
EDAD
PICTURE
“ “ .
GLOBAL
INTEGER
REGISTROS
PICTURE
0
.
GLOBAL
INTEGER
APUNTADOR
PICTURE
0
.
GLOBAL
INTEGER
TAMANOCAM
PICTURE
0
.
Esto nos permitira Leer una tabla tipo TAPE, similar a la siguiente figura:
CLAVE
NOMBRE
EDAD
1000
ANA HERNANDEZ
22
2000
LUIS PEREZ
18
3000
ELSA PEREZ
35
2. Abrir la Tabla CLIENTES del objeto TAPE, y preparar un objeto RECORD, que nos permita ir leyendo las diferentes filas que integran la Tabla.
USE
( CLIENTES ) .
POKE ( FILA ) .
3. Usar la instrucción GET para obtener la primera Fila, y el comando READ para ir leyendo los diferentes campos que integran la Fila:
COPY ( FILA , GET (1) ) . COPY ( CLAVE , READ ( FILA , 1) ) . COPY ( NOMBRE , READ ( FILA , 2) ) . COPY ( EDAD , READ ( FILA , 3) ) .
Sintaxis: GET ( INTEGER ) . INTEGER = Número de Fila a extraer de la Tabla
READ ( RECORD , INTEGER ) RECORD = Objeto tipo RECORD que representa una Fila de datos en una Tabla. INTEGER = Número de Campo Consecutivo a Leer de una Fila extraida.
4. Continuar el mismo procedimiento hasta haber terminado la lectura de todos las Filas y Campos, generalmente estas lecturas pueden realizarse utilizando ciclos como DO-WHILE O REPEAT en BLAST.
COPY ( FILA , GET (2) ) . COPY ( CLAVE , READ ( FILA , 1) ) . COPY ( NOMBRE , READ ( FILA , 2) ) . COPY ( EDAD , READ ( FILA , 3) ) .
COPY ( FILA , GET (3) ) . COPY ( CLAVE , READ ( FILA , 1) ) . COPY ( NOMBRE , READ ( FILA , 2) ) . COPY ( EDAD , READ ( FILA , 3) ) .
5. En este ejemplo cada vez que se hace la lectura de los Campos se guardan en las mismas variables,eliminando el valor anterior, pero pueden almacenarse en cualquier variable que este declarada previamente en la WORKINGSTORAGE-SECTION.
Para poder hacer uso de Ciclos DO-WHILE o REPEAT, es necesario conocer el número de registros existente en la Tabla, o bien para continuar agregando mas registros o Filas, en BLAST se dispone de las siguientes funciones de bajo nivel para realizar este tipo de operaciones:
OCCURS
REDEFINE
FIELDSET
OCCURS Devuelve el número de ocurrencias de registros en un Objeto tipo TAPE, FILLER.
Ejemplo:
REGISTROS MOVE OCCURS ( CLIENTES ) .
REDEFINE Devuelve el tamaño en Bytes, que ocupa cada objeto RECORD (Fila) en la Tabla en uso.
Ejemplo:
REGISTROS MOVE REDEFINE ( CLIENTES) .
FIELDSET Cantidad de Bytes que ocupa cada campo dentro del objeto RECORD, de la Tabla en uso.
Ejemplo:
REGISTROS MOVE FIELDSET ( CLIENTES) .
DataObject FILLER El DataObject FILLER se usa practicamente de la misma forma que los ejemplos anteriores, la unica diferencia es que un objeto FILLER posee una capacidad de almacenamiento mayor, 64 Kilobytes,en comparación a los 33 Kilobytes del objeto TAPE. QUESTIONS :
¿ Como manipular Tablas de Base de Datos completas, o de gran tamaño ? Los pilares fundamentales de la filosofia de BLAST, proponen realizar paginaciones de Datos, para no saturar los anchos de bandas en redes tipo LAN, MAN o WAN, desde hace muchos años en los ambientes Mainframe se ha estandarizado la medida de 64 kilobytes como bloque de datos optimo de transferencias entre complejas redes de telecomunicación, de plataforma a plataforma.
BLAST dispone de soporte ASCII UTF-8 y caracteres EBCD para intercambios de datos, entre diferentes sistemas de computadores. ¿ Si necesito manejar de todas formas un bloque de datos mayor, que objeto dispongo en BLAST ? No es recomendable, pero si dada la necesidad, usted dispone de los objetos BINARY 65 Kilobytes y el objeto BLOB que es el mas grande aproximadamente 2 MB.
BLAST 1.0 TUTORIAL BLAST BLAST version 1.0 release 2.3 Operating System Compatible for Running:
X86, EXIRION/OS
X86, x64 EXIRION/XL65
SPARK , Unix
The BLAST Tutorial for student and developers writing in Xalapa, Veracruz, Saturday 05-04-2012. Creating: RFB 05-05-2012 Update: AUJT 09-05-2012