设为首页 收藏本站
查看: 911|回复: 0

[经验分享] SAP OO ALV

[复制链接]

尚未签到

发表于 2015-9-20 13:48:32 | 显示全部楼层 |阅读模式
  不知道的东西总是认为是最好的,一直没写过OO ALV的  最近找到了一个入门的案例 已经经过测试 代码可用 需要自己画一个屏幕.
  【转】
  



*&---------------------------------------------------------------------*
*& Report  ZJ_TE1
*&
*&---------------------------------------------------------------------*
*&
*&   OO ALV
*&---------------------------------------------------------------------*

REPORT  ZJ_TE1.
*" 功能A: 基本显示
*" 功能B: 设定layout
*" 功能C: 设定fieldcat
*" 功能D: 增加复选框
*" 功能E: 设定某列可输入
*" 功能F: 设定某列为下拉列表
*" 功能G: 设定屏蔽标准ALV 工具栏的按钮
*" 功能H: 设定增加自定义ALV工具栏的按钮
*" 功能I: 设定响应双击
*" 功能J: 设定响应user command
*" 功能K: 设定TOP_OF_PAGE
*" 功能L: 设定动态修改layout
*" 功能M: 设定动态修改fieldcat

DATA: BEGIN OF GT_USER OCCURS 0."LIKE TABLE OF usr02." with header line.
INCLUDE STRUCTURE USR02.
DATA: CHECKBOX(1)," 功能D: 增加复选框
COLOR(4).
DATA: END OF GT_USER.
DATA: G_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER." 功能A: 基本显示
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID." 功能A: 基本显示
DATA: SAVE_OK LIKE SY-UCOMM,
OK_CODE LIKE SY-UCOMM.
DATA: GT_FIELDCAT TYPE LVC_T_FCAT, " 功能C: 设定fieldcat
GS_FIELDCAT TYPE LVC_S_FCAT." 功能C: 设定fieldcat
DATA: LS_LAYOUT  TYPE LVC_S_LAYO. " 功能B: 设定layout
DATA: GT_EXCLUDE TYPE UI_FUNCTIONS." 功能G: 设定屏蔽标准ALV 工具栏的按钮

*----------------------------------------------------------------------*
*       CLASS lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER DEFINITION.
PUBLIC SECTION.
METHODS HANDLE_DOUBLE FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN . " 功能I: 设定响应双击
METHODS HANDLE_TEXT FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN . " 功能I: 设定响应双击
METHODS HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID IMPORTING E_OBJECT. " 功能H: 设定增加自定义ALV工具栏的按钮
METHODS HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID IMPORTING E_UCOMM. " 功能J: 设定响应user command
METHODS HANDLE_TOP FOR EVENT TOP_OF_PAGE OF CL_GUI_ALV_GRID. " 功能K: 设定TOP_OF_PAGE
ENDCLASS.                    "lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.

METHOD HANDLE_TEXT. " 功能I: 设定响应双击
MESSAGE I000(IH) WITH E_ROW-INDEX E_COLUMN-FIELDNAME.
ENDMETHOD.                    "handle_TEXT

METHOD HANDLE_DOUBLE. " 功能I: 设定响应双击
MESSAGE I000(IH) WITH E_ROW-INDEX E_COLUMN-FIELDNAME.
ENDMETHOD.                    "handle_double
METHOD HANDLE_TOOLBAR. " 功能H: 设定增加自定义ALV工具栏的按钮
DATA: LS_TOOLBAR TYPE STB_BUTTON.
LS_TOOLBAR-BUTN_TYPE = '3'.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
LS_TOOLBAR-TEXT = 'Click'.
LS_TOOLBAR-FUNCTION = 'Z1'.
LS_TOOLBAR-ICON = ICON_CALCULATION.
*QUICKINFO
*BUTN_TYPE
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
ENDMETHOD.                    "handle_toolbar
METHOD HANDLE_USER_COMMAND. " 功能J: 设定响应user command
CASE E_UCOMM.
WHEN 'Z1'.
MESSAGE I000(IH) WITH 'Y'.
ENDCASE.
ENDMETHOD.                    "handle_user_command
METHOD HANDLE_TOP.           " 功能K: 设定TOP_OF_PAGE
WRITE:/ 'this is end'.
MESSAGE I000(IH) WITH 'hi'.
ENDMETHOD.                    "handle_top
ENDCLASS.                    "lcl_event_handler IMPLEMENTATION

