APAP ALV进阶写法及优化详解

目录
  • 先导
  • 流程搭建
  • 流程讲解
    • INITIALIZATION.
    • at SELECTION-SCREEN!
    • START-OF-SELECTION
    • End-OF-SELECTION .
  • 数据准备
  • 选择屏幕
    • INITIALIZATION  .
    • at SELECTION-SCREEN .
    • START-OF-SELECTION    .
    • END-OF-SELECTION .
  • 子程序和宏
  • 总结

先导

上一期讲了在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写法优化的资料请关注我们其它相关文章!

(0)

相关推荐

  • ABAP ALV最常规写法及常用功能详解

    目录 先导 流程顺序 开发ALV的基本流程: ALV 界面介绍 ALV 开发注意事项 ALV 基本参数 ALV 对象参数 ALV 参数控制Layout ALV 参数控制Fieldcat ALV定义事件 ALV DEMO 1:声明alv 2:定义内表 3:读取数据 4:字段配置 ALV格式控制. 着重解释 5:定义事件 6:排序(常用功能) 7:显示alv数据 8:按钮操作标题栏等配置 总结 先导 记得刚学ABAP的时候问这问那,问东问西,常常一个可能不怎么用的东西,扣了好久好久.群里的大佬就说,

  • APAP ALV进阶写法及优化详解

    目录 先导 流程搭建 流程讲解 INITIALIZATION. at SELECTION-SCREEN! START-OF-SELECTION End-OF-SELECTION . 数据准备 选择屏幕 INITIALIZATION  . at SELECTION-SCREEN . START-OF-SELECTION    . END-OF-SELECTION . 子程序和宏 总结 先导 上一期讲了在ABAP中,ALV的普通写法,流程以及相关属性,还讲了基本DEMO ,但是在真正开发中,不会写这

  • Android Gradle同步优化详解

    目录 动态修改gradle配置 hook agp ProjectsServices 方法签名检查是否存在support包 年初开始我们就开始了关于Gradle Sync阶段的优化.之前和大家都简单的介绍过工程相关的背景情况了,我们大概有400+的Module,然后一次的同步时间就非常的慢,我们迫切的需要对这个问题进行优化.大部分工作都是和团队内的同学一起完成的,我也只出了一点点力而已. 这次写文章真的很倒霉,之前忘了保存导致要重新开始写了.如果不是白嫖了掘金的端午礼盒,拿人手短啊,我已经打算鸽了

  • ios开发UITableViewCell图片加载优化详解

    目录 前言 图片自适应比例 XHWebImageAutoSize 仅加载当前屏幕的内容 预加载 前言 我们平时用UITableView用的很多,所以对列表的优化也是很关注的.很多时候,我们设置UIImageView,都是比例固定好宽高的,然后通过 scaleAspectFill 和 clipsToBounds 保持图片不变形,这样子做开发的效率是很高的,毕竟图片宽高我们都是固定好的了. 那如果产品要求图片按真正的比例展示出来呢?如果服务器有返回宽和高,那就好办了,那如果没有呢,我们应该怎么去做呢

  • C语言学习进阶篇之万字详解指针与qsort函数

    目录 前言 函数指针 代码一 代码二 函数指针数组 函数指针数组的用途 计算器的基本代码 函数指针实现简单的计算机 函数指针数组实现简单计算机 指向函数指针数组的指针 回调函数 简单的冒泡排序 冒泡排序的优化 qsort函数 qsort函数介绍 qsort实现冒泡排序 qsort排序结构数据 模拟实现qsort函数 写在最后 前言 前面学到了字符指针,指针数组是一个存储指针的数组,数组指针是一个指向函数的指针,数组参数和指针参数.其中不乏有很多需要注意的知识点,例如:&数组名和数组名表示的含义,

  • JS 加载性能Tree Shaking优化详解

    目录 正文 什么是 Tree Shaking 寻找 Tree Shaking 的机会 防止 Babel 将 ES6 模块转换为 CommonJS 模块 留意 side effects 只导入你需要的 更复杂的情况 总结 正文 随着 web 应用复杂性增加,JS 代码文件的大小也在不断的攀升,截住 2021年9月,在 httparchive 上有统计显示——在移动设备上 JS 传输大小大约为 447 KB,桌面端 JS 传输大小大约为 495 KB,注意这仅仅是在网络中传输的 JS 文件大小,JS

  • spring Boot与Mybatis整合优化详解

    SpringBoot官方文档http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ 关于spring-boot与mybatis整合优化方面的介绍,就是Mybatis-Spring-boot-starter的介绍: 1.取消spring-mybatis.xml配置 ①自动检测已存在的Datasource 之前,需要在spring-mybatis.xml中配置datasource的Bean,现在只需要在applicat

  • JavaScript中闭包的写法和作用详解

    1.什么是闭包 闭包是有权访问另一个函数作用域的变量的函数. 简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内.而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数和声明的其他内部函数.当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包. 2.变量的作用域 要理解闭包,首先要理解变量的作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变

  • Python进阶-函数默认参数(详解)

    一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2): r = 1 while n > 0: r *= x n -= 1 return r 这样在调用pow函数时,就可以省略最后一个参数不写: print(pow(5)) # output: 25 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: 设置何种参数为默认参数?一般来说,将参数值变化小的设置为默认参数. python标准库实践 python内建函数: prin

  • 基于Tomcat安全配置与性能优化详解

    Tomcat 是 Apache软件基金会下的一个免费.开源的WEB应用服务器,它可以运行在 Linux 和 Windows 等多个平台上,由于其性能稳定.扩展性好.免费等特点深受广大用户喜爱.目前,很多互联网应用和企业应用都部署在 Tomcat 服务器上,比如我们公司,哈. 之前我们 tomcat 都采用的是默认的配置,因此在安全方面还是有所隐患的.上周对测试环境的所有服务器的tomcat都做了安全优化,其间也粗略做了一些性能优化,这里就简单记录分享下! 一.版本安全 升级当前的tomcat版本

  • 基于Python中单例模式的几种实现方式及优化详解

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. 比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息.如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪

随机推荐