Show TOC

ProzessFunktionsbaustein anlegen (Ausgang unter NAST) Dieses Dokument in der Navigationsstruktur finden

 

Sie legen einen Funktionsbaustein an, der vom Report RSNASTED (Formroutine NEW_DYN_PERFORM) aus über einen neuen Vorgangscode identifiziert wird. Dieser Funktionsbaustein füllt den neuen Basistyp mit Anwendungsdaten. RSNASTED selbst steht in der Tabelle TNAPR als EDI-Verarbeitungsprogramm. Die Nachrichtensteuerung liest diese Tabelle und kann dadurch RSNASTED aufrufen.

Prozess

  1. Legen Sie im Function Builder einen neuen Funktionsbaustein an.

  2. Legen Sie die Segmente als globale Daten in Ihrer Funktionsgruppe an. Ihr Funktionsbaustein muss die Anwendungsdaten aus den Anwendungstabellen in die entsprechenden Segmente überführen.

  3. Aktivieren Sie Ihren Funktionsbaustein: Wählen Sie dazu im Einstiegsbild des Function Builder Aktivieren (Aktivieren).

    Beispiel Beispiel

    Im Fallbeispiel heißt Ihr neuer Funktionsbaustein IDOC_OUTPUT_TESTER. Er verwendet die neue Schnittstelle (ab Release 3.0), d.h. er stellt die Anwendungsdaten in eine interne Tabelle. Außerdem wird der Weg ohne die ALE-Schicht (also ohne Filtern) gewählt.

    Ihr Funktionsbaustein wird wie IDOC_OUTPUT_ORDERS (IDoc-Typ ORDERS01) aus dem Einkauf (Bestellung anlegen) aufgerufen. Er füllt daher auch die Segmente Ihres neuen IDoc-Typs aus ein Einkaufstabellen, nämlich EKKO und EKPO (Einkaufsbelegkopf und -position). Beachten Sie, dass keine realistische Bestellung simuliert, sondern nur dargelegt werden soll, wie Daten aus Anwendungstabellen über Segmentstrukturen schließlich in eine IDoc-Tabelle wandern. Dazu beachten Sie die Formroutinen HEADER_E1HEAD_FILL oder POSITION_E1ITEM_FILL.

    Ende des Beispiels.
Verwaltungsparameter von IDOC_OUTPUT_TESTER

Anwendungskürzel

M (Materialwirtschaft)

Ablaufart

normal, Start sofort

Schnittstelle von IDOC_OUTPUT_TESTER

Formalparameter

Bezugsstruktur

Erläuterung

Importparameter

OBJECT

NAST

aktueller NAST-Satz

CONTROL_RECORD_IN

EDIDC

enthält die Empfängerinformation

Exportparameter

OBJECT_TYPE

WFAS1-ASGTP

Objekttyp für das Anwendungsobjekt im Business Object Repository (BOR)

CONTROL_RECORD_OUT

EDIDC

enthält die Senderinformation sowie Datum und Uhrzeit, zu dem die IDoc-Tabelle gefüllt wurde.

Tabelle

INT_EDIDD

EDIDD

Interne Tabelle der IDoc-Datensätze

Beispiel

