sábado, 8 de outubro de 2016

XML Generate

Olá!

Neste post será apresentado uma das formas de gerar uma string no formato de XML. O comando utilizado é o XML GENERATE, que possui a sintaxe para uso muito simples, veja abaixo:


XML GENERATE variável-A
        FROM variável-B
    COUNT IN variável-C
ON EXCEPTION expressão
END-XML.

Onde:
  • variável-A: é a variável que armazena a resposta/string gerada pela execução do comando.
  • variável-B: variável que contém as informações para gerar a string no formato de XML.
  • variável-C: após a execução do comando irá conter o número total de caracteres da resposta/string gerada, ou seja, possui o tamanho da string gerada em XML.
  • expressão: em caso de erro na geração da string para XML será acionado uma exceção, a expressão é o comando que será executado em caso de erro.
Segue abaixo um exemplo de código COBOL para gerar uma string no formato de XML com os dados de uma pessoa.

Declaração das variáveis:
xml generate - felipe barbosa ferreira

Código:
xml generate - felipe barbosa ferreira

Neste código de exemplo temos a seguinte relação:

variável-AGDA-TX-FMT-XML
variável-BIdentificacaoPessoa
variável-CGDA-TOTAL-CHAR-XML
expressãoPERFORM 999001-ERRO-01

Assim, ao executar o código de exemplo o resultado é:
GDA-TOTAL-CHAR-XML = 136
GDA-TX-FMT-XML = <IdentificacaoPessoa><Codigo>1</Codigo><Nome>Felipe</Nome><Sobrenome>Barbosa Ferreira</Sobrenome><Idade>23</Idade></IdentificacaoPessoa>


Para melhor visualização do resultado da execução do código de exemplo, segue abaixo a string gerada no formato de XML endentada:

<IdentificacaoPessoa>
    <Codigo>1</Codigo>
    <Nome>Felipe</Nome>
    <Sobrenome>Barbosa Ferreira</Sobrenome>
    <Idade>23</Idade>
</IdentificacaoPessoa>

Note que facilmente é gerado uma string no formato de XML. Sendo, uma grande vantagem de utilizar o XML GENERATE é que espaços em brancos a direita e zeros a esquerda são descartados automaticamente do resultado final.

Também, que neste exemplo em caso de erro será acionado o parágrafo de erro 01, por meio do comando PERFORM 999001-ERRO-01.

O  XML GENERATE possui outros comandos opcionais que facilitam a criação de strings xmls mais elaboradas, veja na página da IBM (clique aqui).

Em um post anterior foi demonstrado como extrair o conteúdo de uma string que estejam no formato de XML, veja em Unstring XML COBOL.

Para Ctrl + C do código acesse aqui.
Consultar a relação de Termos e Abreviaturas acesse aqui.
FELIPE BARBOSA FERREIRA
Até o próximo post!

quinta-feira, 29 de setembro de 2016

Calcular a quantidade máxima de OCCURS

Olá!

Em programas que possuem lista de registros na área de dados de comunicação (entrada/saída de dados do programa), onde a quantidade de ocorrências da lista tem que ser determinada para aproveitar todo o espaço da área de dados. Ou seja, se as variáveis que não estão na lista ocupam 20 % do espaço da área de dados, os outros 80% podem ser ocupados com os dados da lista.

Assim, para determinar a quantidade máxima de ocorrências que a lista possa assumir, de modo a aproveitar todo espaço de dados, é necessário realizar a avaliação do espaço que está sendo utilizado pelas variáveis que não estão na lista; do tamanho de cada registro da lista, e do tamanho do espaço da área de dados do programa.

Por exemplo, se cada registro da consulta tiver o tamanho de 1.5 MB e a rotina utilizar comunicação via COMMAREA, o número máximo de registros que poderão ser passados a cada vez para a outra camada é de 21 registros. Porque o tamanho máximo suportado em COMMAREA é de 32.7 MB e divido pelo tamanho do registro que é 1.5 MB, temos o resultado de 21.8 que representa o número de vezes que podemos repetir o tamanho desse registro, ou seja, podemos passar até 21 registros para a outra camada.

Para simplificar o cálculo básico para definir a quantidade registros que podem ser trafegados entre as camadas, é: A = (B - C) / D.
Onde:
  • A - Número de ocorrências
  • B - Tamanho da área de comunicação
  • C - Parte de dados fixa
  • D - O tamanho de cada registro

