Conteúdo

Alterar valores de um domínio


NÃO É ESSE DOMÍNIO QUE ESTAMOS FALANDO SEU ANIMAL!!! KKKKK

Caramba!!! Que Ogro!!!

Bom, a primeira pergunta é... Porquê e quando vou utilizar isto? Vcs devem me achar louco né? Acertaram! Eu sou =)

Mas pensa comigo... Você tem um relatório ou uma SM30, e tem um campo que precisa de matchcode, MAS os valores deste campo são variáveis.

Pensou já? Qual seria sua solução?

TEEEEEEMPO......
...
...
...

Ok vai, vou te ajudar...

Primeiro, sua tabela precisa ter um campo que referencie um elemento de dados com domínio. Pelamor de Deus, ELEMENTO E DOMÍNIO Z. Nada de sair alterando standard heim Zé!

Ok... Vamos chamar a tabela de ZSAPEIROS e o domínio de ZDSAPEIROS neste exemplo.

REPORT ZSAPeiros.

* Declaração de tabelas e estruturas
DATA:
  w_dd01v TYPE          dd01v, "Cabeçalho do domínio
  t_dd07v TYPE TABLE OF dd07v, "ïtens do domínio
  w_dd07v TYPE          dd07v. "ïtens do domínio

* Elimina dados do elemento
CALL FUNCTION 'DD_DOMA_DEL'
  EXPORTING
    domname   = 'ZDSAPEIROS'
    del_state = 'M'
    prid      = 0.

* Popula o cabeçalho do domínio
w_dd01v-domname        = 'ZDSAPEIROS'.
w_dd01v-ddlanguage     = sy-langu.
w_dd01v-datatype       = 'CHAR'.
w_dd01v-leng           = '10'.
w_dd01v-valexi         = 'X'.
w_dd01v-ddtext         = 'SAPeiros'.
w_dd01v-as4user        = sy-uname.

* Popula os ítens do domínio
DO 10 TIMES.

  w_dd07v-domname     = 'ZDSAPEIROS'.
  w_dd07v-valpos      = sy-index.
  w_dd07v-ddlanguage  = 'PT'.
  w_dd07v-domvalue_l  = sy-index.
  CONDENSE w_dd07v-domvalue_l NO-GAPS.
  CONCATENATE 'Sapeiros' w_dd07v-domvalue_l
         INTO w_dd07v-ddtext SEPARATED BY space.

  APPEND w_dd07v TO t_dd07v.
  CLEAR w_dd07v.

ENDDO.

* Atualiza o domínio
CALL FUNCTION 'DD_DOMA_PUT'
  EXPORTING
    dd01v_wa            = w_dd01v
    domain_name         = 'ZDSAPEIROS'
    prid                = '0'
    ctrl_doma_put       = 'N'
  TABLES
    dd07v_tab           = t_dd07v
  EXCEPTIONS
    illegal_value       = 1
    op_failure          = 2
    object_inconsistent = 3
    OTHERS              = 4.

IF sy-subrc IS INITIAL.

* Se atualizou, ativa o domínio
  CALL FUNCTION 'DD_DOMA_ACTIVATE'
    EXPORTING
      doma_name = 'ZDSAPEIROS'
      auth_chk  = ''
      prid      = 0.

ELSE.

* Se não atualizou, elimina os dados do domínio
  CALL FUNCTION 'DD_DOMA_DEL'
    EXPORTING
      domname   = 'ZDSAPEIROS'
      del_state = 'M'
      prid      = 0.

ENDIF.

Iae? Vai lá no seu relatório ou até mesmo na tabela e da uma olhadinha no campo.