ABAP 之SET_TITLEBAR的使用方式

举报
百里丶落云 发表于 2023/08/14 17:04:13 2023/08/14
【摘要】 序HELLO,这里是百里,一个学习中的ABAPER,在工作中我们肯定会遇到同一个程序有高度重合的情况,不同的TCODE只是展示区别很少区别的内容,这个时候我们就会使用到今天所讲的东西.set_titlebar . 什么是set_titlebar ?在ALV选择屏幕的界面及数据展示界面都会有对应的内容展示标题,这个显示的内容我们叫做TITLE ,跟英文字面翻译意思一样,就是title(标题)...

HELLO,这里是百里,一个学习中的ABAPER,在工作中我们肯定会遇到同一个程序有高度重合的情况,不同的TCODE只是展示区别很少区别的内容,这个时候我们就会使用到今天所讲的东西.set_titlebar .

什么是set_titlebar ?

在ALV选择屏幕的界面及数据展示界面都会有对应的内容展示标题,这个显示的内容我们叫做TITLE ,跟英文字面翻译意思一样,就是title(标题) .而abap 中的set_titlebar 就是 设置标题. 我们通过这是标题显示的内容不同,从而给用以表现出不同的报表.

常见用处如,数据库龄,金额,分类,分工厂等都会出现这种情况,就是给A,B两个人看数据,他们百分之90的数据一致,我们只有10% 内容不一致,我们就可以通过SET_TITLEBAR 结合其他代码改动实现功能.

语法解析

CASE sy-tcode.  
    WHEN 'TCODE1'.  
      SET TITLEBAR  '变量1' WITH '标题名1'.  
  
    WHEN 'TCODE2'.  
      SET TITLEBAR  '变量2' WITH  '标题名2'.  
  ENDCASE.

我们一般将这段语法分装到对应的子例程中,注意我们的变量需要通过双击的方式,进行替换.
还有需要注意就是需要在
INITIALIZATION 的地方调用一遍, 之后再 START-OF-SELECTION. 的地方需要再次调用一遍.

实例讲解

本内容案例是我们通过不同的TCODE设定从而实现展示不同的抬头及给两个TCODE展示不同的字段.

数据准备

TABLES : ZWDEMOTABLE1 .  
" 数据准备  
  
  
  
TYPES:BEGIN OF ty_Data  ,  
  
    doccode TYPE char20 ,  
   zrowid TYPE char20 ,  
  matcode TYPE char20 ,  
  matname TYPE char20 ,  
  uom TYPE char20 ,  
  memo TYPE char20 ,  
  
  
     light TYPE iconname, "指示灯  
        msg   TYPE string,"消息  
  
  END OF ty_Data .  
  
  
  
 data : gs_data TYPE ty_Data .  
 data : gt_DAta TYPE  TABLE  of ty_Data .  
  
  
  
  
  " alv 通用变量  
  DATA: wa_layout   TYPE lvc_s_layo.  
DATA:wa_fieldcat TYPE lvc_s_fcat,  
     gt_fieldcat TYPE lvc_t_fcat.  
  
DATA gs_grid TYPE lvc_s_glay.   "新

创建ALV变量及子例程

INITIALIZATION .  
  
  PERFORM frm_set_titlebar.  
  
at SELECTION-SCREEN.  
  
  
at SELECTION-SCREEN OUTPUT .  
  
START-OF-SELECTION .  
  PERFORM frm_set_titlebar.  
  
PERFORM get_data .  
  
END-OF-SELECTION .  
  
  
PERFORM diaplay_data .  
  
  
*&---------------------------------------------------------------------*  
*& Form get_data  
*&---------------------------------------------------------------------*  
*& text  
*&---------------------------------------------------------------------*  
*& -->  p1        text  
*& <--  p2        text  
*&---------------------------------------------------------------------*  
FORM get_data .  
"select *  from  ZWDEMOTABLE1 as a into CORRESPONDING FIELDS OF TABLE gt_DAta .  
select doccode ,zrowid ,matcode ,matname ,uom ,MEmo   from  ZWDEMOTABLE1 as a into  TABLE @gt_DAta .  
"select doccode zrowid matcode matname uom MEmo   from  ZWDEMOTABLE1 as a into  TABLE gt_DAta .  
  
  
LOOP AT gt_DAta into gs_data.  
  
 IF gs_data-uom = '双'.  
   gs_data-msg = '这个单位是' &&  gs_data-uom && '是红灯' .  
  
    gs_data-light = icon_led_red.  
ELSE.  
     gs_data-msg = '这个单位是' &&  gs_data-uom && '是绿灯' .  
  
    gs_data-light = icon_led_green.  
  
  
 ENDIF.  
   MODIFY gt_DAta FROM gs_data .  
CLEAR gs_data .  
ENDLOOP.  
ENDFORM.  
  
  
FORM diaplay_data .  
  
   PERFORM set_alv_layout.  
  PERFORM bulid_fieldcat.  
  PERFORM call_alv_func.  
  
