我的编程空间,编程开发者的网络收藏夹
学习永远不晚

APAP ALV进阶写法及优化详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

APAP ALV进阶写法及优化详解

先导

上一期讲了在ABAP中,ALV的普通写法,流程以及相关属性,还讲了基本DEMO ,但是在真正开发中,不会写这么多的代码.原则上是一切从简. o( ̄︶ ̄)oo( ̄︶ ̄)o.今天讲下如何用少的代码,标准套路,实现ALV基本功能,满足开发生产需求.

流程搭建

万变不离其宗,首先书写的还是流程,比如让你写一个某某查询报表. 上来啥都不用想你先这么写

*数据准备
*常规定义变量,内表结构,工作区,内表,包。。。。
你的代码
*系统变量准备
*如layout,fieldcat 等 系统变量
你的代码
*选择屏幕
你的代码
*INITIALIZATION
*at SELECTION-SCREEN .
"START-OF-SELECTION
"End-OF-SELECTION .
“子例程及自定义宏

流程讲解

INITIALIZATION.

该事件在屏幕未显示之前执行,对程序设置值及屏幕元素进行初始化赋值。一般作用就是初始值设定,如选择屏幕的数据赋值,默认参数赋值等。

at SELECTION-SCREEN!

1:选择屏幕事件,有很多参数,代表不同的扩展信息

2:在这个事件响应中,可以对屏幕字段进行有效性检验,控制屏幕元素的属性等。

START-OF-SELECTION

该事件在单击按钮后触发,一般是数据初始化,数据处理操作的地方

End-OF-SELECTION .

该事件应用于所有数据选择处理完成,

即START-OF-SELECTION相关执行事件执行完成,

但输出屏幕还未显示之前 在实际的应用于一些执行结果的检验等。

一般做为ALV展示及用户操作按钮事件等。

演练

这里写一个简单的物料明细查询报表 ,知识点用到了,宏,循环,opensql,用户事件等内容。

数据准备

TABLES : MARA .
*数据准备
"定义结构
TYPES : BEGIN OF gw_Data ,
    MATNR TYPE MATNR ,
    MEINS TYPE MEINS ,
    MAKTX TYPE MAKTX ,
  end of gw_Data .
"定义工作区及内表
data : gs_data TYPE gw_Data .
data :gt_data TYPE table of gw_Data .
"alv 数据
*--------------------------------------------------------------------*
*  通用ALV变量
*--------------------------------------------------------------------*
DATA: wa_layout   TYPE lvc_s_layo.
DATA:wa_fieldcat TYPE lvc_s_fcat,
     gt_fieldcat TYPE lvc_t_fcat.
DATA:gs_glay TYPE  lvc_s_glay.
DATA : gv_error TYPE c.
DATA : BS1 TYPE C.

选择屏幕

SELECTION-SCREEN BEGIN OF BLOCK BLOCK  WITH FRAME TITLE TEXT-001 .
  PARAMETERS  p_p1  TYPE mara-matnr OBLIGATORY.   "料号
  SELECTION-SCREEN END OF BLOCK BLOCK .

INITIALIZATION  .

INITIALIZATION  .
%_p_p1_%_app_%-text = '物料号'.  "设定选择屏幕初始化名称

at SELECTION-SCREEN .

at SELECTION-SCREEN .
PERFORM check_auth .  "权限检查

START-OF-SELECTION    .

START-OF-SELECTION    .
PERFORM get_DAta  .  "获取数据属性

END-OF-SELECTION .

End-OF-SELECTION .
PERFORM diaplay_data.   "展示alv

子程序和宏

以下程序都使用新语法.不懂新语法后续会出相关内容

"获取数据子程序
FORM get_DAta . 
select a~matnr,a~MEINS,b~maktx   
from mara as a inner join makt as b 
on a~matnr = b~MATNR where a~ZMATNR = @p_p1 into table @data(lt_outdata) .
ENDFORM .
*展示alv 子程序 直接复制
FORM diaplay_data . 
PERFORM set_alv_layout.   "样式设定
PERFORM bulid_fieldcat.   "格式设定
PERFORM call_alv_func.    "alv 函数
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 'slbox'.
 wa_fieldcat-checkbox = 'X' .
 wa_fieldcat-edit = 'X' .
  wa_fieldcat-edit_mask = 'X'.
      WHEN OTHERS.
