AS/400 Capítulo 9: Subfiles

Com subfiles pode criar display files com listagens. Vamos ver como isso é feito.

Um subfile é um display file onde podemos criar uma listagem de valores e processar alterações feitas sobre a lista. A listagem de membros que encontra no PDM é um exemplo de um subfile.

Vamos neste capitulo criar um subfile que lista todos os cartões de um determinado cliente dado o seu ID. Para nos facilitar a manipulação de várias tabelas vamos criar uma view com campos que precisamos para a nossa subfile. No STRSQL:

CREATE VIEW CLICARD AS SELECT CL.ID_CLI, CR.ID_CRD, SH.NAME_SHP, CR.SHOP_CRD
FROM DEMO/CLIENTS CL, DEMO/SHOP SH, DEMO/CARDS CR
WHERE CL.ID_CLI = CR.CLIENT_CRD AND CR.SHOP_CRD = SH.ID_SHP

Abra o utilitário SDA (STRSDA) e crie um novo membro do QDDSSRC:

Creating a new member
Creating a new member

Crie o registo BOTTOM e desenhe nele os seguintes elementos:

Bottom record
Bottom record

Crie o registo TOP com a seguinte aparência:

TOP record
TOP record

Vamos criar agora a subfile propriamente dita. Crie um novo registo chamado LIST, mas este deve ser do tipo SFL e não RECORD como temos feito até aqui:

Creating the subfile record
Creating the subfile record

Ao dar o Enter aparecer-lhe-á um novo campo para preencher. Preencha-o com SFLCTL:

Creating the subfile control
Creating the subfile control

Este campo cria outro registo além do subfile, que é o registo de controlo. Este registo é uma espécie de cabeçalho da lista.

Agora vai lhe surgir um menu com algumas opções. Vamos ver quais é que vai ter que activar:

Options
Options

Na opção General Keywords coloque as opções como vê na imagem seguinte:

Options
Options

Estes indicadores vão nos depois permitir manipular o estado do subfile a partir do código em RPG.

Prima Enter para voltar ao menu anterior. Seleccione a opção Subfile display layout.

Options
Options

Ponha o tamanho máximo da subfile a 9999 registos e o número de registos por página 9.

Options
Options

Prima Enter para voltar ao menu anterior. Selecione Select Record Keyword:

Options
Options

Agora escolha a opção Overlay keywords, para definirmos o overlay deste registo:

Options
Options

Selecione a opção Overlay without erasing:

Options
Options

Agora dê os Enters necessários para voltar a este menu:

Options
Finish Options

Abra o registo SFLCTL, por defeito o registo LIST já aparece visível no ecrã. Selecione também os registo BOTTOM e TOP, com os números 2 e 3 (o 1 já esta associado ao LIST).

Open records
Open records

Voltando ao menu de desenho, escreva na parte superior do ecrã “Client Nr.”. Selecione os campos da view CLICARD para input e output (F10) e coloque no ecrã o número de Cliente.

Selecting fields
Selecting fields

Coloque também os títulos dos campos que vão constar no subfile e uma linha separadora.

Columns description
Columns description

Vamos agora adicionar algumas propriedades ao campo de ID do cliente.

dding proprieties to the field
dding proprieties to the field

Vamos adicionar um indicador a este campo, que vai ficar activo no caso de não se conseguir obter nenhum registo para mostrar a partir do número de cliente dado (quer seja um número não existente, ou o cliente não tenha cartões associados). Opção Error Messages:

Error Messages
Error Messages

Coloque a seguinte informação:

Adding an indicator
Adding an indicator

Feche agora este registo e abra o registo LIST, selecione para visualização o registo TOP e BOTTOM (F9).

Selecting records for display
Selecting records for display

Para criar um campo de input para as opções escreva +i na posição que vê na imagem seguinte. Dê um Enter.

Creating an input field
Creating an input field

Repare que o campo se estendeu automaticamente ao longo das 9 linhas que tínhamos definido anteriormente.

Resulting input field
Resulting input field

Selecione agora os registos da view CLICARD para output.

Selecting a table
Selecting a table

Provavelmente vão lhe aparecer os campos repetidos duas vezes, porque o SDA volta a mostrar o registo para I/O que já tinha carregado para o SFLCTL. Deve selecionar os campos que estão mais à direita, pois são os últimos selecionados. Tenha atenção porque se selecionar o campo errado vai ter um campo que lhe permite o input além do output.

Se existirem mais registos do que aqueles que cabem na linha de mensagens, aparecerá um mais (+) no fim da linha. Carregue em Page Down para ver o resto dos campos.

Selected fields
Selected fields

Coloque agora os campos nas posições correctas:

Adding the selected fields to the record
Adding the selected fields to the record

E o resultado final:

Final Result
Final Result

Não se esqueça de activar o indicador 03 a nível global para o F3=Exit funcionar. No menu com a listagem dos registos prima F14 (mais pormenores consulte o capítulo sobre display files).

Não se esqueça de colocar a palavra chave INDARA ao nível global deste membro, como fez no capítulo do display file.

Deve acrescentar a linha a vermelho ao código do registo SFLCTL:

A R SFLCTL SFLCTL(LIST)
A SFLSIZ(9999)
A SFLPAG(0009)
A OVERLAY
A 30 SFLDSP
A 31 SFLDSPCTL
A 35 SFLCLR
A 33 SFLEND(*MORE)
A 4 8'Client Nr.'
A ID_CLI R B 4 19REFFLD(CLICARD/ID_CLI DEMO/CLICARD)
A 90 ERRMSG('No Data Found')
A 6 4'Op.'
A 6 12'Card Nr.'
A 6 27'Shop Nr.'
A 6 42'Shop Name'
A 7 2'__________________________________-
A ___________________________________-
A __________'
A RRN 4S 0H SFLRCDNBR(CURSOR)

E no registo list altere o nome do campo de input para opções para OPTION, deve estar com o nome FLD001, ou algo semelhante.

A R LIST SFL
A OPTION 1A I 9 5
(...)

Executar o subfile

Tem agora que criar o membro plain para poder executar a subfile. Consulte o ficheiro QplainSRC.SHW_SFL para mais pormenores sobre como deve estar estruturado este ficheiro.

O resultado final será este:

Executing the subfile
Executing the subfile

E assim termina esta série de nove artigos sobre o AS/400.

Artigos relacionados