20240106

MESHES

  METHOD tamplates_1 .

*   String template
*    x = |...literal...{expression}\...control characters...|

    WRITE:/ '*** MESHES'.
    WRITE:/ '*** Leva as tabelas internas as associações'.
    WRITE:/ '*** que já tínhamos nas CDS VIEWS'.

    WRITE:/ ''.
    WRITE:/ ''.

    WRITE:/ '    types:'.
    WRITE:/ '      BEGIN OF mesh m1,'.
    WRITE:/ '        node1   type ...','                 *** Tab int decl.antes' .
    WRITE:/ '          ASSOCIATION _node2 to node2'.
    WRITE:/ '            ON ...  =  ...'.
    WRITE:/ '        node2   type ...'.
    WRITE:/ '          ASSOCIATION _node1 to node1'.
    WRITE:/ '            ON ...  =  ...'.
    WRITE:/ '      END OF  MESH m1.'.



    ULINE.

  ENDMETHOD.










***
***   Exemplo Simples
***
  METHOD tamplates_2 .

    WRITE:/ '*** tamplates_2 - Exemplo Simples' .


    TYPES:
      BEGIN OF y_cidade,
        cod    TYPE i,
        nome   TYPE char20,
        estado TYPE char2,
      END OF y_cidade,

      y_t_cidade TYPE STANDARD TABLE OF y_cidade
        WITH KEY primary_key COMPONENTS cod,

      BEGIN OF y_estado,
        cod  TYPE char2,
        nome TYPE char20,
      END OF y_estado,

      y_t_estado TYPE STANDARD TABLE OF y_estado
       WITH KEY primary_key COMPONENTS cod,



      BEGIN OF MESH y_uf,
        estados TYPE y_t_estado
         ASSOCIATION _cidades TO cidades
           ON estado = cod,
        cidades TYPE y_t_cidade
         ASSOCIATION _estado TO estados
           ON cod = estado,
      END OF MESH y_uf.



    data(t_uf) = VALUE y_uf(
      estados = VALUE y_t_estado(
        ( cod = 'SP'   nome = 'Sao Paulo' )
        ( cod = 'RJ'   nome = 'Rio de Janeiro' )
      )
      cidades = VALUE y_t_cidade(
        ( cod = '01'  nome = 'Santo Andre'            estado = 'SP' )
        ( cod = '02'  nome = 'Sao Bernardo do Campo'  estado = 'SP' )
        ( cod = '03'  nome = 'Sao Caetano do Sul'     estado = 'SP' )
        ( cod = '04'  nome = 'Petropolis'             estado = 'RJ' )
        ( cod = '05'  nome = 'Niteroi'                estado = 'RJ' )
      )
    ).

    write:/ |Estado de Santo Andre:  |
      &&    |{ t_uf-cidades\_estado[ t_uf-cidades[ cod = '01' ] ]-nome }|.



    ULINE.

  ENDMETHOD.







***
*** Literal + expression
***
  METHOD tamplates_3 .

    WRITE:/ '*** tamplates_3 - Exemplo c/ LOOP' .
    WRITE:/ '*** Cidades do Rio' .


    TYPES:
      BEGIN OF y_cidade,
        cod    TYPE i,
        nome   TYPE char20,
        estado TYPE char2,
      END OF y_cidade,

      y_t_cidade TYPE STANDARD TABLE OF y_cidade
        WITH KEY primary_key COMPONENTS cod,

      BEGIN OF y_estado,
        cod  TYPE char2,
        nome TYPE char20,
      END OF y_estado,

      y_t_estado TYPE STANDARD TABLE OF y_estado
       WITH KEY primary_key COMPONENTS cod,



      BEGIN OF MESH y_uf,
        estados TYPE y_t_estado
         ASSOCIATION _cidades TO cidades
           ON estado = cod,
        cidades TYPE y_t_cidade
         ASSOCIATION _estado TO estados
           ON cod = estado,
      END OF MESH y_uf.



    data(t_uf) = VALUE y_uf(
      estados = VALUE y_t_estado(
        ( cod = 'SP'   nome = 'Sao Paulo' )
        ( cod = 'RJ'   nome = 'Rio de Janeiro' )
      )
      cidades = VALUE y_t_cidade(
        ( cod = '01'  nome = 'Santo Andre'            estado = 'SP' )
        ( cod = '02'  nome = 'Sao Bernardo do Campo'  estado = 'SP' )
        ( cod = '03'  nome = 'Sao Caetano do Sul'     estado = 'SP' )
        ( cod = '04'  nome = 'Petropolis'             estado = 'RJ' )
        ( cod = '05'  nome = 'Niteroi'                estado = 'RJ' )
      )
    ).

    write:/ |Cidades do Rio de Janeiro:| .

    LOOP AT t_uf-estados\_cidades[ t_uf-estados[ cod = 'RJ' ] ] INTO DATA(s_cid_rj).
       write:
         / |   { s_cid_rj-nome } |.
    ENDLOOP.


    ULINE.


  ENDMETHOD.







***
***
***
  METHOD tamplates_4 .

    WRITE:/ '*** tamplates_4 - Exemplo c/ LOOP' .
    WRITE:/ '*** Cidades do Rio (com estado)' .


    TYPES:
      BEGIN OF y_cidade,
        cod    TYPE i,
        nome   TYPE char20,
        estado TYPE char2,
      END OF y_cidade,

      y_t_cidade TYPE STANDARD TABLE OF y_cidade
        WITH KEY primary_key COMPONENTS cod,

      BEGIN OF y_estado,
        cod  TYPE char2,
        nome TYPE char20,
      END OF y_estado,

      y_t_estado TYPE STANDARD TABLE OF y_estado
       WITH KEY primary_key COMPONENTS cod,



      BEGIN OF MESH y_uf,
        estados TYPE y_t_estado
         ASSOCIATION _cidades TO cidades
           ON estado = cod,
        cidades TYPE y_t_cidade
         ASSOCIATION _estado TO estados
           ON cod = estado,
      END OF MESH y_uf.



    data(t_uf) = VALUE y_uf(
      estados = VALUE y_t_estado(
        ( cod = 'SP'   nome = 'Sao Paulo' )
        ( cod = 'RJ'   nome = 'Rio de Janeiro' )
      )
      cidades = VALUE y_t_cidade(
        ( cod = '01'  nome = 'Santo Andre'            estado = 'SP' )
        ( cod = '02'  nome = 'Sao Bernardo do Campo'  estado = 'SP' )
        ( cod = '03'  nome = 'Sao Caetano do Sul'     estado = 'SP' )
        ( cod = '04'  nome = 'Petropolis'             estado = 'RJ' )
        ( cod = '05'  nome = 'Niteroi'                estado = 'RJ' )
      )
    ).

    write:/ |Cidades do Rio de Janeiro (com estado):| .

    LOOP AT t_uf-estados\_cidades[ t_uf-estados[ cod = 'RJ' ] ] INTO DATA(s_cid_rj).
       write:
         /  |   { s_cid_rj-nome }, |
         && | { t_uf-cidades\_estado[ s_cid_rj ]-nome } |.
    ENDLOOP.


    ULINE.



  ENDMETHOD.