DATA: GR_EVENT TYPE REF TO LCL_EVENT_HANDLER.
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS '100'.
"  set titlebar '100'.
IF G_CONTAINER IS INITIAL.
CREATE OBJECT G_CONTAINER  "创建容器对象
EXPORTING
*      parent                      =
CONTAINER_NAME              = 'GC_1'        .

CREATE OBJECT G_GRID"   创建 ALV_FRID 对象
EXPORTING
I_PARENT          = G_CONTAINER
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT   = 2
ERROR_CNTL_LINK   = 3
ERROR_DP_CREATE   = 4
OTHERS            = 5        .
GS_FIELDCAT-FIELDNAME = 'CHECKBOX'. " 功能D: 增加复选框
GS_FIELDCAT-COLTEXT = 'CHECK'.      " 功能D: 增加复选框
GS_FIELDCAT-CHECKBOX = 'X'.         " 功能D: 增加复选框
GS_FIELDCAT-EDIT = 'X'.             " 功能E: 设定某列可输入
APPEND GS_FIELDCAT TO GT_FIELDCAT.  " 功能D: 增加复选框

" 这个函数只能读取标准结构体的fieldcat
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' " 功能C: 设定fieldcat
EXPORTING
*       I_BUFFER_ACTIVE              =
I_STRUCTURE_NAME             = 'USR02'
*       I_CLIENT_NEVER_DISPLAY       = 'X'
*       I_BYPASSING_BUFFER           =
*       I_INTERNAL_TABNAME           =
CHANGING
CT_FIELDCAT                  = GT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE       = 1
PROGRAM_ERROR                = 2
OTHERS                       = 3 .
DATA: LT_DROP TYPE LVC_T_DROP,
LS_DROP TYPE LVC_S_DROP.

* 定制下拉框
LS_DROP-HANDLE = '1'. " 功能F: 设定某列为下拉列表
LS_DROP-VALUE = 'A'.  " 功能F: 设定某列为下拉列表
APPEND LS_DROP TO LT_DROP. " 功能F: 设定某列为下拉列表
LS_DROP-HANDLE = '1'. " 功能F: 设定某列为下拉列表
LS_DROP-VALUE = 'B'.  " 功能F: 设定某列为下拉列表
APPEND LS_DROP TO LT_DROP." 功能F: 设定某列为下拉列表

LS_DROP-HANDLE = '2'." 功能F: 设定某列为下拉列表
LS_DROP-VALUE = 'ZZZ'." 功能F: 设定某列为下拉列表
APPEND LS_DROP TO LT_DROP." 功能F: 设定某列为下拉列表
LS_DROP-HANDLE = '2'." 功能F: 设定某列为下拉列表
LS_DROP-VALUE = 'YYY'." 功能F: 设定某列为下拉列表
APPEND LS_DROP TO LT_DROP." 功能F: 设定某列为下拉列表
LS_DROP-HANDLE = '2'." 功能F: 设定某列为下拉列表
LS_DROP-VALUE = 'XXX'." 功能F: 设定某列为下拉列表
APPEND LS_DROP TO LT_DROP." 功能F: 设定某列为下拉列表
* 为列绑定 下拉框
LOOP AT GT_FIELDCAT INTO GS_FIELDCAT.
IF GS_FIELDCAT-FIELDNAME = 'ANAME'.
GS_FIELDCAT-EMPHASIZE = 'C501'.
GS_FIELDCAT-DRDN_HNDL = '1'.   " 功能F: 设定某列为下拉列表
GS_FIELDCAT-EDIT = 'X'.        " 功能E: 设定某列可输入
MODIFY GT_FIELDCAT FROM  GS_FIELDCAT.
ELSEIF GS_FIELDCAT-FIELDNAME = 'BNAME'.
GS_FIELDCAT-EMPHASIZE = 'C501'.
GS_FIELDCAT-DRDN_HNDL = '2'.  " 功能F: 设定某列为下拉列表
GS_FIELDCAT-EDIT = 'X'.       " 功能E: 设定某列可输入
MODIFY GT_FIELDCAT FROM  GS_FIELDCAT.
ENDIF.
ENDLOOP.
CALL METHOD G_GRID->SET_DROP_DOWN_TABLE " 功能F: 设定某列为下拉列表
EXPORTING
IT_DROP_DOWN = LT_DROP.
*    it_drop_down_alias =
    .
CREATE OBJECT GR_EVENT.
SET HANDLER GR_EVENT->HANDLE_TEXT FOR G_GRID. " 功能I: 设定响应双击
SET HANDLER GR_EVENT->HANDLE_TOOLBAR FOR G_GRID. " 功能H: 设定增加自定义ALV工具栏的按钮
SET HANDLER GR_EVENT->HANDLE_USER_COMMAND FOR G_GRID. " 功能J: 设定响应user command
SET HANDLER GR_EVENT->HANDLE_TOP FOR G_GRID. " 功能K: 设定TOP_OF_PAGE