ENDFORM.  
  
  
FORM set_alv_layout .  
  CLEAR: wa_layout.  
  wa_layout-zebra      = 'X'.      "斑马线  
  "wa_layout-cwidth_opt = 'X'.      "自动列宽  
  
  
ENDFORM.  
  
  
FORM bulid_fieldcat .  
DEFINE add_col.  
  
*    ADD 1 TO pos.  
*    lw_fieldcat-col_pos = pos.  
    wa_fieldcat-fieldname = &1.  
    wa_fieldcat-ref_field = &2.  
    wa_fieldcat-ref_table = &3.  
    wa_fieldcat-scrtext_l = &4.  
    wa_fieldcat-outputlen = &5.  
    wa_fieldcat-no_zero = &6.  
    wa_fieldcat-edit = &7.  
    wa_fieldcat-edit_mask = &8.  
    wa_fieldcat-key = &9.  
  
  
   CASE  wa_fieldcat-fieldname.  
     WHEN 'MSG' .  
  
    wa_fieldcat-outputlen = '40'    .  
"      WHEN 'slbox'.  
" wa_fieldcat-checkbox = 'X' .  
" wa_fieldcat-edit = 'X' .  
"  wa_fieldcat-edit_mask = 'X'.  
"   WHEN 'VBELN' .  
" wa_fieldcat-HOTSPOT = 'X' .  
" WHEN 'KBETR'.  
"   wa_fieldcat-decimals_o = 2 .  
"   WHEN 'FKIMG' .  
"     wa_fieldcat-decimals_o = 0 .  
  
  
      WHEN OTHERS.  
ENDCASE .  
  
    APPEND wa_fieldcat TO gt_fieldcat.  
  
  CLEAR : wa_fieldcat.  
  END-OF-DEFINITION.  
  REFRESH: gt_fieldcat.  
CASE SY-tcode .  
  WHEN 'ZDE001'.  
  
  add_col 'LIGHT'     space space '状态灯'      space space space space space.  
  add_col 'MSG'     space space '消息'           space space space space space.  
  
  add_col 'DOCCODE'     space space '单号'           space space space space space.  
  add_col 'ZROWID'     space space 'rowid'           space space space space space.  
  "add_col 'MATCODE'     space space '料号'           space space space space space.  
  "add_col 'MATNAME'     space space '料名'           space space space space space.  
  "add_col 'UOM'     space space '单位'           space space space space space.  
  "add_col 'MEMO'     space space '备注'           space space space space space.  
  WHEN 'ZSD001A'.  
      add_col 'MATCODE'     space space '料号'           space space space space space.  
  add_col 'MATNAME'     space space '料名'           space space space space space.  
  add_col 'UOM'     space space '单位'           space space space space space.  
  add_col 'MEMO'     space space '备注'           space space space space space.  
  WHEN OTHERS.  
ENDCASE.  
  
  
ENDFORM.  
  
  
  
FORM call_alv_func .  
DATA :gt_event TYPE slis_t_event,  
        gs_event TYPE slis_alv_event.  
  
  
  
 " MOVE 'DATA_CHANGED'     TO gs_event-name.  
 " MOVE 'ALV_DATA_CHANGED' TO gs_event-form.  
  APPEND gs_event TO gt_event.  
  
  gs_grid-edt_cll_cb = abap_true.     " 选中复选款,立刻触发data changed 事件  
  
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'  
    EXPORTING  
      i_callback_program       = sy-repid           "回调程序  
      i_callback_pf_status_set = 'SET_PF_STATUS'  
      i_callback_user_command  = 'USER_COMMAND'  
      i_grid_settings          = gs_grid  
      is_layout_lvc            = wa_layout  
      it_fieldcat_lvc          = gt_fieldcat        "需要显示的内表的列  
      i_save                   = 'A'  
      it_events                = gt_event  
    TABLES  
      t_outtab                 = gt_DAta         "需要显示的数据  
    EXCEPTIONS  
      program_error            = 1  
      OTHERS                   = 2.  
  IF sy-subrc <> 0.  
  ENDIF.  
ENDFORM.  
  
  
  
  
FORM frm_set_titlebar .  
  CASE sy-tcode.  
    WHEN 'ZDE001'.  
      SET TITLEBAR  'ZTB1' WITH 'demo报表1'.  
  
    WHEN 'ZDE001A'.  
      SET TITLEBAR  'ZTB1' WITH  'demo报表1A'.  
  ENDCASE.  
  
ENDFORM.

双击ZTB1 创建对应的字段对象,注意需要激活
image.png

image.png

结果

image.png
如图 通过不同TCODE 控制展示出不同的ALV数据及抬头内容 .

技术总计

今天讲述的内容是如何通过SET_TITILEBAR 设置同一程序实现不同的TOCDE, 满足用的的需求. 通过使用该功能及其他逻辑联合使用,我们只需要一遍代码+少量修改就可以实现两个或者多个TOCODE 的内容

百里鸡汤

学练并举,成竹在胸,敢问逐鹿群雄今何在?师生同志,协力攻关,笑看燕赵魁首谁人得.

这里是百里,一个努力的学习者. 努力学习好好记录,点滴进步,就是成功.

wallhaven-kx3p1q.jpg

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。