Telefon/ Fax ändern

Ein kurzes Programm zum Anlegen neuer Telefon-/ Faxnummern oder Änderung.

Beschreibung

Dieser Report Ändert vorhandene Fax-Nummern oder legt einen neuen Eintrag an. Existiert bereits eine Nummer, so wird die neue Nummer zusätzlich angelegt.

Tipp

In gleicher Weise können natürlich auch die Telefonummern, Mail-Adressen, Teletext etc geändert werden. Anstelle von ADFAX in der DATA-Anweisung und im Übergabeparameter TABLE_TYPE müssen dann folgende Werte verwendet werden:

  • ADFAX  Faxnummern
  • ADPAG  Pagernummern
  • ADPRT  PRT-Adressen
  • ADRFC  RFC-Adressen
  • ADRML  RML-Adressen
  • ADSMTP SMTP-Adressen
  • ADSSF  SSF-Adressen
  • ADTEL  Telefonnummern
  • ADTLX  Telexnummern
  • ADTTX  Teletexnummern
  • ADURI  URI-Adressen
  • ADX400 X.400-Adressen

ADDR_SAVE

Anstelle des verwendetes Baustein ADDR_MEMORY_SAVE kann auch der Baustein ADDR_SINGLE_SAVE unter Angabe der Adressnummer verwendet werden. Der Single-Save ist wahrscheinlich sogar am besten, denn wenn man innerhalb einer SAP-Anwendung programmiert (User-Exit, BAdI, …) kann der Memory-Save zu ungewünschten Fehlern führen, da evtl. unvollständige oder kopierte Adressen ebenfalls bereits gespeichert werden.

Code

REPORT  zz_address_fax_number.
*== data
DATA lt_fax         TYPE STANDARD TABLE OF adfax.
DATA ls_fax         TYPE adfax.
FIELD-SYMBOLS <fax> TYPE adfax.
DATA lt_errors      TYPE STANDARD TABLE OF addr_error.

*== selection screen
PARAMETERS p_adrnr TYPE adrc-addrnumber.
PARAMETERS p_faxnr TYPE adfax-fax_number DEFAULT '555 - 1234 556'.
PARAMETERS p_new   AS CHECKBOX. "Create new address / append to existing

*== First read existing numbers
CALL FUNCTION 'ADDR_COMM_GET'
  EXPORTING
    address_number    = p_adrnr
    table_type        = 'ADFAX'
    iv_current_state  = 'X'
  TABLES
    comm_table        = lt_fax
    error_table       = lt_errors
  EXCEPTIONS
    parameter_error   = 1
    address_not_exist = 2
    internal_error    = 3
    OTHERS            = 4.
IF sy-subrc <> 0.
*== also check LT_ERRORS for entries with MSG_TYPE "E"!
  BREAK-POINT.
ENDIF.

*== as there can be warnings in ERROR-table: Clear existing entries
CLEAR lt_errors.

IF lt_fax IS INITIAL OR p_new = 'X'.
*== do not change existing numbers:
  CLEAR lt_fax.
*== ADD the new number
  ls_fax-fax_number = p_faxnr.
  ls_fax-country    = 'DE'.
  ls_fax-updateflag = 'I'.
  APPEND ls_fax TO lt_fax.
ELSE.
  READ TABLE lt_fax ASSIGNING <fax> INDEX 1.
*== CHANGE the existing number
  IF sy-subrc = 0.
    <fax>-fax_number = p_faxnr.
    <fax>-country    = 'DE'.
    <fax>-updateflag = 'U'.
  ENDIF.
ENDIF.

*== set number
CALL FUNCTION 'ADDR_COMM_MAINTAIN'
  EXPORTING
    address_number    = p_adrnr
    language          = sy-langu
    table_type        = 'ADFAX'
    check_address     = 'X'
  TABLES
    comm_table        = lt_fax
    error_table       = lt_errors
  EXCEPTIONS
    parameter_error   = 1
    address_not_exist = 2
    internal_error    = 3
    OTHERS            = 4.
IF sy-subrc <> 0.
*== Also check for LT_ERRORS!!
  BREAK-POINT.
ELSE.
*== Everything okay: Save address
  CALL FUNCTION 'ADDR_MEMORY_SAVE'.
*==> Also ADDR_SINGLE_SAVE is possible!:
*  CALL FUNCTION 'ADDR_SINGLE_SAVE'
*    EXPORTING
*      address_number = p_adrnr.
ENDIF.

Enno Wulff