Laboratório - Programação CL

Embed Size (px)

Citation preview

Programao CLApostila Laboratrio

Rua Fiao da Sade, 145 4 andar Vl. Da Sade Cep 04144-020 So Paulo -SP Fone/Fax: 11- 5581.6803 [email protected]

SUMARIO

INSTRUES GERAIS PARA TODOS OS LABORATRIOS .................................... 3 LAB.1: REVISO DOS PR-REQUISITOS ................................................................ 5 LAB.2: PROGRAMA INICIAL ESPECIFICADO NA USER PROFILE........................... 8 LAB.3: COMANDOS CALL/TRANSFER CONTROL................................................. 10 LAB.4: COMANDO CHGVAR, PARMETROS DE PROGRAMAS E DISPLAY FILES .............................................................................................................................. 11 LAB.5: PROGRAMAS SEMELHANTES AOS MENUS ............................................. 14 LAB.6: DEBUGGING .............................................................................................. 16 LAB.7: ACESSO AOS DADOS DA DATA AREA ..................................................... 23 LAB.8: ATRIBUTOS EXTERNOS, CVTDAT, %SST ................................................. 25 LAB.9: TRATAMENTO DE MENSAGENS ............................................................... 27 LAB.10: COMANDO SNDUSRMSG......................................................................... 33 LAB.11: MONITORAO DE MENSAGENS ........................................................... 35 LAB.12: PROGRAMAO COM MENS AGENS ...................................................... 38 LAB.13: MENSAGENS DO TIPO INQUIRY .............................................................. 44 LAB.14: FERRAMENTAS DE USURIO ................................................................. 48 LAB.15: COMANDO SUBMIT JOB E LOCAL DATA AREA...................................... 51 LAB.16: DATA QUEUE........................................................................................... 55 LAB.17: COMANDOS ............................................................................................. 58

iSeries | AS400: Programao CL

2 | 60

Introduo

INSTRUES GERAIS PARA TODOS OS LABORATRIOSEm todas as instrues neste caderno de exerccios, substituir os caracteres 'xxx' (letra minscula), pelo nmero do grupo atribudo pelo instrutor.

Com

uma

certa

freqncia,

voc

ter

que

copiar

um

membro

do

arquivo

CLPLAB/QCLSRC ou CLPLAB/QDDSSRC para um novo membro no seu SOURCE FILE.

Como o membro a ser copiado de uso geral, ele contm os caracteres 'xxx'. Substituir 'xxx' pelo nmero do grupo, para o novo membro a ser criado.

A sua USER PROFILE ser CLPxxx, e a sua PASSWORD tambm ser CLPxxx.

Todos os objetos devero ser criados na biblioteca do grupo CLPxxx.

CLPLAB uma biblioteca do curso, que contm objetos que sero usados por todos os grupos.

Ler a descrio inteira de cada etapa do laboratrio, antes de comear cada passo.

Antes de codificar o programa, tentar executar a soluo apresentada, para verificar como o programa deve funcionar.

Estas solues tm o mesmo nome que o programa do aluno, mas os caracteres xxx so apresentados como 'XXX', e no com o nmero do grupo.

Voc pode ver as solues nos seguintes SOURCE FILES da biblioteca CLPLAB: QCLSRCI, QDDSSRCI e QCMDSRCI.

Ao digitar os comandos, usar as facilidades de HELP e PROMPT (F4), fornecidos pelo sistema.

iSeries | AS400: Programao CL

3 | 60

Cada etapa do LAB pode solicitar a execuo de mais de uma instruo, portanto, ler cuidadosamente e checar os passos ao complet-los.

Laboratrio 1: Laboratrio 2: Laboratrio 3: Laboratrio 4: Laboratrio 5: Laboratrio 6: Laboratrio 7: Laboratrio 8: Laboratrio 9: Laboratrio 10: Laboratrio 11: Laboratrio 12: Laboratrio 13: Laboratrio 14: Laboratrio 15: Laboratrio 16: Laboratrio 17:

Reviso dos pr-requisitos Programa inicial especificado na user profile Comandos CALL/TRANSFER CONTROL Cmd CHGVAR, parm de programas e display files Programas semelhantes aos menus DEBUGGING Acesso aos dados da DATA AREA Atributos Externos, CVTDAT, %SST Tratamento de Mensagens Comando SNDUSRMSG Monitorao de mensagens Programaao com Mensagens Mensagens do tipo INQUIRY Ferramentas do Usurio Comando SUBMIT JOB e LOCAL DATA AREA DATA QUEUE Comandos

(obrigatrio) (obrigatrio) (opcional) (obrigatrio) (obrigatrio) (obrig + opc) (opcional) (obrigatrio) (obrigatrio) (obrigatrio) (obrigatrio) (opcional) (opcional) (opcional) (opcional) (opcional) (opcional)

iSeries | AS400: Programao CL

4 | 60

Laboratrio 1

REVISO DOS PR-REQUISITOSEm todos os LABs, criar todos os objetos na biblioteca do grupo, CLPxxx. U sar a facilidade de PROMPT (F4), para entrar com todos os comandos.

Ler todas as mensagens aps a execuo dos comandos, para certificar-se de que eles foram executados corretamente. Se aparecer um sinal '+' direita da mensagem, colocar o cursor na linha da mensagem e usar a tecla PAGE DOWN para ver o resto das mensagens.

Como este LAB pr-requisito para os demais, necessrio complet-lo corretamente antes de passar para os outros LABs.

PASSOS PARA A EXECUO DO LAB:

1.

Usar o comando CRTLIB (CREATE LIBRARY), para criar a biblioteca do seu grupo, CLPxxx.

2.

Usar o comando CHGCURLIB (CHANGE CURRENT LIBRARY), para especificar a sua biblioteca como 'biblioteca corrente'.

3.

Usar o comando CPYF (COPY FILE), para copiar o arquivo chamado APPVEND, da biblioteca C LPLAB, para um arquivo com o mesmo nome na sua biblioteca. Especificar a opo CRTFILE(*YES) no comando CPYF.

4.

Usar o comando CRTDUPOBJ (CREATE DUPLICATE OBJECT), para duplicar um programa chamado DBLREFRESH, da biblioteca CLPLAB, para um programa com o mesmo nome na sua biblioteca. Especificar o tipo do objeto: *PGM.

5.

Usar o comando CRTSRCPF (CREATE SOURCE PHYSICAL FILE), para criar os seguintes SOURCE FILES: QCLSRC QDDSSRC QCMDSRC

6.

Usar o comando CRTOUTQ (CREATE OUTPUT QUEUE), para criar uma fila de sada chamada CLPxxx.

iSeries | AS400: Programao CL

5 | 60

7.

Criar uma JOB DESCRIPTION chamada CLPxxx, usando o seguinte comando: CRTJOBD JOBD(CLPxxx) OUTQ(CLPxxx) TEXT('TEAM xxx JOB DESCRIPTION') PRTTXT('TEAM xxx') INLLIBL(CLPxxx CLPLAB QTEMP QGPL) LOG(4 00 *SECLVL) LOGCLPGM(*YES)

8.

Alterar a USER PROFILE para utilizar a nova JOB DESCRIPTION. CHGPRF JOBD(CLPxxx)

9.

Executar o comando SIGNOFF e entrar no sistema novamente, para utilizar a nova JOB DESCRIPTION.

10. Usar o comando DSPLIB (DISPLAY LIBRARY), para mostrar todos os objetos da sua biblioteca. Ela deve conter os seguintes objetos: DBLREFRESH(*PGM) CLPxxx(*OUTQ) APPVEND(*FILE) QCLSRC(*FILE) QCMDSRC(*FILE) QDDSSRC(*FILE) CLPxxx(*JOBD)

11. Codificar um programa CL chamado TESTxxx no SOURCE FILE QCLSRC da sua biblioteca. Para isto, voc pode usar as seguintes ferramentas: dar o comando STRPDM para usar o PROGRAMMER DEVELOPMENT MENU, ou dar o comando STRPGMMNU para usar o PROGRAMMER'S MENU, ou dar o comando STRSEU para usar o SOURCE ENTRY UTILITY

O SOURCE TYPE deve ser CLP e no CL. Digitar o seu nome e nmero do grupo nos locais indicados na mensagem do programa.

O programa deve conter as seguintes instrues: PGM SNDMSG MSG(', TIME xxx, COMPLETOU O LAB !!!') +

iSeries | AS400: Programao CL

6 | 60

TOMSGQ(QSYSOPR) ENDPGM

12. Compilar o programa TESTxxx. 13. Executar o programa TESTxxx (CALL nome_do_programa). 14. Se o programa foi executado corretamente, a mensagem deve estar na fila de mensagem do operador, QSYSOPR. Usar o comando DSPMSG para verificar se a mensagem chegou no seu destino correto. (Na fila de mensagem do operador do sistema QSYSOPR).

iSeries | AS400: Programao CL

7 | 60

Laboratrio 2

PROGRAMA INICIAL USER PROFILE

ESPECIFICADO

NA

Aps completar este LAB, o aluno deve estar apto a:

1. 2.

Criar um ambiente para o programador, a ser utilizado durante o curso. Escrever um programa CL, que executa as seguintes funes: Especifica uma biblioteca corrente para o JOB. Altera a LIBRARY LIST e a fila de sada (OUTPUT QUEUE) 'default' para o JOB. Mostra a tela correspondente ao PROGRAMMER'S MENU ou PDM.

PASSOS PARA A EXECUO DO LAB:

1.

Usar o comando CHGCURLIB (CHANGE CURRENT LIBRARY), para especificar a sua biblioteca CLPxxx, como 'biblioteca corrente'.

2.

Codificar um programa chamado CLPxxx no SOURCE FILE QCLSRC da sua biblioteca para: a) Usar o comando CHGCURLIB, para alterar a biblioteca corrente do seu JOB para CLPxxx. NOTA: No LAB 1, voc criou uma JOB DESCRIPTION especificando a biblioteca CLPLAB na LIBRARY LIST. Depois, especificou a JOB DESCRIPTION na USER PROFILE atravs do comando CHGPRF. Este comando poderia ter assinalado a biblioteca CLPxxx como biblioteca corrente da PROFILE. b) Alterar os atributos do JOB, atravs deste comando: CHGJOB OUTQ(CLPxxx) PRTTXT('TEAM xxx') + LOG(4 00 *SECLVL) LOGCLPGM(*YES)

c) Escolher uma das seguintes ferramentas, e executar o comando apropriado:

iSeries | AS400: Programao CL

8 | 60

