Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Sample Outbound Function Module for IDocs

Former Member
0 Likes
2,145

Hello All,

Does anyone have sample code for an outbound function module for an IDoc - they created themselves. Custom or extended? Weblogs, sample code will be useful

ty, dd

Message was edited by:

Demi Douglas

4 REPLIES 4
Read only

Former Member
0 Likes
757

Hi,

EDIFCT is the table for different Function module assignements.

Regards,

Satish

Read only

Former Member
0 Likes
757

Hi,

Go To SE37 and enter 'MASTERIDOC_DISTRIBUTE' and then search for where used list, you can find lot of places where it is used and selection some Z* report or function module to examine the same.

Regards,

Baburaj

Read only

Former Member
0 Likes
757

Demi,

Check this simple code

REPORT  Y_TEST_IDOC_TO_FILE.

 data:     lit_edictrl   type standard table of edidc,
 lit_edidata   type standard table of edidd.
data: lwa_edictrl like line of lit_edictrl,
      lwa_Z1EXTXI type Z1EXTXI,
      lwa_edidata like line of lit_edidata.


* Populate IDoc control record
  lwa_edictrl-mestyp     = 'Z_EXT_TEST'.
  lwa_edictrl-idoctp     = 'Z_EXT_TEST'.
  lwa_edictrl-rcvprn     = 'XID010'.
  lwa_edictrl-rcvprt     = 'LS'.


 lwa_Z1EXTXI-guid = '12345'.
 lwa_Z1EXTXI-count = '100'.
 lwa_edidata-segnam = 'Z1EXTXI'.
 lwa_edidata-sdata      = lwa_Z1EXTXI.
 append lwa_edidata    to lit_edidata.

call function 'MASTER_IDOC_DISTRIBUTE'
      exporting
        master_idoc_control            = lwa_edictrl
      tables
        communication_idoc_control     = lit_edictrl
        master_idoc_data               = lit_edidata
      exceptions
        error_in_idoc_control          = 1
        error_writing_idoc_status      = 2
        error_in_idoc_data             = 3
        sending_logical_system_unknown = 4
        others                         = 5.

if sy-subrc eq 0.
    commit work and wait.
endif.

Regards,

Satish

Read only

Former Member
0 Likes
757

Hi,

Check this program:

REPORT zmatmas_idoc.

INCLUDE zmatmas_idoc_top.

INCLUDE zmatmas_idoc_selscreen.

INCLUDE zmatmas_idoc_formroutine.

&----


  • START OF SELECTION

&----


START-OF-SELECTION.

PERFORM get_data.

PERFORM create_idoc.

PERFORM distribute_idoc.

----


  • TABLES

----


TABLES: mara.

----


  • Structures

----


*Header

TYPES: BEGIN OF gs_h_mara,

matnr TYPE mara-matnr,

ersda TYPE mara-ersda,

ernam TYPE mara-ernam,

laeda TYPE mara-laeda,

aenam TYPE mara-aenam,

pstat TYPE mara-pstat,

END OF gs_h_mara.

*Item

TYPES: BEGIN OF gs_i_makt,

spras TYPE makt-spras,

maktx TYPE makt-maktx,

maktg TYPE makt-maktg,

matnr TYPE makt-matnr,

END OF gs_i_makt.

TYPES: BEGIN OF gs_i_mbew,

lvorm TYPE mbew-lvorm,

lbkum TYPE mbew-lbkum,

salk3 TYPE mbew-salk3,

vprsv TYPE mbew-vprsv,

verpr TYPE mbew-verpr,

stprs TYPE mbew-stprs,

peinh TYPE mbew-peinh,

matnr TYPE mbew-matnr,

END OF gs_i_mbew.

TYPES: BEGIN OF gs_i_mvke,

vkorg TYPE mvke-vkorg,

vtweg TYPE mvke-vtweg,

lvorm TYPE mvke-lvorm,

versg TYPE mvke-versg,

bonus TYPE mvke-bonus,

provg TYPE mvke-provg,

matnr TYPE mvke-matnr,

END OF gs_i_mvke.

TYPES: BEGIN OF gs_i_mlan,

