Você está na página 1de 41

25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

AP oData Service [GET]: Multiple Table Output


14  curtidas 27.603 visualizações  32 comentários 

Visão geral
Neste blog, vamos saber como podemos obter a saída de várias tabelas em uma única chamada de serviço
oData.
Este blog é um exemplo de caso de negócio de blog pai:
Exemplos de serviço SAP (Fiori) OData 

Cenário de negócios:
Criação de um pedido de compra via app Fiori.
Neste aplicativo Fiori, precisamos da ajuda F4 para certos tipos de dados (como Tipo de Documento, Lista
de Fornecedores, Grupo de Compra) em diferentes caixas suspensas, a partir das quais o usuário seleciona
a entrada para o processo de criação do pedido de compra.
Para o mesmo, no sistema back-end, temos um RFC que pode retornar vários registros de tabela como Tipo
de Documento, Lista de Fornecedores, Grupo de Compra etc.
Consumimos este RFC no serviço oData de tal maneira que, em uma única chamada por meio de um
EntitySet, o serviço oData deve retornar várias saídas EntitySet (que são mapeadas a partir de várias saídas
de tabelas de RFC)
Aqui, as etapas explicadas abaixo são sinônimos do cenário de negócios acima.
O tipo acima de oData-Service necessário será implementado usando a técnica de ' Associação e
Navegação ' com suporte à consulta ' $ expand' .

OData ($ expand query):


A   opção de consulta $ expand é muito poderosa e nos permite fornecer várias entidades e / ou conjuntos
de entidades em uma única chamada de serviço, em vez de realizar várias chamadas subsequentemente
Para que a consulta $ expand funcione, uma associação ou propriedade de navegação deve ser criada.
E implementamos o  método get_expanded_entityset  .

Propriedades de associação e navegação


Essas são duas propriedades importantes disponíveis no SAP Netweaver Gateway para associar vários tipos
de entidade.
Se quisermos um serviço odata, que, em uma única chamada, por meio de um EntitySet principal, pode
retransmitir vários registros da tabela de saída em outros EntitySets separados, usamos esta propriedade de
associação e navegação.
Aqui, em nosso caso, em uma única chamada, via EntitySet 'InputHelpSet', queremos receber três tipos de
registros da tabela de saída nos seguintes EntitySets separados:
'DocTypSet' para lista de documentos

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 1/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

'VendorListSet' para Lista de Fornecedores


'PurchGrpSet' para Lista de Grupo de Compra

Detalhes RFC de back-end 


No sistema backend (SAP-ECC), há um RFC que fornece vários tipos de “dados de ajuda F4” em uma tabela
separada.
Este RFC precisa ser invocado sem qualquer entrada e, em troca, ele fornece as seguintes tabelas:

1. Lista de Tipo de Documento


2. Lista de Grupo de Compra
3. Lista de vendedores

Passos para criar o serviço oData [ com  GET_EXPANDED_ENTITYSET]:


Aqui, veremos etapas detalhadas para criar um serviço oData, que tem
Quatro estruturas EntitySet
O primeiro é o EntitySet principal com o qual invocamos o serviço e abaixo três EntitySets serão
navegados para referir suas estruturas
2º é armazenar registros de tipo de documento
3º é armazenar os registros do Grupo de Compras
e a quarta são os registros da lista de fornecedores da loja

Três Associações
Criamos associações para vincular os três restantes EntitySets ao EntitySet principal,
para que, na chamada do EntitySet principal, possamos preencher a estrutura restante da
entitySet com a respectiva saída da tabela RFC

E a redefinição do método “get_expanded_entityset”, que,


será invocado na chamada de serviço do aplicativo
que irá, por sua vez, chamar RFC apoiado, recebe tabelas de saída de RFC
e mapear a saída para três estruturas diferentes (EntitySets)

Para o mesmo, vamos seguir as etapas abaixo:

[1] Crie o EntitySet principal para invocar o serviço 

Primeiro, vamos criar um EntitySet, com o qual disparamos oDataService.


Para o mesmo, crie um nome de entidade 'InputHelp'

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 2/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

crie EntitySet para a mesma Entity, (em palavras simples, aqui Entity é como DataType e EntitySet é como
uma variável)
Nome da entidade 'InputHelp' com o nome EntitySet 'InputHelpSet'

Criamos uma única propriedade (ou seja, coluna ou campo) nesta Entidade que é nomeada como 'campo1'

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 3/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

[2] Crie EntitySet para receber / armazenar Documento -Tipo

Este EntitySet é uma estrutura semelhante à da tabela RFC de tipo de documento, com todas as respectivas
colunas / campos
Para o mesmo, crie o nome de entidade 'DocType' com o nome de EntitySet 'DocTypeSet'

Com as duas propriedades a seguir:


Código de tipo de documento von
bis Descrição

[3] Crie EntitySet para receber / armazenar Purchasing-Group

Este EntitySet é uma estrutura semelhante à tabela RFC do Grupo de Compras com todas as respectivas
colunas / campos
Para o mesmo, crie o nome da entidade 'PurchGrp' com o nome EntitySet 'PurchGrpSet'

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 4/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Esta Entidade terá as seguintes duas propriedades:


Grupo de Compra EKGRP
Descrição EKNAM

[4] Crie EntitySet para receber / armazenar VendorList