* comando STRPDM: inicializa o PROGRAMMER DEVELOPMENT MANAGER (PDM). * comando CALL QCMD: chama uma tela para entrada de comandos (COMMAND ENTRY SCREEN) * comando STRPGMMNU: inicializa o PROGRAMMER'S MENU.

Obs: No especificar os trs comandos ao mesmo tempo. 3. 4. 5. Compilar o programa CLPxxx. Executar o programa: CALL CLPxxx. Executar o comando DSPJOB. Selecionar as opes do menu referentes aos atributos de definio do JOB (opo 2), e LIBRARY LIST do JOB (opo 13). As informaes mostradas devem refletir as alteraes feitas pelo programa. 6. Quando o seu programa estiver correto, usar o comando CHGPRF (CHANGE PROFILE), para torn-lo o programa inicial da sua PROFILE: parmetro INLPGM do comando CHGPRF. 7. 8. 9. IMPORTANTE: Qualificar o nome do seu programa no comando CHGPRF. Executar o comando SIGNOFF Entrar no sistema fornecendo o usurio e a PASSWORD.

Se voc tiver algum problema para entrar no sistema novamente, chamar o instrutor. Usar o comando DSPJOBLOG para verificar se o programa executou corretamente.

iSeries | AS400: Programao CL

9 | 60

Laboratrio 3

COMANDOS CALL/TRANSFER CONTROLAps completar este LAB, o aluno poder descrever como o controle passado de um programa para outro, usando os comandos CALL, TFRCTL e RETURN.

PASSOS PARA A EXECUO DO LAB:

1. 2.

Iniciar o LAB, executando o PGMA (CALL PGMA) da CLPLAB. Sero enviadas algumas mensagens do programa: Informando qual programa est sendo executado. Pedindo que voc verifique a pilha de programas, atravs do comando DSPJOB (opo 11 - PROGRAM STACK). Pedindo que voc escolha a prxima ao: CALL - Executar o prximo programa. TFRCTL - Transferir o controle para o prximo programa. RETURN - Voltar para o programa anterior.

3.

Testar as vrias aes em combinaes diferentes, analisando a pilha de programas aps cada ao.

iSeries | AS400: Programao CL

10 | 60

Laboratrio 4

COMANDO CHGVAR, PARMETROS PROGRAMAS E DISPLAY FILESOs programas CALCxxx e ADDxxx so obrigatrios. Os demais so opcionais

DE

Aps completar este LAB, o aluno estar familiarizado com as seguintes funes:

Parmetros de programa Formatos de tela (DISPLAY FILES) Comando CHGVAR para efeito de clculo Comando CHGVAR para converso de tipo de dado Comandos IF/ELSE, DO, GOTO, SNDF, RCVF Expresses lgicas e aritmticas

Viso geral do Laboratrio

Neste exerccio, voc ir codificar um programa para executar as funes de uma calculadora (somente as operaes bsicas).

O operador (usurio), dever entrar com dois nmeros e um cdigo da operao ('+' = adio, '- ' = subtrao, '*' = multiplicao, e '/' = diviso). O programa dever responder com uma sentena, contendo o resultado do clculo.

Por exemplo, se o operador entrar com os nmeros 3 e 4, e o operador de multiplicao '*', a seguinte resposta deve ser enviada:

'0000000003.00000 MULTIPLIED BY 0000000004.00000 IS 0000000012.00000.'

A aplicao deve incluir os seguintes programas:

CALCxxx: Programa principal ADDxxx : SUBxxx : MLTxxx : DIVxxx : Programa de adio Programa de subtrao (opcional) Programa de multiplicao (opcional) Programa de diviso (opcional)

iSeries | AS400: Programao CL

11 | 60

O programa CALCxxx usa o formato de tela (DISPLAY FILE) CALCDSPF para mostrar a tela inicial e o resultado aps o clculo. O DDS para o CALCDSPF e mostrado a seguir:

PASSOS PARA A EXECUO DO LAB:

1.

Copiar o membro CALCDSPF do SOURCE FILE CLPLAB/QDDSSRC para um membro com o mesmo nome no seu SOURCE FILE, CLPxxx/QDDSSRC.

2. 3.

Compilar o DISPLAY FILE CALCDSPF na sua biblioteca. Codificar um programa chamado CALCxxx para executar as seguintes funes:

a) Usar o comando DCLF para declarar o DISPLAY FILE CALCDSPF. b) Usar o comando DCL para declarar outras variveis necessrias ao programa. c) Usar o comando SNDF para enviar o formato QUESFMT para a Workstation. d) Usar o comando RCVF para ler o formato QUESFMT. e) Se o operador teclar F3 (EXIT), terminar o programa.

f)

Se o operador entrar com um cdigo de operao vlido, chamar o programa apropriado (ADDxxx, SUBxxx, MLTxxx ou DIVxxx), passando os seguintes parmetros (na forma de variveis CL):

Primeiro nmero digitado pelo usurio Segundo nmero digitado pelo usurio Resultado (Este valor dever ser retornado pelo programa chamado) Frase (este campo deve ser retornado pelo programa chamado. Deve ser uma das seguintes literais:

'PLUS', 'MINUS', 'MULTIPLIED BY', 'DIVIDED BY' O resultado uma sentena, similar quela mostrada anteriormente na figura 7. Esta sentena deve ser construda e movida para o campo &RESPONSE do formato ANSFMT. g) Se o operador entrar com um cdigo de operao invlido, mover a seguinte mensagem para o campo &RESPONSE: 'INVALID OPERATION CODE'

iSeries | AS400: Programao CL

12 | 60

h) Usar o comando SNDF (SEND FILE), para enviar o formato ANSFMT para o operador. Este formato contm o campo &RESPONSE. O formato ANSFMT foi definido com as especificaes de DDS CLRL(*NO) e OVERLAY, ou seja, no apaga o formato anterior ao enviar a tela. i) Voltar para o item d, para ler o formato QUESFMT novamente. Obs: Voc pode ler o formato novamente, sem regrav-lo. 4. Codificar o programa ADDxxx, para executar as seguintes funes:

a) Receber os parmetros passados pelo programa CALCxxx. b) Declarar as variveis necessrias. c) Executar a operao de adio, e mover o resultado para a varivel apropriada. d) Mover a literal 'PLUS' para a varivel utilizada para a frase.

5. 6.

Compilar e testar os programas CALCxxx e ADDxxx. Se o programa ADDxxx estiver correto, codificar e testar os demais programas SUBxxx, MLTXXX, e DIVxxx para executar as outras operaes aritmticas.

7.

Entrar com um cdigo de operao invlido, para teste da mensagem 'INVALID OPERATION CODE'.

iSeries | AS400: Programao CL

13 | 60

Laboratrio 5

PROGRAMAS SEMELHANTES AOS MENUSAps completar este LAB, o aluno deve estar apto a escrever um programa CL que interage com uma tela para fornecer funes de menu para o usurio. Sero fornecidos a fonte do formato da tela, e os programas a serem executados a partir das opes do menu. Sua tarefa codificar um programa que funciona como menu.

PASSOS PARA A EXECUO DO LAB:

1.

Copiar o membro APD01XXX do SOURCE FILE CLPLAB/QDDSSRC para o membro APD01xxx no seu SOURCE FILE CLPxxx/QDDSSRC.

2.

Editar o membro copiado (APD01xxx) da CLPxxx/QDDSSRC, e verificar:

o indicador associado a FUNCTION KEY 3 (F3) o nome do formato de registro (RECORD FORMAT) o nome do campo de entrada para a opo do menu

Anotar essas informaes, pois voc precisar delas mais tarde.

3. 4.

Compilar o formato da tela (DISPLAY FILE), gerando o objeto na sua biblioteca. Codificar um programa chamado APL01xxx para executar as seguintes funes:

a. b.

Declarar o DISPLAY FILE APD01xxx. Enviar/Receber o formato do DISPLAY FILE APD01xxx.

Obs: Usar o RECORD FORMAT anotado no passo 2

c.

Com base na opo ou FUNCTION KEY escolhida pelo operador, tomar a ao apropriada:

F3:

RETURN

Option 1: DSPDTA DFUPGM(APD45) Option 2: CALL APR200

iSeries | AS400: Programao CL

14 | 60

Option 3: RUNQRY QRY(APQ42) Option 90: SIGNOFF

d.

Voltar para o passo b

5. 6.

Compilar o programa APL01xxx na sua biblioteca. Executar o programa: CALL APL01xxx, e testar todas as opes.

Esto listados abaixo, alguns nmeros de vendedores vlidos:

---------------------------------------------- 13130 15864 21178 24001 94613 - 24133 25256 30188 33333 94946 - 34681 45892 56330 56567 96431 - 63200 63218 63410 65321 - 72302 73013 84210 88714 ----------------------------------------------

iSeries | AS400: Programao CL

15 | 60

Laboratrio 06

DEBUGGINGEste laboratrio obrigatrio.

Aps completar esse laboratrio o aluno ser capaz de fazer o seguinte:

-

Colocar um job em modo debug e especifica breakpoints Gerar dump no programado atravs da opo "D" que aparece em mensagens de erro do tipo inquiry.

Viso Geral do laboratrio:

Os programas utilizados nesse laboratrio so similares aos utilizados no laboratrio 4 que trata de operaes aritmticas com dois nmeros.

Os programas apresentam algumas diferenas tais como:

No utilizao de display file para receber os nmeros. Os nmeros so passados atravs de parmetros (CALL PARM()).

O resultado da operao exibido atravs do comando SNDUSRMSG.

Os smbolos +, -, * e / foram substitudos por ADD, SUB, MLT e DIV respectivamente. Alm disso, temos a operao PCT (percentage) que calcula a percentagem do primeiro nmero em relao ao segundo.

Um novo programa foi criado para executar a operao de percentual.

A aplicao executada da seguinte maneira:

CALL PGM(CALCBUGxxx) PARM(n1 operao n2)

Onde xxx o nmero do seu grupo, n1 e o primeiro nmero, operao pode ser ADD, SUB, MLT, DIV e PCT e n2 o segundo nmero.

Passos para execuo do laboratrio:

iSeries | AS400: Programao CL

16 | 60

1.

Copie os programas fontes CALCBUGxxx, ADDBUGxxx, SUBBUGxxx, MLTBUGxxx, DIVBUGxxx e PCTBUGxxx do arquivo de fontes (Source file) CLPLAB/QCLSRC para o seu arquivo de fontes CLPxxx/QCLSRC. Altere xxx pelo nmero do seu grupo.

2.

No programa CALCBUGxxx, troque o sufixo XXX pelo nmero do seu grupo.

3.

Compile todos os programas na sua biblioteca.

ERRO 1

1.

Execute o seguinte comando: CALL PGM(CLPxxx/CALCBUGxxx) PARM(4 ADD 3)

