"
Apoiado por

Constantes gregárias

Se és daqueles que, em vez de usarem constantes, espetam com os valores directamente no código, então pára de ler isto e vai ali para o canto de castigo durante 1 hora que é para aprenderes a não ser mandrião. Quando voltares podes continuar a ler.

Se já voltaste do castigo ou se costumas usar constantes, então faz o favor de continuar a ler.

Imagina o seguinte uso de constantes:


CONSTANTS:
  C_BUKRS_ESPANHA TYPE BUKRS VALUE '1111',
  C_BUKRS_FRANCA   TYPE BUKRS VALUE '2222',
  C_BUKRS_INDIA       TYPE BUKRS VALUE '3333',
  C_MODE_ERRO        TYPE XFELD VALUE 'E',
  C_MODE_INFO         TYPE XFELD VALUE 'I',
  C_MODE_WARN       TYPE XFELD VALUE 'W'.

START-OF-SELECTION.

  CASE l_bukrs.
    WHEN C_BUKRS_ESPANHA.
      txt = 'Hola'.
   WHEN C_BUKRS_FRANCA.
     txt = 'Bonjour'.
   WHEN C_BUKRS_INDIA.
     txt = 'Namaste'.
  ENDCASE.
  WRITE txt.

Como vêem há 2 grupos de constantes que idealmente estariam agrupados e não estão. Podem agrupar-se assim:


CONSTANTS:
  BEGIN OF C_BUKRS,
    ESPANHA TYPE BUKRS VALUE '1111',
    FRANCA TYPE BUKRS VALUE '2222',
    INDIA TYPE BUKRS VALUE '3333',
  END OF C_BUKRS,

  BEGIN OF C_MODE,
    ERRO        TYPE XFELD VALUE 'E',
    INFO         TYPE XFELD VALUE 'I',
    WARN       TYPE XFELD VALUE 'W',
  END OF C_MODE.

START-OF-SELECTION.

  CASE l_bukrs.
    WHEN C_BUKRS-ESPANHA.
      txt = 'Hola'.
   WHEN C_BUKRS-FRANCA.
     txt = 'Bonjour'.
   WHEN C_BUKRS-INDIA.
     txt = 'Namaste'.
  ENDCASE.
  WRITE txt.

Assim a declaração faz muito mais sentido porque as constantes ficam agrupadas logicamente. E a utilização é quase igual. Tão óbvio. E no entanto só há uns dias é que descobri que isto se pode fazer.

Obrigado a suki suk pela foto.

O Abapinho saúda-vos.

2 comentários a “Constantes gregárias”

  1. Custodio Diz:

    Mais uma excelente dica.

    No projeto em que estou trabalhando, costumamos usar uma classe apenas para as constantes, podendo assim reutilizar as constantes em outros programas. Exemplo:

    Na SE24 ou SE80, crie uma classe ZCL_CONSTANTES, definindo como FINAL.

    em atributos, crie:
    C_bukrs_espanha type bukrs_d value ‘1111’
    C_bukrs_franca type bukrs_d value ‘2222’
    C_bukrs_india type bukrs_d value ‘3333’

    todos eles tipo constant e visibilidade public

    no seu programa, use:

    START-OF-SELECTION.

    CASE l_bukrs.
    WHEN zcl_constants=>c_bukrs_ESPANHA.
    txt = ‘Hola’.
    WHEN zcl_constants=>c_bukrs_franca.
    txt = ‘Bonjour’.
    WHEN zcl_constants=>c_bukrs_INDIA.
    txt = ‘Namaste’.
    ENDCASE.
    WRITE txt.

    Pode tb criar uma unica constante estruturada, bastando clicar na seta de entrada direta de dados e declarar a contante como fez no exemplo:
    CONSTANTS:
    BEGIN OF C_BUKRS,
    ESPANHA TYPE BUKRS VALUE ‘1111’,
    FRANCA TYPE BUKRS VALUE ‘2222’,
    INDIA TYPE BUKRS VALUE ‘3333’,
    END OF C_BUKRS.

    no seu programa ficaria:

    START-OF-SELECTION.

    CASE l_bukrs.
    WHEN zcl_constants=>c_bukrs-ESPANHA.
    txt = ‘Hola’.
    WHEN zcl_constants=>c_bukrs-franca.
    txt = ‘Bonjour’.
    WHEN zcl_constants=>c_bukrs-INDIA.
    txt = ‘Namaste’.
    ENDCASE.
    WRITE txt.

  2. admin Diz:

    Olá Custodio, boa ideia, obrigado por partilhares.

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).