delphi调用服务器函数_SAP 函数与 BAPI

7dcc03f4ffeb0b3b8249d82028e50671.png

1 函数简介  Abap 函数在编程中应用比较广泛,通过系统函数或自定义函数,可实现业务功能的调用, 而且函数使代码模块化,实现代码重复使用,因此可以减少代码冗余,提高编程效率。  2 Function 相关名词介绍  2.1 Function Builder 介绍  ABAP Workbench 有几个不同的工具用于编辑容器对象。这些工具可以为你提供涵盖整个软件开发 周期各阶段的辅助。而 Function Builder 属于 ABAP Workbench 中显示和处理功能模块。Function Builder 提供了在集成化的环境中创建,测试和管理函数模块的功能。  2.2 Function group 函数组  Function group 通常是一组功能相关的 function modules 的封装。比如下面此图为函数组 ZMAT 的结构,如下图所示。 

474538ecb68bc1d86727f92e798f4d44.png

上图  函数组的命名规则与 abap 程序名命名相似,以 Y 或者 Z 开头,长度不超过 26 位的字符串。   2.3 Function 函数 Abap function 并不能单独存在,它必须放在某个 function group 中,因此创建 function 之 前先要创建 function group。函数可以被任意 ABAP 程序调用,也支持异常处理,在函数运行时 可以捕获异常消息。函数的测试非常方便,可以不在某个程序中而单独测试函数。在数据库更 新,远程消息通信等方面应用较广。  2.4 函数接口 1.attributes 传输类型:Normal Fucnction Module 用于模块化编程并且对外部系统不是可见的,但是在相同的 sap 软 件系统中是全局可见的。Remote Function Module 用于对外部系统可见,因此可以通过 RFC 被调用。Update Function Module 用于函数模块的异步更新。  2.import:输入参数,比如结构型变量  3.export:输出参数,比如结构型变量  4.changing:既输入又输出的参数  5.tables: 指定的表,将被传递给一个功能模块。表的参数总是通过引用传递,比如内表传递。 6.exceptions:函数异常处理,函数模块中抛出异常:raising + 异常名  2.5 function 与 form 程序的区别   1.函数必须属于一个容器池(函数组),而 form 程序可以单独存在。  2.函数是系统全局的,而 form 程序不是。  3. 函数拥有一个固定的接口进行数据交换。这使得它更容易让你通过输入和输出参数与功能模 块交互。例如,您可以指定默认值的输入参数。  4.函数接口支持异常处理。这使您可以捕捉错误并将它们传回给调用程序处理。 5. 函数用自己的内存区域。调用程序和功能模块不能使用共享内存区域进行数据交换 – 函数必 须使用的功能模块的接口。这避免了令人不快的副作用,例如意外的数据覆盖。 6.函数使用 CALL FUNCTION + 函数名 的的形式调用函数  3 函数组操作  3.1 创建函数组  Se37 goto  function groups create group.如下图所示。

c63b4587f99d353e40911501fec6bb4e.png

ecd3ae1a033666250ba0cfcbb6cdd1c7.png

函数组命名注意以 Y 或者 Z 开头,如下图所示  然后激活函数组:Se80  选择函数组  Inactive Objects  选中新建的函数组  右键激活。如图所 示。 

233a7c75362c109e5b6ad9a96a268d2a.png

4 函数操作  4.1 创建函数  Se37 输入函数名,点击 create。如图 所示。

68683675aec964211fdfe26f8d4f1df7.png

如图 输入所属函数组名。如图所示。

4123681816ce4c7cd698fdeeb219e54a.png

点击 Save 输入函数描述(短文本),如图所示。

ede7ae3814c1c657ad480cc52919547e.png

输入函数输入输出参数,如图 所示。

cfe38bc003b5d6bcfdb76ab3d736bdff.png

定义异常和短文本,如图所示。

644b1f6f677218214bd128282b2fb3bf.png

最后点击“源代码”,编辑函数代码。如图所示。

5909727b8222a55ae3cbfd1c99fb3de3.png

4.2 测试函数  点击下面的图标,执行函数。 如图所示。

cd1bd54a8d6549ae85ee02fe9c9fa1e9.png

79389808ec54983c3e2815349c2f90d2.png

