domingo, 30 de septiembre de 2012

SAVE_TEXT y CREATE_TEXT


Ejemplo de utilización de grabación de texto standard, si ya existe el texto utiliza la función save_text para modificarlo, si no existe utiliza la función create_text para crearlo.

FORM f_guarda_comentarios.
  DATA: u_line   TYPE STANDARD TABLE OF tline,
        u_line_aux TYPE STANDARD TABLE OF tline,
        x_line   TYPE tline,
        x_text   TYPE tp_text,
        x_header TYPE thead,
        w_name   TYPE tdobname.
  CHECK NOT t_text[] IS INITIAL.
  REFRESH u_line.
  LOOP AT t_text INTO x_text.
    CLEAR x_line.
    x_line-tdline = x_text-line.
    APPEND x_line TO u_line.
  ENDLOOP.

  CHECK NOT u_line[] IS INITIAL.
  CHECK NOT v_vbeln IS INITIAL.

* Busca si ya existe el texto
  w_name = v_vbeln.

* Rescata comentarios
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      id                      = '0002'
      language                = 'S'
      name                    = w_name
      object                  = 'VBBK'
    TABLES
      lines                   = u_line_aux
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      OTHERS                  = 8.
  IF sy-subrc NE 0.
* Crea texto
    CALL FUNCTION 'CREATE_TEXT'
      EXPORTING
        fid       = '0002'
        flanguage = sy-langu
        fname     = w_name
        fobject   = 'VBBK'
      TABLES
        flines    = u_line
      EXCEPTIONS
        no_init   = 1
        no_save   = 2
        OTHERS    = 3.
    IF sy-subrc NE 0.
      EXIT.
    ENDIF.
  ELSE.
    CLEAR x_header.
    x_header-tdname = w_name.
    x_header-tdid = '0002'.
    x_header-tdspras = sy-langu.
    x_header-tdobject = 'VBBK'.
    x_header-mandt = sy-mandt.

* Guarda texto
    CALL FUNCTION 'SAVE_TEXT'
      EXPORTING
        client   = sy-mandt
        header   = x_header
        savemode_direct = 'X'
      TABLES
        lines    = u_line
      EXCEPTIONS
        id       = 1
        language = 2
        name     = 3
        object   = 4
        OTHERS   = 5.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
  ENDIF.
  CALL FUNCTION 'COMMIT_TEXT'.
ENDFORM.                    " F_GUARDA_COMENTARIOS