Show TOC Anfang des Inhaltsbereichs

Vorgehensweisen Eingangsverarbeitung als Objektmethode definieren  Dokument im Navigationsbaum lokalisieren

Voraussetzungen

Voraussetzung sind die vorangegangenen notwendigen Schritte aus Definition und Verwendung eines Basistyps.

Vorgehensweise

 

  1. Wählen Sie SAP Menü Werkzeuge IDoc-Schnittstelle/ALE Entwicklung ® IDoc ® Eingangsverarbeitung Business Workflow-Entwicklung Business Objekt Builder (SWO1). Geben Sie Ihren Objekttyp ein und wählen Sie Diese Grafik wird im zugehörigen Text erklärtändern.
  2. Definieren Sie eine neue Methode für Ihren Objekttyp. Positionieren Sie dazu auf Methoden und wählen Sie Diese Grafik wird im zugehörigen Text erklärt.
  3. Wenn Sie einen Funktionsbaustein als technische Realisierung Ihrer Methode geschrieben haben, dann geben Sie ihn als Vorlage ein. Benennen Sie die Methode und sichern Sie.

Bei synchronen Methoden brauchen Sie kein Ereignis zu definieren, mit dem sich die Methode zurückmeldet.

  1. Positionieren Sie auf Ihre neue Methode und wählen Programm.
  2. Programmieren Sie Ihre Verarbeitung.
  3. Sichern Sie den Programmcode und verlassen Sie den ABAP Editor (Diese Grafik wird im zugehörigen Text erklärt).
  4. Ändern Sie im Business Object Builder den Freigabestatus der Methode auf implementiert: Positionieren Sie auf Ihre Methode und wählen Sie Bearbeiten Freigabestatus ändern Objekttypkomponente in implementiert.
  5. Wählen Sie Diese Grafik wird im zugehörigen Text erklärt.

Ergebnis

Sie haben eine Methode durch ein konkretes ABAP-Programm realisiert. Sie müssen noch eine Aufgabe anlegen, die diese Methode und den zugehörigen Objekttyp referenziert.

Beispiel

Im Fallbeispiel definieren Sie die synchrone, dialogfreie Methode InputBackgroundTest für Ihren Objekttyp IDOCTEST. Der Quelltext lautet:

INCLUDE <OBJECT>.  " Workflow-Makros zur Objektdefinition
begin_data object. " Do not change.. DATA is generated
* only private members may be inserted into structure private
data:
" begin of private,
"   to declare private attributes remove comments and
"   insert private attributes here...
" end of private,
  begin of key,
      idocnumber like edidc-docnum,
  end of key.
end_data object. " Do not change.. DATA is generated
...
BEGIN_METHOD inputBackgroundTest changing container.
CALL FUNCTION 'IDOC_INPUT_WF_TESTER'
  EXPORTING idocnumber = object-key-idocnumber
  EXCEPTIONS
    OTHERS = 01.
END_METHOD.

Der übergebene Parameter ist idocnumber, den der Objekttyp IDOCTEST vom Supertyp IDOCAPPL als Schlüsselfeld geerbt hat.

Den Funktionsbaustein IDOC_INPUT_WF_TESTER legen Sie per Vorwärtsnavigation (Doppelklick) an. Er liest die Daten aus dem IDoc und erzeugt ein Ereignis im Fehlerfall (durch Aufruf des Funktionsbausteins SWE_EVENT_CREATE). In der FORM-Routine READ_IDOC_TESTER sehen Sie, wie Daten aus einer IDoc-Tabelle über Segmentstrukturen  in Anwendungstabellen wandern.

Achtung

Im folgenden Quelltext wird öfters auf das Analogon beim direkten Eingang verwiesen (Beispiel IDOC_INPUT_TESTER), jedoch nur aus Platzgründen, da man ja entweder den direkten oder den Workflow-Eingang wählt.

Verwaltungsparameter von IDOC_INPUT_WF_TESTER

Anwendungskürzel

V (Vertrieb)

Ablaufart

normal, Start sofort

Beispiel

FUNCTION IDOC_INPUT_WF_TESTER.
*---------------------------------------------------------
*Globale Schnittstelle: 
* IMPORTING  idocnumber LIKE EDIDC-DOCNUM
*---------------------------------------------------------

INCLUDE <CNTN01>.  " Workflow-Makros zur Containerdefinition
DATA: 
i_edids LIKE edi_ds OCCURS 1 WITH HEADER LINE,

event_id like swedumevid-evtid,
status like edids-status,
cidocnumber like sweinstcou-objkey,

errorcode like sy-subrc.         "Für Test der Ausnahmebehandlung
swc_container       ev_container.

* initialize SET/GET parameters and internal tables
PERFORM INITIALIZE_ORGANIZATIONAL_DATA.

CALL FUNCTION 'EDI_DOCUMENT_OPEN_FOR_PROCESS'
     EXPORTING
       document_number = idocnumber
     IMPORTING
          idoc_control             = idoc_contrl
     EXCEPTIONS
          document_foreign_lock    = 01
          document_not_exist       = 02
          document_number_invalid  = 03
          document_is_already_open = 04.

