美文网首页
06面向对象编程,A1.1-员工管理(本地类)

06面向对象编程,A1.1-员工管理(本地类)

作者: 真言真语SAP | 来源:发表于2018-02-25 14:36 被阅读0次

    本实践通过程序编辑器(SE38)即可完成,编写的代码将有如下几部分组成,按开发人员风格不同,其组成部分并非强制一致。

    No 部分 说明
    1 程序声明 声明本程序执行后是否包含标准标题,数据输出宽度和每页的行数量为多少
    2 对象定义 通过定义变量或常量或要使用的表结构等,以在程序执行过程中计算和存储临时值
    3 类的定义 定义一个类,类中包含公共区域和私有区域
    4 类的方法 从表中获得员工数据并存储到变量以待后续输出
    5 数据输出 创建对象实例并调用方法,并按需求进行数据的输出

    1、程序声明

    程序声明部分代码如下:

    REPORT zu0601_employee_method.
    

    REPORT 程序名称,是对程序的定义,表明此程序代码不是FUNCTION MODULE(功能函数),不是CLASS(类),而是可以执行的可以输出数据的此程序;这是对程序最基本的声明,且必须存在的部分。

    2、对象定义

    对象定义部分代码如下:

    ******对象定义*****
    CLASS local_employee DEFINITION DEFERRED.       "未定义本地类
    DATA: cl_ref        TYPE REF TO local_employee,
          out_emp_id    TYPE ztemployee-employeeid,
          out_emp_sex   TYPE ztemployee-sex,
          out_emp_newid TYPE ztemployee-employeeid,
          writestr(20)  TYPE c.
    
    PARAMETERS p_emp_id TYPE ztemployee-employeeid.
    

    如上代码,首先通过预定义一个本地类“local_employee”,此类将在后续步骤中进行定义和实现;然后参考此类定义了一个cl_ref的对象,以在程序执行时创建员工对象实例;同时定义了变量: out_emp_id(员工ID)、 out_emp_sex(性别)、out_emp_newid(最新员工ID)、writestr(性别),以在程序执行时存储获得的员工信息以待输出;

    最后通过PARAMETERS定义了一个初始输入框以输入员工ID。

    3、类的定义

    在对象预定义local_employee类后,还需要进行类的详细定义,包括类所包含的方法、属性,以及各方法、属性的访问控制级别:公开(PUBLIC)、保护(PROTECTED)、私有(PRIVATE)。详细代码如下。

    CLASS local_employee DEFINITION.
      PUBLIC SECTION.                        "公有成员
        METHODS get_emp_lastid               "获得最后一个员工ID
          RETURNING
            VALUE(re_emp_id) TYPE ztemployee-employeeid.
        METHODS get_emp_byid                  "指定员工ID
          IMPORTING
            VALUE(im_emp_id) TYPE ztemployee-employeeid.
        METHODS get_emp_sex                   "获得员工的性别
          RETURNING
                     VALUE(re_emp_sex) TYPE ztemployee-sex
          EXCEPTIONS no_data.
        METHODS show_emp_maxid.                   "输出最后的员工ID
        METHODS set_emp_newid                  "设置新的员工ID
          RETURNING
            VALUE(re_newemp_id) TYPE ztemployee-employeeid.
    
      PRIVATE SECTION.                              "私有成员
        DATA:emp_maxid TYPE ztemployee-employeeid,  "员工类的最大员工id值
             emp_id    TYPE ztemployee-employeeid.  "员工类的员工id
    ENDCLASS.
    

    通过如上代码,定义了类local_employee有4种方法:get_emp_lastid(获得最后一个员工ID)、get_emp_byid(根据输入值获得员工)、get_emp_sex(获得员工性别)、show_emp_maxid(输出最后员工ID)、set_emp_newid(设置新的ID),这些方法都是在PUBLIC SECTION中,表明对外公开;另外定义了2个属性emp_maxid(员工的最大ID)、emp_id(员工对象的ID),这2个属性都是在PRIVATE SECTION中,表明只能在对象的内部访问。

    4、类方法的实现

    在《类的定义》中,只是说明类包含了哪些方法哪些属性,但并没有说明方法的具体实现、属性的赋值等,在本部分则进行这些方法、属性赋值的实现。

    CLASS local_employee IMPLEMENTATION.
      METHOD get_emp_lastid.
        SELECT MAX( employeeid ) FROM ztemployee INTO emp_maxid. "从员工表中获得最大员工ID值
        emp_id = emp_maxid.                                              "赋值给员工类中的emp_id属性
        re_emp_id = emp_id.                                              "赋值给方法的输出参数re_emp_id
      ENDMETHOD.
    
      METHOD get_emp_byid.
        emp_id = im_emp_id.                                        "输入值直接赋值给员工类的emp_id属性
      ENDMETHOD.
    
      METHOD get_emp_sex.
        SELECT SINGLE sex  FROM ztemployee INTO re_emp_sex  "根据员工类的emp_id属性值从表获得性别
    WHERE employeeid = emp_id.
        IF re_emp_sex IS INITIAL.
          RAISE no_data.
        ENDIF.
      ENDMETHOD.
    
      METHOD show_emp_maxid.
        WRITE:/5 '最后员工ID:' ,20 emp_maxid.                  "输出员工类中的emp_maxid属性值
      ENDMETHOD.
    
      METHOD set_emp_newid.
        DATA new_id(4) TYPE n.
        new_id = emp_maxid+1(4).                                 "根据员工类中的emp_maxid属性值得到新的ID
        new_id = new_id + 1.
        re_newemp_id = 'E' && new_id.
      ENDMETHOD.
    ENDCLASS.
    

    代码说明如下:
    get_emp_lastid: 通过OPEN SQL从员工表中获得最大ID号;
    get_emp_byid: 获取选择界面输入的员工ID号;
    get_emp_sex: 根据员工ID从员工表中获得性别,并判断性别是否为空,空则抛出异常;
    show_emp_maxid: 输出员工类中的emp_maxid值;
    set_emp_newid: 根据最大员工ID号,计算出最新ID号。

    5、数据输出

    在前面各个部分完成后,则可在START-OF-SELECTION事件中,通过创建对象实例并调用方法,获得和输出数据。

    *&----------------------------------------------------------------------*
    *& START-OF-SELECTION
    *&----------------------------------------------------------------------*
    START-OF-SELECTION.
      CREATE OBJECT cl_ref. "创建对象
      CALL METHOD cl_ref->get_emp_byid               "调用方法的方式1
        EXPORTING
          im_emp_id = p_emp_id.
      CALL METHOD cl_ref->get_emp_sex
        RECEIVING
          re_emp_sex = out_emp_sex
        EXCEPTIONS
          no_data    = 1.
    **  cl_ref->get_emp_byid( p_emp_id ).             "调用方法的方式2
    **  out_emp_sex = cl_ref->get_emp_sex( ).
      IF sy-subrc <> 0.
        writestr = '没有获得性别'.
      ELSE.
        writestr = out_emp_sex.
      ENDIF.
      WRITE:/5 '输入员工ID', 20 p_emp_id,
            /5 '输入员工性别:',20 writestr.
      SKIP.
    
      out_emp_id = cl_ref->get_emp_lastid( ).
      out_emp_sex = cl_ref->get_emp_sex( ).
      WRITE:/5 '最后员工ID', 20 out_emp_id,
            /5 '最后员工性别:',20 out_emp_sex.
      SKIP.
    
      cl_ref->show_emp_maxid( ).
      out_emp_newid = cl_ref->set_emp_newid( ).
      WRITE:/5 '最新员工ID:',20 out_emp_newid.
    
      CLEAR cl_ref.
    

    在如上代码中:
    首先通过CREATE创建对象的实例;
    然后再通过CALL METHOD语句调用方法获得相应数据或执行相应语句,并根据获得的数据进行处理;
    最后通过语句CLEAR清理对象内容。

    相关文章

      网友评论

          本文标题:06面向对象编程,A1.1-员工管理(本地类)

          本文链接:https://www.haomeiwen.com/subject/crjrxftx.html