SAP入门技术分享三:模块化程序

news2024/11/24 2:55:25

模块化程序

  • 1.子程序概要
  • 2.子程序定义
  • 3.子程序参数
    • (1)传递参数的方法
    • (2)定义参数类型
    • (3)参数与结构体
    • (4)参数与内表
    • 4.调用子程序
    • (1)调用程序内部子程序
    • (2)调用程序外部子程序
    • (3)动态调用子程序
  • 5.结束子程序
  • 6.临时动态子程序
  • 7.PERFORM ON COMMIT
    • (1)PERFORM ON COMMIT
    • (2)PERFORM ON ROLLBACK
    • (3)局部Macro(宏)
    • (4)全局Macro(宏)
    • 8.函数概要
  • 9.创建函数组
  • 10.函数
    • (1)属性
    • (2)传入参数
    • (3)传出参数
    • (4)传入/传出参数
    • (5)表参数
    • (6)例外处理
  • 11.RFC

1.子程序概要

  定义:把有具体功能的代码集合在一起的程序块,可以重复使用。

2.子程序定义

  FORM ENDFORM定义;
  PERFORM调用;
  命名:动词+宾语。

3.子程序参数

  实参:调用子程序时使用;
  虚参:在子程序中使用;
  分类:USING、CHANGING。
  例子:
在这里插入图片描述

(1)传递参数的方法

在这里插入图片描述
  Call by Value:使用USING关键字传递时与VALUE语句一起搭配使用。
在这里插入图片描述
  注:实参和虚参占有自己单独的内存空间,改变虚参的值不会影响实参。
  Call by Reference:使用CHANGING关键字传递参数的情况。
在这里插入图片描述
注:虚参没有自己的内存空间,只是在调用子程序时占用实参的地址,改变虚参的值会影响实参。
区别:若在子例程FORM语句中不使用VALUE语句,则USING与CHANGING语句功能是相同的,将USING代表传递数据,CHANGING代表传递数据后变更其值。
  为了避免发生实参值在调用子程序后不被修改的情况,当使用USING时要与VALUE语句搭配使用,无法修改实参值。
  Call by Value and Result:
在这里插入图片描述
  当CHANGING语句和VALUE语句搭配使用时,会修改实参值。

(2)定义参数类型

  子例程中的虚参可以利用TYPE与LIKE语句定义所有的ABAP数据类型。若不明确指定类型,则被定义为Generic类型,继承实参的技术属性。
  虚参的定义方法有如下三种:
在这里插入图片描述

(3)参数与结构体

  当结构体当作参数使用时,不仅能使用TYPE、LIKE语句定义,还可以使用STRUCTURE语句定义结构体类型。
在这里插入图片描述

(4)参数与内表

A.USING、CHANGING语句
  当子程序参数为内表时也可以使用关键字USING、CHANGING。
在这里插入图片描述
  若用TYPE ANY TABLE指定了参数,则在子例程中要改成动态形式。
  使用内表指定参数也有下列三种方法:
在这里插入图片描述
B.TABLES语句
  使用TABLES语句定义虚参,不支持相同的物理内存地址。
在这里插入图片描述

4.调用子程序

  调用子程序的方法有Internal、External两种。通过PERFORM语句既可以调用内部子程序,还可以调用其他程序的子程序。
在这里插入图片描述

(1)调用程序内部子程序

  只要用PERFORM语句指定FORM名就可以实现。

(2)调用程序外部子程序

  调用外部程序的子程序时首先要利用IF FOUND语句检查是否存在该子程序。
在这里插入图片描述

(3)动态调用子程序

  调用外部程序的子程序时可以动态地指定名字。

5.结束子程序

  用ENDFORM结束子程序,还可以利用EXIT、CHECK语句强制在执行过程中结束此子程序。
  遇到EXIT语句:直接跳出子程序。
  遇到CHECK语句:判断值为假时跳出子程序。
  例子:
在这里插入图片描述

6.临时动态子程序

  语法:
  
  可以用上面的语法创建子程序池,将子程序池的代码插入到内表中。
  常用:动态定义内表。
  例子:
在这里插入图片描述

7.PERFORM ON COMMIT

  如果调用子程序时使用ON COMMIT/ROLLBACK选项,则每当遇到COMMIT WORK或者ROLLBACK WORK语句时才执行此FORM。

