No post anterior aprendemos como montar telas gráficas dinamicamente, continuaremos criando uma tela gráfica de seleção mesclando tabelas internas e o banco de dados SAP, usando comandos OPEN SQL, para preencher as tabelas transparentes do Flight Model. Para quem não se lembra, o Flight Model é o principal exemplo do NetWeavear 7 e suas tabelas transparentes por default no mandante 001 não possui dados, por isto vamos inserir os dados manualmente, temos que ter cuidado para não esquecer de preencher as outras tabelas que fazem referencia (Foreign Key) a nossa tabela de voo, veja a imagem abaixo:
Flight Model:
Foreign Key
Uma chave externa ou estrangeira é um atributo ou uma combinação de atributos numa relação, cujos valores são necessários para equivaler à chave primária de uma relação. O conceito de Chave estrangeira em uso de banco de dados se refere ao tipo de relacionamento entre distintas tabelas de dados do banco de dados. Uma chave estrangeira é chamada quando há o relacionamento entre duas tabelas. Sempre em chave estrangeira vai haver relacionamentos entre tabelas, por exemplo, uma tabela que possui relação com a chave primaria de outra tabela.
Validação de Parâmetros
A validação de entrada da tela pode ser feita no evento da instrução:
AT SELECTION-SCREEN
Útil se quiser exigir a entrada de dados do usuário antes de processamento principal.
Usando AT SELECTION-SCREEN ON nome do campo:
- Disparado se nome do campo foi submetido.
- Se um erro ou aviso é emitido, o campo é realçado.
EM AT SELECTION-SCREEN ON RADIOBUTTON GROUP nome do grupo:
- Se um erro ou aviso é emitido, o grupo é realçado.
Range of Values
Permite que o usuário selecione um intervalo de valores, criando o componente na tela já com botões e tabelas relacionadas.
Sintaxe:
SELECT-OPTIONS itabname FOR dataobject.
Exemplo:
Neste exemplo temos dois programas distintos o primeiro preenche os dados do Flight Model, preenchendo a tabela de voo e as tabelas que fazem relação e possuem uma chave estrangeira na tabela voo. O segundo é nossa tela de seleção que busca todos os voos de uma agencia de viagem, também como fazer a validação em um campo de parâmetros.
Abap – Programa #1
*&---------------------------------------------------------------------* *& Report ZDADOS *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Insere Dados manualmente no Flight Model *&---------------------------------------------------------------------* REPORT ZDADOS. * Define tabelas do Banco de dados TABLES SCARR. TABLES SGEOCITY. TABLES SAIRPORT. TABLES SPFLI. * Apaga dados existentes DELETE FROM SCARR. DELETE FROM SGEOCITY. DELETE FROM SAIRPORT. DELETE FROM SPFLI. * Cria MATRIZs de dados (rows) DATA MATRIZ1 TYPE SCARR. DATA MATRIZ2 TYPE SGEOCITY. DATA MATRIZ3 TYPE SAIRPORT. DATA MATRIZ4 TYPE SPFLI. * Insere dados. MATRIZ1-CARRID = '001'. MATRIZ1-CARRNAME = 'DA Airlines'. MATRIZ1-CURRCODE = 'REAL'. MATRIZ1-MANDT = '001'. MATRIZ1-URL = 'https://desenvolvimentoaberto.wordpress.com'. INSERT INTO SCARR VALUES MATRIZ1. MATRIZ2-CITY = 'São Paulo'. MATRIZ2-COUNTRY = 'Bra'. MATRIZ2-LATITUDE = '23'. MATRIZ2-LONGITUDE = '46'. MATRIZ2-MANDT = '001'. INSERT INTO SGEOCITY VALUES MATRIZ2. MATRIZ2-CITY = 'Rio de Janeiro'. MATRIZ2-COUNTRY = 'Bra'. MATRIZ2-LATITUDE = '22'. MATRIZ2-LONGITUDE = '43'. MATRIZ2-MANDT = '001'. INSERT INTO SGEOCITY VALUES MATRIZ2. MATRIZ3-ID ='001'. MATRIZ3-MANDT ='001'. MATRIZ3-NAME = 'Aeroporto de Congonhas'. MATRIZ3-TIME_ZONE = 'GMT-3'. INSERT INTO SAIRPORT VALUES MATRIZ3. MATRIZ3-ID ='002'. MATRIZ3-MANDT ='001'. MATRIZ3-NAME = 'Aeroporto Santos Dumont'. MATRIZ3-TIME_ZONE = 'GMT-3'. INSERT INTO SAIRPORT VALUES MATRIZ3. MATRIZ4-AIRPFROM = '001'. MATRIZ4-AIRPTO = '002'. MATRIZ4-ARRTIME = '170000'. MATRIZ4-CARRID = '001'. MATRIZ4-CITYFROM = 'São Paulo'. MATRIZ4-CITYTO = 'Rio de Janeiro'. MATRIZ4-CONNID = '001'. MATRIZ4-COUNTRYFR = 'Bra'. MATRIZ4-COUNTRYTO = 'Bra'. MATRIZ4-DEPTIME = '181500'. MATRIZ4-DISTANCE = '500'. MATRIZ4-DISTID = 'KM'. MATRIZ4-FLTIME = '75'. MATRIZ4-FLTYPE = 'D'. MATRIZ4-MANDT = '001'. MATRIZ4-PERIOD = '1'. INSERT INTO SPFLI VALUES MATRIZ4. * Exibe imagem WRITE : / 'Dados inseridos'.
Abap – Programa #2
*&---------------------------------------------------------------------* *& Report ZVISUAL_D *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Selection Screen - Database *&---------------------------------------------------------------------* REPORT ZVISUAL_D. * Define internal Table DATA str TYPE spfli. * Monta tela SELECTION-SCREEN BEGIN OF BLOCK bloco1 WITH FRAME TITLE titulo. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(22) com. SELECT-OPTIONS userair FOR str-carrid. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK bloco1. SELECTION-SCREEN BEGIN OF BLOCK bloco2 WITH FRAME TITLE titulo1. SELECTION-SCREEN COMMENT 1(40) com1. PARAMETER valor TYPE string. SELECTION-SCREEN END OF BLOCK bloco2. * Carrega rotulos da tela LOAD-OF-PROGRAM. Titulo = 'Modelo de Voo (Flight Model - NetWeaver 7'. titulo1 = 'Evento de validação'. com = 'Selecione Linha Aerea'. com1 = 'Experimente digitar a palavra: VALIDA'. * Evento de validação AT SELECTION-SCREEN ON valor. IF valor = 'VALIDA'. MESSAGE 'Você digitou uma palavra Invalida' TYPE 'W'. ENDIF. * Inicia o Programa START-OF-SELECTION. * Seleciona os dados do banco de dados e coloca na tabela interna SELECT carrid connid countryfr cityfrom cityto arrtime deptime distance distid FROM spfli INTO CORRESPONDING FIELDS OF str WHERE carrid IN userair. WRITE: / str-carrid, str-connid, str-countryfr, str-cityfrom, str-cityto, str-arrtime, str-deptime, str-distance, str-distid. ENDSELECT.