Sabemos que ADD uma operao vlida. Mesmo assim, voc receber a mensagem "Invalid Operation Code". 2. Execute a verso correta da aplicao (lib CLPLAB): CALL PGM(CALCNOBUG) PARM(4 ADD 3)

3.

Execute o seguinte commando para analisar (to programa CALCBUGxxx:

debug) a execuo do

STRISDB PGM(CLPxxx/CALCBUGxxx) NVPGM(*CMD) CMD(CALL PGM(CLPxxx/CALCBUGxxx) PARM(4 ADD 3)

4.

Escolha a tecla de funo para executar o programa. Novamente voc receber a mensagem "Invalid Operation Code".

5.

Na tela Program Termination, escolha "2=Restart program"

6.

Encontre o erro.

iSeries | AS400: Programao CL

17 | 60

Dica:

Coloque um breakpoint antes e outro aps o comando que envia a mensagem "Invalid Operation Code". Use a tecla de funo apropriada para executar o programa. Quando o programa parar no breakpoint, exiba a varivel &OP.

Use a tecla F3 para sair do debbuger.

Corrija o erro editando o programa fonte do objeto *PGM CALCBUGxxx e recompile o programa.

ERRO 2

1.

Execute o programa novamente: CALL CALCBUGxxx PARM(4 ADD 3)

O programa produzir o resultado aritmtico correto. Porm o verbo ser "PLUS PERCENT OFF" ao invs de "PLUS".

2.

Execute o seguinte comando para analisar (to debug) a execuo do programa CALCBUGxxx: STRISDB PGM(CLPxxx/CALCBUGxxx) IN PGM(*CMD) CMD(CALL PGM(CLPxxx/CALCBUGxxx) PARM(4 ADD 3)

3.

Encontre o erro

Dicas:

- Coloque breakpoints antes e depois do CALL do program ADDBUGxxx - Utilize a tecla de funo apropriada para TRABALHAR COM UMA LISTA DE PROGRAMAS - Escolha opo apropriada para alterar o programa ADDBUGxxx a lista de programas - Escolha a opo apropriada para alterar o programa ADDBUGxxx: - Coloque breakpoints no programa ADDBUGxxx antes e aps a varivel &VERB em cada breakpoint.

Use a tecla F3 para sair do debugger.

iSeries | AS400: Programao CL

18 | 60

- Corrija o erro editando o programa fonte o objeto * PGM CALCBUGxxx e recompile o programa. - Execute novamente: CALL CALCBUGxxx PARM(4 ADD 3) Dessa vez o programa deve funcionar corretamente.

ERRO 3

1.

Execute novamente o programa CALCBUGxxx especificando uma subtrao: CALL CALCBUGxxx PARM(4 ADD 3)

Verifique a mensagem de erro:

2.

Execute a verso correta da aplicao: CALL PGM(CALCNOBUG) PARM(4 ADD 3)

3.

Execute o seguinte commando para analisar (to debug) a execuo do programa CALCBUGxxx: STRISDB PGM(CLPxxx/CALCBUGxxx) INVPGM(*CMD) CMD(CALL PGM(CLPxxx/CALCBUGxxx) PARM(4 SUB 3))

4.

Encontre o erro

Dicas:

Coloque breakpoints antes e depois do CALL do programa SUBBUGxxx. Utilize a tecla de funo apropriada para trabalhar com uma lista de programas. Escolha opo apropriada para adicionar o programa SUBBUGxxx a lista de programas. Escolha a opo apropriada para alterar o programa SUBBUGxxx. Coloque breakpoints no programa SUBBUGxxx antes e aps da varivel &RESULT ser alterada. Pressione a tecla de funo que executa o programa. Utilize a tecla de funo apropriada para e xibir o valor da varivel &RESULT em cada breakpoints.

Use a tecla F3 para sair do debugger.

Corrija o erro editando o programa fonte do objeto *PGM CALCBUGxxx e recompile o programa.

iSeries | AS400: Programao CL

19 | 60

Execute o programa novamente: CALL CALCBUGxxx PARM(4 SUB 3) Dessa vez o programa deve funcionar corretamente.

ERRO 4

1.

Execute

novamente

o

programa

CALCBUGxxx

especificando

uma

multiplicao: CALL CALCBUGxxx PARM(4 MLT 3)

No aparece mensagem de erro mas o resultado da operao est errado.

Os procedimentos necessrios para o resultado da operao aritmtica esto errados.

Os procedimentos necessrios para descobrir o erro so semelhantes aos executados anteriormente. Por isso, essa parte do laboratrio opcional.

ERRO 5

1.

Execute novamente o programa CALCBUGxxx especificando uma diviso: CALL CALCBUGxxx PARM(4 DIV 3)

Voc receber a mensagem MCH1202 seguida pela mensagem CPF9999 (Function Check)

2.

Use a tecla Help (F1) para verificar o segundo nvel da mensagem.

3.

Responda "D" para obter o dump

4.

Verifique o dump do programa. Use o comando WRKSPLF para encontr-lo.

5.

Exiba o dump do programa DIVBUGxxx e repare que a varivel &DIVIDEND deveria ter um valor decimal mas no tem.

Os procedimentos necessrios para descobrir o erro so semelhantes aos executados anteriormente. Por isso, essa parte do laboratrio opcional.

ERRO 6

iSeries | AS400: Programao CL

20 | 60

1.

Execute novamente o programa CALCBUGxxx especificando PCT: CALL CALCBUGxxx PARM(4 PCT 3)

2.

Quando voc receber as duas mensagens de erro causadas por decimal data erro, faa o seguinte:

a. b.

Use a tecla Help (F1) para verificar o segundo nvel da mensagem. Responda "D" para obter o dump.

3.

Verifique o dump do programa. Use o comando WRKSPLF para encontr-lo.

4.

Exiba

o

dump

do

programa

PCTBUGxxx

e

repare

que

a

varivel

&ONEHUNDRED deveria ter um valor decimal mas no tem.

5.

Execute o seguinte comando para analisar (to debug) a execuo do programa CALCBUGxxx STRISDB PGM(CLPxxx/CALCBUGxxx) INVPGM(*CMD) CMD(CALL PGM(CLPxxx/CALCBUGxxx) PARM(4 PCT 3))

6.

Utilize a tecla de funo apropriada para trabalhar com uma lista de programas

7.

Escolha opo apropriada para adicionar o programa PCTBUGxxx a lista de programas.

8.

Escolha a opo apropriada para alterar o programa PCTBUGxxx.

9.

Coloque breakpoints no primeiro comando do

programa PCTBUGxxx. O

primeiro comando aparece logo aps o comando DCL.

10. Utilize a tecla de funo apropriada para executar o programa at o breakpoint.

11. Use o comando ISDB Dsp (Display) para exibir o contedo da varivel &ONEHUNDRED.

O FORMATO DO COMANDO NO FOI EXPLICADO. Use a opo HELP do menu para encontrar detalhes do comando Dsp (Display). Repare que esse comando est destacado (highlighted). Coloque o cursor sobre esse comando e pressione a tecla enter. Verifique as informaes adicionais do comando, inclusive a sintaxe.

iSeries | AS400: Programao CL

21 | 60

12. Use o comando ISBD Chg (change) para alterar a varivel &ONEHUNDRED para um valor decimal vlido.

13. Exiba o contedo da varivel &ONEHUNDRED.

14. Use a tecla de funo apropriada para continuar a execuo do programa.

15. Voc deve obter um resultado vlido.

16. Na tela Program Termination, escolha "2=Restart program".

17. Repare que o comando CALL PCTBUGxxx tem apstrofes no valor 100. Ou seja, um dado do tipo caracter.

18. Saia do ISDB debugger.

19. Corrija o erro editando o programa fonte do objeto *PGM CALCBUGxxx e recompile o programa.

20. Teste novamente o programa PCTBUGxxx.

iSeries | AS400: Programao CL

22 | 60

Laboratrio 7

ACESSO AOS DADOS DA DATA AREAAps completar este LAB, o aluno estar familiarizado com a codificao de um programa CL que acessa os dados da DATA AREA, movendo-os para variveis C L definidas no programa.

PASSOS PARA A EXECUO DO LAB:

1.

A DATA AREA chamada CLPLAB/MONTHS contm uma lista de meses do ano.

O ms de janeiro 'JANUARY', comea na posio 1, 'FEBRUARY' comea na posio 11, e assim por diante.

Verificar o contedo da DATA AREA usando o comando DSPDTAARA (DISPLAY DATA AREA).

2.

Copiar o fonte do DISPLAY FILE MONTHS da CLPLAB/QDDSSRC, para a sua biblioteca CLPxxx/QDDSSRC.

3.

Compilar o DISPLAY FILE MONTHS na sua biblioteca.

4.

Codificar um programa chamado MONTHSxxx, para executar as seguintes funes:

a) Enviar o formato de registro do DISPLAY FILE MONTHS para o operador.

OBS: No esquecer de declarar o DISPLAY FILE, antes de enviar o formato.

b) Se o usurio teclar F3 (EXIT), terminar o programa.

Caso contrrio, usar o nmero do ms digitado pelo usurio, para extrair o nome do ms da DATA AREA. Voc ter que calcular a posio inicial para recuperar o nome do ms, a ser utilizado no comando RTVDTAARA (RETRIEVE DATA AREA). Para calcular a posio inicial, voc pode usar a seguinte expresso: POSIO INICIAL = (10 * NMERO DO MS) - 9

c) Voltar para o item a.

iSeries | AS400: Programao CL

23 | 60

5. 6.

Compilar o programa MONTHSxxx. Testar o programa MONTHSxxx (CALL MONTHSxxx).

iSeries | AS400: Programao CL

24 | 60

Laboratrio 8

ATRIBUTOS EXTERNOS, CVTDAT, %SSTEste Laboratrio obrigatrio.

Aps completar este Laboratrio, o aluno estar familiarizado com as seguintes funes:

Recuperar os atributos de job e user profile; Converso de formato de data; Utilizar a funo % SUBSTRING; Converso de tipo de dado; Utilizao do prompt com seleo de parmetros

Viso geral do Laboratrio

Neste exerccio, voc utilizar tcnicas para calcular o nmero de dias que faltam para sua password ser alterada, e enviar uma mensagem para a fila de mensagens da workstation.

Passos para a Execuo do Laboratrio

1.

Codificar um programa CL chamado INL01xxx para executar as seguintes funes a Declarar as variveis necessrias:

a) Use os comandos RTVJOBA para recuperar a data do seu job (no formato default do sistema), e RTVUSRPRF para recuperar a data em que a sua password foi alterada pela ltima vez (formato *YMD), armazene os valores em variveis CL.

