服务器IDOC文件解析程序

仅供参考

 

REPORT ZCRM_GET_XML_FROM_FTP.

TYPE-POOLS ABAP.

**************************************************************************************************************************
* 变量声明
**************************************************************************************************************************
DATA:       DIR_NAME   LIKE EPSF-EPSDIRNAM.

DATA: IT_DIRLIST LIKE EPSFILI OCCURS WITH HEADER LINE.
DATA: WA_DIRLIST TYPE EPSFILI.

DATABEGIN OF IT_FILES OCCURS 0,
        FILENAME(100),
      END OF IT_FILES.

DATABEGIN OF DEL_FILES OCCURS 0,
        FILENAME(100),
      END OF DEL_FILES.

DATA: PROCESS_FLAG TYPE CHAR1.
*------------------------------------------------------------------
*      BDC使用变量
*------------------------------------------------------------------
DATA:LV_MODE TYPE C.

DATA:BEGIN OF IT_BDC OCCURS 0.
        INCLUDE STRUCTURE BDCDATA.
DATA:END OF IT_BDC.

DATA:BEGIN OF IT_MESS OCCURS 0.
        INCLUDE STRUCTURE BDCMSGCOLL.
DATA:END OF IT_MESS.

DATA: UPDATE_OK TYPE CHAR1.

LV_MODE 'N'.

*------------------------------------------------------------------
*      TYPE DECLARATIONS FOR THE VARIABLES
*------------------------------------------------------------------

