quarta-feira, 20 de março de 2024

RAP - Modificando itens no determination ON SAVE

===== CHAMADA  

determination preenche_campos on save { create; }


====== Implementação do método

  METHOD preenche_campos.


    READ ENTITIES OF ZI_XXXX IN LOCAL MODE

         ENTITY Item

         FIELDS ( posnr )

         WITH CORRESPONDING #( keys )

         RESULT DATA(lt_item).


    READ ENTITIES OF ZI_XXXX IN LOCAL MODE

         ENTITY Header

         FIELDS ( id Opertyp )

         WITH CORRESPONDING #( keys )

         RESULT DATA(lt_header).


    CHECK lt_header IS NOT INITIAL.

    DATA(ls_header) = lt_header[ 1 ].

    CHECK  ls_header-Opertyp = zcl_sd_XXXX=>c_tipo_op-sem_retorno.


    SELECT COUNT( * )

      FROM ztsd_XXXX

     WHERE id = ls_header-Id.


    DATA(lv_posnr) = CONV posnr( sy-dbcnt ) * 10.


    LOOP AT lt_item REFERENCE INTO DATA(lr_item).


      MODIFY ENTITIES OF ZI_XXXX IN LOCAL MODE

        ENTITY Item

        UPDATE FIELDS ( posnr )

        WITH VALUE #( ( %tky = lr_item->%tky posnr = lv_posnr %control-Posnr = if_abap_behv=>mk-on ) ).

    ENDLOOP.


  ENDMETHOD.


segunda-feira, 18 de março de 2024

RAP - Ocultando campos dinamicamente

 É possível ocultar campos dinamicamente mas somente de campos do object page, onde os campos são visualizados individualmente, a principio achei estranho q não tivesse opção para lista mas faz sentido pq cada registro pode ter uma condição diferente e não seria possível ocultar um campo em uma linha e na outra ficar visivel.

No meu caso eu tenho object page com uma lista (composition) que possui outra object page, nesse caso tive q colocar uma regra para o parent e outro para o child

======= Coloquei a condição na root view tanto do parent como do child, poderia ser utilizado o virtual element mas no meu caso como depende de um valor de campo da própria view foi mais fácil.

















No meu caso ocultei o campo de ordem de produção, ocultei tanto do datapoint do FACET quanto no campo listado na página do object page

















domingo, 10 de março de 2024

RAP - Factory action - Populando dados automático do objeto principal e do filho (Associated)

Detalhes importantes 
- %control - tudo q é ON é o q vai ser transportado para a tela de destino, se estiver OFF o campo não vai para tela
- %Is Draft - Se tiver DRAFT no dev tem q colocar no HEADER, no TARGET e no ITEM em si.





 









































CódigoFULL


METHOD OrderProd.

    DATA: lt_header TYPE TABLE FOR CREATE zi_indinternasd.

    DATA: lt_item TYPE TABLE FOR CREATE zi_indinternasd\_item.

    DATA: ls_item LIKE LINE OF lt_item.

    DATA lt_target LIKE ls_item-%target.

    DATA ls_target LIKE LINE OF lt_target.

    DATA(lt_keys) = keys.

    DATA(ls_keys) = VALUE  #( lt_keys[ 1 ] OPTIONAL ).

    CHECK ls_keys IS NOT INITIAL.

    TRY.

        DATA(lv_id) = cl_system_uuid=>create_uuid_x16_static( ).

      CATCH  cx_uuid_error.

        RETURN.

    ENDTRY.


    lt_header = VALUE #( ( %is_draft = if_abap_behv=>mk-on

                           %cid = ls_keys-%cid

                           Id = lv_id

                           Opertyp = c_tipo_op-envio

                           aufnr = ls_keys-%param-aufnr

                           %control = value #( Aufnr = if_abap_behv=>mk-on

                                               Opertyp = if_abap_behv=>mk-on

                                              )


                         ) ).


    DATA: lt_teste TYPE TABLE OF  ztsd_ind_item.


    lt_teste = VALUE #(

                      ( matnr = '000000000000000009'  menge = '10.11' preco = '1.12'  )

                      ( matnr = '000000000000000010'  menge = '20.22' preco = '2.22'  )

                      ( matnr = '000000000000000011'  menge = '30.33' preco = '3.15'  )

                      ).


    LOOP AT lt_teste INTO DATA(ls_teste).


      TRY.

          DATA(lv_item_id) = cl_system_uuid=>create_uuid_x16_static( ).

        CATCH  cx_uuid_error.

          RETURN.

      ENDTRY.


      APPEND INITIAL LINE TO lt_target ASSIGNING FIELD-SYMBOL(<lf_target>).

      <lf_target> = VALUE #( %cid = lv_item_id

                             %is_draft = if_abap_behv=>mk-on

                             Id = lv_id

                             ItemId = lv_item_id

                             Matnr = ls_teste-matnr

                             Menge = ls_teste-menge

                             Preco = ls_teste-preco

                             %control = VALUE #( Docnum = if_abap_behv=>mk-off

                                                 Itmnum = if_abap_behv=>mk-off

                                                 Matnr = if_abap_behv=>mk-on

                                                 Meins = if_abap_behv=>mk-on

                                                 Preco = if_abap_behv=>mk-on

                                                 Menge = if_abap_behv=>mk-on

                              )

                               ).


    ENDLOOP.


    APPEND INITIAL LINE TO lt_item ASSIGNING FIELD-SYMBOL(<lt_item>).

    <lt_item> = VALUE #( %cid_ref = ls_keys-%cid

                         Id = lv_id

                         %is_draft = if_abap_behv=>mk-on

                         %target = lt_target ).


    MODIFY ENTITIES OF zi_indinternasd IN LOCAL MODE

     ENTITY Header

       CREATE FROM lt_header

       CREATE BY \_item FROM lt_item

        MAPPED DATA(lt_item_upd)

        FAILED data(lt_failed)

        REPORTED data(lt_reported).


    mapped-header = lt_item_upd-header.

    mapped-item = lt_item_upd-item.



  ENDMETHOD.








terça-feira, 5 de março de 2024

Eclipse - Testando classes





CLASS ltcl_teste DEFINITION FINAL FOR TESTING

 DURATION SHORT

 RISK LEVEL HARMLESS.

  PRIVATE SECTION.

    METHODS: teste_pedi FOR TESTING RAISING cx_static_check.

    DATA lo_test TYPE REF TO <classe q vai ser testado>.

ENDCLASS.

CLASS ltcl_teste IMPLEMENTATION.

  METHOD teste_pedi.

    <classe>=><método para testart(

    EXPORTING <parametros do método a ser testado>

    CHANGING <parametros do método a ser testado>

    ).

  ENDMETHOD.

ENDCLASS. 

==================== PARA TESTAR A CLASSE ============

CTRL+SHIFT+F10

segunda-feira, 4 de março de 2024

FIORI - Value Help standard úteis



I_PlantStdVH - Centro

C_Materialvh  - Material

I_Customer_VH - Cliente

I_BusinessPartnerCustomerVH = Cliente

I_PurchaseOrgVH - Organização de compra

C_PurchasingGroupValueHelp - Grupo de compradores

C_IncotermsVersionVH - Incoterms

C_StorageLocationVH - Depósito