在利用模式快速规范开发ABAP代码中,我们讨论了模式的基本特性和用法,以及如何创建自己的模式。我将进一步介绍,并演示如何将动态元素添加到模式中,从而使开发过程更加简化。

SAP ABAP Dynamic Pattern

1. 什么是动态模式

在常规(静态)模式中,只有ABAP代码和一些注释。有用,但不是非常复杂。然而,使用动态模式,您可以模拟内置模式的行为:获取参数(例如结构名称),进行一些处理,根据输入生成输出。

作为一个示例,我们将创建一个动态模式,该模式将前文中的代码注释中的开发人员、请求号等信息动态填充到注释中。

2. 创建动态模式

要在SAP ERP中创建动态模式,只需执行利用模式快速规范开发ABAP代码中讨论的创建模式的步骤:选择实用程序>更多实用程序>编辑模式>创建模式,然后输入模式的名称。它将只包含以下代码行,不包含其他内容:

*$&$MUSTER


然后为模式创建一个函数,函数的格式如下,
_EDITOR_EXIT
当调用模式是,程序会调用函数模式对应的函数。
我们需要创建一个函数ZDP_EDITOR_EXIT,使用一个名为BUFFER的RSWSOURCET类型的TABLES参数创建函数模块。

在这个功能模块中,您现在可以对动态模式做任何想做的事情。您拥有正常对话编程的所有可能性。例如,您可以使用弹出窗口向用户请求输入,就像我在本例中所做的那样(在下面找到我的示例代码)。
我们可以使用函数模块POPUP_GET_VALUES向用户请求一些输入。也可以自己创建Dialog屏幕来获取输入的信息,然后将这些信息拼接成我们需要的备注信息。

录入基本信息:

插入效果:

3. 详细代码

     FUNCTION zdp_editor_exit.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      BUFFER TYPE  RSWSOURCET