Syntax Syntax

  1. FUNCTION IDOC_OUTPUT_TESTER.
    *"------------------------------------------------------------------
    *"*"Globale Schnittstelle:
    *"       IMPORTING
    *"             VALUE(OBJECT) LIKE NAST STRUCTURE NAST
    *"             VALUE(CONTROL_RECORD_IN) LIKE EDIDC STRUCTURE EDIDC
    *"       EXPORTING
    *"             VALUE(OBJECT_TYPE) LIKE WFAS1-ASGTP
    *"             VALUE(CONTROL_RECORD_OUT) LIKE EDIDC STRUCTURE EDIDC
    *"       TABLES
    *"             INT_EDIDD STRUCTURE EDIDD
    *"       EXCEPTIONS
    *"             ERROR_MESSAGE_RECEIVED
    *"-------------------------------------------------------------------
    
      CLEAR CONTROL_RECORD_OUT.
    * fill help fields
      H_KAPPL = OBJECT-KAPPL.
      H_EBELN = OBJECT-OBJKY.
      H_PARVW = OBJECT-PARVW.
    * fill control record
      MOVE CONTROL_RECORD_IN TO CONTROL_RECORD_OUT.
      CONTROL_RECORD_OUT-DIRECT = '1'.
      CONTROL_RECORD_OUT-SERIAL = SY-DATUM.
      CONTROL_RECORD_OUT-SERIAL+8 = SY-UZEIT.
    * read orders
      PERFORM ORDERS_READ.
    * fill idoc table
      PERFORM IDOC_TABLE_FILL.
    * provide object type
      OBJECT_TYPE = 'BUS2012'.
    
    ENDFUNCTION.
    
    
    FORM ORDERS_READ.
    
      SELECT SINGLE * FROM T000 WHERE MANDT EQ SY-MANDT.
    
    * read header data
      SELECT SINGLE * FROM EKKO WHERE EBELN EQ H_EBELN.
      IF SY-SUBRC NE 0.
        MESSAGE E751 WITH H_EBELN.
      ENDIF.
    
      EDIDC-SNDPRT = 'MM'.
      EDIDC-SNDPRN = EKKO-EKORG.
    
    * read data of supplier (book keeping view)
      SELECT SINGLE * FROM LFB1 WHERE LIFNR = EKKO-LIFNR
                                   AND BUKRS = EKKO-BUKRS.
    * fill purchasing organization
      IF LFB1-EIKTO EQ SPACE.
        LFB1-EIKTO = EKKO-EKORG.
      ENDIF.
    * read position data
      SELECT * FROM EKPO WHERE EBELN = EKKO-EBELN.
        MOVE-CORRESPONDING EKPO TO XEKPO.
        APPEND XEKPO.
      ENDSELECT.
    
    * read schedule lines
    
      SELECT * FROM EKET WHERE EBELN = EKKO-EBELN.
      ENDSELECT.
    
    ENDFORM.                               " ORDERS_READ
    
    
    FORM IDOC_TABLE_FILL.
    
    * header data
      PERFORM HEADER_E1HEAD_FILL.
    * data in position
      PERFORM POSITION_E1ITEM_FILL.
    
    ENDFORM.                                " IDOC_TABLE_FILL
    
    
    FORM HEADER_E1HEAD_FILL.
    
      CLEAR INT_EDIDD.
      CLEAR E1HEAD.
      INT_EDIDD-SEGNAM = 'E1HEAD'.
    
    * fill fields
    * document number
      E1HEAD-BELNR = EKKO-EBELN.
    
    * Die folgenden Konstanten (Zuordnung Kunde/Lieferant zur 
    * Verkaufsorganisation) werden nur in die Segmente geschrieben, damit
    * im Fallbeispiel die nachfolgende Eingangsverarbeitung im SD
    * funktioniert. Beim „reellen" Terminauftrag im SD Eingang pflegt man
    * hierzu Customizing-Tabellen, oder die Zuordnung wird vom
    * EDI-Subsystem übernommen.
    
    * sales organization (not supplied -> constant)
        E1HEAD-VKORG = '1000'.
    * distribution channel (not supplied -> constant)
        E1HEAD-VTWEG = '10'.
    * division (not supplied -> constant)
        E1HEAD-SPART = '00'.
      ENDSELECT.
    * order type
    E1HEAD-AUART = 'NB'.
    * date of delivery
      IF EKET-EINDT NE 0.
        E1HEAD-WLDAT = EKET-EINDT.
      ELSE.
        E1HEAD-WLDAT = SY-DATUM + 21.
      ENDIF.
      CONDENSE E1HEAD-WLDAT.
    * ordering party / sold to party (AG)
      E1HEAD-AUGEB = LFB1-EIKTO.
    * supplier
      E1HEAD-LIEF = EKKO-LIFNR.
    * order date
      E1HEAD-BSTDK = EKKO-BEDAT.
      CONDENSE E1HEAD-BSTDK.
    * order time
      E1HEAD-BELUZT = SY-UZEIT.
    
    * move data to segment area of data record
      MOVE E1HEAD TO INT_EDIDD-SDATA.
    * append data record to internal table
      APPEND INT_EDIDD.
    
    * customer function in order to change header segment
      CALL CUSTOMER-FUNCTION '001'
           EXPORTING
                PI_EKKO = EKKO
           IMPORTING
                PE_EKKO = EKKO
           TABLES
                PT_IDOC_DATA_RECORDS = INT_EDIDD.
    
    ENDFORM.                               " HEADER_E1HEAD_FILL
    
    
    FORM POSITION_E1ITEM_FILL.
    
    * loop at positions
      LOOP AT XEKPO.
    
        CLEAR INT_EDIDD.
        CLEAR E1ITEM.
        INT_EDIDD-SEGNAM = 'E1ITEM'.
        MOVE XEKPO TO EKPO.
    
    * fill fields
    * position number
        E1ITEM-POSEX = EKPO-EBELP.
        CONDENSE E1ITEM-POSEX.
    
    * material number
        IF EKPO-MATNR NE SPACE.
           E1ITEM-MATNR = EKPO-MATNR.
        ENDIF.
    
    * amount
        E1ITEM-MENGE = EKPO-MENGE.
        CONDENSE E1ITEM-MENGE.
    * unit
        PERFORM ISO_CODE_UNIT USING EKPO-MEINS.
        E1ITEM-BMEINH = EKPO-MEINS.
    * material number of supplier
        IF EKPO-IDNLF NE SPACE.
           E1ITEM-LMATNR = EKPO-IDNLF.
        ENDIF.
    
    * move data to segment area of data record
        MOVE E1ITEM TO INT_EDIDD-SDATA.
    * append data record to internal table
        APPEND INT_EDIDD.
    
    * customer function for position segment
      CALL CUSTOMER-FUNCTION '002'
           EXPORTING
                PI_EKPO              = EKPO
           IMPORTING
                PE_EKPO              = EKPO
           TABLES
                PT_IDOC_DATA_RECORDS = INT_EDIDD.
    
    ENDFORM.                               " HEADER_E1HEAD_FILL
    
      ENDLOOP.
    
    ENDFORM.                                " POSITION_E1ITEM_FILL
    
    
    FORM ISO_CODE_UNIT USING ICU_UNIT.
    
      CHECK ICU_UNIT NE SPACE.
      CALL FUNCTION 'UNIT_OF_MEASURE_SAP_TO_ISO'
           EXPORTING
                SAP_CODE    = ICU_UNIT
           IMPORTING
                ISO_CODE    = ISO_UNIT
           EXCEPTIONS
                NOT_FOUND   = 01
                NO_ISO_CODE = 02.
    
      IF SY-SUBRC NE 0.
        MESSAGE I764 WITH EKPO-EBELP ICU_UNIT.
      ENDIF.
      MOVE ISO_UNIT TO ICU_UNIT.
    
    ENDFORM.                                " ISO_CODE_UNIT
    