(1)PERFORM ON COMMIT

  遇到COMMIT WORK时调用子程序。

(2)PERFORM ON ROLLBACK

  遇到COMMIT ROLLBACK时调用子程序。
  例子:
在这里插入图片描述

(3)局部Macro(宏)

在这里插入图片描述
  例子:
在这里插入图片描述

(4)全局Macro(宏)

  全局宏Macro在数据库表TRMAC中进行维护,经常使用的全局Macro中包含指定断点时用的BREAK语句。
在这里插入图片描述
  注:如果双击ABAP命令,出现下列消息,就意味着是全局Macro。
在这里插入图片描述

8.函数概要

  定义:函数是储存在中央库中的特殊全局子程序。
  内容:传入参数、传出参数、传入/传出参数表、例外处理。
  与子例程的区别:
在这里插入图片描述
  函数组:通过函数编辑器创建函数和函数组,则系统会自动生成主程序及共享程序。
  主程序名字自动由SAPL+函数组名组成,且函数组的INCLUDE主程序如下:
在这里插入图片描述

9.创建函数组

在这里插入图片描述

10.函数

(1)属性

在这里插入图片描述
在这里插入图片描述

(2)传入参数

在这里插入图片描述
在这里插入图片描述

(3)传出参数

在这里插入图片描述
在这里插入图片描述

(4)传入/传出参数

  与调用此函数的ABAP程序可以同时传入/传出参数。
在这里插入图片描述

(5)表参数

  表参数可以传递复数值。
在这里插入图片描述
在这里插入图片描述

(6)例外处理

在这里插入图片描述
在这里插入图片描述

11.RFC

  (1)目的:充当源系统和R/3系统的数据接口。
  (2)设置:创建函数时设置成远程启用的模块。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/158230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android APP 缓存路径

Context.getCacheDir():这个缓存路径打印出来的是:data / data / (APPID ) / cacheAndroid系统中的清除APP缓存清除的就是这个路径: 随着用户手动清空缓存或者APP的卸载,这个路径的缓存也会被删除。请注意:在这个缓存路径上读写是不需要请求文…

Qt扫盲-信号槽理论总结

信号槽理论总结一、概述二、信号槽三、信号四、槽函数五、小例子六、 信号槽的默认参数七、高级使用八、 在Qt 里使用第三方的信号槽一、概述 信号和槽用于对象之间的通信。信号和槽机制是Qt的一个核心特性,也是与其他框架所提供的特性最大不同的部分。Qt的元对象系…

win10跨网段文件共享

win10跨网段文件共享问题描述问题分析网络可达性防火墙权限问题操作网络拓扑示意图操作步骤问题描述 平常,我们经常用的是同一局域网下的网络共享,这在windows上很容易操作。现在,两台PC主机不在同一子网,该如何共享?…

【C/C++】静态顺序表详解(附完整源码)

本章内容 1.什么是线性表 2.什么是顺序表 3.静态顺序表结构的定义 4.静态顺序表的函数接口实现 5.静态顺序表的问题及思考 1.什么是线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&…

开源飞控初探(四)ArduPilot::Copter固件源码分析

2022.5.7,基于v4.0.5的分析。官网文档没及时更新,本文对当前版本源码的描述可能和官网不一样。1、无人机全栈分层结构图2、Flight Code固件部分上图中的Flight Code层,分为5个部分:车机层。一份代码通过编译配置,可以支…

行转列,动态列枚举分组

【问题】Hi All,Thanks for the wonderful support the community gets from this forum.I am trying to accomplish this in MongoDB. Didn’t think it could get this complicated. thought the problem was interesting to solve.I am trying to get a count of students b…

【库函数】-还在为操作字符串而烦恼,一篇带你解决这样的烦恼,这里详细介绍关于字符串操作的各个库函数,以及模拟实现

🎇作者:小树苗渴望变成参天大树 🎉作者宣言:认真写好每一篇博客 💥作者gitee:link 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! 字符函数和字符串函数💦前言&…

python函数定义中的/和*的作用

python函数定义中的/和*的作用 特殊参数https://docs.python.org/zh-cn/3/tutorial/controlflow.html#special-parameters 函数定义中的单独出现的/和*的作用 / 和 * 是可选的。 /用来指明他前面的函数形参必须使用位置参数。 *用来指明他后面的函数形参必须为关键字参数的…