*"----------------------------------------------------------------------"Pattern格式
*----------------------------------------------------------------------*
* Object          :  <开发对象,如程序名、增强,类等等>
* FS ID           :  <开发需求编号,如AM0014>
* Functional Owner:  <业务顾问>
* Description     :  <功能描述,如果内容太多,请换行>
*                    <功能描述>
*----------------------------------------------------------------------*
* TR No.      Date         Author      Description
* S4DK946420  2020.09.18   梁子华      初始版本
*
*----------------------------------------------------------------------*CONSTANTS lc_spit_line TYPE stringVALUE '*----------------------------------------------------------------------*'.CONSTANTS lc_blank_line TYPE string VALUE '*                      '.DATA: BEGIN OF ls_buffer_basic,id(22)    TYPE c,value(51) TYPE c,END OF ls_buffer_basic,lt_buffer_basic LIKE TABLE OF ls_buffer_basic.DATA: BEGIN OF ls_buffer_version,trno        TYPE text12,date        TYPE text12,author      TYPE text12,description TYPE text36,END OF ls_buffer_version,lt_buffer_version LIKE TABLE OF ls_buffer_version.DATA: ls_buffer       TYPE text72,lt_desc         TYPE TABLE OF string,lv_date_version TYPE char10."弹出窗口,获取基本信息(业务顾问、开发人员、TR号码)CLEAR: zbc_pattern_zdp.zbc_pattern_zdp-fsid         = ''.zbc_pattern_zdp-func_owner   = ''.SPLIT sy-title AT space INTO TABLE DATA(lt_title_tab).DATA(lv_title_lines) = lines( lt_title_tab ).READ TABLE lt_title_tab INTO DATA(ls_title) INDEX lv_title_lines.IF sy-subrc EQ 0.zbc_pattern_zdp-object = ls_title. "更改对象ENDIF.LOOP AT lt_title_tab INTO ls_title.CASE ls_title.WHEN '报表'.EXIT.WHEN '函数构建器:更改'.EXIT.WHEN OTHERS.ENDCASE.ENDLOOP.CASE ls_title.WHEN '报表'.SELECT SINGLE textFROM trdirtWHERE name  = @zbc_pattern_zdp-objectAND sprsl = @sy-languINTO @zbc_pattern_zdp-desc_func.WHEN '函数构建器:更改'.SELECT SINGLE stextFROM tftitWHERE spras  = @sy-languAND funcname = @zbc_pattern_zdp-objectINTO @zbc_pattern_zdp-desc_func.WHEN OTHERS.ENDCASE.zbc_pattern_zdp-trno         = ''.zbc_pattern_zdp-user_dev     = sy-uname.zbc_pattern_zdp-date_version = sy-datum.zbc_pattern_zdp-desc_version = TEXT-001. "初始版本PERFORM frm_get_username_dev.CALL SCREEN 0001 STARTING AT 5 5ENDING AT 80 13.CHECK zbc_pattern_zdp-modified = abap_true.APPEND lc_spit_line TO buffer[]."开发对象基本信息lt_buffer_basic = VALUE #( BASE lt_buffer_basic( id = '* Object          : ' value = zbc_pattern_zdp-object )     "基本信息( id = '* FS ID           : ' value = zbc_pattern_zdp-fsid )       "( id = '* Functional Owner: ' value = zbc_pattern_zdp-func_owner ) ")."功能描述,如果内容太多,请换行,将描述拆分成25字符个长度的行PERFORM frm_split_text USING zbc_pattern_zdp-desc_func25CHANGING lt_desc.LOOP AT lt_desc INTO DATA(ls_desc).IF sy-tabix = 1.lt_buffer_basic = VALUE #( BASE lt_buffer_basic( id = '* Description     :' value = ls_desc )).ELSE.lt_buffer_basic = VALUE #( BASE lt_buffer_basic( id = '* ' value = ls_desc ) ).ENDIF.ENDLOOP.LOOP AT lt_buffer_basic INTO ls_buffer_basic.CONCATENATE ls_buffer_basic-id  ls_buffer_basic-value INTO ls_buffer  RESPECTING BLANKS.APPEND ls_buffer TO buffer[].ENDLOOP.APPEND lc_spit_line TO buffer[]. "插入拆分行"变更版本信息lt_buffer_version = VALUE #( BASE lt_buffer_version(trno        = 'TR No.'date        = 'Date'author      = 'Author'description = 'Description') )."变更日期,格式YYYY.MM.DDCLEAR: ls_buffer.lv_date_version =  zbc_pattern_zdp-date_version+0(4) && '.'  &&zbc_pattern_zdp-date_version+4(2) && '.'  &&zbc_pattern_zdp-date_version+6(2) ."变更版本描述CLEAR: lt_desc.PERFORM frm_split_text USING zbc_pattern_zdp-desc_version16CHANGING lt_desc.LOOP AT lt_desc INTO ls_desc.IF sy-tabix = 1.lt_buffer_version = VALUE #( BASE lt_buffer_version(trno        = zbc_pattern_zdp-trnodate        = lv_date_versionauthor      = zbc_pattern_zdp-username_devdescription = ls_desc) ).ELSE.lt_buffer_version = VALUE #( BASE lt_buffer_version (  description = ls_desc  ) ).ENDIF.ENDLOOP.LOOP AT lt_buffer_version INTO ls_buffer_version.CONCATENATE '* ' ls_buffer_version-trnols_buffer_version-datels_buffer_version-authorls_buffer_version-descriptionINTO ls_buffer  RESPECTING BLANKS.APPEND ls_buffer TO buffer[].ENDLOOP.ls_buffer = '*'.APPEND ls_buffer TO buffer[].APPEND lc_spit_line TO buffer[].ENDFUNCTION."根据自定义需求拆分文本
FORM frm_split_text USING uv_textuv_split_len TYPE iCHANGING ct_text TYPE STANDARD TABLE.DATA: lv_strlen TYPE i,lv_text   TYPE string.CLEAR: lv_text.lv_text = uv_text.DO  .lv_strlen = strlen( lv_text ).IF lv_strlen LE uv_split_len.APPEND lv_text TO ct_text .EXIT.ELSE.APPEND lv_text+0(uv_split_len) TO ct_text .SHIFT lv_text BY uv_split_len PLACES.CONDENSE lv_text.ENDIF.ENDDO.
ENDFORM.

