Já se passaram vários anos, mas como nenhuma resposta satisfazia minhas necessidades, gostaria de compartilhar minha solução baseada em BOPF aqui também.
Eu estava confuso com o título que dizia "encontrar FU para FO dado", mas na própria pergunta soa como "encontrar FO para um FU dado". A segunda parte já foi resolvida por Thiago Bohn. Gostaria de dar uma solução para a primeira tarefa.
Você pode selecionar todos os elementos associados aos TOs usando retrieve_by_association e a partir daí pode chegar aos FUs acima dos elementos novamente usando retrieve_by_association.
Do meu entendimento, você não pode se referir diretamente dos FOs aos FUs.
Conteúdo dos trechos de código:
-
Recuperando os ITEM_TRs de nossos TOs
-
Colocando as chaves recuperadas em uma tabela separada para poder passá-las para o próximo método
-
Recuperando os FUs
lo_service_manager->retrieve_by_association( EXPORTING iv_node_key = /scmtms/if_tor_c=>sc_node-root it_key = lo_chaco_request->mt_tor_key iv_association = /scmtms/if_tor_c=>sc_association-root-item_tr iv_fill_data = abap_true IMPORTING et_data = lt_item_tr ).
LOOP AT lt_ITEM_TR INTO ls_item_tr. MOVE ls_item_tr-key TO ls_item_key-key. APPEND ls_item_key TO lt_item_key.ENDLOOP.
lo_service_manager->retrieve_by_association( EXPORTING iv_node_key = /scmtms/if_tor_c=>sc_node-item_tr it_key = LT_item_key iv_association = /scmtms/if_tor_c=>sc_association-item_tr-fu_root iv_fill_data = abap_true IMPORTING et_data = lt_tor_root_fu ).