b) Converter as duas datas para o formato Juliano, utilizando o comando CVTDAT.

c) Utilize a funo %SUBSTRING para separar o ano e o nmero de dias das duas datas, e converta as variveis de carter para decimal.

iSeries | AS400: Programao CL

25 | 60

d) Calcule o nmero de dias entre a data do seu job e a data para alterao de sua password. No clculo no leve em considerao a possibilidade de anobissexto.

e) Use o prompt seletivo para enviar uma mensagem do tipo break contendo o resultado do clculo.

2.

O texto da mensagem deve ser "Your password was last changed nnnnn days ago", onde nnnnn o resultado do seu Clculo. O texto da mensagem deve ser mostrado no prompt de modo protegido.

3.

O usurio deve informar a workstation message queue que vai receber a mensagem.

4.

Outros parmetros no devero ser mostrados.

5.

Compilar o programa INL01xxx. h. Testar o programa INL01xxx:

6.

Executar o comando CHGJOB para alterar a data do seu job para uma data futura dentro do ano corrente.

7.

Executar o programa INL01xxx.

8.

Altere novamente a data do seu job, mas desta vez para um ano futuro.

9.

Executar o programa INL01xxx. Os clculos esto corretos?

iSeries | AS400: Programao CL

26 | 60

Laboratrio 9

TRATAMENTO DE MENSAGENSEste LAB OBRIGATRIO.

Aps completar este LAB, voc estar familiarizado com as seguintes funes:

Reconhecer mensagens do tipo BREAK. Reconhecer mensagens externas do tipo STATUS. Reconhecer mensagens enviadas para o seu programa. Manipular mensagens da fila de mensagens do usurio e da WORKSTATION. Ver as informaes adicionais associadas com a mensagem, incluindo o texto de mensagem de segundo nvel. Forar o seu JOB, para produzir o JOB LOG. Ver as informaes do JOB LOG. Ajustar o nvel de MESSAGE LOGGING, que determina quais mensagens do programa sero direcionadas para a JOB LOG. Utilizar o comando DSPJOB, para mostrar o nvel de MESSAGE LOGGING corrente, e usar o comando CHGJOB para alter-lo. Usar o comando DSPMSG para ver as mensagens da fila do usurio e da WORKSTATION. Limpar a fila de sada (OUTPUT QUEUE), usando a opo 4 da tela fornecida pelo comando WRKOUTQ.

Viso geral do Laboratrio

Cada WORKSTATION tem uma fila de mensagem, que o sistema usa para receber as mensagens. A fila de mensagem da WORKSTATION criada automaticamente pelo sistema, e tem o mesmo nome da WORKSTATION. Da mesma forma, cada usurio tem uma fila de mensagem com o mesmo nome da USER PROFILE.

Neste exerccio, voc ver que as mensagens podem ser enviadas para outras filas de mensagem. Voc ter que manipular as filas de mensagem, para remover mensagens individuais, e para ver informaes adicionais disponveis para cada mensagem. Voc

iSeries | AS400: Programao CL

27 | 60

ver como produzir uma JOB LOG, ajustar o nvel da MESSAGE LOGGING da JOB LOG, e como ver as informaes da JOB LOG.

O LAB dividido em 4 partes. Voc pode executar cada parte quantas vezes for necessrio. J que o exerccio envia mensagens para a fila da WORKSTATION, voc pode remover todas as mensagens antes de iniciar cada parte. (Executar o comando DSPMSG para ver a fila de mensagem da WORKSTATION, e selecionar a FUNCTION KEY para remover todas as mensagens).

PARTE A: VERIFICAR E REMOVER MENSAGENS

1.

Executar o seguinte comando: CALL MGL01 A ou CALL PGM(MGL01) PARM(A)

2.

A sua WORKSTATION deve mostrar que existe uma mensagem na fila. (Verificar o indicador de mensagem ligado). Usar o comando DSPMSG para ver as mensagens. Ir aparecer uma tela toda preenchida com mensagens. O comando DSPMSG tem como default o parmetro START(*LAST). Isto significa que ele mostra primeiro, a ltima pgina de mensagens. Usar a tecla PAGE UP, para ver as mensagens anteriores.

3.

Nesta parte do LAB, voc ir remover as mensagens seletivamente.

Encontrar a mensagem que comea com 'LAB MESSAGE 2', e remover somente essa mensagem, movendo o cursor sob a linha da mensagem e pressionando a FUNCTION KEY (F11).

4.

Encontrar a mensagem que diz: 'Can you display second level text for this message?'. Mostrar o texto de segundo nvel e outras informaes associadas com est mensagem, movendo o cursor sob a linha da mensagem e pressionado a tecla HELP. Anlisar as vrias partes da mensagem. Pressionar a tecla ENTER, para retornar a lista de mensagens de primeiro nvel.

5.

As mensagens podem ser vistas atravs do SYSTEM REQUEST. Pressionar SYSTEM REQUEST e depois teclar ENTER. Escolher a opo 4 para ver as mensagens.

iSeries | AS400: Programao CL

28 | 60

6.

Usar a FUNCTION KEY apropriada para remover todas as mensagens.

7.

Este o final da PARTE A. Voc pode refazer a PARTE A (Neste caso, remover todas as mensagens da fila de mensagens da WORKSTATION antes de reexecutar o LAB) ou voc pode prosseguir, fazendo a PARTE B.

PARTE B: MENSAGENS DO TIPO 'BREAK' E 'STATUS'

1.

Executar o seguinte comando:

CALL MGL01 B ou CALL PGM(MGL01) PARM(B)

Notar que essa mensagem interrompeu o seu trabalho. Esta uma mensagem do tipo BREAK. Ler a mensagem e teclar ENTER. Este programa envia tambm uma mensagem do tipo STATUS, para o programa chamado. Alguns programas, tais como o PROGRAMMER'S MENU, mostram mensagens do tipo STATUS para o usurio, enquanto outros programas no. Se a mensagem do tipo STATUS no aparecer, ento voc chamou o programa MGL01, a partir de um programa que no mostra este tipo de mensagem.

PARTE C: MENSAGENS DO TIPO 'INQUIRY '

NOTA: Antes de iniciar est parte do LAB, usar o comando WRKACTJOB, para ver se o subsistema CLPBATCH est inicializado. Caso contrrio, solicitar ao instrutor que o incialize, ou inicializ-lo atravs do comando:

STRSBS CLPLAB/CLPBATCH

1.

Para executar a PARTE C, usar o seguinte comando: CALL MGL01 C ou CALL PGM(MGL01) PARM(C)

Voc ser notificado de que existe uma mensagem aguardando na fila de mensagem.

2.

Verificar a mensagem e notar que est uma mensagem diferente.

Trata-se de uma mensagem do tipo INQUIRY, que fica aguardando at que voc responda.

iSeries | AS400: Programao CL

29 | 60

3.

Colocar a sua resposta e pressionar ENTER. A sua WORKSTATION ir indicar que existe uma mensagem na fila.

4.

Ver a mensagem, usando a FUNCTION KEY 10 (F10). Se voc esperar muito tempo para dar a sua resposta, o sistema ir responder automaticamente para voc. Se isso acontecer, remover todas as mensagens, e reexecutar a parte C.

5.

Remover todas as mensagens e executar a PARTE D.

PARTE D: JOB LOG

1.

Para executar a PARTE D, usar o seguinte comando: CALL MGL01 D ou CALL PGM(MGL01) PARM(D)

2.

Vrias mensagens aparecero na tela. Voc poder usar a tecla HELP, para ver as mensagens truncadas e as teclas PAGE UP/PAGE DOWN para ver todas as mensagens.

3.

Posicionar o cursor na primeira mensagem, e pressionar a tecla HELP para ver o texto de mensagem de segundo nvel. Fazer o mesmo para a segunda mensagem.Voc precisar dessas informaes mais tarde.

4.

Estas mensagens so enviadas para a fila de mensagem do programa, e so tratadas de maneira diferente das mensagens vistas anteriormente. Ao invs de aparecerem na tela da WORKSTATION, elas podem aparecer na JOB LOG dependendo de algumas condies. Estas mensagens e outras mensagens geradas por condies de erro, aparecero na JOB LOG. No comando SIGNOFF, voc pode forar a impresso da JOB LOG. Como a JOB LOG e til para a determinao de problemas, voc ir forar a impresso da JOB LOG para verificar o contedo.

5.

Executar o comando DSPJOB, e anotar as 3 partes do nome do JOB:

nome da WORKSTATION USER PROFILE NMERO

iSeries | AS400: Programao CL

30 | 60

Encontrar tambm, a fila de sada (OUTPUT QUEUE) default para o JOB. Voc precisar dessas informaes para identificar a sua JOB LOG.

6.

Sair da funo DSPJOB.

7.

Terminar o seu JOB, forando a impresso da JOB LOG, atravs do seguinte comando: SIGNOFF LOG(*LIST)

8.

Entrar no sistema novamente.

9.

Usar o comando WRKSPLF, para encontrar o SPOOL FILE correspondente a impresso da JOB LOG do JOB anterior.

10. Selecionar o opo 5 para ver o contedo da JOB LOG. Usar as 3 partes do nome do JOB, anotadas no item 5, para checar se voc est vendo a JOB LOG correta.

Usar a coluna MESSAGE ID para encontrar as identificaes de mensagem que comeam com os caracteres 'UXT'. Estas so mensagens externas do tipo STATUS. Como a JOB LOG tem 132 posies, voc pode usar o comando WINDOW no campo de controle (CONTROL). Por exemplo, voc pode especificar W25, para ver os dados a partir da posio 25; W1 ir mostrar os dados a partir da posio 1.

Notar especialmente o texto de mensagem de segundo nvel para as mensagens 'UXT0243'.Verificar o comando que ser usado como filtro.

Continuar olhando as mensagens na JOB LOG. Cada identificador de mensagem, seguido por um nvel de severidade de dois dgitos (SEV). Notar o grau de severidade associado com cada uma das mensagens UXTxxxx. Notar tambm, que a primeira e ltima mensagem na LOG, informam a data e hora em que o JOB foi inicializado e terminado. A ltima mensagem informa tambm a razo pela qual o JOB terminou.

Quando voc terminar a anlise na JOB LOG, limpar o campo de controle (CONTROL), e pressionar ENTER para retornar.

iSeries | AS400: Programao CL

31 | 60

11. Para filtrar algumas mensagens, v para a tela do COMMAND ENTRY (CALL QCMD), e usar o comando CHGJOB para eliminar mensagens com grau de severidade menor que 20.

12. Executar a PARTE D novamente: CALL MGL01 D. Notar que as mensagens ainda aparecem, pois ainda no esto sendo filtradas.

