首页 > 代码库 > 一步步实现ABAP后台导入EXCEL到数据库【1】

一步步实现ABAP后台导入EXCEL到数据库【1】

在SAP的应用当中,导入、导出EXCEL文件的情况是一个常见的需求,有时候用户可能有大量的数据需要定期导入到SAP的数据库中。这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台作业,既可以节约用户的时间,也可以有效利用闲时的服务器资源。下面来介绍一下相关的知识和具体实践办法。

本文链接:http://www.cnblogs.com/hhelibeb/p/5912330.html

原创内容,转载请注明

1,定义结构

  首先,准备一个EXCEL文件。假设一个相对简单的情景,比如,要上传的数据库表有三个字段。那么我们也建立一个三列内容的EXCEL文件,test.xlsx:

  技术分享

  由此,可以在代码中定义相应的内表itab:

DATA: BEGIN OF wa,        col1(30) TYPE c,        col2(30) TYPE c,        col3(30) TYPE c,      END OF wa.DATA itab LIKE STANDARD TABLE OF wa.

2,上传并读取文件

  我们需要有一个选择屏幕,用于指定文件的路径: 

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.PARAMETERS: p_source TYPE  rlgrap-filename DEFAULT C:\Users\liyue\Desktop\test.xlsx MODIF ID ty1.SELECTION-SCREEN END OF BLOCK block

  添加文件选择帮助: 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_source.  PERFORM get_filename.
FORM get_filename. TRY. CALL FUNCTION WS_FILENAME_GET EXPORTING mask = *.XLSX. mode = O IMPORTING filename = p_source EXCEPTIONS inv_winsys = 01 no_batch = 02 selection_cancel = 03 selection_error = 04. ENDTRY. IF p_source EQ ‘‘. MESSAGE s000(zfi01) WITH 未选择文件! DISPLAY LIKE E. ENDIF.ENDFORM.

  运行程序后,使用ALSM_EXCEL_TO_INTERNAL_TABLE函数读取文件:

START-OF-SELECTION.    PERFORM read_data.    PERFORM output_data.*&---------------------------------------------------------------------**&      Form  FRM_READ_DATA*&---------------------------------------------------------------------**       读取上传的EXCEL文件*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM read_data .  TRY.      CALL FUNCTION ALSM_EXCEL_TO_INTERNAL_TABLE        EXPORTING          filename                = p_source          i_begin_col             = 1          i_begin_row             = 1          i_end_col               = 255          i_end_row               = 3        TABLES          intern                  = gt_excel[]        EXCEPTIONS          inconsistent_parameters = 1          s_file_ole              = 2          OTHERS                  = 3.      IF sy-subrc <> 0.        MESSAGE s000(zfi01) WITH 文件打开失败! DISPLAY LIKE E.        LEAVE LIST-PROCESSING.      ENDIF.*  CATCH  icx_obl_parameter_error INTO .  ENDTRY.  FIELD-SYMBOLS <fs_value>.  FIELD-SYMBOLS <fs_excel> LIKE gt_excel.  SORT gt_excel BY row col.  LOOP AT gt_excel ASSIGNING <fs_excel>.    ASSIGN COMPONENT <fs_excel>-col  OF STRUCTURE wa TO <fs_value>.    <fs_value> = <fs_excel>-value.    AT END OF row.      APPEND wa TO itab.      CLEAR wa.    ENDAT.  ENDLOOP.ENDFORM.*&---------------------------------------------------------------------**&      Form  OUTPUT_DATA*&---------------------------------------------------------------------**       将数据写入到Applacation Server*----------------------------------------------------------------------**  -->  p1        text*  <--  p2        text*----------------------------------------------------------------------*FORM output_data .  DATA s_file TYPE rlgrap-filename.  PERFORM generate_filename_in_server USING s_file.  OPEN DATASET s_file FOR INPUT IN TEXT MODE ENCODING DEFAULT.  IF sy-subrc = 0 .    LOOP AT itab INTO wa.      write: \ wa.    ENDLOOP.ENDFORM.

  这里没有使用INSERT语句插入数据库,因为我们还没有建立相应的数据库表:) 因此,先使用write验证数据读取的情况。

  接下来是安排程序作为后台作业运行。在选择屏幕点击F9,安排程序立刻作为后台作业执行,(如果运行成功的话,在假脱机日志中可以查看到write输出的文件内容):

  技术分享

  技术分享

  保存之后查看运行结果,打开工具栏——系统——自有作业

  技术分享

  嗯....什么,已取消?看来作业失败了,得分析下原因才行。双击任务名,点击“任务日志”按钮查看:

  技术分享

  原来,在后台作业中,ALSM_EXCEL_TO_INTERNAL_TABLE函数并没有正确读取到文件的内容。

  在SCN上查询这个问题,可以发现,有很多人踩过这个坑。也有人给出了解释:之所以无法读取相应的文件内容,是因为后台作业实际上运行在ABAP应用服务器层面(Application Servers),而不是表现层(Presentation),当然也就不可能按照给定的路径读取文件了。

tips: SAP系统架构

1.最底层是数据库层。SAP自己并不提供底层数据库,而使用其他厂商的数据库管理系统(支持所有的主流数据库)当然,现在已经有了HANA。只有SAP自身管理和运行所需的程序和元数据没有保存在数据库里,而应用系统运行的几乎所有数据都存储在数据库中。

2.ABAP程序运行在应用服务层。ABAP程序包括SAP提供的标准程序和我们自己开发的程序。ABAP程序从数据库读数据,处理数据,有可能还要储存数据。

3.第三层是表示层。这一层就是用户界面,用户可以通过它访问程序,输入数据,接收工作进程处理的结果。SAP把表示层也称为服务器,因为它的工作模式跟web浏览器类似,负责把应用服务器传来的界面布局数据转换成用户可浏览的界面,这种处理也可以成为一种‘服务’。

 

在SAP系统中,软件的技术分布完全独立与它所安装硬件的物理位置。

对于用户来说,SAP系统的应用层和数据库就是一个Black Box。从技术角度讲,有三种类型的屏幕:标准屏幕、选择屏幕和清单,没中屏幕为用户提供不同的服务。程序员应该根据任务的需要,为用户提供合适的屏幕。

   看来,我们有必要找到一种折衷的方式来实现后台导入数据到数据库。接下来的内容请看一步步实现ABAP后台导入EXCEL到数据库【2】。

  

  

一步步实现ABAP后台导入EXCEL到数据库【1】