Exemplo de cálculo com o book abaixo para comunicação COMMAREA.

Book SEM numero de ocorrencias - FELIPE BARBOSA FERREIRA

A - ??
B - 32.7 MB
C - 127 bytes
D - 1.5 MB

A = (32700 - 127) / 1500

Logo, o resultado de A = 21,71, como não existe 0,71 de ocorrência, então arredondamos para baixo, 21 ocorrências possíveis. Assim, o book de exemplo pode conter além da parte fixa, uma lista com até 21 ocorrências.

Para facilitar a leitura e codificação dos controles de laço de repetição que manipularam os campos da lista, é uma boa prática definir o total ocorrências com números que contenham o final em zero, exemplo: 10; 20; 50; 100; 200; 500; 1000; 1500; 2000.

Book com número de ocorrências definido:

Book com numero de ocorrencias - FELIPE BARBOSA FERREIRA

Agora, pense na situação em que por exemplo a lista de resposta do programa somente consiga transportar 20 registros, entretanto na base de dados (DB) há 100 registros para a resposta do programa, assim se executarmos o programa irá faltar 80 registros. Para que seja retornado todos os 100 registros, será necessário criar um controle de reprocessamento, para que sejam processados os 20 primeiros registros e depois os demais registros que estão contidos no DB. Este controle será apresentado no próximo post!

Consultar a relação de Termos e Abreviaturas acesse aqui.
FELIPE BARBOSA FERREIRA
Até o próximo post!

domingo, 18 de setembro de 2016

Verificar a quantidade de espaço usada da área de dados

Olá!

Para que não seja ultrapassado o limite da quantidade de dados que podem ser transitados entre os programas, é necessário realizar a verificação do tamanho da área de dados que está sendo utilizada pelo programa.

Em um programa que não possui lista de registros, a verificação consiste em apenas fazer o somatório dos tamanhos das variáveis que são usadas para receber e enviar dados do programa, se o resultado do somatório ultrapassar o limite suportado pela área de dados será necessário analisar a situação. Exemplo:

Área de dados:
           03 REQUISICAO.
      * --    OBRIGATORIOS
               05 CD-ALUNO                       PIC  9(009) COMP.
      *
           03 RESPOSTA.
      * --    CONTROLE DE ERRO
               05 CD-ERRO                        PIC  9(009) COMP.
               05 TX-ERRO                        PIC  X(120).
      * --    DADOS PROCESSADOS
               05 NM-ALUNO                       PIC  X(050).

Somatório = 4 + 4 + 120 + 50
Somatório = 178 bytes

Note que variáveis compactadas ocupam um espaço menor, e para o cálculo do somatório é utilizado os valores que cada variável usa/ocupa de espaço na área de dados.

Para os programas que possuem lista de registros, é necessário realizar o cálculo da seguinte forma:

Somatório = somatorioVariaveisFixas + (quantidadeDeOcorrencias * (somatorioVariaveisLista))

Área de dados com lista:
           03 REQUISICAO.
      * --    OBRIGATORIOS
               05 CD-ALUNO                       PIC  9(009) COMP.
      *
           03 RESPOSTA.
      * --    CONTROLE DE ERRO
               05 CD-ERRO                        PIC  9(009) COMP.
               05 TX-ERRO                        PIC  X(120).
      * --    DADOS PROCESSADOS
               05 LS-ALUNOS OCCURS 10 TIMES.
                   05 NM-ALUNO                   PIC  X(050).
                   05 NM-ALUNO-SOBRENOME         PIC  X(050).

somatorioVariaveisFixas = 4 + 4 + 120
somatorioVariaveisFixas = 128

quantidadeDeOcorrencias = 10

somatorioVariaveisLista = 50 + 50
somatorioVariaveisLista = 100

Somatório = 128 + (10 * 100)
Somatório = 1128 bytes

Repare que mesmo neste exemplo que possui variáveis com tamanhos relativamente pequenos, quando realizado o cálculo para verificar a área total utilizada para conter as informações, o resultado se apresenta maior do que o esperado, pois nenhuma variável possui o tamanho um tamanho "grande" e já está sendo usado mais de 1 MB de espaço.

Então, considerando que aplicações em cenários reais usam mais variáveis, ou até mesmo mais de uma lista na área de dados do programa, é recomendável realizar está simples verificação nos programas desenvolvidos. 

Consultar a relação de Termos e Abreviaturas acesse aqui.
FELIPE BARBOSA FERREIRA

Até o próximo post!