13. Usar o comando DSPJOB, e anotar a identificao completa do JOB. Voc precisar dessas informaes para identificar a sua JOB LOG.

14. Executar o seguinte comando: SIGNOFF *LIST.

15. Entrar no sistema novamente, informando usurio e PASSWORD.

16. Usar o comando WRKSPLF para olhar a JOB LOG listada para o JOB anterior. O que aconteceu com as mensagens UXT com grau de severidade menor que 20 ?

Se os passos foram executados corretamente, voc no dever ver essas mensagens na JOB LOG, aps a execuo do comando CHGJOB, exceto para a mensagem CPF1164, informando que o JOB foi completado.

iSeries | AS400: Programao CL

32 | 60

Laboratrio 10

COMANDO SNDUSRMSGEste LAB obrigatrio.

Aps completar este LAB, o aluno estar familiarizado com as seguintes funes:

Criar uma fila de mensagem. Codificar o comando SNDUSRMSG em um programa, para enviar uma mensagem do tipo INQUIRY, e receber uma resposta. Alterar o DELIVERY MODE da fila de mensagem, de forma que todas as mensagens enviadas para a mesma assumam uma resposta DEFAULT.

Viso geral do Laboratrio

Neste LAB, voc ir criar uma fila de mensagem chamada OPERxxx. Voc ir codificar um programa que envia uma mensagem do tipo INQUIRY para a OPERxxx, recebe a resposta e envia a resposta de volta, de forma que voc possa ver a resposta recebida pelo programa.

Inicialmente, a fila de mensagem OPERxxx ter DELIVERY MODE NOTIFY e, neste caso, voc mesmo ter que dar a resposta. Posteriormente, voc ter que alterar o DELIVERY MODE para DEFAULT,para que a resposta seja dada automaticamente.

PASSOS PARA A EXECUO DO LAB:

1.

Remover

todas

as

mensagens

da

fila

de

mensagem

do

usurio

e

da

WORKSTATION.

2.

Usar o comando CRTMSGQ (CREATE MESSAGE QUEUE), para criar uma fila de mensagem chamada OPERxxx na sua biblioteca.

3.

Codificar um programa chamado MGL05xxx para executar as seguintes funes:

a) Declarar uma varivel caractere com uma posio chamada &REPLY.

iSeries | AS400: Programao CL

33 | 60

b) Usar o comando SNDUSRMSG para enviar uma mensagem do tipo INQUIRY para a fila de mensagem OPERxxx, e receber a resposta na varivel &REPLY. Definir Y ou N (letra maiscula) como respostas vlidas, e especificar N como a resposta DEFAULT. Texto da mensagem a ser enviada: 'A fita BACKUP est montada?'.

c) Usar o comando SNDMSG para enviar a resposta (&REPLY), para a fila de mensagem do usurio: TOUSR(*REQUESTER).

4.

Compilar o programa MGL05xxx.

5.

Executar o programa MGL05xxx. O sistema ir enviar uma mensagem dizendo que voc est esperando uma resposta a uma mensagem na fila de mensagem OPERxxx. O programa ir aguardar uma resposta, mas voc no poder responder neste JOB.

6.

Usar o SYSTEM REQUEST e teclar ENTER, para obter o menu do SYSTEM REQUEST.

7.

Selecionar a opo 4 para mostrar as mensagens da fila OPERxxx. a) No comando DSPMSG, especificar: b) MSGQ(CLPxxx/OPERxxx).

8.

Digitar a resposta: Y.

9.

Terminar a funo SYSTEM REQUEST (F3=EXIT), e retornar para o seu JOB.

10. Verificar a fila de mensagem do usurio atravs do comando DSPMSG. a) Voc dever ver a resposta: Y

11. Usar o comando CHGMSGQ (CHANGE MESSAGE QUEUE), para alterar o DELIVERY MODE da fila de mensagem OPERxxx para 'DEFAULT'.

12. Executar o programa MGL05xxx novamente. Desta vez, voc no ir ver a mensagem dizendo que voc est aguardando uma resposta para uma mensagem na fila OPERxxx, pois foi enviada a resposta DEFAULT.

13. Usar o comando DSPMSG, para verificar a fila de mensagem do usurio. Voc pode notar que a resposta DEFAULT 'N', foi enviada.

iSeries | AS400: Programao CL

34 | 60

Laboratrio 11

MONITORAO DE MENSAGENSEste LAB obrigatrio.

Aps completar este LAB, o aluno estar familiarizado com as seguintes funes:

Determinar o identificador de uma mensagem do tipo ESCAPE. Usar o comando MONMSG (MONITOR MESSAGE), para monitorar uma mensagem enviada a um programa, e tomar a ao apropriada, especificada no exerccio.

Viso geral do Laboratrio

Neste LAB, voc ir codificar um programa, para copiar um arquivo para impressora. Se o arquivo estiver alocado exclusivamente por outro JOB, o programa ir gerar uma mensagem do tipo ESCAPE, e ir terminar. Voc dever forar uma falha, e diagnosticar o erro como se ele fosse inesperado.

Depois, voc ir modificar o programa, para monitorar essa mensagem do tipo ESCAPE, manipulando o problema antes que ele chegue ao usurio.

A monitorao de mensagem essencial programao CL.

PASSOS PARA A EXECUO DO LAB:

1.

Codificar

um

programa

CL,

chamado

APL90xxx,

para

copiar

o

arquivo

CLPxxx/APPVEND para a impressora: CPYF FROMFILE(CLPxxx/APPVEND) TOFILE(*PRINT)

2.

Compilar o programa APL90xxx.

3.

Executar o programa APL90xxx, para verificar se ele funciona.

No necessrio obter um HARDCOPY. Basta checar a sada do programa atravs do comando WRKSPLF para verificar se ele foi executado corretamente.

iSeries | AS400: Programao CL

35 | 60

4.

Usar a funo SYSTEM REQUEST, para iniciar um JOB secundrio na sua WORKSTATION. Teclar SYSTEM REQUEST, ENTER, escolher a opo 1 para iniciar um JOB alternativo.

5.

Alocar o arquivo APPVEND de forma exclusiva: ALCOBJ OBJ((CLPxxx/APPVEND *FILE *EXCL))

6.

Executar o comando DSPJOB, e selecionar a opo 12 para mostrar os LOCKS. Na tela 'DISPLAY JOB LOCKS', usar a opo 5 (DISPLAY JOB MEMBER LOCKS), para mostrar os LOCKS do membro do arquivo APPVEND.

Deve ser mostrado o lock *EXCL (exclusivo) nos dados.

7.

Usar o SYSTEM REQUEST para retornar ao primeiro JOB.

8.

Usar a tela do COMMAND ENTRY, para executar as prximas etapas.

Voc pode usar o COMMAND ENTRY das seguintes maneiras:

Atravs

de

uma

tecla

de

funo

(FUNCTION

KEY)

do

PROGRAMMER'S MENU ou PDM.

Atravs do comando CALL QCMD.

9.

Executar o programa APL90xxx novamente. Dever dar erro.

10. Diagnosticar o erro da seguinte maneira:

a) Usar a tecla HELP, para olhar o texto de mensagem de segundo nvel. Anotar o identificador da mensagem de erro. b) Selecionar a resposta 'D' a mensagem do tipo INQUIRY, para obter um DUMP do programa. c) Usar o comando DSPJOB ou WRKSPLF, para ver o DUMP do programa. Verificar o identificador da mensagem que causou o termino do programa. Notar que esse identificador o mesmo que aquele anotado no item a.

iSeries | AS400: Programao CL

36 | 60

d) Usar o comando DSPJOB, e selecionar a opo 10 para olhar a JOB LOG. Nesta tela, usar a FUNCTION KEY 10 (F10), para verificar as mensagens detalhadas. Novamente, notar que o identificador da mensagem e o mesmo que aquele anotado no item a. e) Retornar a tela do COMMAND ENTRY. Posicionar o cursor sob o comando CALL APL90xxx, e usar o F10 para olhar as mensagens detalhadas.

Se necessrio, usar as teclas (PAGE UP/PAGE DOWN), para encontrar o comando. Notar, novamente o identificador da mensagem erro.

Agora voc conhece vrias maneiras para obter informaes sobre uma mensagem de erro, e encontrar aquela que deve ser monitorada.

11. Modificar o programa APL90xxx, para monitorar a mensagem que causou o trmino do programa. Quando monitorada, tomar a ao apropriada, enviando a seguinte mensagem para o usurio: 'ARQUIVO APPVEND EST EM USO. TENTE MAIS TARDE'.

12. Compilar o programa APL90xxx.

13. Executar o programa APL90xxx. O arquivo ainda deve estar alocado pelo JOB secundrio. Voc recebeu a sua mensagem, ao invs da mensagem do tipo ESCAPE, gerada pelo sistema?

14. Usar a funo SYSTEM REQUEST, e transferir para o JOB alternativo.

15. Deslocar o arquivo, atravs do seguinte comando: DLCOBJ OBJ((CLPxxx/APPVEND *FILE *EXCL))

16. Usar a funo SYSTEM REQUEST para retornar ao primeiro JOB.

17. Executar o programa APL90xxx. O arquivo foi impresso normalmente?

iSeries | AS400: Programao CL

37 | 60

Laboratrio 12

PROGRAMAO COM MENSAGENSA parte A deste LAB recomendvel. As partes B e C so opcionais.

A parte B no pr-requisito para a parte C. Se voc tiver problemas de tempo, executar a parte C, ao invs da parte B.

Aps completar este LAB, o aluno estar familiarizado com as seguintes funes:

Criao de um arquivo de mensagens (MESSAGE FILE). Adio de mensagens com dados de substituio, no arquivo de mensagens. Uso de mensagens pr-definidas em um programa CL. Uso do comando SNDUSRMSG em um programa CL, para se comunicar diretamente com o usurio, atravs da poro externa (*EXT) da fila de mensagem do JOB.

Envio de mensagens de um programa, para a fila de mensagem do programa chamador, e recepo do contedo da mensagem em variveis CL. Criao de um formato de tela (DISPLAY FILE) e um programa para mostrar as mensagens da fila de mensagem do programa, usando a tcnica de subfile.

Viso geral do Laboratrio

Neste LAB, ser utilizado um programa, que apresenta um menu com opes, atravs do DISPLAY FILE APD91Axxx. Na parte A, voc dever codificar um programa que chamado quando o operador seleciona a opo 5 do menu.

OBS: O sufixo 'Axxx' representa a parte A do LAB, e o nmero do grupo.