CALL FUNCTION 'EDI_SEGMENTS_GET_ALL'
     EXPORTING
          document_number         = idocnumber
     TABLES
          idoc_containers         = idoc_data
     EXCEPTIONS
          document_number_invalid = 01
          end_of_document         = 02.

PERFORM READ_IDOC_TESTER.

PERFORM CALL_VA01_IDOC_ORDERS
            using errorcode.

PERFORM WRITE_STATUS_RECORD TABLES i_edids   "Status schreiben
   USING errorcode.

CALL FUNCTION 'EDI_DOCUMENT_CLOSE_PROCESS'
     EXPORTING
          document_number     = idocnumber
     IMPORTING
          idoc_control        = idoc_contrl
     EXCEPTIONS
          document_not_open   = 01
          failure_in_db_write = 02
          parameter_error     = 03
          status_set_missing  = 04.
IF errorcode <> 0.
  cidocnumber = idocnumber.
  CALL FUNCTION 'SWE_EVENT_CREATE'
       EXPORTING
            objtype              = 'IDOCTEST'
            objkey               = cidocnumber
            event                = 'InputErrorOccurred'
            start_recfb_synchron = 'X'       "synchroner Aufruf
       IMPORTING
            event_id             = event_id
       TABLES
            event_container      = ev_container
       EXCEPTIONS
            objtype_not_found    = 1
            others               = 2.
  COMMIT WORK.
ENDIF.
ENDFUNCTION.

FORM INITIALIZE_ORGANIZATIONAL_DATA
...
* Formroutine wie im Abschnitt 
Funktionsbaustein anlegen (direkter Eingang)

ENDFORM.                    
" INITIALIZE_ORGANIZATIONAL_DATA

FORM READ_IDOC_TESTER.
...
* Formroutine und aufgerufene Routinen wie im Abschnitt 
Funktionsbaustein anlegen (direkter Eingang)

ENDFORM.                    
" READ_IDOC_TESTER


FORM CALL_VA01_IDOC_ORDERS using errorcode.

* call transaction first dynpro
  PERFORM DYNPRO_START.
* call transaction double-line entry
  PERFORM DYNPRO_DETAIL2.
* incoterms
  PERFORM DYNPRO_HEAD_300.
* call transaction item datas
  PERFORM DYNPRO_POSITION.
  PERFORM DYNPRO_SET USING 'BDC_OKCODE' 'SICH'.
* call transaction VA01
 CALL TRANSACTION 'VA01' USING    BDCDATA
                         MODE     'N'
                         UPDATE   'S'
                         MESSAGES INTO XBDCMSGCOLL.

errorcode = SY-SUBRC.       " remember returncode for status update

ENDFORM.                    " CALL_VA01_IDOC_ORDERS

FORM DYNPRO_START.
...
* Formroutine und aufgerufene Routinen wie im Abschnitt 
Funktionsbaustein anlegen (direkter Eingang)

ENDFORM.                    
" DYNPRO_START


FORM WRITE_STATUS_RECORD TABLES i_edids STRUCTURE edi_ds
USING errorcode.

* fill status record
 I_EDIDS-DOCNUM = IDOC_CONTRL-DOCNUM.
 I_EDIDS-LOGDAT = SY-DATUM.
 IF errorcode = 0.
   I_EDIDS-STATUS = BELEG_GEBUCHT.                 "value 53
   GET PARAMETER ID 'AUN' FIELD BELEGNUMMER.
   I_EDIDS-STAMID = 'V1'.
   I_EDIDS-STAMNO = '311'.
   I_EDIDS-STAPA1 = 'Terminauftrag'.
   I_EDIDS-STAPA2 = BELEGNUMMER.
 ELSE.
I_EDIDS-STATUS = BELEG_NICHT_GEBUCHT.               "value 51
    I_EDIDS-STAMID = SY-MSGID.
    I_EDIDS-STAMNO = SY-MSGNO.
    I_EDIDS-STAPA1 = SY-MSGV1.
    I_EDIDS-STAPA2 = SY-MSGV2.
    I_EDIDS-STAPA3 = SY-MSGV3.
    I_EDIDS-STAPA4 = SY-MSGV4.
  ENDIF.

CALL FUNCTION 'EDI_DOCUMENT_STATUS_SET'
EXPORTING
          document_number         = idoc_contrl-docnum
          idoc_status             = i_edids
     IMPORTING
          idoc_control            = idoc_contrl
     EXCEPTIONS
          document_number_invalid = 01
          other_fields_invalid    = 02
          status_invalid          = 03.
ENDFORM.                               " WRITE_STATUS_RECORD

Globale Daten von IDOC_INPUT_WF_TESTER
data:
idoc_data LIKE edidd occurs 10 WITH HEADER LINE,
idoc_contrl LIKE edidc occurs 1 WITH HEADER LINE.
* weitere Daten wie im Abschnitt 
Funktionsbaustein anlegen (direkter Eingang)

 

 

Ende des Inhaltsbereichs