aland TYPE mlan-aland,

taxm1 TYPE mlan-taxm1,

taxm2 TYPE mlan-taxm2,

taxm3 TYPE mlan-taxm3,

taxm4 TYPE mlan-taxm4,

matnr TYPE mlan-matnr,

END OF gs_i_mlan.

*Segment & control record

DATA: gs_segment_h LIKE zmara_h,

gs_segment_i1 LIKE zmakt_i,

gs_segment_i2 LIKE zmbew_i,

gs_segment_i3 LIKE zmvke_i,

gs_segment_i4 LIKE zmlan_i,

gs_control_rec LIKE edidc.

----


  • Internal Table and work area

----


*Header & Item

DATA: gt_h_mara TYPE STANDARD TABLE OF gs_h_mara,

gt_i_makt TYPE STANDARD TABLE OF gs_i_makt,

gt_i_mbew TYPE STANDARD TABLE OF gs_i_mbew,

gt_i_mvke TYPE STANDARD TABLE OF gs_i_mvke,

gt_i_mlan TYPE STANDARD TABLE OF gs_i_mlan.

DATA: gw_h_mara TYPE gs_h_mara,

gw_i_makt TYPE gs_i_makt,

gw_i_mbew TYPE gs_i_mbew,

gw_i_mvke TYPE gs_i_mvke,

gw_i_mlan TYPE gs_i_mlan.

*EDIDD & EDIDC

DATA: gt_edidc LIKE TABLE OF edidc WITH HEADER LINE,

gt_edidd LIKE TABLE OF edidd WITH HEADER LINE.

----


  • SELECTION SCREEN

----


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.

SELECT-OPTIONS: s_matnr FOR mara-matnr OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.

&----


*& Include ZMATMAS_IDOC_FORMROUTINE

&----


&----


*& Form get_data

&----


FORM get_data .

SELECT matnr ersda ernam laeda aenam pstat

FROM mara

INTO TABLE gt_h_mara

WHERE matnr IN s_matnr.

IF sy-subrc <> 0.

MESSAGE e003(zkaren_msgclass).

  • No data found according to the selection criteria

ENDIF.

IF gt_h_mara IS NOT INITIAL.

SELECT spras maktx maktg matnr

INTO TABLE gt_i_makt

FROM makt

FOR ALL ENTRIES IN gt_h_mara WHERE matnr = gt_h_mara-matnr.

SELECT lvorm lbkum salk3 vprsv verpr stprs peinh matnr

INTO TABLE gt_i_mbew

FROM mbew

FOR ALL ENTRIES IN gt_h_mara WHERE matnr = gt_h_mara-matnr.

SELECT vkorg vtweg lvorm versg bonus provg matnr

INTO TABLE gt_i_mvke

FROM mvke

FOR ALL ENTRIES IN gt_h_mara WHERE matnr = gt_h_mara-matnr.

SELECT aland taxm1 taxm2 taxm3 taxm4 matnr

INTO TABLE gt_i_mlan

FROM mlan

FOR ALL ENTRIES IN gt_h_mara WHERE matnr = gt_h_mara-matnr.

ENDIF.

ENDFORM. " get_data

&----


*& Form create_idoc

&----


FORM create_idoc .

*Control data

gs_control_rec-mestyp = 'ZKAR_MATMAS_MSG_TYPE'. "Message type

gs_control_rec-idoctp = 'ZKAR_MATMAS'. "IDoc

gs_control_rec-rcvprt = 'LS'. "Partner type of receiver

gs_control_rec-rcvprn = 'T90CLNT810'. "Partner number of receiver

LOOP AT gt_h_mara INTO gw_h_mara .

*Header data.

gs_segment_h-matnr = gw_h_mara-matnr.

gs_segment_h-ersda = gw_h_mara-ersda.

gs_segment_h-ernam = gw_h_mara-ernam.

gs_segment_h-laeda = gw_h_mara-laeda.

gs_segment_h-aenam = gw_h_mara-aenam.

gs_segment_h-pstat = gw_h_mara-pstat.

*Header segment

gt_edidd-segnam = 'ZMARA_H'.