Este EntitySet é uma estrutura semelhante à da tabela RFC VendorList com todas as respectivas colunas /
campos
Para o mesmo, crie o nome de entidade 'VendorList' com o nome de EntitySet 'VendorListSet'

Esta Entidade terá as seguintes duas propriedades:


Código de fornecedor LIFNR
NOME Nome do Fornecedor

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 5/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Uma vez que a criação da Entidade foi completada, vamos salvar e regenerar os objetos de tempo de
execução, para os mesmos, selecione a pasta do projeto, clique no ícone (círculo vermelho / branco) de
'Gerar Objetos de Tempo de Execução'

Na geração bem-sucedida, a mensagem abaixo aparece.

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 6/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Assim, criamos quatro Entity com as respectivas estruturas EntitySets:


InputHelp
DocType
PurchGrp
Lista de vendedores

Em seguida, conforme o plano, precisamos vincular a Entidade restante 3 com a Entidade principal
'InputHelp', o que pode ser feito com a ajuda de Association & Navigation.

[5] Criação de associações e  navegação

Com a ajuda da técnica ' Associations & Navigaions ' do oData-Service, aqui iremos associar três entidades
(DocType, PurchGrp, VendorList) com a Entidade principal (InputHelp)
Com essa abordagem, por meio de uma única chamada por meio de entitySet principal, oDataService obtém
referência / acesso a outros três entitySets também, e podemos usar essas três entidades para retornar as
respectivas saídas RFctables para esses três entitySets.
Para criar associação, vá para o projeto do serviço oData no código t 'SEGW' -> selecione 'Associações' ->
clique com o botão direito -> 'Criar'
Aqui, criamos três associações com a respectiva navegação, para:

1. Associação entre Entidade 'InputHelp' e Entidade 'DocType'


Para associar a Entidade 'DocType' à Entidade 'InputHelp'

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 7/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Para definir a navegação de Entity 'InputHelp' para Entity 'DocType'

2. Associação entre Entidade 'InputHelp' e Entidade 'PurchGrp'


Para associar a Entidade 'PurchGrp' com a Entidade 'InputHelp'
Para definir a navegação da Entidade 'InputHelp' para a Entidade 'PurchGrp'

3. Associação entre Entidade 'InputHelp' e Entidade 'VendorList'


Para associar a Entidade 'VendorList' com a Entidade 'InputHelp'
Para definir a navegação da Entidade 'InputHelp' para a Entidade 'VendorList'

[A] Associação e navegação entre a entidade 'InputHelp' e a entidade 'DocType'

Para criar 'Associações' -> clique no nome da pasta 'Associações' -> clique com o botão direito -> selecione
'Criar'

Insira o nome da associação “ InputHelp_DocType ” com a entidade principal “ InputHelp ” e a entidade


dependente ' DocType '
e propriedade de navegação ' NAVDOCTYP '

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 8/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Clique no botão Avançar -> selecione uma Propriedade Dependente 'von' da Entidade Dependente
' DocType '

Clique no botão Avançar -> a próxima janela mostra o respectivo nome do 'Conjunto de Associação' com os
respectivos nomes do 'Conjunto de Entidades' da Entidade Principal e Dependente

Clique no botão 'Concluir'. em seguida, verifique / verifique os detalhes de navegação que acabaram de ser
criados nas etapas acima

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 9/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Verificar / verificar navegação:

[B] Associação e navegação entre a entidade 'InputHelp' e a entidade 'PurchGrp'

Para criar 'Associações' -> clique no nome da pasta 'Associações' -> clique com o botão direito -> selecione
'Criar'
Insira o nome da associação “ InputHelp_PurchGrp ” com a entidade principal “ InputHelp ” e a entidade
dependente ' PurchGrp'
e propriedade de navegação ' NAVPURCHGRP '

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 10/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Clique no botão Avançar -> selecione uma Propriedade Dependente 'EKGRP' da Entidade Dependente
' PurchGrp '

Clique no botão Avançar -> a próxima janela mostra o respectivo nome do 'Conjunto de Associação' com os
respectivos nomes do 'Conjunto de Entidades' da Entidade Principal e Dependente

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 11/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Clique no botão 'Concluir'. em seguida, verifique / verifique os detalhes de navegação que acabaram de ser
criados nas etapas acima

Verificar / verificar navegação:

[C] Associação e navegação entre a entidade 'InputHelp' e a entidade 'VendorList'

Para criar 'Associações' -> clique no nome da pasta 'Associações' -> clique com o botão direito -> selecione
'Criar'
Insira o nome da associação “ InputHelp_VendorList ” com a entidade principal “ InputHelp ” e a entidade
dependente ' VendorList '
e propriedade de navegação ' NAVVENDOR '

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 12/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Clique no botão Avançar -> selecione uma Propriedade Dependente 'LIFNR' da Entidade Dependente
' VendorList '

Clique no botão Avançar -> a próxima janela mostra o respectivo nome do 'Conjunto de Associação' com os
respectivos nomes do 'Conjunto de Entidades' da Entidade Principal e Dependente

Clique no botão 'Concluir'. em seguida, verifique / verifique os detalhes de navegação que acabaram de ser
criados nas etapas acima

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 13/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Verificar / verificar navegação:

[6] Redefinições no MPC e DPC de oData