LS_LAYOUT-ZEBRA = 'X'.            " 功能B: 设定layout
LS_LAYOUT-GRID_TITLE = 'USER'.    " 功能B: 设定layout
LS_LAYOUT-SMALLTITLE = 'X'.       " 功能B: 设定layout
LS_LAYOUT-BOX_FNAME = 'CHECKBOX'." 功能B: 设定layout
LS_LAYOUT-SEL_MODE = ''.          " 功能B: 设定layout
*    ls_layout-no_TOOLBAR = 'X'.
DATA GS_EXCLUDE TYPE UI_FUNC. " 功能G: 设定屏蔽标准ALV 工具栏的按钮
GS_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_SUM. " 功能G: 设定屏蔽标准ALV 工具栏的按钮
"   append gs_exclude to gt_exclude. " 功能G: 设定屏蔽标准ALV 工具栏的按钮


CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY     " 功能A: 基本显示
EXPORTING
*          i_buffer_active               =
*          i_bypassing_buffer            =
*          i_consistency_check           =
*          i_structure_name              =
*          is_variant                    =
*          i_save                        = 'X'
*          i_default                     = 'X'
IS_LAYOUT                     = LS_LAYOUT   " 功能B: 设定layout
*          is_print                      =
*          it_special_groups             =
IT_TOOLBAR_EXCLUDING          = GT_EXCLUDE " 功能G: 设定屏蔽标准ALV 工具栏的按钮
*          it_hyperlink                  =
*          it_alv_graphics               =
*          it_except_qinfo               =
*          ir_salv_adapter               =
CHANGING
IT_OUTTAB                     = GT_USER[]
IT_FIELDCATALOG               = GT_FIELDCAT[] " 功能C: 设定fieldcat
*          it_sort                       =
*          it_filter                     =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR                 = 2
TOO_MANY_LINES                = 3
OTHERS                        = 4
.
ELSE.
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY " 功能A: 基本显示
*  EXPORTING
*    is_stable      =
*    i_soft_refresh =
EXCEPTIONS
FINISHED       = 1
OTHERS         = 2
.
ENDIF.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
SELECT * FROM USR02 INTO TABLE GT_USER.
ENDFORM.                    " FRM_GET_DATA
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'SO_UP'.
PERFORM FRM_HIDE_TOOLBAR.
WHEN 'CH_CAT'.
PERFORM FRM_CHANGE_CAPTION.
WHEN OTHERS.
ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Form  FRM_SORT_UP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text   隐藏ALV 标准按钮
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_HIDE_TOOLBAR .
DATA: LS_LAYOUT TYPE LVC_S_LAYO.
CALL METHOD G_GRID->GET_FRONTEND_LAYOUT
IMPORTING
ES_LAYOUT = LS_LAYOUT.
IF LS_LAYOUT-NO_TOOLBAR = 'X'.
LS_LAYOUT-NO_TOOLBAR = ''.
ELSE.
LS_LAYOUT-NO_TOOLBAR = 'X'.
ENDIF.
CALL METHOD G_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = LS_LAYOUT.
ENDFORM.                    " FRM_SORT_UP
*&---------------------------------------------------------------------*
*&      Form  FRM_CHANGE_CAPTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text     
*----------------------------------------------------------------------*
FORM FRM_CHANGE_CAPTION .
DATA: LT_FIELDCAT TYPE LVC_T_FCAT,
LS_FIELDCAT LIKE LINE OF LT_FIELDCAT.
CALL METHOD G_GRID->GET_FRONTEND_FIELDCATALOG
IMPORTING
ET_FIELDCATALOG = LT_FIELDCAT.
LOOP AT LT_FIELDCAT INTO LS_FIELDCAT.
IF LS_FIELDCAT-FIELDNAME = 'BNAME'.
LS_FIELDCAT-COLTEXT = 'X'.
LS_FIELDCAT-SELTEXT = 'SELECT'.
MODIFY LT_FIELDCAT FROM LS_FIELDCAT.
ENDIF.
ENDLOOP.
CALL METHOD G_GRID->SET_FRONTEND_FIELDCATALOG
EXPORTING
IT_FIELDCATALOG = LT_FIELDCAT.
ENDFORM.                    " FRM_CHANGE_CAPTION
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-116297-1-1.html 上篇帖子: SAP 产品介绍 下篇帖子: Alternate the logo in the right-hand side of the initial screen of SAP
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表