Entering content frame

Example Program for Mass Processing IDocs Locate the document in its SAP Library structure

 

FUNCTION·IDOC_INPUT_XAMPLE4.
*"----------------------------------------------------------------------
*"
*"Local·interface:
*"·······IMPORTING
*"·············VALUE(INPUT_METHOD)·LIKE··BDWFAP_PAR-INPUTMETHD
*"·············VALUE(MASS_PROCESSING)·LIKE··BDWFAP_PAR-MASS_PROC
*"·······EXPORTING
*"·············VALUE(WORKFLOW_RESULT)·LIKE··BDWF_PARAM-RESULT
*"·············VALUE(APPLICATION_VARIABLE)·LIKE··BDWF_PARAM-APPL_VAR
*"·············VALUE(IN_UPDATE_TASK)·LIKE··BDWFAP_PAR-UPDATETASK
*"·············VALUE(CALL_TRANSACTION_DONE)·LIKE··BDWFAP_PAR-CALLTRANS
*"·······TABLES
*"··············IDOC_CONTRL·STRUCTURE··EDIDC
*"··············IDOC_DATA·STRUCTURE··EDIDD
*"··············IDOC_STATUS·STRUCTURE··BDIDOCSTAT
*"··············RETURN_VARIABLES·STRUCTURE··BDWFRETVAR
*"··············SERIALIZATION_INFO·STRUCTURE··BDI_SER
*"·······EXCEPTIONS
*"··············WRONG_FUNCTION_CALLED
*"----------------------------------------------------------------------

*·----------------------------------------------------------------------
*·----------------------·05·July·1996·----------------------------------
*·----------------------------------------------------------------------

*·Example·function·module·for·processing·inbound·IDocs·for·ALE·or·EDI.
*·This·example·applies·for·processing
*
*···with····-··mass·processing·(more·than·one·IDoc·at·a·time)
*
*···without·-··serialization
*···········-··customer-exits
*···········-··calling·an·ALE-enabled·transaction

*·--------------------·Naming·conventions·------------------------------
*·Internal·tables·start·with·'t_'
*·Internal·field·strings·start·with·'f_'
*·----------------------------------------------------------------------


*·>>·The·following·line·must·appear·in·the·global·part·of·your
*·>>·function·group:
*····include·mbdconwf.············"Report·containing·the·ALE·constants.
*·The·ALE·constants·start·with·'c_'.

*·Internal·table·for·the·document·headers.
··DATA:·T_XHEAD·LIKE·XHEAD·OCCURS·0·WITH·HEADER·LINE.

*·Internal·table·for·the·document·items.
··DATA:·T_XITEM·LIKE·XITEM·OCCURS·0·WITH·HEADER·LINE.

··DATA:·SUBRC·LIKE·SY-SUBRC,
········OBJECT_NUMBER·LIKE·XHEAD-DOCMNT_NO.

*·Initialize·variables
··SUBRC·=·0.

*·Fill·the·ALE·export·parameters·prior·to·loop·through·IDocs.
··CLEAR·IN_UPDATE_TASK.
··CLEAR·CALL_TRANSACTION_DONE.·········"Call·Transaction·is·not·used.
··WORKFLOW_RESULT·=·C_WF_RESULT_OK.

*·Loop·through·the·IDocs'·control·records
··LOOP·AT·IDOC_CONTRL.

*···Process·the·IDoc·and·check·the·data;·no·database·updates!
····PERFORM·IDOC_PROCESS_XAMPLE4·TABLES···IDOC_DATA
··········································IDOC_STATUS
··········································t_xhead
··········································t_xitem
·································USING····IDOC_CONTRL
·································CHANGING·OBJECT_NUMBER
··········································SUBRC.

*···Fill·the·ALE·export·parameters.
····IF·SUBRC·<>·0.·······················"Error·occurred

····WORKFLOW_RESULT·=·C_WF_RESULT_ERROR.
······RETURN_VARIABLES-WF_PARAM·=·C_WF_PAR_ERROR_IDOCS.
······RETURN_VARIABLES-DOC_NUMBER·=·IDOC_CONTRL-DOCNUM.
······APPEND·RETURN_VARIABLES.

··ELSE.······························"IDoc·processed·successfully

······RETURN_VARIABLES-WF_PARAM·=·C_WF_PAR_PROCESSED_IDOCS.
······RETURN_VARIABLES-DOC_NUMBER·=·IDOC_CONTRL-DOCNUM.
······APPEND·RETURN_VARIABLES.
······RETURN_VARIABLES-WF_PARAM·=·C_WF_PAR_APPL_OBJECTS.
······RETURN_VARIABLES-DOC_NUMBER·=·OBJECT_NUMBER.
······APPEND·RETURN_VARIABLES.

··ENDIF.

··ENDLOOP.·····························"loop·at·idoc_contrl.

*·Once·all·IDocs·have·been·processed,·insert·the·application·data·to
*·the·database·(as·long·as·there·is·some·data·to·insert).

··read·table·t_xitem·index·1.
··if·sy-subrc·=·0.·····················"i.e.·at·least·one·entry