Ende des Codes

Achtung Achtung

Beachten Sie, dass im Verwaltungsteil das Feld HLEVEL (Hierarchieebene des Segmentes) nicht gefüllt wird. Das übernimmt die IDoc-Schnittstelle, die den entsprechenden Wert aus der Definition des IDoc-Typs TESTER01 bekommt.

Beachten Sie auch, dass im Feld INT_EDIDD-SEGNAM die Segmente groß geschrieben werden müssen. Sonst meldet die IDoc-Schnittstelle einen Syntaxfehler.

Ende der Warnung.
Globale Daten von IDOC_OUTPUT_TESTER

Syntax Syntax

  1. *- Tabellen ------------------------------------------------------*
    TABLES:
            EKPO,
            EKET,
            LFB1,
            EDIDC,
            E1HEAD,
            E1ITEM,
            T000,
            EDSDC.
    * help fields
    DATA:
            H_EBELN LIKE EKKO-EBELN,
            H_KAPPL LIKE NAST-KAPPL,
            H_PARVW LIKE EKPA-PARVW.
    * iso codes
    DATA:
            ISO_UNIT LIKE T006-ISOCODE.
    
    TYPE-POOLS ISOC.
    *- Direktwerte für Return_variables ---------------------------------
    DATA: 
    EID LIKE BDWFRETVAR-WF_PARAM VALUE 'Error_IDOCs',
            PID LIKE BDWFRETVAR-WF_PARAM VALUE 'Processed_IDOCs',
            APO LIKE BDWFRETVAR-WF_PARAM VALUE 'Appl_Objects',
            APE LIKE BDWFRETVAR-WF_PARAM VALUE 'Appl_Object'.
    
    *- Hilfsfelder für Änderungsbeleg ----------------------------------*
      INCLUDE FM06ECDT.
    
    *- Common-Part für Änderungsbeleg ----------------------------------*
      INCLUDE FM06LCCD.
    
    *- Direktwerte -----------------------------------------------------*
      INCLUDE FMMEXDIR.
    
Ende des Codes