Em cada parte sucessiva do LAB, voc ir duplicar o fonte do DISPLAYFILE e os dois programas da parte anterior, alterando somente a identificao de cada parte. Por exemplo: Na parte B, deve ser utilizado o DISPLAY FILE APD91Bxxx, e os programas APL91Bxxx e APL92Bxxx.

PARTE A: PORO EXTERNA DA FILA DE MENSAGEM DO JOB

iSeries | AS400: Programao CL

38 | 60

a) Criar um arquivo de mensagem (MESSAGE FILE) chamado APMSGFxxx, na sua biblioteca.

OBS: Verificar os comandos para manipular a MESSAGE FILE.

b) Adicionar as seguintes mensagens no arquivo de mensagem:

c) Executar o comando para mostrar a descrio das mensagens, para verificar se elas foram adicionadas corretamente.

d) Copiar o membro APD91Axxx do SOURCE FILE CLPLAB/QDDSSRC para o seu SOURCE FILE CLPxxx/QDDSSRC, substituindo 'xxx' pelo nmero do grupo.

e) Compilar o DISPLAY FILE APD91Axxx na sua biblioteca.

f)

Copiar o membro APL91Axxx do SOURCE FILE CLPLAB/QCLSRC para o seu SOURCE FILE CLPxxx/QDDSSRC, SUBSTITUINDO 'xxx' pelo nmero do grupo.

g) Modificar o programa APL91Axxx:

a. Declarar o DISPLAY FILE APD91Axxx. b. Substituir os caracteres 'xxx' do programa chamado na opo 5, pelo nmero do seu grupo.

h) Compilar o programa APL91Axxx:

i)

Codificar

um

programa

APL92Axxx,

que

ser

chamado

pelo

programa

APL91Axxx quando a opo 5 for selecionada. Este programa dever usar o comando SNDUSRMSG (SEND USER MESSAGE), para enviar a mensagem pr-definida de cdigo UAP0001 como uma mensagem informativa MSGTYPE(*INFO), para o usurio TOMSGQ(*) ou TOMSGQ(*EXT).

j)

Compilar o programa APL92Axxx.

k) Executar o programa APL91Axxx, e testar a opo 5. Voc recebeu a mensagem UAP0001 ?

l)

Modificar o programa APL92Axxx para enviar as trs mensagens. Para a mensagem UAP0003, fornecer o seguinte dado no parmetro MSGDTA: '1948.81'

iSeries | AS400: Programao CL

39 | 60

m) Compilar o programa APL92Axxx.

n) Executar o programa APL91Axxx e selecionar a opo 5. Voc recebeu todas as mensagens ?

PARTE B: COMUNICAO ENTRE PROGRAMAS DENTRO DO JOB

1.

Duplicar os fontes utilizados na parte A, alterando a identificao do LAB para B. Por exemplo: Copiar o fonte APL92Axxx para APL92Bxxx

Obs: Copiar o fonte do programa da QCLSRC, e o fonte do DISPLAY FILE da QDDSSRC.

2.

Modificar o DISPLAY FILE APD91Bxxx, para incluir um campo de sada com 50 posies alfanumricas chamado MSG. Este campo dever comear na linha 24, coluna 2.

3.

Compilar o DISPLAY FILE APD91Bxxx.

4.

Modificar o programa APL92Bxxx para usar o comando SNDPGMMSG, para enviar a mensagem UAP0001 para a fila de mensagem do programa chamador: TOPGMQ(*PRV *). No enviar as mensagens UAP0002 e UAP0003

5.

Compilar o programa APL92Bxxx.

6.

Modificar o programa APL91Bxxx.

a.

Usar o comando RCVMSG para receber a mensagem enviada pelo programa APL92Bxxx. Mover o texto de mensagem de primeiro nvel, para o campo adicionado ao DISPLAY FILE, especificando

MSG(&MSG) no comando RCVMSG.

b.

Alterar o nome do programa chamado na opo 5 para APL92Bxxx, e o nome do DISPLAY FILE para APD91Bxxx.

7.

Compilar o programa APL91Bxxx.

iSeries | AS400: Programao CL

40 | 60

8.

Testar o programa de aplicao. O contedo da mensagem UAP0001 deve aparecer no campo MSG do DISPLAY FILE.

PARTE C: USANDO SUBFILE PARA MOSTRAR A FILA DE MENSAGEM DO PROGRAMA

1.

Duplicar os fontes utilizados nas partes A ou B, alterando a identificao do LAB para C. Por exemplo: Copiar o fonte APL92Bxxx para APL92Cxxx

2.

Modificar o programa APL92Cxxx.

a) Enviar as trs mensagens pr-definidas (UAP0001, UAP0002,UAP0003) para a fila de mensagem do programa chamador. Para a mensagem UAP0003, usar a constante '801.48' no parmetro MSGDTA.

b) Enviar

uma

quarta

mensagem, com o

CPF9898,

com 'FIM

o DAS PARA

tipo

NOTIFY

MSGTYPE(*NOTIFY), INFORMATIVAS substituindo

seguinte texto: PELO

MENSAGENS APL91Cxxx',

ENVIADAS

APL92Cxxx

'xxx' pelo nmero do grupo CPF9898 uma mensagem pr-

definida no arquivo de mensagem QSYS/QCPFMSG, que tem como campo de substituio, o texto de mensagem de primeiro nvel. Isso permite que voc envie uma mensagem improvisada, fornecendo o texto da mensagem no parmetro MSGDTA.

3.

Compilar o programa APL92Cxxx.

4.

Modificar o DISPLAY FILE APD91Cxxx. (Opcionalmente, voc pode copiar o DDS da soluo:

SOURCE MEMBER: APD91CXXX

SOURCE FILE:

CLPLAB/QDDSSRCI

a) Codificar as KEYWORDS necessrias, para utilizar o SUBFILE no seu DISPLAY FILE. Verificar o exemplo apresentado no caderno do aluno. O SUBFILE dever usar a linha 24.

iSeries | AS400: Programao CL

41 | 60

b) Remover o campo MSG, que foi includo na parte B.

c) Como voc est enviando dois formatos simultaneamente (o formato do SUBFILE e o formato FMT91), voc dever utilizar a KEYWORD OVERLAY para o formato FMT91 (o segundo formato que mostrado).

Esta KEYWORD ir prevenir que o primeiro formato seja apagado antes que o segundo seja enviado.

5.

Compilar o DISPLAY FILE APD91Cxxx.

6.

Modificar o programa APL91Cxxx.

a) Alterar o nome do DISPLAY FILE para APD91Cxxx.

b) Monitorar a mensagem CPF9898 a nvel de programa (comando MONMSG a nvel de programa). Quando for detectada a chegada da mensagem atravs do comando MONMSG, mostrar o SUBFILE e retornar a instruo que envia o formato FMT91.

c) Informar o nome do programa 'APL91Cxxx' para a varivel do formato do SUBFILE, associada a KEYWORD SFLPGMQ. Na soluo, o nome da varivel e &MENUPGMQ.

d) Mover '1' para a varivel lgica associada ao indicador do SUBFILE, que condiciona as KEYWORDS SFLDSP, SFLDSPCTL, SFLEND, e SFLINZ. Na soluo, o nome da varivel &IN51.

e) Remover todas as instrues que se referem a varivel &MSG. Esta varivel deve ter sido removida do DISPLAY FILE.

f)

Aps enviar o formato FMT91, limpar o SUBFILE.

g) Alterar o nome do programa chamado quando a opo 5 for selecionada para APL92Cxxx.

7.

Compilar o programa APL91CXXX.

iSeries | AS400: Programao CL

42 | 60

8.

Testar o programa de aplicao.

9.

O SUBFILE de mensagem mostrado quando a opo 5 selecionada ? Testar as teclas HELP e PAGE UP/PAGE DOWN.

10. Esta tcnica pode ser utilizada para mostrar mensagens de erro inesperadas. Modificar o programa APL91Cxxx:

a) Em adio ao envio do SUBFILE quando a mensagem CPF9898 for detectada, mostrar o SUBFILE tambm, quando o programa receber a mensagem de FUNCTION CHECK CPF9999.

b) Forar uma mensagem de FUNCTION CHECK, alterando o nome do programa a ser chamado quando a opo 4 for selecionada.

Especificar um nome de programa invlido.

11. Compilar o programa APL91Cxxx.

12. Fazer o teste da modificao efetuada, selecionando a opo 4 da aplicao. As mensagens foram mostradas atravs do SUBFILE?

13. Tentar a opo 5 novamente. As mensagens informativas foram mostradas novamente atravs do SUBFILE?

iSeries | AS400: Programao CL

43 | 60

Laboratrio 13

MENSAGENS DO TIPO INQUIRYAps completar esse laboratrio o aluno ser capaz de:

Configurar seu job para utilizar default reply em mensagens do tipo inquiry. Adicionar mensagens num arquivo de mensagens de usurio (Uset message file). Alm disso, usar o comando OVRMSOF. Configurar o atributo do job para utilizar a System reply list.

PARTE A: Automatic Reply from the Message Description

1.

Copie seu programa fonte APL90xxx (La 11 Monitor Message) para um novo membro chamado APL93xxx.

2.

Remova o comando que monitora a mensagem. O programa dever ficar somente com o comando CPYF para copiar o arquivo APPVEND para a impressora.

3.

Compile o programa APL93xxx.

4.

Execute o programa APL93xxx para verificar se ele funciona.

5.

Use a funo System request para iniciar um segundo job interativo.

6.

Aloque o arquivo CLPXXX/APPVEND exclusivamente:

ALCOBJ OBJ((CLPxxx/APPVEND *FILE *EXCL))

7.

Execute o comando DSPJOB e verifique a opo que trata de lock.

8.

Na tela Display Job Locks, selecione a opo 5 para exibir os membros alocados para o arquivo APPVEND. O dados do arquivo APPVEND devem aparecer com *EXCL.

9.

Use System request para retornar para o primeiro job.

iSeries | AS400: Programao CL

44 | 60

10. V para a tela command entry (CALL QCM ).

CALL APL93xxx. O sistema enviar uma mensagem do tipo inquiry informando que o arquivo APPVEND esta alocado e exclusivamente por outro job.

11. Use a tecla HELP para verificar o segundo nvel do texto da mensagem. Note que o erro que voc recebeu CPA070. Essa uma mensagem genrica. O erro que causou a mensagem CPA0701 CPF2952, que aparece no primeiro nvel do texto da mensagem CPA0701. A mensagem CPF2952 a mensagem que voc monitorou no laboratrio 11. Quais so as respostas vlidas para a mensagem CPA0701?

12. Assuma a resposta default para a mensagem CPA0701 pressionando a tecla enter sem digitar uma resposta.