*···This·fictitious·function·module·inserts·the·data·in·tables
*···t_xhead·and·t_xitem·to·the·database·tables·xhead·and·xitem.
*···It·has·no·exceptions,·because·a·failed·insert·leads·to·a·run-time
*···error.
····CALL·FUNCTION·'XAMPLE_OBJECTS_INSERT_TO_DATABASE'
·········TABLES
··············XHEAD·=·T_XHEAD
··············XITEM·=·T_XITEM.

··endif.·······························"if·sy-subrc·=·0.

ENDFUNCTION.


*---------------------------------------------------------------------*
*·······FORM·IDOC_PROCESS_XAMPLE4·····································*
*---------------------------------------------------------------------*
*··This·routine·adds·an·application·document·to·tables·t_xhead·and····*
*··t_xitem·based·on·the·IDoc'S·contents.······························*
*··Object_Number·contains·the·new·document's·number.··················*
*··If·an·error·occurs,·subrc·is·non-zero,·t_idoc_status·is·filled.····*
*··Note:·if·more·than·one·error·is·detected,·t_idoc_status·contains···*
*········more·than·one·status·record.·································*
*---------------------------------------------------------------------*
*··-->··F_IDOC_CONTRL····IDoc·control·record··························*
*··-->··T_IDOC_DATA······IDoc·data·records····························*
*··<--··T_XHEAD··········Application·document's·header·records········*
*··<--··T_XITEM··········Application·document's·line·item·records·····*
*··<--··T_IDOC_STATUS····IDoc·status·records··························*
*··<--··OBJECT_NUMBER····Created·document's·number····················*
*··<--··SUBRC············Return·code··································*
*---------------------------------------------------------------------*
FORM·IDOC_PROCESS_XAMPLE4
·······TABLES···T_IDOC_DATA····STRUCTURE·EDIDD
················T_IDOC_STATUS··STRUCTURE·BDIDOCSTAT
················T_XHEAD········STRUCTURE·XHEAD
················T_XITEM········STRUCTURE·XITEM
·······USING····F_IDOC_CONTRL··STRUCTURE·EDIDC
·······CHANGING·OBJECT_NUMBER··LIKE·XHEAD-DOCMNT_NO
················SUBRC··········LIKE·SY-SUBRC.

*·Internal·table·string·for·the·document·headers.
··DATA:·F_XHEAD·LIKE·XHEAD·OCCURS·0·WITH·HEADER·LINE.

*·Internal·table·for·one·document's·items.
··DATA:·T_ONE_XITEM·LIKE·XITEM·OCCURS·0·WITH·HEADER·LINE.

*·Number·given·to·the·created·document
··DATA:·DOCUMENT_NUMBER·LIKE·XHEAD-DOCMNT_NO.


*·Move·the·data·in·the·IDoc·to·the·internal·structures/tables
*·f_xhead·and·t_xitem.
··PERFORM·IDOC_INTERPRET·TABLES···T_IDOC_DATA
··································T_ONE_XITEM
··································T_IDOC_STATUS
·························USING····F_IDOC_CONTRL
·························CHANGING·F_XHEAD
··································SUBRC.

*·Create·the·application·object·if·no·error·occurred·so·far.
··IF·SUBRC·=·0.
*···This·fictitious·function·module·checks·the·new·object·based·on·the
*···data·that·was·read·from·the·IDoc.
*···If·the·checks·succeed,·the·new·object's·ID·is·returned·in·the
*···parameter·'document_number'.
*···If·the·checks·fail,·an·exception·is·raised.
*···Note:·this·function·must·not·insert·or·modify·database·records!
····CALL·FUNCTION·'XAMPLE_OBJECT_CHECK'
·········EXPORTING
··············XHEAD···········=·F_XHEAD
·········IMPORTING
··············DOCUMENT_NUMBER·=·DOCUMENT_NUMBER
·········TABLES
··············XITEM···········=·T_ONE_XITEM
·········EXCEPTIONS
··············OTHERS··········=·1.

····IF·SY-SUBRC·<>·0.
······SUBRC·=·1.
*·····Put·the·error·message·into·'t_idoc_status'
······PERFORM·STATUS_FILL_SY_ERROR
················TABLES···T_IDOC_STATUS
················USING····T_IDOC_DATA
·························SY
·························''············"Field·name
·························'idoc_process_xample'.·········"Form·routine

····ELSE.
*·····Fill·the·remaining·export·parameters
······OBJECT_NUMBER·=·DOCUMENT_NUMBER.·"New·document's·number
······append·f_xhead·to·t_xhead.
······APPEND·LINES·OF·T_ONE_XITEM·TO·T_XITEM.

······t_idoc_status-docnum·=·f_idoc_contrl-docnum.
······t_idoc_status-status·=·c_idoc_status_ok.
······t_idoc_status-msgty··=·'S'.
······t_idoc_status-msgid··=·your_msgid.·"Global·variable.
······t_idoc_status-msgno··=·msgno_success."Global·variable.
······t_idoc_status-msgv1··=·object_number.
······APPEND·T_IDOC_STATUS.
····ENDIF.·····························"if·sy-subrc·<>·0.
··ENDIF.·······························"if·subrc·=·0.

ENDFORM.

 

 

Leaving content frame