MPC (classe de provedor de modelo) - usado para definir o modelo. podemos usar o método Define para
criar entidades, propriedades etc. usando implementação baseada em código. raramente usamos a classe
de extensão MPC.
DPC (Data provider class) - usado para codificar nossos  métodos 'CRUDQ' , bem como métodos de
importação de função. escrevemos toda a nossa lógica em métodos redefinidos da classe de extensão DPC.
Os métodos  'CRUDQ'  :
Isso nada mais é do que operações de Criar, Ler, Atualizar, Excluir e Consultar que podemos fazer no
serviço oData.

O exemplo deste blog é de   operação 'Ler' no serviço oData .


No exemplo deste blog, a redefinição no MPC não é necessária.

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 14/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

No DPC, iremos redefinir o método ' GET_EXPANDED_ENTITYSET '

[6.1] Redefina [ GET_EXPANDED_ENTITYSET ] no DPC

Vamos para 'Runtime Artifacts' do projeto -> clique na classe DPC Extension of oData Service, ou seja,
'ZCL_ZTEST_ODATA_DPC_EXT'

Selecione e clique duas vezes nele para ir para a bancada de trabalho do DPC

Para redefinir  GET_EXPANDED_ENTITYSET, vá para a pasta 'ZCL_ZTEST_ODATA_DPC_EXT' -> pasta


'Métodos' -> pasta 'Métodos herdados' -> pasta '/ IWBEP / IF_MGW_APPL_SRV_RUNTIME' ->
selecione GET_EXPANDED_ENTITYS  -> clique com o botão direito do mouse em 'Redefine -'

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 15/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

uma vez que o método é redefinido, ele é listado na pasta 'Redefinições'

Dentro do método GET_EXPANDED_ENTITYSET , escrevemos o seguinte código, que é:


Aqui, primeiro verificamos com qual EntitySet, chamada de serviço foi invocada, isso significa que o
mesmo método pode ser invocado de outros EntitySets de oDataService para outro propósito.
No nosso caso, chamamos odata-Service com principal EntitySet, que é 'InputHelpSet'

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 16/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

em seguida, chamamos RFC do sistema de back-end ( usando RFC-Destination do sistema de back-


end )
Na saída, o RFC retorna três registros da tabela:
lt_DocTyp: tabela com lista de tipos de documentos
lt_Vendor: tabela com lista de fornecedores
lt_PurGrp: tabela com Lista de Grupo de Compra

Em seguida, precisamos mapear essas estruturas para os respectivos três EntitySets de oDataservice,
que são referidos usando a propriedade Navigation
Aqui, ao declarar variáveis ​de conjuntos de entidades navegados, precisamos manter as mesmas
convenções de nomenclatura, como para nomes de navegação.
A variável 'struct_response' combina estruturas de quatro entidades
Main EntitySet 'InputHelp' incluído diretamente
e suas estruturas navegadas foram referidas com os mesmos nomes de navegação
NAVDOCTYP navegando para Entity DocType
NAVPURCHGRP navegando para Entity PurchGrp
NAVVENDOR navegando para a Entity VendorList

Em seguida, precisamos mapear as saídas da tabela recebida para as respectivas tabelas da estrutura
'struct_response'
e, finalmente, retornar a resposta para oDataService usando Step-05/06

method /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_EXPANDED_ENTITYSET.

CASE iv_entity_set_name.

WHEN 'InputHelpSet'.

* Step-01: Variable decalartions

DATA: lt_Vendor TYPE TABLE OF ZCL_ZTEST_ODATA_MPC=>TS_VendorList,

ls_Vendor TYPE ZCL_ZTEST_ODATA_MPC=>TS_VendorList,

lt_DocTyp TYPE TABLE OF ZCL_ZTEST_ODATA_MPC=>TS_DocType,

ls_DocTyp TYPE ZCL_ZTEST_ODATA_MPC=>TS_DocType,

lt_PurGrp TYPE TABLE OF ZCL_ZTEST_ODATA_MPC=>TS_PurchGrp,

ls_PurGrp TYPE ZCL_ZTEST_ODATA_MPC=>TS_PurchGrp.

DATA:

BEGIN OF struct_response.

INCLUDE TYPE ZCL_ZTEST_ODATA_MPC=>TS_InputHelp.

DATA: NAVDOCTYP TYPE STANDARD TABLE OF ZCL_ZTEST_ODATA_MPC=>TS_DocType WITH DEFAULT


NAVPURCHGRP TYPE STANDARD TABLE OF ZCL_ZTEST_ODATA_MPC=>TS_PurchGrp WITH DEFAULT
NAVVENDOR TYPE STANDARD TABLE OF ZCL_ZTEST_ODATA_MPC=>TS_VendorList WITH DEFAULT
END OF struct_response.

Data: lt_response LIKE TABLE OF struct_response,


ls_clause_DocTyp LIKE LINE OF et_expanded_tech_clauses,

ls_clause_PurchGrp LIKE LINE OF et_expanded_tech_clauses,

ls_clause_Vendor LIKE LINE OF et_expanded_tech_clauses.

* Step-02: Call RFC of backend system

CALL FUNCTION '<RfcName>' DESTINATION '<Rfc Destinations name conencting to back-end system>'

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 17/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

TABLES

GT_DocTyp = lt_DocTyp

GT_VEN = lt_Vendor

GT_PurGrp = lt_PurGrp.

