Na maioria das vezes é útil utilizar componentes de listas conhecidos como Combobox ou Dropdown para mostrar relacionamentos de dados entre tabelas e de uma forma amigável exibir a descrição dos itens de dados e manipular seu identificador único. Para isto o Web Dynpro nos disponibiliza componentes e classes no qual nos permite manipular dados através de objetos e persisti-los em um banco de dados relacional usando o Open SQL ou SAP Persistence Service. Um relacionamento de dados mais simples é criado através de duas tabelas, sendo uma tabela pai que contem os dados mestres e uma filho que contem um ou mais identificadores relacionados ao pai. Um modo de fácil de identificar e tradicional de utilizar relacionamentos em um banco de dados é através de chaves estrangeiras, uma chave estrangeira é um campo, que aponta para a chave primária de outra tabela ou da mesma tabela. Ou seja, passa a existir uma relação entre duas tabelas ou de uma única tabela. A finalidade da chave estrangeira é garantir a integridade dos dados referenciais, pois apenas serão permitidos valores que supostamente vão aparecer na base de dados e estão ligados ao registro mestre.
Foreign Key: Chaves Estrangeiras
Exibindo Relacionamentos
1 – Crie uma nova tabela transparente para os tipos de cargos e a ative, use a imagem abaixo para referencia:
2 – Crie uma nova tabela transparente para os participantes e inclua o campo para referencia chamado CARGOID da tabela cargos criada logo acima. Após ativar a tabela clique no campo de referencia para o CARGOID e clique no ícone (chave amarela) Foreign Key localizado na barra de ferramenta da sua tabela para criar um relacionamento entre as tabelas:
3 – Relacione os campos identificadores das duas tabelas:
4 – Assim que salvar e ativar sua tabela, clique na aba Entry Help/Check para ver a ligação entre as tabelas:
5 – Abra a transação SE16 e crie novos registros para a tabela de cargo:
6 – Caso queira pode criar um modelo de dados no Data Modeler para seus relacionamentos:
7 – Crie um componente Web Dynpro e no contexto do Controller crie um node para a tabela de participante e um node para a tabela de cargo e os importe para o contexto da sua View. No node para o cargo escolha a propriedade Cardinality como o valor 0..n. Use os elementos web adequados para cada tipo de campo de sua tabela, para o relacionamento use o elemento DropDownByIndex. Use a figura abaixo como referencia:
8 – Use os códigos abaixo para os respectivos métodos, salve, ative seu componente e crie sua aplicação:
9 – Digite os valores para cada tipo de campo e clique no botão de enviar:
10 – Você pode conferir os valores dos dados e o conteúdo do identificador do relacionamento entre as tabelas:
Exemplo:
Neste exemplo criamos duas tabelas no banco de dados SAP MAxDB através do dicionário de dados ABAP e as relacionamos através da chave primaria e uma chave estrangeira. Usamos um elemento Web Dynpro para tornar este relacionamento amigável, exibindo assim a descrição do relacionamento mas manipulando seu identificador e os persistindo através do SAP Persistence Service.
ABAP
ONACTIONACAO_BOTAO_ENVIAR
method ONACTIONACAO_BOTAO_ENVIAR . * // Gravar dados wd_this->ONGRAVAR( ). endmethod.
WDDOINIT
method WDDOINIT .
* // Recupera dados do contexto
Data: context_node type ref to if_wd_context_node.
* // Cria tabela interna do tipo da tabela do node
Data: it_cargo type STANDARD TABLE OF if_main=>element_ZTCARGO,
wa_cargos like line of it_cargo.
* // Seleciona dados da tabela Pai
select * from ztcargo
into table it_cargo.
* // Recupera node do contexto
context_node = wd_context->get_child_node( name = 'ZTCARGO').
* // liga tabela interna a tabela do node
context_node->BIND_TABLE( it_cargo ).
endmethod.
ONGRAVAR
method ONGRAVAR .
* // Recupera dados do controlador
DATA lo_nd_usuario_controler TYPE REF TO if_wd_context_node.
DATA lo_el_usuario_controler TYPE REF TO if_wd_context_element.
DATA ls_usuario_controler TYPE wd_this->Element_usuario_controler.
DATA lv_usuario_login TYPE wd_this->Element_usuario_controler-usuario_login.
lo_nd_usuario_controler = wd_context->get_child_node( name = wd_this->wdctx_usuario_controler ).
lo_el_usuario_controler = lo_nd_usuario_controler->get_element( ).
* // Recupera Nome
lo_el_usuario_controler->get_attribute(
EXPORTING
name = `USUARIO_LOGIN`
IMPORTING
value = lv_usuario_login ).
* // Recupera Sobrenome
DATA lv_sobrenome TYPE wd_this->Element_usuario_controler-sobrenome.
lo_nd_usuario_controler = wd_context->get_child_node( name = wd_this->wdctx_usuario_controler ).
lo_el_usuario_controler = lo_nd_usuario_controler->get_element( ).
lo_el_usuario_controler->get_attribute(
EXPORTING
name = `SOBRENOME`
IMPORTING
value = lv_sobrenome ).
* // Recupera Salario
DATA lv_salario TYPE wd_this->Element_usuario_controler-salario.
lo_nd_usuario_controler = wd_context->get_child_node( name = wd_this->wdctx_usuario_controler ).
lo_el_usuario_controler = lo_nd_usuario_controler->get_element( ).
lo_el_usuario_controler->get_attribute(
EXPORTING
name = `SALARIO`
IMPORTING
value = lv_salario ).
* // Recupera Data
DATA lv_data TYPE wd_this->Element_usuario_controler-data.
lo_nd_usuario_controler = wd_context->get_child_node( name = wd_this->wdctx_usuario_controler ).
lo_el_usuario_controler = lo_nd_usuario_controler->get_element( ).
lo_el_usuario_controler->get_attribute(
EXPORTING
name = `DATA`
IMPORTING
value = lv_data ).
* // Recupera Genero
DATA lv_genero TYPE wd_this->Element_usuario_controler-genero.
lo_nd_usuario_controler = wd_context->get_child_node( name = wd_this->wdctx_usuario_controler ).
lo_el_usuario_controler = lo_nd_usuario_controler->get_element( ).
lo_el_usuario_controler->get_attribute(
EXPORTING
name = `GENERO`
IMPORTING
value = lv_genero ).
* // Recupera Ativo
DATA lv_ativo TYPE wd_this->Element_usuario_controler-ativo.
lo_nd_usuario_controler = wd_context->get_child_node( name = wd_this->wdctx_usuario_controler ).
lo_el_usuario_controler = lo_nd_usuario_controler->get_element( ).
lo_el_usuario_controler->get_attribute(
EXPORTING
name = `ATIVO`
IMPORTING
value = lv_ativo ).
* // Recupera Observacao
DATA lv_observacao TYPE wd_this->Element_usuario_controler-observacao.
lo_nd_usuario_controler = wd_context->get_child_node( name = wd_this->wdctx_usuario_controler ).
lo_el_usuario_controler = lo_nd_usuario_controler->get_element( ).
lo_el_usuario_controler->get_attribute(
EXPORTING
name = `OBSERVACAO`
IMPORTING
value = lv_observacao ).
* // Retorna valores do dropdown by index
* // Retorna conexto do node
DATA: context_node type ref to if_wd_context_node.
* // Cria tabela baseado no tipo do node
DATA: it_cargo type STANDARD TABLE OF if_main=>element_ZTCARGO,
wa_cargo like line of it_cargo,
index type i.
* // chama o node requerido
context_node = wd_context->get_child_node( name = 'ZTCARGO').
* // Recupera o indice selecionado
index = context_node->GET_LEAD_SELECTION_INDEX( ).
* // Recupera os valores atraves do indice
context_node->GET_STATIC_ATTRIBUTES(
exporting index = index
importing STATIC_ATTRIBUTES = wa_cargo ).
* // Declara variáveis
DATA : guid TYPE zGuid,
nome TYPE ZNome,
sobrenome TYPE ZSobrenome,
cargo TYPE ZCARGOID,
salario TYPE Zsal,
data_adm TYPE Zdata,
genero TYPE ZGenero,
ativo TYPE Zativo,
observacao TYPE ZObservacao.
* // Alimenta dados.
nome = LV_USUARIO_LOGIN.
sobrenome = LV_SOBRENOME.
cargo = WA_CARGO-CARGOID.
salario = LV_SALARIO.
data_adm = LV_DATA.
genero = LV_GENERO.
ativo = LV_ATIVO.
observacao = LV_OBSERVACAO.
* // Gera GUID
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_16 = guid.
* // Cria persistencia
* // Declara classe Actor e Persistencia
DATA: agente TYPE REF TO ZCA_PARTICIPANTE,
participante TYPE REF TO ZCL_PARTICIPANTE.
* // Cria agente da classe actor
AGENTE = ZCA_PARTICIPANTE=>AGENT.
* // cria persistencia
try.
participante = AGENTE->CREATE_PERSISTENT( guid ).
catch CX_OS_OBJECT_EXISTING.
ENDTRY.
* // Alimenta objeto de persistencia
PARTICIPANTE->SET_NOME( NOME ).
PARTICIPANTE->SET_SOBRENOME( SOBRENOME ).
PARTICIPANTE->SET_CARGOID( CARGO ).
PARTICIPANTE->SET_DATA( DATA_ADM ).
PARTICIPANTE->SET_SALARIO( SALARIO ).
PARTICIPANTE->SET_GENERO( GENERO ).
PARTICIPANTE->SET_ATIVO( ATIVO ).
PARTICIPANTE->SET_OBSERVACAO( OBSERVACAO ).
* // Grava e finaliza persistencia
TRY.
COMMIT WORK.
* // Exibe mensagem
data lo_api_controller type ref to if_wd_controller.
data lo_message_manager type ref to if_wd_message_manager.
lo_api_controller ?= wd_This->Wd_Get_Api( ).
* // Chama método de menssagem
CALL METHOD lo_api_controller->GET_MESSAGE_MANAGER
RECEIVING
MESSAGE_MANAGER = lo_message_manager.
* // Exibe mensagem
CALL METHOD lo_message_manager->REPORT_SUCCESS
EXPORTING
MESSAGE_TEXT = 'Dados Inseridos com Sucesso'.
ENDTRY.
endmethod.






































![Regex - [a-zA-Z]+](https://desenvolvimentoaberto.org/wp-content/uploads/2015/01/regex-1-site-regex.jpg?w=300&h=176)






















