4.3 使用函数  在程序中插入函数:点击菜单栏 -> 模式,如图所示。

6f4f18cc676c1e113c6e3a7eaaab3cd7.png

输入函数名,如图所示。

2dd5f041802d9ec103dc8704fd1dfba3.png

这样就可以在程序中加入函数调用代码了。   4.4 常用系统函数 DYNP_VALUES_READ — 读取 SCREEN 字段的值,也可以用来读取报表 SELECTION SCREEN DYPN_VALUS_UPDATE — 更新屏幕字段的值 GET_GLOBAL_SYMBOLS — 返回一个程序的 TABLES,SELECT OPTIONS,TEXTS,ETC。甚至包含 SELECTION SCREEN 的文本定义 REY_DYNPRO_READ — 读取屏幕  DY_GET_SET_FIELD_VALUE —获得或者设置屏幕字段的值 RS_REFRESH_FROM_SELECTIONS — 获得当前选择屏幕内容 DY_GET_FOCUS — 获得屏幕焦点 BP_JOBLOG_READ —获得 job log 的执行结果 GET_JOB_RUNTIME_INFO — 获得 job 相关信息  CLPB_IMPORT — 从剪贴板导入内标  CONVERT_OTF — 将 SAP 文档(SAP SCRIPT)转换成其他类型 ABAP_DOCU_DOWNLOAD —以 HTML 格式下载 ABAP 文档 ARFC_GET_TID — 以十六进制形式返回终端的 IP 地址 BAL_* — 容纳了 SAP 的应用程序日志所有的函数模块 BP_EVENT_RAISE — 在 ABAP/4 程序中触发一个事件 F4IF_SHLP_EXIT_EXAMPLE — F4 接口模块  FTP_CONNECT — 打开并登陆 FTP 服务器的链接  FTP_COMMAND — 在 FTP 服务器上执行一个命令 FTP_DISCONNECT — 关闭指向 FTP 服务器的链接  GET_INCLUDETAB — 获得一个程序的  INCLUDES 列表 GUI__exec — 调用一个文件或程序  HELP_START — 为一个字段显示帮助 K_WERKS_OF_BUKRS_FIND — 返回一个特定公司代码的所有工厂  POPUP_TO_CONFIRM_LOSS_OF_DATA — 返回一个特定公司代码的所有工厂  POPUP_TO_CONFIRM_STEP — 探出一个对话框询问用户是否操作继续 POPUP_TOCONFIRM_WITH_MESSAGE POPUP_TO_CONFIRM_WITH_VALUE  POPUP_TO_DECIDE  POPUP_TO_DECIDE_WITH_MESSAGE  POPUP_TO_DISPLAY_TEXT POPUP_TO_SELECT_MONTH — 探出一个对话框供选择月 POPUP_WITH_TABLE_DISPLAY — Provide a display of a table for user to select one, with the Value of the table line returned when selected. CONVERSION_EXIT _CUNIT_OUTPUT — 单位转换  CLOI_PUT_SIGN_IN_FRONT —将负号前置,SAP 默认将负号放在数字后面。 CONVERSION_EXIT_ALPHA_INPUT — 数字串前补 0  CONVERSION_EXIT_ALPHA_OUTPUT — 消除数字串前的 0 BAPI_CURRENCY_CONV_TO_INTERNAL — 奖金额转换成内部数据格式  BAPI_CURRENCY_CONV_TO_EXTERNAL — 奖金额转换成外部数据格式  UNIT_CONVERSION_SIMPLE — 衡量单位转换 SJIS_SBC_TO_DBC — 半角转换为全角 SJIS_DBC_TO_SBC — 全角转半角 TEXT_SPLIT —字符串分割  CONVERT_TO_LOCAL_CURRENCY — 按指定日期汇率转换金额为指定货币类型  CONVERT_OTFSPOOLJOB_2_PDF — 将 OTF spool 转换为  PDF PRICNG — 获得定价条件  PROFILE_GET — 从 INI 文件读取一条记录  PROFILE_SET — 往 INI 文件写一条记录  READ_TEXT — 读取长文本  SAVE_TEXT 上传长文本  REGISTRY_GET — 从注册表读取一条记录  REGISTRY_SET — 在注册表里设置一条记录 RFC_ABAP_INSTALL_AND_RUN — 当 MODE 参数值为‘F’试运行  PROGAM 表中的程序  RH_GET_ACTIVE_WF_PLVAR — 获得激活的 HR 计划  RH_STRUC_GET — 返回所有相关的组织信息  RP_CALC_DATE_IN_INTERVAL — 年月日加减 DATE_CHECK_PLAUSIBILITY — 日起有效性检查 SD_DATETIME_DIFFERENCE — 两日期作差 DATE_CONVERT_TO_FACTORYDATE — 把输入日期转为工厂日历日期 MONTH_NAMES_GET — 获得所有的月和名字  F4_DATE — 探出一个窗口显示一个日历允许用户选择一个日期 RP_LAST_DAY_OF_MONTHS — 获得一个月最后一天 FIRST_DAY_IN_PERIOD_GET — 获得期间首日  LAST_DAT_IN_PERIOD_GET — 获得期间末日 DATE_GET_WEEK — 返回一个日期所在的周数  HOLIDAY_GET — 基于工厂日历/几日日历提供了一个节日表  RS_VARIANT_CONTENTS — 获得程序变式的信息  RS_CHANGE_CREATED_VARIANT — 修改程序变式的信息  RZL_SLEEP — 将当前程序挂起  ENQUE_SLEEP — 在继续处理之前等待一个指定的时间  ENQUEUE_ESFUNCTION — 锁定一个 ABAP 程序使它不可以被执行:注意不要用  SY-REPID 来传递你的报表名字,当吧  SY-REPID 作为参数传递给函数模块的时候, SY- REPID 的执实际上已经发生了变化  RZL_SUBMIT — 提交一个远程报表  GUI_UPLOAD — 上传文件到服务器  GUI_DOWNLOAD — 下载文件到本地  FILE_GET_NAME —从逻辑文件名得到物理文件路径及文件名  FILENAME_GET — 弹出一个文件选择对话框  SO_SPLIT_FILE_AND_PATH — 将一个包含路径的全文件名分割为文件名和路径  EPS_GET_FILE_ATTRIBUTES — 获得文件属性  RZL_READ_DIR_LOCAL — 读取应用服务器的目录  GUI_CREATE_DIRECTORY — 在显示服务器端创建一个目录 GUI_DELETE_FILE — 在显示服务器端删除一个文件  UPLOAD_FILES — 上传一个或多个文件  MS_EXCEL_OLE_STANDARD_OLE — 创建一个文件并自动启动  Excel GUI_REMOVE_DIRECTORY — 从显示服务器删除一个目录 ESP_GET_DIRECTORY_LISTING — 返回一个本地或网络目录的文件列表  RZL_READ_DIR —如果服务器名字左部为空,从本地读取目录,否则读取远程服务器的目录  RZL_READ_FILE — 如果为给定服务器名字则读取本地文件,否则读取远程服务器文件  RZL_WRITE_FILE_LOCAL — 将内标保存到显示服务器(not PC)。不使用 OPEN DATASET 因此避 免了授权检查  SAPGUI_PROGRESS_INDICATOR — 显示一个进度条 RPY_TRANSACTION_READ — 给定一个事务代码,获得其程序和屏幕:或给定一个程序和屏幕获得 事务代码  SCROLLING_IN_TABLE — 当编写模块池的时候可以用它来处理滚动  SO_NEW_DOCUMENT_ATT_SEND_API1 — 将文档作为邮件的一部分发送  SO_SPOOL_READ — 根据 SPOOL 号获得  Printer spool SO_WIND_SPOOL_LIST — 根据用户浏览  printer spool 号 LIST-TO_ASCII — 将 ABAP 报表从  OTF 形式转换成 ASSCII 形式  SX_OBJECT_CONVERT_OFT_PDF —从 OFT 转换为 PDF(SAP 脚本转换) SX_OBJECT_CONVERT_OFT_PRT — 从 OTF 转换为打印格式(SAP 脚本转换)  SX_OBJECT_CONVERT_OFT_RAW — 从 OTF 转换为 ASCII(SAP 脚本转换)  SXPG_CALL_SYSTEM — 检查用户是否有执行某个命令的权限 SXPG_COMMAND_LIST_GET — 获得一个包含所有定义的外部 OS 命令的列表  SXPG_COMMAND_DEFINITION_GET — 从 R/3 系统数据库读取单个外部 SO 命令的定义  SXPG_COMMAND_CHECK — 检查用户是否有执行某个命令的权限  SXPG_COMMAND__execUTE — 检查用户是否有执行某个命令的权限,拥有授权则执行命令  TERMINAL_ID_GET — 返回终端 ID  TH_DELETE_USER — 剔除一个用户,效果同 SMO4 TH_ENVIRONMENT — 获得 UNIX 环境  TH_POPUP — 在特定用户屏幕上显示一个系统消息  TH_REMOTE_TRANSACTION — 在远程服务器上运行事务代码 TH_USER_INFO — 获得当前用户的信息(会话,登陆工作台等)  TH_USER_LIST — 显示登陆到应用服务器的用户列表 WRITE_LIST — 显示一个列表对象  WS_EXCEL — 启动  EXCEL WS_VOLUME_GET — 获得终端设备标签 WWW_LIST_TO_HTML — 运行一个报表之后,调用这个方法列表输出转换成  HTML SD_VBAP_READ_WITH_VBELN — 根据销售订单读取表 VBAP 中的信息  CO_RO_CHECK_DECIMAL_POINT — 根据单位检查数据的小数位  POSTAL_CODE_CHECK — 检查邮政编码  VIEW_MAINTENANCE_CALL — 维护标示 图 F4IF_INT_TABLE_VALUE_REQUEST 显示检索的  HELP TERMINAL_ID_GET — 获得终端 ID  MESSAGE_TEXT_BUILD — 把消息转为文 本 SSF_FUNCTION_MODULE_NAME — 根据 FORM 名曲的对应的函数名(SMARFORM)  SEF_FUNCTION_MODULE_NAME SMARTFORMS — 输出报表时,生成一个函数名称,然后 CALL 这个名 称 RS_COVERPAGE_SELECTIONS — 获得一个报表的选择参数列表 RSLG_WRITE_SYSLOG_ENTRY — 往 SYSLOG 里写一条记录 RSPO_SX_OUTPUT_TEXTDATA — 将内表中的数据输出到  SPOOL  ALSM_EXCEL_TO_INTERNAL_TABLE — 将 excel 文件上传至内表  5 RFC 简介  RFC(Remote Function Call,也叫远程函数调用)是 SAP 系统和其他(SAP 或非 SAP)系统 间的一个重要而常用的双向接口技术,也被视为 SAP 与外部通信的基本协议。 简单地说,RFC 过程 就是系统调用当前系统外的程序模块,从而实现某个功能,而且调用系统和被调用系统中至少有 一个必须是 SAP ABAP 系统。这种远程功能调用也可在同一系统内部进行(如本地 SAP 系统内的远 程调用);但通常情况下,调用程序和被调用程序处于不同系统。 SAP 所提供的外部接口包括程序通信接口(communication interface)、文件 I/O 接口 (file I/O interface)以及数据接口(data interface)。数据接口用于在系统内部对程序运 行时数据和数据库数据进行传递,其实现技术包括批输入(batch input)、SAP SQL 等。程序通 信接口和文件 I/O 接口则是与其他系统进行数据交换的通路。文件 I/O 实现文件中数据和运行时 数据间的交换(即将数据从文件上载到程序中。或将运行时数据下载至文件)。RFC 位于程序通信 接口中,以实现外部程序对 SAP 系统内部数据的访问。  6 RFC 使用  6.1 RFC 调用过程  在系统间通信过程中,需区分发送系统和接受系统。RFC 调用请求从发送系统(调用系统)中传至 接收系统(被调用系统,也称远程系统或目标系统),发送请求的系统在通信过程中又称为 RFC 客户端,通信另一方则称为 RFC 服务器。 RFC 客户端发起远程功能调用以执行 RFC 服务器提供的功 能。其中,调用系统和被调用系统均可以是 SAP 系统和非 SAP 系统,此外还可以在 SAP 系统内部将特 定应用服务器指定为目标系统。如图所示。