* Step-03: Return internal output tables to Odata Service Response

* Document Type List

LOOP AT lt_DocTyp INTO ls_DocTyp.

APPEND ls_DocTyp TO struct_response-NAVDOCTYP.

Clear ls_DocTyp.

ENDLOOP.

* Vendor List

LOOP AT lt_Vendor INTO ls_Vendor.

APPEND ls_Vendor TO struct_response-NAVVENDOR.

Clear ls_Vendor.

ENDLOOP.

* Purchase Group List

LOOP AT lt_PurGrp INTO ls_PurGrp.

APPEND ls_PurGrp TO struct_response-NAVPURCHGRP.

ENDLOOP.

*Step-04: Assign the Navigation Proprties to Expanded Tech clauses

ls_clause_DocTyp = 'NAVDOCTYP'.

APPEND ls_clause_DocTyp TO et_expanded_tech_clauses.

clear ls_clause_DocTyp.

ls_clause_PurchGrp = 'NAVPURCHGRP'.

APPEND ls_clause_PurchGrp TO et_expanded_tech_clauses.

clear ls_clause_PurchGrp.

ls_clause_Vendor = 'NAVVENDOR'.

APPEND ls_clause_Vendor TO et_expanded_tech_clauses.

clear ls_clause_Vendor.

*Step-05: Append Deep Strcture Values to Final Internal Table

APPEND struct_response TO lt_response.

clear struct_response.

*Step-06: Send back Response to XML output

copy_data_to_ref(

EXPORTING

is_data = lt_response

CHANGING

cr_data = er_entityset ).

ENDCASE.

endmethod.

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 18/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

e, finalmente, salve e ative.

——– Início da adição de conteúdo [Data 08-Jul-2019]: Caso => ​Para demonstrar como os parâmetros de
entrada podem ser passados ​no ODataService-exemplo ———-

Suponha que o RFC do SAP-ECC exija algum parâmetro de entrada, então mesmo que possamos passar
por ODataService no padrão de url.
Crie respectivos campos na entidade ODataservice, por exemplo 'field1' e 'field2'.
Nota: Aqui, ODataService suportará o método 'GET', estamos passando a entrada no padrão de url e o
mesmo receberemos no ABAP-Workbench de implementação ODataService e então será passado para a
função de chamada RFC.
ODataService url será como a seguinte, onde dois parâmetros de entrada são passados 'campo1' e 'field2': 
? / Sap / opu / OData / sap / ZTEST_ODATA_SRV / InputHelpSet $ filter = ( field1 eq 'Val123' e field2 eq
'val456' ) & $ expand = NAVDOCTYP, NAVPURCHGRP, NAVVENDOR
Chame este serviço usando a operação 'GET'. 
Em seguida, capture a entrada do padrão de URL ODataService e transmita-a ao RFC conforme mostrado
no código abaixo.

* Step-01.01 : Variables for ODataservice's URL-pattern's Input Parameters

Data: lt_filter_select_options TYPE /iwbep/t_mgw_select_option,

ls_filter TYPE /iwbep/s_mgw_select_option,

ls_filter_range TYPE /iwbep/s_cod_select_option,

lv_inputx TYPE C LENGTH 4, "Type as in RFC

lv_inputy TYPE C LENGTH 4, "Type as in RFC

* Step-01.02 : Get Input Parameters from OData Request Message

* ODataService url is as