13. Voc ainda deve estar na tela Command Entry. Posicione o cursor no comando CALL APL93 xxx e pressione F10 para detalhar as mensagens. Se necessrio, Use Page up/ Page down para encontrar o comando. Voc ver a resposta default para a mensagem CPA0701.

14. Use o comando WRKMSGD para exibir a descrio inteira da mensagem CPA0701 do message file QCPFMSG. Note que a resposta default "C" que a mesma resposta que o seu job assumiu.

15. Execute CHGJOB INQMSGRPY(*DFT) para especificar que a resposta default da message descriptio deve ser assumida automaticamente pela mensagens do tipo inquiry do seu job interativo.

16. Execute CALL APL93xxx

17. Posicione o cursor abaixo do comando CALL APL93xxx e pressione a tecla F10 para detalhar as mensagens. Se necessrio use as teclas Page up/ Page Down para encontrar o comando. Voc ver que a resposta default "C" foi assumida.

18. Retorne para o primeiro job usando a funo System Request. Execute Signoff ou libere o arquivo APPVEND atravs do comando abaixo:

DLCOBJ OBJ((CLPxxx/APPVEND *FILE *EXCL))

iSeries | AS400: Programao CL

45 | 60

PARTE B - Resposta automtica usando System Reply List

1.

Aloque o arquivo CLPxxx/APPVEND exclusivamente:

ALCOBJ OBJ((CLPXXX/APPVEND *FILE *EXCL))

2.

Use System request para iniciar um segundo job

3.

Use WRKRPYLE para exibir as entradas da System Reply List. Recupere o Message ID CPA0700 e seu default "D. Message IDs que terminam com "00" indica que a entrada equivale ao intervalo de mensagens de "00" at "99".

4.

Execute CHGJOB INQMSGRPY(*SYSRPYL) para especificar que o system deve procurar a resposta para mensagens do tipo inquiry na system reply list.

5.

Execute o programa APL93xxx novamente. A resposta default foi assumida?

6.

Confira como qual resposta foi assumida no exerccio anterior.

7.

Use System Request para retornar para o primeiro job. Execute Signoff ou libere o arquivo APPVEND conforme abaixo:

DLCOBJ OBJ((CPLxxx/APPVEND *FILE *EXCL))

PARTE C: Alternate Message File & OVRMSGF

1.

Execute

CHGJOB

INQMSGRPY(*DFT)

para

especificar

default

reply

para

mensagens do tipo inquiry do seu job.

2.

Crie um massage file chamado MYQCPFMSG na sua biblioteca

3.

Use o comando MRGMSGF para copiar a mensagem CPA0701 do message file (MYQCPFMSG) para "I".

4.

Use o comando OVRMSGF para informar ao sistema que as mensagens sero procuradas no message file MYQCPFMSG antes de procurar no message file do sistema (QCPFMSG).

iSeries | AS400: Programao CL

46 | 60

5.

Use System Request para iniciar um segundo job.

6.

Aloque o arquivo CLPxxx/APPVEND exclusivamente.

7.

Use system request para retornar para o primeiro job.

8.

V para a tela Command entry. (CALL QCMD).

9.

Use "F10=Include Detailed Messages" para verificar detalhes da sua job log.

10. Use a tecla F1=Help na linha que informa que CPF2952 foi recebida pelo programa APL93xxx.

11. Voc ver que a resposta assumida pelo sistema para a mensagem CPA0701 foi "I".

12. Finalize os dois jobs que voc iniciou.

iSeries | AS400: Programao CL

47 | 60

Laboratrio 14

FERRAMENTAS DE USURIOViso Geral do Laboratrio

Importante: se voc precisar deletar um physical file, e este tiver logical files associados, os logical files devem ser deletados primeiro.

Neste laboratrio voc codificar um programa utilitrio para deletar o physical e todos os logical files associados.

O usurio ir chamar um programa passando dois parmetros: o nome do physical file a ser deletado e a biblioteca. O programa executar o comando DSPDBR para obter o nome dos logical files associados, as informaes devem ser gravadas em um arquivo de sada parmetro OUTPUT=OUTFILE). Cada registro do arquivo de sada contm o nome de um logical file correspondente. Antes de deletar cada logical file o programa deve enviar uma mensagem pedindo a confirmao da deleo.

PASSOS PARA A EXECUO DO LAB:

1.

Execute o programa DBLREFRESH que esta na biblioteca do instrutor (CLPLAB) passando como parmetro o nome da sua bilbioteca CLPxxx.

CALL CLPLAB/DBLREFRESH PARM(CLPxxx)

Este programa cria o physical file e os logical files necessrios para execuo deste lab.

2.

Verifique o contedo da sua biblioteca (DSPLIB LIB(CLPxxx), o programa deve ter criado os seguintes objetos:

FILE DESCRIPTION

APLPCHYTD APLVEND2 APLVNDSLS APPVEND2

iSeries | AS400: Programao CL

48 | 60

Logical file with key of purchase YTD. Logical file with key of vendor number. Logical file with key of salesperson. Physical file of vendor records.

3.

Codifique um programa CL chamado DBL01xxx, para executar as seguintes funes.

a.

Receber dois parmetros:

4.

O nome da biblioteca que contm o physical file a ser deletado.

5.

O nome do physical file a ser deletado.

a) Declare o arquivo fornecido pelo sistema QADSPDBR. Este arquivo tem o formato que ser usado pelo comando DSPDBR para gerar o arquivo de sada.

b) Use o comando DSPDBR para gera um arquivo de sada chamado DBP01xxx na sua biblioteca, contendo o relacionamento entre o physical file e os logical files associados. Se os arquivos DBP01xxx vo existir ele ser gerado automaticamente pelo comando DSPDBR, se ele a existir o default e o sistema limpar e gravar as novas informaes. Este arquivo tem o mesmo formato que o arquivo fornecido pelo sistema QADSPDBR.

c) Use o comando SNDUSRMSG para enviar a seguinte mensagem para os usrios: "The nest display shows the logical files that depend on the physical file you wish delete".

d) Use novamente o comando DSPDBR, mas desta vez com o parmetro OUTPUT(*).

e) Use o commando OVRDBF, para que, mesmo que o programa declare o arquivo QADSPDBR, ele leia os dados a partir do arquivo DBO01xxx da sua biblioteca CLPxxx.

f)

Use o comando RCVF para ler os registros do arquivo CLPxxx/DBP1xxx.

g) Monitore a mensagem que indica fim de arquivo (EQF), CPF0864.

Quando encontrar o fim do arquivo, desvie para o passo "j", caso contrrio execute:

iSeries | AS400: Programao CL

49 | 60

6.

Use o comando SNDUSRMSG para enviar uma mensagem do tipo inquiry para o usuario "do you wish to delete file ? Y=yes, N=no".

Defina como respostas vlidas "Y" e "N".

h) Use o campo &WHRELI no lugar da biblioteca, e o campo &WHREFI no lugar do arquivo, para montar o texto da mensagem. Os campos 8 WHRELI e 8 WHREFI fazem parte do formato do arquivo QADSPDBR, e por isso no o i f necessrio declar-los.

7.

Se o usurio responder "N", execute o comando RETURN para finalizar o programa.

8.

Se o usurio responder "Y", delete o logical file correspondente:

DLTF &WHRELI/&WHREFI

9.

Volte a ler o arquivo CLPxxx/DBP01xxx

i)

Agora que a mensagem CPF0864 foi monitorada, use o comando DLTF para deletar o physical file que foi informado quando o programa foi chamado, e finalize o programa.

10. Compile o programa DBL01xxx.

11. Teste o programa DBL01xxx, desde que os passos 1 e 2 foram executados.

a) Execute

o

programa

DBL01xxx.

CALL

DBL01xxx

PARM(CLPxxx

APPVEND2).

b) Use o comando DSPLIB CLPxxx para confirmar se o programa deletou os arquivos.

iSeries | AS400: Programao CL

50 | 60

Laboratrio 15

COMANDO SUBMIT JOB E LOCAL DATA AREAAps completar este LAB, o aluno estar familiarizado com as seguintes funes:

Submeter um JOB para a fila de JOBS (JOB QUEUE), atravs do comando SMBJOB. Mostrar e alterar o contedo da LOCAL DATA AREA (*LDA). Recuperar informaes da LOCAL DATA AREA, e mover para variveis CL.

Viso Geral do Laboratrio

Neste LAB, voc ir utilizar o comando SBMJOB (SUBMIT JOB), para submeter um JOB BATCH. As informaes sero passadas para o JOB BATCH, atravs da LOCAL DATA AREA (*LDA). Na primeira parte deste LAB, voc ir colocar algumas informaes na LDA, atravs de comandos especficos. Na segunda parte deste LAB, ser codificado um programa para colocar algumas informaes na LDA.

Este LAB simula uma aplicao na qual o operador submete um programa BATCH, para imprimir uma lista de pedido para um determinado cliente.

Voc ir enviar uma mensagem ao operador, informando que a lista de pedido est sendo impressa.

PARTE A: PREENCHIMENTO DA *LDA PELO OPERADOR

1.

Usar o comando WRKACTJOB para verificar se o subsistema batch CLPBATCH, est inicializado. Se no estiver, inicializ-lo atravs do comando:

STRSBS CLPBATCH

2.

Usar o comando DSPDTAARA (DISPLAY DATA AREA) para verificar o contedo da LOCAL DATA AREA. Ela contm algum valor?

Se, em algum momento voc precisar limp-la, executar o seguinte comando:

iSeries | AS400: Programao CL

51 | 60

CHGDTAARA DTAARA(*LDA) VALUE(' ')

3.

Usar o comando CHGDTAARA para colocar informaes na LOCAL DATA AREA:

POSIES 1 a 5

nmero DO PEDIDO (QUALQUER NMERO)

POSIES 6 a 50

INFORMAR O SEU NOME

POSIES 51 a 60

NOME DA WORKSTATION

Nota: Digitar '&' e pressionar ENTER, para aumentar o tamanho do campo de entrada quando utilizar o PROMPT dos parmetros para o comando.

4.

Usar o comando DSPDTAARA (DISPLAY DATA AREA) para confirmar se o contedo da LOCAL DATA AREA est correto.

5.

Codificar um programa chamado BIL11xxx na sua biblioteca, para executar as seguintes funes:

a) Usar o comando CHGVAR ou RTVDTAARA para recuperar as informaes que foram colocadas na LOCAL DATA AREA, e mover para trs variveis CL.

b) Usar o comando SNDMSG para enviar a seguinte mensagem para a fila de mensagem da WORKSTATION:

'LISTA PARA O PEDIDO , ENTRADO POR EST IMPRIMINDO'.