*      DECLARING THE FILE TYPE
DATA:  G_UNIXFILENAME TYPE STRING.                 "UNIX FILE PATH.
*      DECLARING THE STRUCTURE FOR THE XML INTERNAL TABLE
TYPESBEGIN OF TY_XML,
         RAW(20000TYPE C,
       END OF TY_XML.
*      DECLARING THE XML INTERNAL TABLE
DATA:  G_T_XML_TAB TYPE TABLE OF TY_XML INITIAL SIZE 0.
*      DECLARING THE WORK AREA FOR THE XML INTERNAL TABLE
DATA:  WA_XML_TAB TYPE TY_XML.
*      DECLARING THE STRING TO CONTAIN THE DATA FOR THE XML INTERNAL
*      TABLE
DATA:  G_STR TYPE STRING.
*      DECLARING THE STRING TO CONTAIN X STRING
DATA:  G_XMLDATA TYPE XSTRING.
*      DECLARING THE TABLE TO CONTAIN THE PARSED DATA
DATA:  G_T_XML_INFO TYPE TABLE OF SMUM_XMLTB INITIAL SIZE 0.
*      DECLARING THE WORK AREA FOR THE INTERNAL TABLE CONTAINING THE
*      PARSED DATA.
DATA:  G_S_XML_INFO LIKE LINE OF G_T_XML_INFO.
*      DECLARING THE TABLE TO CONTAIN THE RETURNED MESSAGES FROM THE
*      PARSING FM
DATA:  G_T_RETURN TYPE STANDARD TABLE OF BAPIRET2.
*      DECLARING THE WORK AREA FOR THE RETURN TABLE
DATA:  WA_RETURN LIKE LINE OF G_T_RETURN.
*      DECLARING THE STRUCTURE FOR THE TABLE CONTAINING FIELDS IN THE
*      XML FILE
TYPESBEGIN OF STRUC_PEOPLE,
         HOMEPERNR(8),
         UNAME(4)     TYPE C,
         USERID(32),
       END OF STRUC_PEOPLE.
*      DECLARING THE INTERNAL TABLE CONTAINING THE FIELDS IN THE XML
*      FILE
DATA:  G_T_EMPLOYEEREQUEST TYPE TABLE OF STRUC_PEOPLE.
*      DECLARING THE WORK AREA FOR THE INTERNAL TABLE CONTAINING THE
*FIELDS IN THE      *      XML FILE
DATA:  G_S_EMPLOYEEREQUEST LIKE LINE OF G_T_EMPLOYEEREQUEST.

*------------------------------------------------------------------
*      TYPE DECLARATIONS FOR THE VARIABLES
*------------------------------------------------------------------
DATA: IT_IDOC_CONTRL  TYPE  EDI_DC40 .
DATA: IT_IDOC_DATA    TYPE  EDI_DD40 OCCURS WITH HEADER LINE.


DATA: LT_EDI_DC40 TYPE TABLE OF EDI_DC40,
      LT_EDI_DD40 TYPE TABLE OF EDI_DD40.

DATA: LV_GUID         TYPE  SXMSMGUID.
DATA: LS_IDX_XMB     TYPE IDX_XMB.

DATA: LV_IDOC_NUM   LIKE  EDIDC-DOCNUM.
DATA: LV_APP_ERR    LIKE  EDI_HELP-ERROR_FLAG.
DATA: ZMASK         LIKE  EPSF-EPSFILNAM.

***********************************************************************
* 服务器目录确认
***********************************************************************
*SELECTION-SCREEN BEGIN OF BLOCK SELECTION WITH FRAME TITLE TEXT-001.
*
*PARAMETERS P_TYPE TYPE IDOCSYN-IDOCTYP.
*
*SELECTION-SCREEN END OF BLOCK SELECTION.

INITIALIZATION.


START-OF-SELECTION.
*SY-MANDT  当前系统编号  AL11配置路径
  IF SY-MANDT '604'.
    DIR_NAME        '/hana/shared/crm_ftp/INBOUND/'.  
  ENDIF.
  IF SY-MANDT '800'.
    DIR_NAME        '/hana/shared/CRM_PRD/inbound/'.
  ENDIF.

*  ZMASK           = P_TYPE && '*'.


  CHECK DIR_NAME IS NOT INITIAL.

**************************************************************************************************************************
* 调用执行
**************************************************************************************************************************

* 读取文件列表
  PERFORM GET_FILE_FROM_FTP.

  CHECK IT_DIRLIST[] IS NOT INITIAL.

* 逐个读取XML文件并进行入站处理
  PERFORM INBOUND_PROCESS_FROM_FILE.

* 删除处理后的文件
  PERFORM DEL_FILE_FROM_FTP.

***********************************************************************
* 功能定义
***********************************************************************

*---------------------------------------------------------------------
*        读取文件列表
*---------------------------------------------------------------------
FORM GET_FILE_FROM_FTP.

  CLEAR: IT_DIRLIST[].

  CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
    EXPORTING
      DIR_NAME               = DIR_NAME
    " FILE_MASK              = 'ZDMS0500_2018070001_180702165051.xml'
    " FILE_MASK              = ZMASK
    TABLES
      DIR_LIST               = IT_DIRLIST
    EXCEPTIONS
      INVALID_EPS_SUBDIR     1
      SAPGPARAM_FAILED       2
      BUILD_DIRECTORY_FAILED 3
      NO_AUTHORIZATION       4
      READ_DIRECTORY_FAILED  5
      TOO_MANY_READ_ERRORS   6
      EMPTY_DIRECTORY_LIST   7
      OTHERS                 8.

  IF IT_DIRLIST[] IS NOT INITIAL.

    CLEAR: IT_FILES[].
    CLEAR: DEL_FILES[].


    LOOP AT IT_DIRLIST.
      CHECK IT_DIRLIST-NAME <> '.' AND IT_DIRLIST-NAME <> '..' ."AND IT_DIRLIST-NAME CS '.xml'.
      CONCATENATE DIR_NAME IT_DIRLIST-NAME INTO IT_FILES-FILENAME.
      APPEND IT_FILES.
    ENDLOOP.

  ENDIF.

ENDFORM.

*---------------------------------------------------------------------
*        循环读取XML文件内容
*---------------------------------------------------------------------
FORM INBOUND_PROCESS_FROM_FILE.

*  SUBMIT MSEIDOC0  WITH EDUNIX-OLDPATH EQ '/hana/shared/crm_ftp/inbound/ZCRM0070_IDOC_20191030135640.xml'
*                   WITH EDUNIX-SNDPOR  EQ 'CRM_PORT'
*                   AND RETURN.

  LOOP AT IT_FILES.



    CLEAR: IT_BDC[].

*---------------------------------------------------
*   调用系统标准处理
*---------------------------------------------------

    CLEAR IT_BDC.
    IT_BDC-PROGRAM 'MSEIDOC0'.
    IT_BDC-DYNPRO  '2010'.
    IT_BDC-DYNBEGIN 'X'.
    APPEND IT_BDC.

    CLEAR IT_BDC.
    IT_BDC-FNAM 'BDC_OKCODE'.
    IT_BDC-FVAL '=PROC'.
    APPEND IT_BDC.

    CLEAR IT_BDC.
    IT_BDC-FNAM 'EDUNIX-OLDPATH'.
    IT_BDC-FVAL = IT_FILES-FILENAME.
    APPEND IT_BDC.

    CLEAR IT_BDC.
    IT_BDC-FNAM 'EDUNIX-SNDPOR'.
    IT_BDC-FVAL 'CRM_PORT'.
    APPEND IT_BDC.

*----------------------------------------------------开始BDC执行

    CALL TRANSACTION 'WE16' USING  IT_BDC
              MODE  LV_MODE
              MESSAGES INTO  IT_MESS.

*----------------------------------------------------处理信息

    CLEAR: PROCESS_FLAG.

    LOOP AT IT_MESS.

*     将成功的文件写入删除列表
      IF IT_MESS-MSGTYP 'S'.

        PROCESS_FLAG 'S'.

      ENDIF.

    ENDLOOP.

*   写入删除列表
    IF  PROCESS_FLAG 'S'.

      CLEAR: DEL_FILES.      DEL_FILES

-FILENAME = IT_FILES-FILENAME.      

APPEND DEL_FILES.    

ENDIF.  


ENDLOOP.

ENDFORM.
*------------------------------------------------------------------
*   删除指定的XML文件   RBDAPP01
*------------------------------------------------------------------
FORM DEL_FILE_FROM_FTP.  

LOOP AT DEL_FILES.    G_UNIXFILENAME 

= DEL_FILES-FILENAME.    

DELETE DATASET G_UNIXFILENAME.  

ENDLOOP.

* 调用进站处理程序  
IF DEL_FILES[] IS NOT INITIAL.    

SUBMIT RBDAPP01 AND RETURN.  

ENDIF.

ENDFORM.

posted @ 2021-10-20 15:55  ll的个人笔记  阅读(26)  评论(0编辑  收藏  举报