domingo, 8 de junho de 2025

Criação de evento BO para trigger executar bapi

Transação SWO1 




Tipo super deixar em branco
O nome do programa é o q vai ser criado e vai conter o código do BO





Criar novo método



No meu caso criei para executar outra função para executar uma bapi









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

   DATAlv_subrc    TYPE sy-subrc,
          lv_event_id TYPE swr_struct-event_id.

    DATAlt_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_itemls_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_itemls_411 )  ).
    ENDIF.

    CALL FUNCTION 'SAP_WAPI_CREATE_EVENT'
      EXPORTING
        object_type     'ZRESTRFSTK'
        object_key      CONV swr_struct-object_keyi_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.

DATAlt_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_headerVALUE bapi2017_gm_head_01pstng_date sy-datum
                                                  doc_date sy-datum
                                                  header_txt object-key ).
DATAlt_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.



domingo, 1 de junho de 2025

Extension I_ARLINEITEM - Administração de itens de cliente - Inclusão de campos

 Esse recurso foi utilizado pq o serviço FAR_CUSTOMER_LINE_ITEMS  não estava disponível no contexto comercial FINS_JOURNAL_ENTRY_ITEM para fazer via "Campo e Lógica Personalizado"  no fiori.

Já avisando q não é uma GAMBIARRA, a SAP tem essa instrução nas notas : 0003431912 e 0003405214.
Existe um doc. em PDF com as instruções.


- Criar append structure na estrutura FAR_IFIARLINEITEM_EX (para caso de cliente)




- Criar extended view
Colocar outro nome para extended view, não é a mesma do append feito na estrutura acima
No meu caso queria o valor de um campo q já existe na tabela standard, ANFBN 





- Criar Enhancment na classe CL_FAR_CUSTOMER_LINE_I_DPC
no método IF_SADL_GW_EXTENSION_CONTROL~SET_EXTENSION_MAPPING
Inicio do método







********* 
  IF iv_entity_set_name = 'Items'.

   io_extension_mapping->set_property_mapping(
      it_property_mapping = VALUE #(
      (  property_abap_name = 'ZSOLICITACAO_LC'
         business_entity_element = 'SOLICITACAOLC' ) )
     ).

  ENDIF.


- Criar Enhancment na classe CL_FAR_CUSTOMER_LINE_I_MPC_EXT
no método DEFINE - no final do método

lo_entity_type = model->get_entity_type( 'Item' ).
lo_property = lo_entity_type->create_property( iv_property_name = 'ZSOLICITACAO_LC' iv_abap_fieldname = 'ZSOLICITACAO_LC' ). "#EC NOTEXT "#EC NOTEXT
lo_property->set_type_edm_string( ).
lo_property->set_maxlength( iv_max_length = 4 ).
lo_property->set_creatable( abap_false ).
lo_property->set_updatable( abap_false ).
lo_property->set_sortable( abap_true ).
lo_property->set_nullable( abap_true ).
lo_property->set_filterable( abap_true ).
lo_entity_type->bind_structure( iv_structure_name = 'FAR_IFIARLINEITEM_EX' iv_bind_conversions = 'X' ). "#EC NOTEXT
lo_entity_type->set_semantic( /iwbep/if_ana_odata_types=>gcs_ana_odata_semantic_value-query-aggregate ).
lo_property = lo_entity_type->get_property( 'ZSOLICITACAO_LC' ).
lo_annotation = lo_property->/iwbep/if_mgw_odata_annotatabl~create_annotation( /iwbep/if_mgw_med_odata_types=>gc_sap_namespace ).
lo_annotation->add( iv_key = /iwbep/if_ana_odata_types=>gcs_ana_odata_annotation_key-aggregation_role
                    iv_value = /iwbep/if_ana_odata_types=>gcs_ana_odata_annotation_value-dimension-dimension ).









Limpar o cache antes de abrir o app no fiori

/n/IWBEP/CACHE_CLEANUP
/n/IWFND/CACHE_CLEANUP