儿童感染新冠后怎么用药?什么情况需要就医?

儿童感染新冠病毒的症状,病程有哪些特点?退烧药怎么选,怎么吃?孩子有什么症状需要立即就医?...01儿童感染新冠病毒的症状,病程有哪些特点?王泉:儿童是新冠病毒的易感人群。新冠病毒感…

Unity C#热更新框架ILRuntime接入

简介 ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新 官方教程 https://ourpalm.github.io/ILRunt…

揭开 TLS 握手的神秘面纱:它是什么以及它是如何工作的

传输层安全性 (TLS) 旨在为网络通信增加安全性。 就是浏览互联网时HTTP和HTTPS的区别。 使用 TLS 为客户端和服务器增加了额外的工作,但它有其好处,包括: 机密性:TLS 将流量包装在加密隧道中。 这使得窃听者不可能在到达目的地的…

[Swift]UIView抖动动画

以拨打视频电话时的拨打按钮抖动为例 import UIKitclass PACallPrepareAlertView: UIView {IBOutlet weak var callIV: UIImageView!private var isLeave: Bool falsedeinit {isLeave true}override func awakeFromNib() {super.awakeFromNib()shakeAction()}private func s…

套接字编程之接口

套接字编程之接口学习套接字之前你需要知道的套接字编程套接字TCP协议和UDP协议区别UDP协议的编写UDP通信两端流程具体操作接口介绍创建套接字为套接字绑定地址信息发送数据接收数据关闭套接字字节序相关接口📌————本章重点————📌 🔗…

【Ansible】ansible 变量

ansible 变量 文章目录ansible 变量一、Ansible 变量介绍二、变量命名规则三、变量类型1.全局变量2.剧本变量3.资产变量4.Facts 变量5.注册变量6.变量优先级一、Ansible 变量介绍 在 PlayBook 一节中,将 PlayBook 类比成了 linux 中的shell。那么它作为一门 ansibl…

搜索引擎收录查询,是什么影响了网站被搜索引擎收录

搜索引擎收录是指程序通过辨别把网站内容进行收录,同时会对这些内容进行价值以及其他方面的辨别。 我们想要知道网站有没有被搜索引擎收录,可以借助iis7seo批量查来查询网站有没有被搜索引擎收录。打开iis7seo批量查,添加需要查询的网站网址&…

计算结构体,位段,联合体(共用体)的大小

目录 一、计算结构体的大小 1.1 结构体的计算并不是简单的类型加运算 1.2 内存对齐 1.2.1 内存对齐规则 1.2.2 图解内存对齐 二、计算位段的大小 2.1位段是什么 2.2 位段的内存分配 三、计算联合体的大小 3.1 什么是联合体 3.2 联合体的内存分配 END. 一、计算结构…

Consensus Algorithm -- Raft

The Raft Consensus Algorithm Go 实现:etcd/raft、dragonboat Rust 实现:TiKV C 实现 :nebula-graph-storage、 RethinkDB、logcabin 拜占庭将军问题 拜占庭将军问题(Byzantine failures),是由莱斯利兰…

绝绝子!这些技巧真方便

技巧一:快速切换窗口 如果你还在使用桌面底部“任务栏”切换软件窗口,不妨试试这个“快速切换窗口”快捷键,仅需按住【Alt】键不放,并连续点按【tab】键即可实现窗口的快速切换,果真只有亲自上手体验才知道有多香&…

NLP中的对话机器人——问答机器人的应用场景

引言 本文是七月在线《NLP中的对话机器人》的视频笔记,主要介绍FAQ问答型聊天机器人的实现。 讲得还不错,关键是只要1分钱 FAQ问答机器人 FAQ就是一些常见问题与回答,比如https://letsencrypt.org/docs/faq/。 但是我们要做的不是一问一答…

原生RedHat OpenStack搭建

文章目录OpenStack的搭建方式实验软件及镜像实验环境配置NTP节点初始化配置配置本地yum仓库上传镜像文件至NTP节点搭建基于http的网络yum源搭建NTP服务配置Controller控制节点和Compute计算节点初始化配置安装RedHat OpenStack安装部署OpenStack配置OVS桥接OpenStack的搭建方式…