Transação SWO1
Adicionar parâmetros de importação se necessário, no meu caso eu precisei.
Adicionei 2 parâmetros tipo tabela.
Criei uma estrutura no dicionário para a tabela, qdo for tabela marcar que a estrutura vai ter várias linhas
Criar o evento q vai disparar o workflow
Assim como método adicionar parâmetros caso necessário, como no meu caso tenho no método, eu preciso fazer essa passagem no container qdo for fazer o binding do evento para o método, sendo assim eu crie os mesmos parâmetros do método no evento
Depois q fizer tudo alterar status do método e do evento como "Implementado" e depois para "Liberado"
Tem q ficar com esse check
== Passo 2 - Workflow
Criar a tarefa padrão primeiro - transação PFTC
Colocar a sigla o número da tarefa será gerado automaticamente
Informar os dados do BO conforme o que foi feito acima e marcar se é backgroune e se é síncrono
Em eventos acionadores informar o BO e o evento utilizado para disparar o worfkflow
Não esquece de ativar o fluxo do evento
Criar o modelo de workflow
Colocar um nome para sigla o número do modelo será gerado automaticamente.
Essa parte não sei precisa pq eu deixei desativado, e como deixei ativado na tarefa não faz sentido
Salvar e clicar no workflow builder
Quando está criando essa etapa fica vazio, nesse caso do print eu já tinha criado. mas daí é só clicar na etapa em branco e colocar a tarefa q foi criado antes do modelo WS
Em detalhes marquei
Salvar, ativar e não esquecer de liberar a tarefa e o modelo workflow.
No meu caso como tenho parâmetros eu conferi os bindings no container para ver se o fluxo estava correto.
============Customizing link to BO com o WS
Transação SWE2
-=============== Parte do programa - trigger
No meu programa q vai disparar o evento eu coloquei o object key q no meu caso ficou como número da reserva. conforme a tela abaixo da SWO1
E no programa que vai er o trigger
a tabela interna LT_CONTAINER vai conter os dados do parâmetro que vou usar no método na BO, no meu caso eu queria passar os dados dos itens para execução da BAPI da MIGO, mas não consegui achar um jeito de passar o tipo especifico da estrutura da BAPI, talvez tenha e eu não saiba..
Mas eu decidi passar pelo parâmetro padrão da função standard só q como a estrutura SWR_CONT no campo value é limitado a 255char eu criei uma estrutura apenas dos campos que eu precissava enviar para preencher a BAPI por isso criei a estrutura ZMM_STK_TRF_ITEM e só passo os valores
DATA: lv_subrc TYPE sy-subrc,
lv_event_id TYPE swr_struct-event_id.
DATA: lt_container TYPE STANDARD TABLE OF swr_cont WITH DEFAULT KEY,
lt_message_lines TYPE STANDARD TABLE OF swr_messag,
lt_message_struct TYPE STANDARD TABLE OF swr_mstruc.
"data ls_value type zmm_stk_trf_item.
IF gs_bapi_item-item_301[] IS NOT INITIAL.
lt_container = VALUE #( FOR ls_301 IN gs_bapi_item-item_301
( element = 'IT_IT301'
value = CORRESPONDING zmm_stk_trf_item( ls_301 ) ) ).
ENDIF.
IF gs_bapi_item-item_411[] IS NOT INITIAL.
lt_container = VALUE #( BASE lt_container
FOR ls_411 IN gs_bapi_item-item_411
( element = 'IT_IT411'
value = CORRESPONDING zmm_stk_trf_item( ls_411 ) ) ).
ENDIF.
CALL FUNCTION 'SAP_WAPI_CREATE_EVENT'
EXPORTING
object_type = 'ZRESTRFSTK'
object_key = CONV swr_struct-object_key( i_rsnum )
event = 'BAPI_EXECUTION'
* commit_work = 'X'
* event_language = SY-LANGU
* language = SY-LANGU
* user = SY-UNAME
* ifs_xml_container =
IMPORTING
return_code = lv_subrc
event_id = lv_event_id
TABLES
input_container = lt_container
message_lines = lt_message_lines
message_struct = lt_message_struct.
=== Dentro do programa BO para fazer a leitura dos parâmetros passados
- Dentro do método q eu criei
eu leio o container passado e atribuo a estrutura da BAPI da MIGO
***** Implementation of object type ZRESTRFSTK *****
INCLUDE <object>.
begin_data object. " Do not change.. DATA is generated
* only private members may be inserted into structure private
DATA:
" begin of private,
" to declare private attributes remove comments and
" insert private attributes here ...
" end of private,
BEGIN OF key,
iv_resum LIKE resb-rsnum,
END OF key.
end_data object. " Do not change.. DATA is generated
begin_method bapi_migo_execution changing container.
DATA: lt_411 TYPE STANDARD TABLE OF zmm_stk_trf_item,
lt_301 TYPE STANDARD TABLE OF zmm_stk_trf_item.
swc_get_table container 'IT_IT411' lt_411.
swc_get_table container 'IT_IT301' lt_301.
DATA(ls_bapi_header) = VALUE bapi2017_gm_head_01( pstng_date = sy-datum
doc_date = sy-datum
header_txt = object-key ).
DATA: lt_bapi_it301 TYPE tab_bapi_goodsmvt_item,
lt_bapi_it411 TYPE tab_bapi_goodsmvt_item.
IF lt_411[] IS NOT INITIAL.
lt_bapi_it411 = CORRESPONDING #( lt_411 ).
ENDIF.
IF lt_301[] IS NOT INITIAL.
lt_bapi_it301 = CORRESPONDING #( lt_301 ).
ENDIF.
CHECK lt_bapi_it301[] IS NOT INITIAL OR lt_bapi_it411[] IS NOT INITIAL.
CALL FUNCTION 'ZFM_MM_TRF_STOCK_RESERVATION'
EXPORTING
is_bapi_header = ls_bapi_header
it_bapi_item = lt_bapi_it301
it_bapi_item_cons = lt_bapi_it411
EXCEPTIONS
OTHERS = 01.
CASE sy-subrc.
WHEN 0. " OK
WHEN OTHERS. " to be implemented
ENDCASE.
end_method.
Nenhum comentário:
Postar um comentário