ENDCASE .
    APPEND wa_fieldcat TO gt_fieldcat.
  CLEAR : wa_fieldcat.
  END-OF-DEFINITION.
  REFRESH: gt_fieldcat.
  "add_col 'matnr'     space space '物料号'           space space space space space.
  add_col 'MEINS'     space space '单位'           space space space space space.
  add_col 'maktx'     space space '物料名'           space space space space space.
ENDFORM.
"刷新 固定复制
FORM refresh_alv .
  DATA: lo_grid   TYPE REF TO cl_gui_alv_grid,
        lw_stable TYPE lvc_s_stbl.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = lo_grid.
  lw_stable-row = 'X'.
  lw_stable-col = 'X'.
  lo_grid->refresh_table_display(
    EXPORTING
      is_stable = lw_stable
    EXCEPTIONS
      finished  = 1
      OTHERS    = 2 ).
ENDFORM.
"固定,只需要传内表就行
FORM call_alv_func .
  gs_glay-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_glay
      is_layout_lvc            = wa_layout
      it_fieldcat_lvc          = gt_fieldcat        "需要显示的内表的列
      i_save                   = 'A'
    TABLES
      t_outtab                 =    lt_outdata      "需要显示的数据
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
  ENDIF.
ENDFORM.
"staus  工具栏 直接复制
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  DATA : lw_tab LIKE LINE OF rt_extab.
  REFRESH rt_extab.
 SET PF-STATUS 'STD' EXCLUDING rt_extab.
ENDFORM.
"用户事件 ,这里没写. 但是如果设定函数双击会apap dump 
FORM user_command  USING r_ucomm LIKE sy-ucomm
                         rs_selfield TYPE slis_selfield.
  CASE r_ucomm.
*   导入
    WHEN '&IMPLE'.
  ENDCASE.
ENDFORM.
"权限检查,按照不同的情况调用不同的函数,这里需要更换.
*&---------------------------------------------------------------------*
*& Form check_auth
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM check_auth .
"select  SINGLE WERKS, KUNNR  into  @data(ls_t001w) from  t001w  WHERE WERKS  = @p_p1  .
 AUTHORITY-CHECK OBJECT 'M_MSEG_WMB'
  ID 'ACTVT'  DUMMY
  ID 'WERKS' FIELD p_p1 .
IF sy-subrc <> 0.
* Implement a suitable exception handling here
ENDIF.
ENDFORM.

以上就为一个alv 的写法 ,其中 70%以上的代码是固定的.

自己需要写的地方, 选择屏幕,获取数据 ,数据处理,用户事件,权限. 这四个地方.

总结

相比较上一个demo 这个例子代码少了很多, 但是比其他语言来讲还是太复杂了.

大部分还是套路,固定这么写,就可以. 主要还是在程序及逻辑操作上.

使用新语法可以减少很多不必要的操作,比如定义结构,内表,关联等.

以上就是APAP ALV进阶写法及优化详解的详细内容,更多关于APAP ALV写法优化的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

APAP ALV进阶写法及优化详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++ 递归进阶:理解尾递归优化及其应用

尾递归优化 (tro) 可提高特定递归调用的效率。它将尾递归调用转换为跳转指令,并将上下文状态保存在寄存器中,而不是堆栈上,从而消除对堆栈的额外调用和返回操作,提高算法效率。利用 tro,我们可以针对尾递归函数(例如阶乘计算)进行优化,通过
C++ 递归进阶:理解尾递归优化及其应用
2024-04-30

Mysql模糊查询优化方法及测试详细讲解

目录无优化左前缀like普通索引左前缀索引右后缀索引非索引优化LOCATEPOSITIONINSTR上文讲到了解决mysql 模糊查询的主要方法,还是使用全文索引,本文讲到其他相关的模糊插叙优化;同样进行耗时对比结论:除了使用索引相关的方
2023-05-15

Python实现二分法查找及优化的示例详解

二分查找法(Binary Search)是一种在有序数组中查找某一特定元素的算法,在本文中,我们将使用 Python 实现二分查找算法,并深入探讨算法的原理和实现细节,感兴趣的可以了解一下
2023-05-16

Vue3使用路由及配置vite.alias简化导入写法的过程详解

这篇文章主要介绍了Vue3使用路由及配置vite.alias简化导入写法,本文通过实例代码给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-11-16

node.js基于fs模块对系统文件及目录进行读写操作的方法详解

本文实例讲述了node.js基于fs模块对系统文件及目录进行读写操作的方法。分享给大家供大家参考,具体如下: 如果要用这个模块,首先需要引入,fs已经属于node.js自带的模块,所以直接引入即可var fs = require('fs')
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录