fbd0a4b738ce43363be669524e887538.png

6.2 RFC 通信的情况  根据通信方向和系统类型,共有如下三种 RFC 通信: 两个独立的 SAP 系统之间的通信;SAPA 系统作为调用系统,与外部远程系统(非 SAP ABAP 系统)通信;外部系统作为调用系统,与 SAP 系统通信。6.3 RFC 接口系统 SAP 调用远程功能的能力是通过 RFC 接口系统(RFC interface system)实现的。根据调用方向的不 同(SAP 系统调用其他模块或其他系统调用 SAP 模块),RFC 接口提供以下两种服务。 (1)ABAP 程序的调用接口  (2)非 SAP ABAP 程序的调用接口。SAP 的 RFC 调用是其接口技术中最简单和易用的一种方式,该方式开发比较简便,特别适合于外部 报表开发,但对于大数据量的查询效率相对较低。大家在熟练掌握后,可以进一步学习高级的 IDOC 和 BAPI 接口开发技术。  7 RFC 与 BAPI 的关系  SAP R/3 的接口方式主要有 RFC(Romote Function Call,远程函数调用)、IDOC、BAPI 三种,BAPI 实际上也是 RFC 函数,它处理一组业务。使用 Tcode:BAPI/BAPIW 在 SAP 系统中可查看到各模块 的 BAPI 函数。RFC 版本:sRFC( synchronous RFC)是 RFC 的第一个版本,它要求连接的双方是同步的工作方式,即都是 在可用状态才能够实现成功调用。 aRFC(asynchronous RFC)这种 RFC 可以实现异步的 RFC 调用方式,它可以进行多个并发调用, 并且不要求被调用系统的可用状态。发出调用系统会一直尝试直到获得被调用系统的应答。它通 常用于当你需要提高系统并行调用多个 RFC 的效率,相对于强制等待程序的结果,它的效率更 高。tRFC(transactional RFC)是对 aRFC 进行相关技术改进后的一个 RFC 版本,其于 ARFC 相同点是 实现异步调用,其优点是可以将多个调用进行 LUW 分组处理, 并只执行一次运行。 现在 aRFC 基 本上已经停用。qRFC(queue(d) RFC)是 tRFC 的一个增强版本,它保证了所传输数据的处理次序。pRFC(Parallel RFC)是一种特殊的 RFC,它是 aRFC 的一种扩展类型。因为它改善了系统的性 能,在执行大量的 aRFC 时。SAP 使用它在 MRP 里面提高速度。但是它只能执行在同一个系统和同 一个 client 里。RFC 不但是一种函数,更是一种数据通信协议,类 TCP/IP. 8 BAPI 简介 BAPI (Business Application Programming Interface) 业务应用编程接口,是一种特殊的远程 方法调用 (RFC),通过 ABAP 或其他外部程序调用,如 C++,Java,Delphi,VB 等语言。 Sap 大量业务都有相应的 BAPI 函数,如创建客户,创建订单,修改订单,删除订单,新建物 料等,所以可以通过 BAPI 导入数据。与 BDC 相比,BAPI 导入数据快,稳定,没有模拟屏幕操 作,还可以自行建立 BAPI,在外部程序调用。 Bapi 是外部应用程序访问 sap 业务对象的方法。在面向对象编程方面,业务对象(business object)和 bapi 是 sap 的两个很重要的内容,业务对象就是类,bapi 就是业务对象的方法。他们 的关系描述如下:kernel --> intergrity --> interface -->access: kernel 为内核,对数据库直接进行操作 intergrity 为业务对象,将实际业务定义成一个类 interface 为应用编程接口,通过该接口,对业务对象进行操作 access 为访问方式,直接面向对象编程或远程函数调用 每一个 bapi 都有与之对应的以”bapi_“开头的函数。例如:业务对象”user“表示”系统用户“, 它有 bapi(方法)“lock”和“unlock”,它们用来锁定系统用户和对系统用户解锁。这两个方法对应 的函数为“bapi_user_lock”和“bapi_user_unlock”。  9 BAPI 操作  9.1 查看 BAPI 运行 bapi,进入 sap bapi 浏览器,在这里,我们能够通过业务层次迅速找到需要的业务对象和 方法。如:业务对象 --> bussines object 关键字段 --> short description bapi --> method 与 bapi 对应的函数 --> function module 如图所示。

9311057ba2404a969c391e7269865946.png

  10BAPI 修改销售订单数量示例 (程序进知识星球获取)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值