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:
Crie o registo BOTTOM e desenhe nele os seguintes elementos:
Crie o registo TOP com a seguinte aparência:
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:
Ao dar o Enter aparecer-lhe-á um novo campo para preencher. Preencha-o com SFLCTL:
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:
Na opção General Keywords coloque as opções como vê na imagem seguinte:
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.
Ponha o tamanho máximo da subfile a 9999 registos e o número de registos por página 9.
Prima Enter para voltar ao menu anterior. Selecione Select Record Keyword:
Agora escolha a opção Overlay keywords, para definirmos o overlay deste registo:
Selecione a opção Overlay without erasing:
Agora dê os Enters necessários para voltar a este menu:
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).
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.
Coloque também os títulos dos campos que vão constar no subfile e uma linha separadora.
Vamos agora adicionar algumas propriedades ao campo de ID do cliente.
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:
Coloque a seguinte informação:
Feche agora este registo e abra o registo LIST, selecione para visualização o registo TOP e BOTTOM (F9).
Para criar um campo de input para as opções escreva +i na posição que vê na imagem seguinte. Dê um Enter.
Repare que o campo se estendeu automaticamente ao longo das 9 linhas que tínhamos definido anteriormente.
Selecione agora os registos da view CLICARD para output.
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.
Coloque agora os campos nas posições correctas:
E o resultado final:
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:
E assim termina esta série de nove artigos sobre o AS/400.