Usar a varivel que contm o nome da WORKSTATION, como o nome da fila de mensagem para a qual a mensagem dever ser enviada.

6.

Compilar o programa BIL11xxx.

7.

Testar o programa BIL11xxx. Inicialmente, executar este programa interativamente.

8.

Se o programa BIL11xxx estiver correto, submet-lo atravs do comando SBMJOB. Usar a sua JOB DESCRIPTION, CLPxxx. Voc dever receber a mesma mensagem.

iSeries | AS400: Programao CL

52 | 60

PARTE B: *LDA PREENCHIDA PELO OPERADOR E PELO PROGRAMA

1.

Limpar o contedo da LOCAL DATA AREA. Executar o comando DSPDTAARA para confirmar se ela no contm dados.

2.

Colocar as seguintes informaes na LOCAL DATA AREA:

POSIES 1 A 5 POSIES 6 A 50

NMERO DO PEDIDO (QUALQUER NMERO) Colocar o seu nome

3.

Codificar um programa chamado BIL20xxx, para executar as seguintes funes:

a) Usar o comando RTVJOBA para recuperar o atributo JOB. (mesmo nome da fila de mensagem da WORKSTATION) b) Usar o comando CHGVAR ou CHGDTAARA para colocar o nome do JOB, nas posies 51 a 60 da sua LOCAL DATA AREA. c) Usar o comando RTVSYSVAL para recuperar a hora do sistema. d) Usar o comando CHGVAR ou CHGDTAARA para colocar a hora na LOCAL DATA AREA, comeando na posio 61. e) Usar o comando SBMJOB, para submeter um JOB que chama o programa BIL21xxx (a ser codificado nos prximos passos do LAB).

Especificar a sua JOB DESCRIPTION, CLPxxx, no comando SBMJOB.

4.

Compilar o programa BIL20xxx.

5.

Codificar um programa chamado BIL21xxx, para executar as seguintes funes:

a) Usar o comando CHGVAR ou RTVDTAARA para recuperar informaes da LOCAL DATA AREA, movendo para quatro variveis CL.

b) Usar o comando SNDMSG para enviar est mensagem para a fila de mensagem da WORKSTATION:

'LISTA PARA O PEDIDO , ENTRADO POR , AS EST IMPRIMINDO'.

iSeries | AS400: Programao CL

53 | 60

6.

Compilar o programa BIL21xxx.

7.

Testar o programa de aplicao.

Usar o comando DSPDTAARA para mostrar o contedo da LOCAL DATA AREA. As informaes esto corretas?

Voc dever limp-la aps cada teste da aplicao, j que a informao da ltima execuo do programa ir permanecer na *LDA.

8.

(OPCIONAL). Mudar a apresentao do campo hora da mensagem:

HH:MM HH:MM am ou HH:MM pm

Como est etapa opcional, nenhuma instruo adicional ser fornecida. Usar a criatividade para resolver este problema.

iSeries | AS400: Programao CL

54 | 60

Laboratrio 16

DATA QUEUEAps completar esse laboratrio o aluno ser capaz de:

Codificar programas CL que l e grava dados numa data queue Codificar programas CL que espera por um tempo determinado ou indefinido por uma entrada de dados numa data queue. Codificar um programa que pode ser executado interativamente e comunicar atravs de uma data queue com um programa que est sendo executado em batch.

Viso Geral do Laboratrio

Nesse exerccio voc ira codificar um programa batch (BIL31xxx) que pode ser utilizado numa aplicao real. O operador ir fazer uma entrada de um pedido, mas a nica ao necessria ser enviar o nmero pedido para uma data queue. Um programa executando num job batch esperar por um numero de pedido, quando o pedido chegar, recebera esse nmero. O pedido no ser impresso imediatamente, mas o job ira enviar uma mensagem para o operador informando que um pedido foi processado.

PASSOS PARA A EXECUO DO LAB:

1.

Use o comando WRKACTJOB para verificar se o subsistema CLPBATCH j foi iniciado. Se ainda no foi, procure seu instrutor.

2.

Crie uma data queue chamada BIQ30xxx na sua biblioteca. O tamanho mximo de entradas deve ser 15.

3.

Copie o membro fonte BID30xxx do arquivo CLPLAB/QDDSSRC para o seu arquivo de fontes CLPxxx/QDDSSRC, alterando o "XXX" pelo numero de seu grupo.

4.

Compile o display file CLPxxx/BID30xxx

5.

Codifique um programa chamado BIL30xxx para fazer o seguinte:

iSeries | AS400: Programao CL

55 | 60

a) Declare a varivel &WSID de tamanho 10 e do tipo caractere

b) Use o comando RTVJOBA e recupere o nome do job para a varivel &WSID. Lembre que o nome do job igual ao nome da estao que igual ao nome da fila de mensagem da estao. Isso ser usado no programa BIL31xxx para enviar mensagem de volta ao usurio.

Use o comando SNDRCVF para permitir ao usurio receber a tela no formato BID30FMT1 do display file CLPxxx/BID30xxx.

Se o usurio pressionar F3 termine o programa.

Se o usurio pressionar F6 atribua o valor 99999 ao numero do pedido (order number).

Concatene o campo do tipo caractere que ser usado para atualizar a data queue. As 5 primeiras posies referem-se ao numero do pedido. As prximas 10 posies referemse ao nome da estao.

Use o programa QSNDDTAQ para enviar o campo acima para data queue BIQ30xxx. Se o usurio pressionar F6 termine o programa. Caso contrario, permita-o enviar outro pedido.

6.

Compile o programa.

Codifique um programa chamado BIL31xxx, para fazer o seguinte:

Declarar a varivel &WSID do tipo caractere e de 10 posies.

Use o programa QRCVDTAQ para ler uma entrada da data queue CLPxxx/BIQ30xxx. Especifique que voc quer esperar pelo dado chegar na data queue por um tempo indeterminado. (Especifique um valor negativ no campo &WAIT). o

Coloque o numero do pedido numa varivel CL da sua escolha.

Coloque o nome da estao na varivel &WSID.

Se o numero for 99999 termine o programa apos executar o comando SNDMSG com TOMSGQ(&WSID) para enviar uma mensagem para a fila de mensagem da estao:

iSeries | AS400: Programao CL

56 | 60

SNDMSG MSG('Batch invoice print program is ending') TOMSGQ(&WSID)

Para os pedidos diferentes de 99999, simule a impresso do pedido enviando a seguinte mensagem para a estao que gerou o pedido: "Invoice for order number has been printed". Use o comando SNDMSG com TOMSGQ(&WSID) conforme mostrado acima.

Volte ao comando que l outra entrada da data queue.

7.

Compile o programa BIL31xxx.

8.

Execute os dois programas interativamente

a) Execute CALL BIL30xxx e entre com um pedido. b) Pressione F3 para terminar o programa. c) Execute o programa novamente e entre com outro pedido. Anote o numero do pedido que voc informou. d) Termine o programa pressionando a tecla F6. e) Execute CALL BIL31xxx f) Verifique o numero de pedido na mensagem indicando que o pedido foi impresso. Todos os nmeros de pedidos que no conferem, correspondem as entradas que ainda esto na data queue.

Se esse programa travar, pressione System Request e selecione a opo 2 para cancelar o ultimo comando.

9.

Execute a aplicao BIL31xxx em modo Batch.

a) Use o comando SBMJOB para executar o comando CALL CLPxxx/BIL31xxx na job queue CLPLAB/CLPBATCH2. Especifique tambm a sua job description CLPxxx no comando SBMJOB. b) Use o comando WRKACTJOB para verificar se o job foi submetido corretamente. Anote o status do job. c) Execute o programa BIL30xxx e entre com vrios pedidos. d) Confira se os pedidos que voc solicitou foram impressos. e) Se o programa BIL31xxx nunca terminar, use o comando ENDJOB ou a opo apropriada da tela WRKACTJOB para cancelar o programa.

iSeries | AS400: Programao CL

57 | 60

Laboratrio 17

COMANDOSApos completar esse laboratrio o aluno ser capaz de:

Criar um comando simples com parmetros Criar um comando com parmetros que no tem verificao de validade. Usar o comando CHGCMDDFT para alterar valores defaults de comandos.

Viso Geral do Laboratrio:

Neste laboratrio voc ira codificar uma verso customizada do comando DSPOBJD Display Object Description. O comando da IBM DSPOBJD ser a base para o seu comando. Este comando deve ser bastante familiar para voc. Ento voc deve se concentrar no processo de criao de comando.

PASSOS PARA A EXECUO DO LAB:

PARTE A - COMANDO SEM PARAMETRO

Codifique um programa chamado JxxxA para exibir a descrio de todos objetos da sua biblioteca CLPxxx.

Compile o programa JxxxA.

Teste o programa JxxxA.

PARTE B - COMANDO COM PARAMETRO

1.

Use o SEU para copiar o fonte do comando da parte A. Nomeie o novo membro como JxxxB

iSeries | AS400: Programao CL

58 | 60

2.

Modifique o fonte do comando para permitir ao operador entrar com o tipo do objeto. A keyword deve ser de 10 posies do tipo caractere. Para simplificar nomeie a keyword como OBJTYPE.

3.

Use o SEU para copiar o fonte da parte A. Nomeie o novo fonte como JxxxB.

4.

Modifique o programa JxxxB para aceitar o parmetro OBJTYPE e usar seu valor no comando DSPOBJD.

Compile o programa JxxxB.

Compile o comando JxxxB.

Quando o comando funcionar corretamente, entre como um tipo de objeto que voc sabe que causara um erro. Por exemplo, *PROGRAM (no existe esse tipo de objeto no AS400, o correto *PGM).

Modifique o seu fonte de comando para restringir os valores para o parmetro OBJTYPE. Esse parametro podera assumir os seguintes valores: *PGM, *FILE, *OUTQ, *JOBD, *DTAARA, *MSGF, *CMD e *ALL.

Estabelea *ALL como valore default.

Compile o comando JxxxB.

Teste o comando.

*ALL aparece como valor default do parmetro OBJTYPE?

Execute o comando novamente e informe um tipo de objeto que esta na lista de restrio.

Execute o comando outra vez e informe um tipo de objeto que no esta na lista de restrio. Por exemplo, *DTAQ. O que aconteceu?

Execute o comando novamente e informe um tipo de objeto que no existe. Por exemplo, *PROGRAM.

iSeries | AS400: Programao CL

59 | 60

Use o comando CHGCMDDFT para alterar o valor default para *PGM ao invs de *ALL, do comando que voc criou.

Verifique se as alteraes acima tiveram efeito. Digite JxxxB e pressione a tecla F4.

Mude o valor default novamente para *ALL.

iSeries | AS400: Programao CL

60 | 60