ABAP动态模式(Dynamic Pattern)相关推荐

  1. 【ABAP】模式(Pattern)创建与使用

    一.模式的创建 在ABAP编辑界面按照如下的路径创建模式. 在弹出框中输入模式名. 即可进入模式编辑页面,按照自身的编码规则进行模式编辑,最后保存. Tip: 模式的最大限度为100行. 二.模式的使 ...

  2. ABAP动态生成经典应用之Dynamic SQL Excute 程序

    开发说明:在SAP的系统维护过程中,有时我们需要修改一些Table中的数据,可是很多Table又不能直接在Tcode:SE16中修改,使用的SAP ID又没有调试数据修改权限,这时我们应该怎么样修改数 ...

  3. 频繁模式(frequent pattern)

    Datawhale 频繁模式(frequent pattern) 频繁模式一般是指频繁地出现在数据集中的模式.这种频繁模式和关联规则是数据挖掘中想要挖掘的知识. 我们都知道一个很有趣的故事,就是啤酒和 ...

  4. 解读设计模式----策略模式(Strategy Pattern)

    一.模式概述      策略模式(Strategy Pattern)在外形上与状态模式很相似,但在意图上有些不同.其意图是使这些算法可以相互替换,并提供一种方法来选择最合适的算法.       在我应 ...

  5. aspen稳态导出动态_Aspen Dynamic 针对精馏塔的模拟设计过程详解 | APP技术稿第1期...

    化工之模拟,本发端于生产实践,虽以数学模型归纳,数值算法解析,倘敝帚自珍,无化工生产之真实数据比对,全失其模拟之初衰.模拟之道,上应造化之理,下具知著之行.ASPEN PLUS能完整模拟化工的稳态工艺 ...

  6. 第五章--第三节:设计复用模式(pattern)

    第五章:面向软件构造的可复用性的构建方法 第三节:设计复用模式(pattern) 问题一:复用模式的类型 Creational patterns 创建型模式 Structural patterns 结 ...

  7. 原型模式(Prototype Pattern)

    原型模式(Prototype Pattern) 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

  8. ABAP动态编程-动态生成子例程和本地类-GENERATE SUBROUTINE POOL

    目录 前言 1. 动态生成子例程并调用 2. 动态生成本地类并调用 前言 本文为ABAP编程中动态生成子例程/本地类的简单示例,依托语句GENERATE SUBROUTINE POOL实现. 1. 动 ...

  9. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

最新文章

  1. Linux之Vim文本代码编辑神器应用get技巧
  2. qml demo分析(threading-线程任务)
  3. python3.6.5安装教程-Centos7 安装Python3.6.5步骤
  4. Ubuntu下利用JDK的Keytool配置Tomcat7.0的SSL协议(单向认证简易版)
  5. C++ Primer 5th笔记(chap 16 模板和泛型编程)实例化
  6. Java获取指定月份的最后一天
  7. 修改打印机ip工具_使用富士施乐一体机因动态IP导致不能打印与扫描的解决方法...
  8. 饥荒联机版连不上服务器_饥荒联机版无法连接klei服务器及刷不出服务器解决方法一览...
  9. 在java中为什么_属性绑定到类型_方法绑定到对象_13. Java基础之类型信息(RTTI和反射)...
  10. 未能连接到许可证服务器 发生错误 -96,ug启动许可证错误怎么办 UG软件启动许可证错误96解决方法...
  11. 平安证券:维持超图软件“强烈推荐”评级
  12. 防止sql注入:替换危险字符
  13. 基于决策树的保险案列
  14. 开宗明义—UEFI介绍 (一)
  15. 强化学习经典算法笔记(十七):A3C算法的PyTorch实现
  16. mysql随机生成 姓名+电话
  17. php shopex,shopex官网 用PHP为SHOPEX增加日志功能代码
  18. Jmeter配置元件之授权管理器HTTP Authorization Manager
  19. 计算机网络中常用的互联设备,计算机网络的互联技术
  20. tomcat localhost log 和 tomcat catalina log分别是什么日志

热门文章

  1. 千里马:电子合同赋能工程机械行业数字化创新
  2. 烂泥:OpenLDAP安装与配置
  3. ERROR: cannot launch node of type [fake_localization/fake_localization]: fake_localization
  4. 详解边缘计算系统逻辑架构:云、边、端协同
  5. Java splash screen
  6. 圣诞树代码,c语言编程,基于graphics.h
  7. 5G NSA 和SA 介绍
  8. ESP8266 下载模式 GPIO 研究
  9. MATLAB视频截取和缩放
  10. python mel