* /sap/opu/odata/sap/ZTEST_ODATA_SRV/InputHelpSet?$filter=(field1 eq 'Val123' and field2 eq 'va


* Here, we read input of 'field1' and 'field2'

LOOP AT it_filter_select_options INTO ls_filter.

LOOP AT ls_filter-select_options INTO ls_filter_range.

TRANSLATE ls_filter-property TO UPPER CASE.

CASE ls_filter-property.

WHEN 'FIELD1'.

lv_inputx = ls_filter_range-low.

WHEN 'FIELD2'.

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 19/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

lv_inputy = ls_filter_range-low.

WHEN OTHERS.

" Log message in the application log

me->/iwbep/if_sb_dpc_comm_services~log_message(

EXPORTING

iv_msg_type = 'E'

iv_msg_id = '/IWBEP/MC_SB_DPC_ADM'

iv_msg_number = 020

iv_msg_v1 = ls_filter-property ).

" Raise Exception

RAISE EXCEPTION TYPE /iwbep/cx_mgw_tech_exception

EXPORTING

textid = /iwbep/cx_mgw_tech_exception=>internal_error.

ENDCASE.

ENDLOOP.

ENDLOOP.

* Step-02: Call RFC of backend system

CALL FUNCTION '<RfcName>' DESTINATION '<Rfc Destinations name conencting to back-end system>'

EXPORTING "While RFC call, input as Exporting parameters

IV_inputx = lv_inputx

IV_inputy = lv_inputy

TABLES

GT_DocTyp = lt_DocTyp

GT_VEN = lt_Vendor

GT_PurGrp = lt_PurGrp.

——– Fim da adição de conteúdo [Data 08-Jul-2019]: Caso => ​Para descrever como os parâmetros de
entrada podem ser passados ​no exemplo ODataService ————
 

Testando o serviço oData:


[1] Testando em Fiori-Server usando t-code '/ n / iwfnd / gw_client':

Para testar o serviço oData acima, vá para t-code '/ n / iwfnd / gw_client' e forneça o url.
O padrão de URL expandido é o seguinte com o qual este oDataService deve ser chamado:
/ sap / opu / odata / sap / ZTEST_ODATA_SRV / InputHelpSet? $ filter = (field1 eq ”) & $ expand =
NAVDOCTYP, NAVPURCHGRP, NAVVENDOR
aqui chamamos odataService usando EntitySet principal 'InputHelpSet'
e passamos a entrada 'field1' em branco do EntitySet principal 'InputHelpSet'
e usamos nomes de navegação de referência nos quais as tabelas de saída são mapeadas
Aqui, estamos passando um valor em branco para a propriedade 'field1' do EntitySet principal
(InputHelpSet), isso é obrigatório, porque esta é a 'Propriedade Principal' que está vinculada a pelo
menos uma 'Propriedade Dependente' em três Associações de três EntitySets (DocTypSet ,
PurchGrpSet, VendorListSet) com Main EntitySet (InputHelpSet)

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 20/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

selecione o método 'GET', aqui nenhuma entrada separada é necessária como uma solicitação HTTP.
No padrão de URL, podemos enviar entradas
Clique em 'Executar'

Seguinte xml de saída encontrado, que tem todas as três saídas de tabela na respectiva estrutura EntitySet
separada

<feed xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dat

Depurando o serviço oData:


[1.1] Serviço Debugging-oData para entender que a chamada é processada e a saída está
fluindo:

Vamos depurar o serviço oData

Para entender o processamento de chamadas do serviço oData


Para saber em tempo de execução, como RFC é chamado
e como a saída da tabela é retornada como uma resposta odataService em diferentes enttySet

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 21/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Dentro do método 'GET_EXPANDED_ENTITYSET', defina o ponto de interrupção externo quando o


EntitySet principal 'InputHelpSet' for chamado com url
/ sap / opu / odata / sap / ZTEST_ODATA_SRV / InputHelpSet? $ filter = (field1 eq ”) & $ expand =
NAVDOCTYP, NAVPURCHGRP, NAVVENDOR

Acione o serviço odata do código t '/ n / iwfnd / gw_client'

em pontos de interrupção de gatilho de serviço chamados, o processamento de código entra em EntitySet


'InputHelpSet'

Seguir feed RSS Como

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 22/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

A próxima chamada RFC acontece, no resultado, três saídas são recebidas do RFC

1ª tabela 'LT_DOCTYP' que é os registros da Lista de Tipos de Documentos

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 23/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

2ª tabela 'LT_Vendor' que é os registros da Lista de Fornecedores

3ª tabela 'LT_PURGRP' que é os registros do Grupo de Compra

Em seguida, todas as três tabelas de saída foram mapeadas para a estrutura comum do serviço oData
'LT_RESPONSE'

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 24/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Registros de 'Tipo de Documento' usando a referência de navegação 'NAVDOCTYP'

Registros de 'Grupo de Compra' usando a referência de navegação 'NAVPURCHGRP'

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 25/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Registros da 'Lista de Fornecedores' usando a referência de navegação 'NAVVENDOR'

em seguida, conclua a execução de depuração.

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 26/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Consumir o serviço oData acima no aplicativo Fiori ( dentro do Eclipse ):


Para saber como podemos chamar / consumir o serviço odata acima em qualquer app Fiori (usando a
plataforma Eclipse), pode-se consultar o seguinte meu blog:
Chame o serviço oData no aplicativo Fiori (Eclipse): operação 'Ler'

Moderador de alerta

Tags atribuídas

SAP Fiori

Postagens de blog relacionadas

Exemplos de serviço SAP (Fiori) OData


Por  Dilip Kumar Krishnadev Pandey  , 10 de abril de 2018
Criar serviço OData no servidor SAP Fiori
Por  Dilip Kumar Krishnadev Pandey  , 19 de novembro de 2017

Serviço SAP oData [POST]: Entrada de várias tabelas


Por  Dilip Kumar Krishnadev Pandey  , 30 de março de 2018

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 27/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Perguntas relacionadas

Vários serviços OData na página de visão geral do FIORI


Por  Sagar Kandalgaonkar  , 29 de junho de 2018

Resultado inesperado na criação da aplicação Fiori Master-Detail em Fiori


Por  Srinivasan S  , 28 de março de 2016

SAP UI5 valueHelp, valores distintos com OData-Service


Por  ex-membro  , 05 de outubro de 2016

32 comentários

Você deve estar logado para comentar ou responder a uma postagem.

 Michelle Crapo

9 de abril de 2018 às 11h58

Uau! Outro oportuno para mim. Eu estarei fazendo algo semelhante em breve.

Michelle

Como(1)

Alejandra Ardila

7 de maio de 2018 às 14h09

Olá,

muito bom blog. Tem sido muito útil

Eu tenho uma pergunta: se tivermos mais de um campo de entrada, teríamos que adicionar manualmente a
opção de filtragem no código / IWBEP / IF_MGW_APPL_SRV_RUNTIME ~ GET_EXPANDED_ENTITYSET?

No meu caso, tenho 4 campos de entrada e não sei se devo adicionar algum código extra.

Muito obrigado.

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 28/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

 
Cumprimentos,

Alejandra

Como(0)

Dilip Kumar KrishnaDeo Pandey Post autor

8 de maio de 2018 às 7h17

Cara   Alejandra Ardilla ,

Para quatro campos de entrada, você precisa fazer as coisas abaixo na Entidade ' InputHelp '

Crie quatro propriedades, por exemplo: field1, field3, field3, field4


O padrão de URI do serviço OData para enviar entrada nesses campos será como a seguir:
/ sap / opu / odata / sap / ZTEST_ODATA_SRV / InputHelpSet? $ filter = (field1 eq 'val1' e field2 e
'val' e field3 eq 'val' e field4 eq 'val') & $ expand = NAVDOCTYP, NAVPURCHGRP, NAVVENDOR

E no método 'GET_EXPANDED_ENTITYSET', você precisa ler a entrada de cada propriedade conforme


abaixo:

Data: lt_filter_select_options TYPE /iwbep/t_mgw_select_option,

ls_filter TYPE /iwbep/s_mgw_select_option,

ls_filter_range TYPE /iwbep/s_cod_select_option,

lv_field1 TYPE STRING,

lv_field2 TYPE STRING,

lv_field3 TYPE STRING,

lv_field4 TYPE STRING.

* Get Input Parameters from OData Request Message

LOOP AT it_filter_select_options INTO ls_filter.

LOOP AT ls_filter-select_options INTO ls_filter_range.

TRANSLATE ls_filter-property TO UPPER CASE.

CASE ls_filter-property.

WHEN 'FIELD1'.

lv_field1 = ls_filter_range-low.

WHEN 'FIELD2'.

lv_field2 = ls_filter_range-low.

WHEN 'FIELD3'.

lv_field3 = ls_filter_range-low.

WHEN 'FIELD4'.

lv_field4 = ls_filter_range-low.

WHEN OTHERS.

" Log message in the application log

me->/iwbep/if_sb_dpc_comm_services~log_message(

EXPORTING

i t 'E'
https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 29/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs
iv_msg_type = 'E'

iv_msg_id = '/IWBEP/MC_SB_DPC_ADM'

iv_msg_number = 020

iv_msg_v1 = ls_filter-property ).

" Raise Exception

RAISE EXCEPTION TYPE /iwbep/cx_mgw_tech_exception

EXPORTING

textid = /iwbep/cx_mgw_tech_exception=>internal_error.

ENDCASE.

ENDLOOP.

ENDLOOP.

Agora você tem entrada nas variáveis ​'lv_field1 ′, lv_field2', 'lv_field3', 'lv_field4', que você pode usar no seu
caso.
Espero que acima te ajude.

Obrigado e cumprimentos,

Dilip

Como(2)

Alejandra Ardila

18 de junho de 2018 às 14h23

Caro Dilip,

muito obrigado, funcionou bem para mim 

Como(1)

 Sophie Li

11 de janeiro de 2019 às 9h51

Caro Dilip,

Se a entrada são dados da tabela como conjunto de filtros, mas o URI tem a limitação de comprimento nos
caracteres, como devemos proceder neste caso

Por exemplo,

precisamos filtrar o campo fied1 campo2 feild3 feild4 com mais de 20 grupos de combinação de valores como
segue,

V11 V21 V31 V41; V12 V22 V32 V42; V13 V23 V33 V43; V14 V24 V34 V44;

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 30/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

V15 V25 V35 V45; V16 V26 V36 V46; V17 V27 V37 V47; V18 V28 V38 V48; ........

Se usarmos o método get semelhante a este, temos limitação no comprimento do URI

/ sap / opu / odata / sap / ZTEST_ODATA_SRV / InputHelpSet? $ filter = (field1 eq 'val11' e field2 eq
'val21' e field3 eq 'val31' e field4 eq 'val41') & $ filter = (field1 eq 'val12 'e field2 eq' val22 'and field3 e
val32 'and field4 eq' val42 ') & $ filter = (field1 eq' val13 'and field2 eq' val23 'and field3 eq' val33 'and
field4 eq' val43 '). .....

Obrigado e cumprimentos,

Sophie

Como(0)

Dilip Kumar KrishnaDev Pandey Post autor

14 de janeiro de 2019 às 6h30

Cara Sophie,

A limitação do comprimento do URI pode estar lá ao acessar o serviço Odata do SAP-Fiori t-code '/ n / iwfnd /
gw_client',

mas a partir do arquivo do controlador do SAP-Fiori-App (em JavaScript), não existe essa limitação.

Por favor, verifique e deixe-me saber porque este conceito também é novo para mim, usando um tamanho de
URI tão grande.

Obrigado e cumprimentos,

Dilip

Como(0)

Mauricio Pinheiro Predolim

4 de julho de 2018 às 15h04

Ótimas dicas Dilip! Muito obrigado!

Tenho uma dúvida sobre o uso de Multiple Table Outputs:

Usando seu exemplo, tenho 3 tabelas de conteúdo diferentes, por exemplo: 2018, 2017 e 2016 que estou
preenchendo chamando uma RFC com os mesmos campos.

Não consigo ver a saída das tabelas na carga útil do serviço OData. Essa é uma razão para isso? No debug
está tudo bem.

Cumprimentos.
https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 31/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Mauricio.

Como(0)

Dilip Kumar KrishnaDeo Pandey Post autor

5 de julho de 2018 às 9h14

Oi Mauricio Pinheiro Predolim

No seu caso:

3 tabelas com os mesmos campos no RFC ... tudo bem


Em oDataService, três estruturas paralelas devem estar presentes
e mais um EntitySet que será usado em 'associação / navegação' para obter vários resultados de saída.
Usando o padrão de URL de navegação correto, apenas entidades múltiplas podem ser referenciadas na
saída

Se você estiver obtendo resultados na depuração, mas não refletindo os mesmos em oDataService, verifique
novamente a associação / navegação e use o padrão de URL adequado ao chamar o serviço. Seu caso é mui
semelhante ao blog acima.

Obrigado e cumprimentos,

Dilip

Como(0)

Mauricio Pinheiro Predolim

9 de julho de 2018 às 14h16

Oi Dilip!

Verifiquei novamente meu oDataService e agora ele está funcionando!

Obrigado e cumprimentos.

Mauricio.

Como(1)

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 32/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Karthikeyan Ramaswamy

25 de janeiro de 2019 às 18:26

Oi Dilip,

Este é um excelente blog Segui os passos que você mencionou acima para o meu cenário atual. Eu criei um
UserInfoset semelhante ao seu InputHelpSet e criei uma associação com 2 das minhas tabelas internas de
saída. Concluí a codificação no método / IWBEP / IF_MGW_APPL_SRV_RUNTIME ~
GET_EXPANDED_ENTITYSET.

Quando testo meu serviço, recebo o seguinte erro.

Recurso não encontrado para o segmento: (NOME DE NAVEGAÇÃO)

Você pode me dizer se eu perder alguma coisa aqui?

Obrigado,

Karthik

Como(0)

Dilip Kumar KrishnaDev Pandey Post autor

28 de janeiro de 2019 às 5h49

Olá Karthikeyan,

Verifique novamente abaixo:

Navegação e associação
codificação no método / IWBEP / IF_MGW_APPL_SRV_RUNTIME ~ GET_EXPANDED_ENTITYSET
e padrão de url durante o teste
verifique o código T "/ n / iwfnd / error_log" para mais detalhes

Obrigado e cumprimentos,

Dilip

Como(0)

Karthikeyan Ramaswamy

29 de janeiro de 2019 às 4h56

Obrigado Dilip. Cometi um erro e agora está funcionando bem.

Como(1)

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 33/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Rashmi Joshi

25 de abril de 2019 às 5h56

Oi Dilip,

Este é um excelente blog e muito bem explicado. Obrigado por isso.

Como(1)

Venkata Angara

12 de junho de 2019 às 21h34

Oi Dileep,

Obrigado por compartilhar. Eu tenho uma pergunta sobre isso. Tentei replicar este cenário e ele ainda está
chamando o antigo método padrão Create_Entity e, portanto, retornando um formato de estrutura em vez de u
formato de estrutura profunda. Este cenário funciona apenas para vários registros usando o cenário $ batch ou
também pode ser usado para um único registro?

Obrigado,

Pavan

Como(0)

Dilip Kumar KrishnaDev Pandey Post autor

13 de junho de 2019 às 7h08

Oi Venkata,

Verifique novamente o seu cenário nas etapas fornecidas neste blog.

Para sua informação, usamos as técnicas de redefinição abaixo em B.Requisito:

1. Entrada de tabela múltipla (cabeçalho / item) => CREATE_DEEP_Entity


2. Saída de várias tabelas => GET_Expanded_EntitySet
3. Saída / entrada de tabela única => GET_EnitySet

Consulte o link abaixo para obter mais clareza:

https://blogs.sap.com/2018/04/10/sap-fiori-odata-service-examples/

Obrigado e cumprimentos,

Dilip
https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 34/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Como(1)

Syed Omer Hussain

16 de julho de 2019 às 7h45

Oi Dilip,

Bom blog. Eu tenho uma pergunta, tentei implementar o cenário acima e sou capaz de obter os dados em
"lt_response" ao depurar, mas quando a depuração for concluída, recebo o erro abaixo. O que exatamente fez
falta?

Obrigado e cumprimentos.

Como(0)

Dilip Kumar Krishnadev Pandey Post autor

17 de julho de 2019 às 13h56

Oi Syed,

Seu link de navegação / associação parece ser impróprio, verifique novamente.

Porque ele deve invocar / negociar métodos Expanded_EntitySet apenas em vez de GET_Entity.

E no url, use colchetes pequenos

/ HeaderReqSet? $ Filter = (RBUKKRS eq '1000' e BELNR eq '100000034') & $ expand = NAVDocOutput

obrigado e cumprimentos,

Dilip

Como(1)

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 35/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

David Fryda

2 de janeiro de 2020 às 10:51

Oi.

Funcionou para mim na primeira vez! Obrigada.

Eu tenho uma pequena pergunta. Digamos que você deseja apenas executar a navegação NAVDOCTYP .

Eu obtenho os dados da tabela doctype em meu xml. Mas a função é executada e retorna todas as tabelas
como lt_vendor e lt_purgrp. Portanto, não há ganho de desempenho.

Cumprimentos.

Como(0)

Dilip Kumar Krishnadev Pandey Post autor

23 de maio de 2020 às 18:22

Olá David,

Desculpe pela interação muito tardia, até agora, você já deve ter atendido ao requisito

Sim, Function irá retornar todas as tabelas para as quais foi programado.

Obrigado e cumprimentos,

Dilip

Como(1)

David Fryda

24 de maio de 2020 às 5h07

Oi Dilip,

Obrigado mesmo assim. É sempre bom ter outra confirmação.

Cumprimentos.

Como(0)

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 36/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Tata Manikanta Subrahmanyam Gupta

17 de fevereiro de 2020 às 10h09

Olá Dilip Kumar Krishnadev Pandey

Eu tentei de acordo com o acima, mas posso depurar o serviço oData com o ponto de interrupção externo,
embora esteja usando o mesmo ID de usuário no front-end Fiori e no back-end ECC.

Você pode me sugerir como depurar na versão S / 4 Hana 1909 com Break Point externo

Como(0)

Dilip Kumar Krishnadev Pandey Post autor

23 de maio de 2020 às 18:10

Olá Tata MSG,

Desculpe pela interação muito tardia, até agora, você já deve ter atendido ao requisito.

Você deve ter o mesmo procedimento de depuração no S / 4 Hana também, até agora, eu não tive a chance d
trabalhar no S / 4 Hana, então, não posso comentar nada específico.

Obrigado e cumprimentos,

Dilip

Como(0)

Saurabh Tiwari

29 de maio de 2020 às 10:43

Muito bem explicado.

Como(0)

Dilip Kumar Krishnadev Pandey Post autor

9 de junho de 2020 às 8h53

धन्यवाद तिवारी जी

Como(0)

Deepak Asoda

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 37/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

28 de junho de 2020 às 21:27

Ei Dilip,

Muito obrigado por um bom blog, muito bem explicado para iniciantes e que desejam entender conceitualment

Cumprimentos,

Deepak

Como(0)

Juan Camilo Martinez Arias

5 de julho de 2020 às 19h46

Oi dilip

 Eu tenho um problema, quando coloco um ponto de interrupção da sessão apenas para no método
i nputhelpset_get_entityset,  nunca para no método GET_EXPANDED_ENTITYSET.
 Eu verifiquei minhas associações e parece bom.
 

Im usar este URL / sap / opu / odata / sap / ********* / InputHelpSet? $ Filter = ((Plfaz ge datetime'2019-04-
01T12: 00 'e Plfaz le datetime'2019-04 -29T12: 00 ') and (Plsez ge datetime'2019-06-01T12: 00' and Plsez le
datetime'2019-06-30T12: 00 ')) & $ expand = NAVDATACONJUNTO, NAVDATAINDIVIDUAL
e este é o erro quando eu uso a cláusula "expandir"

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 38/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

PSDT: Eu redefino o método i nputhelpset_get_entityset  também e tentei definir minhas duas tabelas de


saída no parâmetro ET_ENTITYSET do mesmo método
 

Pode me ajudar ?

Obrigado e cumprimentos.

Como(0)

Dilip Kumar Krishnadev Pandey Post autor

22 de agosto de 2020 às 11h56

Oi juan,

Desculpe pela resposta tardia. A esta altura, você já deve ter resolvido o problema.

No entanto, dentro de 'GET_Expanded_EntitySet', apenas verifique novamente CASE ... WHEN


'<custEntitySetName>' onde <custEntitySetName> é caseSensitive por natureza, deve ser igual ao EntitySe
https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 39/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

visível em SEGW
e tente definir a depuração externa na linha WHEN (por exemplo, na linha 4 neste caso de blog). Aqui, se
EntitySet for referido incorretamente, então pelo menos a depuração virá nesta linha

Obrigado e cumprimentos,

Dilip P.

Como(0)

Venkat Challa

5 de fevereiro de 2021 às 12h37

Oi Dilip,

Estou tentando encontrar uma solução para o problema abaixo.

Input1 -> Uma estrutura com 2 ou 3 colunas.

 Input2 -> Tabela com 4 colunas e cerca de 30 linhas.

Com base na solicitação Input1 e nas entradas na tabela de entrada, recebo o resultado de volta em uma
tabela.

Saída -> Tabela com 5 colunas e cerca de 10 a 20 linhas.

Minha dúvida é como faço para passar minha tabela de entrada? Não tenho certeza de como resolver isso.

Como(0)

Dilip Kumar Krishnadev Pandey Post autor

8 de março de 2021 às 6h54

Oi Venkat,

Desculpe pelo atraso na resposta, você pode consultar o link abaixo do blog, se, no caso, você ainda não
atendeu ao seu requisito

SAP oData Service [POST]: Entrada de várias tabelas | SAP Blogs

Para sua informação, abaixo estão outros exemplos de oData também:

Exemplos de serviço SAP (Fiori) OData | SAP Blogs

Obrigado e cumprimentos,

Dilip

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 40/41
25/06/2021 SAP oData Service [GET]: Multiple Table Output | SAP Blogs

Como(1)

Venkat Challa

8 de março de 2021 às 16h04

Obrigado Dilip. Este é realmente um bom blog. Consegui encontrar a solução. Mas isso confirma que estou no
caminho certo ..

Como(1)

David Coiro

25 de março de 2021 às 12h24

Oi Dilip.

Muito obrigado por este tutorial. Isso me ajuda muito para uma das minhas necessidades.

Funciona perfeitamente :).

Atenciosamente

David.

Como(1)

https://blogs.sap.com/2018/04/07/sap-odata-service-get-multiple-table-output/ 41/41

Você também pode gostar