gt_edidd-sdata = gs_segment_h.

MOVE gt_edidd-sdata TO gs_segment_h.

APPEND gt_edidd.

WRITE:/ gs_segment_h-matnr, gs_segment_h-ersda, gs_segment_h-ernam,

gs_segment_h-laeda, gs_segment_h-aenam, gs_segment_h-pstat.

*ITEM 1

LOOP AT gt_i_makt INTO gw_i_makt.

IF gw_i_makt-matnr = gw_h_mara-matnr.

*Item data

gs_segment_i1-spras = gw_i_makt-spras.

gs_segment_i1-maktx = gw_i_makt-maktx.

gs_segment_i1-maktg = gw_i_makt-maktg.

*Item segment

gt_edidd-segnam = 'ZMAKT_I'.

gt_edidd-sdata = gs_segment_i1.

APPEND gt_edidd.

ENDIF.

ENDLOOP. "at gt_i_vbak

*ITEM2

LOOP AT gt_i_mbew INTO gw_i_mbew.

IF gw_i_mbew-matnr = gw_h_mara-matnr.

*Item data

gs_segment_i2-lvorm = gw_i_mbew-lvorm.

gs_segment_i2-lbkum = gw_i_mbew-lbkum.

gs_segment_i2-salk3 = gw_i_mbew-salk3.

gs_segment_i2-vprsv = gw_i_mbew-vprsv.

gs_segment_i2-verpr = gw_i_mbew-verpr.

gs_segment_i2-stprs = gw_i_mbew-stprs.

gs_segment_i2-peinh = gw_i_mbew-peinh.

*Item segment

gt_edidd-segnam = 'ZMBEW_I'.

gt_edidd-sdata = gs_segment_i2.

APPEND gt_edidd.

ENDIF.

ENDLOOP.

*ITEM3

LOOP AT gt_i_mvke INTO gw_i_mvke.

IF gw_i_mvke-matnr = gw_h_mara-matnr.

*Item data

gs_segment_i3-vkorg = gw_i_mvke-vkorg.

gs_segment_i3-vtweg = gw_i_mvke-vtweg.

gs_segment_i3-lvorm = gw_i_mvke-lvorm.

gs_segment_i3-versg = gw_i_mvke-versg.

gs_segment_i3-bonus = gw_i_mvke-bonus.

gs_segment_i3-provg = gw_i_mvke-provg.

*Item segment

gt_edidd-segnam = 'ZMVKE_I'.

gt_edidd-sdata = gs_segment_i3.

APPEND gt_edidd.

ENDIF.

ENDLOOP.

*ITEM4

LOOP AT gt_i_mlan INTO gw_i_mlan.

IF gw_i_mlan-matnr = gw_h_mara-matnr.

*Item data

gs_segment_i4-aland = gw_i_mlan-aland.

gs_segment_i4-taxm1 = gw_i_mlan-taxm1.

gs_segment_i4-taxm2 = gw_i_mlan-taxm2.

gs_segment_i4-taxm3 = gw_i_mlan-taxm3.

gs_segment_i4-taxm4 = gw_i_mlan-taxm4.

*Item segment

gt_edidd-segnam = 'ZMLAN_I'.

gt_edidd-sdata = gs_segment_i4.

APPEND gt_edidd.

ENDIF.

ENDLOOP.

ENDLOOP. "at gt_h_kna1

ENDFORM. " create_idoc

&----


*& Form distribute_idoc

&----


FORM distribute_idoc .

CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'

EXPORTING

master_idoc_control = gs_control_rec

TABLES

communication_idoc_control = gt_edidc

master_idoc_data = gt_edidd

EXCEPTIONS

error_in_idoc_control = 1

error_writing_idoc_status = 2

error_in_idoc_data = 3

sending_logical_system_unknown = 4

OTHERS = 5.

IF sy-subrc <> 0.

WRITE:/ 'Error'.

ELSE.

LOOP AT gt_edidc.

WRITE:/ gt_edidc-docnum.

ENDLOOP. "at gt_edidc

ENDIF.

ENDFORM. " distribute_idoc