Show TOC

VorgehensweiseEingangsverarbeitung als Objektmethode definieren Dieses Dokument in der Navigationsstruktur finden

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 Ändern (Ändern).

  2. Definieren Sie eine neue Methode für Ihren Objekttyp. Positionieren Sie dazu auf Methoden und wählen Sie Anlegen (Anlegen).

  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.

  4. Positionieren Sie auf Ihre neue Methode und wählen Programm.

  5. Programmieren Sie Ihre Verarbeitung.

  6. Sichern Sie den Programmcode und verlassen Sie den ABAP Editor ().

  7. Ä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.

  8. Wählen Sie .

Ergebnis

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 Beispiel

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

Ende des Beispiels.

Syntax Syntax

  1. 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.
    
    
Ende des Quelltextes.

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 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.

Ende der Warnung.
Verwaltungsparameter von IDOC_INPUT_WF_TESTER

Anwendungskürzel

V (Vertrieb)

Ablaufart

normal, Start sofort

Beispiel

Syntax Syntax

  1. FUNCTION IDOC_INPUT_WF_TESTER. 
    *--------------------------------------------------------- 
    *Globale Schnittstelle:  
    * IMPORTING  idocnumber LIKE EDIDC-DOCNUM 
    *--------------------------------------------------------- 
    
    INCLUDE <CNTNO1>.  " 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 Quelltextes.