zoukankan      html  css  js  c++  java
  • 服务器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.

  • 相关阅读:
    表操作之数据类型——日期类型
    cocos2dx tableView 的使用
    lua中的循环
    lua中 后端发过来的 按位表示值,在前端中需要处理的函数
    lua 打印表方法
    近况
    lua开发
    4)数据结构和算法学习_链表
    3)数据结构和算法学习_链表
    使用VsCode断点调试TS
  • 原文地址:https://www.cnblogs.com/liu1838998131/p/15429192.html
Copyright © 2011-2022 走看看