新手做的网站,广西百色公司注册,广州 网站 建设 制作,win8.1 做网站服务器BAPI作为SAP中的重要概念#xff0c;在SAP系统的开发中几乎是必须的。
本章来学习一下BAPI 的直观印象#xff0c;以及在ABAP代码中的调用。
目录
1#xff0c; BAPI概述
1#xff0c;从画面角度来直观体验一下BAPI
1-1#xff0c;MM#xff1a;購買依頼変更BAPI - …BAPI作为SAP中的重要概念在SAP系统的开发中几乎是必须的。
本章来学习一下BAPI 的直观印象以及在ABAP代码中的调用。
目录
1 BAPI概述
1从画面角度来直观体验一下BAPI
1-1MM購買依頼変更BAPI - BAPI_PR_CHANGE
1-2SE37 - 查看BAPI的代码和构造
1-3SE37 - 界面上执行BAPI
1-4Test顺序测试序列
1-5总结
2从ABAP角度来执行BAPI
2-1SE38
2-2执行确认 下面是详细内容。
1 BAPI概述
SAP里面有个BAPI 的概念那么BAPI究竟是什么呢
其实BAP就是一个SAP系统级函数。
大家玩过Windows开发的都知道Windows有内核函数可以直接在自己写的代码中调用传入参数从而使用很少的代码就能实现一些特殊的/复杂的功能。
这个BAPI就跟那个有点儿像外界(ABAP代码或其他代码)可以通过调用BAPI传入参数就可以直接执行SAP系统里面的一些功能从而用很少的代码就能实现很复杂的功能。 下面通过一个例子来看一下BAPI 的样子以及怎么调用。
1从画面角度来直观体验一下BAPI
ME51N
购买依赖号10014101 有了这个购买依赖采购申请之后想要做些修改当然可以在上面的界面上修改比如更改Block ID为 【1- 被请求者Block济】这个当然一点儿问题都没有大家平时也是这么用的。
除此之外还可以用 BAPI 来进行修改。
咱们下面来看看用BAPI 来修改 Block ID。
那么到底用哪个BAPI呢
1-1MM購買依頼変更BAPI - BAPI_PR_CHANGE
SAP里面提供了很多BAPI比如如下这些常用的Logistics系的BAPI - SD受注伝票登録BAPI BAPI_SALESORDER_CREATEFROMDAT2 - SD受注伝票変更BAPIBAPI_SALESORDER_CHANGE - MM出荷伝票登録BAPI (BAPI_OUTB_DELIVERY_CREATE_SLS) - MM発注伝票登録BAPIBAPI_PO_CREATE1 - MM発注伝票変更BAPIBAPI_PO_CHANGE - MM在庫移動登録BAPIBAPI_GOODSMVT_CREATE - MM在庫移動取消BAPIBAPI_GOODSMVT_CANCEL - MM購買依頼登録BAPIBAPI_PR_CREATE - MM購買依頼変更BAPIBAPI_PR_CHANGE - MM品目Master登録/変更BAPIBAPI_MATERIAL_SAVEDATA
这里面我们本次要用的就是这个 BAPI_PR_CHANGE。
详细的内容也可以参照下面这个链接
在庫移動登録BAPI | SAP知恵の輪 要在那里查看和执行BAPI 呢
1-2SE37 - 查看BAPI的代码和构造
输入 BAPI_PR_CHANGE点 照会 这就是该BAPI 的代码
看着也没多少行其实里面调用了很多其他的代码
FUNCTION bapi_pr_change. #EC ENHOK
*----------------------------------------------------------------------
**Lokale Schnittstelle:
* IMPORTING
* VALUE(NUMBER) LIKE BAPIMEREQHEADER-PREQ_NO
* VALUE(PRHEADER) LIKE BAPIMEREQHEADER STRUCTURE BAPIMEREQHEADER
* OPTIONAL
* VALUE(PRHEADERX) LIKE BAPIMEREQHEADERX STRUCTURE
* BAPIMEREQHEADERX OPTIONAL
* VALUE(TESTRUN) LIKE BAPIFLAG-BAPIFLAG OPTIONAL
* EXPORTING
* VALUE(PRHEADEREXP) TYPE BAPIMEREQHEADER
* TABLES
* RETURN STRUCTURE BAPIRET2 OPTIONAL
* PRITEM STRUCTURE BAPIMEREQITEMIMP OPTIONAL
* PRITEMX STRUCTURE BAPIMEREQITEMX OPTIONAL
* PRITEMEXP STRUCTURE BAPIMEREQITEM OPTIONAL
* PRITEMSOURCE STRUCTURE BAPIMEREQSOURCE OPTIONAL
* PRACCOUNT STRUCTURE BAPIMEREQACCOUNT OPTIONAL
* PRACCOUNTPROITSEGMENT STRUCTURE BAPIMEREQACCOUNTPROFITSEG
* OPTIONAL
* PRACCOUNTX STRUCTURE BAPIMEREQACCOUNTX OPTIONAL
* PRADDRDELIVERY STRUCTURE BAPIMERQADDRDELIVERY OPTIONAL
* PRITEMTEXT STRUCTURE BAPIMEREQITEMTEXT OPTIONAL
* PRHEADERTEXT STRUCTURE BAPIMEREQHEADTEXT OPTIONAL
* EXTENSIONIN STRUCTURE BAPIPAREX OPTIONAL
* EXTENSIONOUT STRUCTURE BAPIPAREX OPTIONAL
* PRVERSION STRUCTURE BAPIMEREQDCM OPTIONAL
* PRVERSIONX STRUCTURE BAPIMEREQDCMX OPTIONAL
* ALLVERSIONS STRUCTURE BAPIMEDCM_ALLVERSIONS OPTIONAL
* PRCOMPONENTS STRUCTURE BAPIMEREQCOMPONENT OPTIONAL
* PRCOMPONENTSX STRUCTURE BAPIMEREQCOMPONENTX OPTIONAL
* SERVICEOUTLINE STRUCTURE BAPI_SRV_OUTLINE OPTIONAL
* SERVICEOUTLINEX STRUCTURE BAPI_SRV_OUTLINEX OPTIONAL
* SERVICELINES STRUCTURE BAPI_SRV_SERVICE_LINE OPTIONAL
* SERVICELINESX STRUCTURE BAPI_SRV_SERVICE_LINEX OPTIONAL
* SERVICELIMIT STRUCTURE BAPI_SRV_LIMIT_DATA OPTIONAL
* SERVICELIMITX STRUCTURE BAPI_SRV_LIMIT_DATAX OPTIONAL
* SERVICECONTRACTLIMITS STRUCTURE BAPI_SRV_CONTRACT_LIMITS
* OPTIONAL
* SERVICECONTRACTLIMITSX STRUCTURE BAPI_SRV_CONTRACT_LIMITSX
* OPTIONAL
* SERVICEACCOUNT STRUCTURE BAPI_SRV_ACC_DATA OPTIONAL
* SERVICEACCOUNTX STRUCTURE BAPI_SRV_ACC_DATAX OPTIONAL
* SERVICELONGTEXTS STRUCTURE BAPI_SRV_LONGTEXTS OPTIONAL
* SERIALNUMBER STRUCTURE BAPIMEREQSERIALNO OPTIONAL
* SERIALNUMBERX STRUCTURE BAPIMEREQSERIALNOX OPTIONAL
*----------------------------------------------------------------------
ENHANCEMENT-POINT bapi_pr_change_g8 SPOTS es_sapl2105 STATIC.
*$*$-Start: BAPI_PR_CHANGE_G8-------------------------------------------------------------------$*$*
ENHANCEMENT 3 MGV_GENERATED_BAPI_PR_CHANGE. active version
DATA: T_MGV_FNAMES1 LIKE MGVBAPIFNAMES OCCURS 0 WITH HEADER LINE.
DATA: T_MGV_FNAMES2 LIKE MGVBAPIFNAMES OCCURS 0 WITH HEADER LINE.FIELD-SYMBOLS: MGV_PRITEMX TYPE BAPIMEREQITEMX.
ENDENHANCEMENT.
*$*$-End: BAPI_PR_CHANGE_G8-------------------------------------------------------------------$*$*ENHANCEMENT-POINT bapi_pr_change_g6 SPOTS es_sapl2105.
*$*$-Start: BAPI_PR_CHANGE_G6-------------------------------------------------------------------$*$*
ENHANCEMENT 1 MGV_GENERATED_BAPI_PR_CHANGE. active version
*{BAPI Begin} generation http://intranet.sap.com/materialversion
*Do not change coding between begin and end comments. ANI 20050217
T_MGV_FNAMES1-INT PUR_MAT.
T_MGV_FNAMES1-EXT PUR_MAT_EXTERNAL.
T_MGV_FNAMES1-VERS PUR_MAT_VERSION.
T_MGV_FNAMES1-GUID PUR_MAT_GUID.
APPEND T_MGV_FNAMES1.
T_MGV_FNAMES1-INT MATERIAL.
T_MGV_FNAMES1-EXT MATERIAL_EXTERNAL.
T_MGV_FNAMES1-VERS MATERIAL_VERSION.
T_MGV_FNAMES1-GUID MATERIAL_GUID.
APPEND T_MGV_FNAMES1.
T_MGV_FNAMES1-INT CONF_MATL.
T_MGV_FNAMES1-EXT CONF_MATL_EXTERNAL.
T_MGV_FNAMES1-VERS CONF_MATL_VERSION.
T_MGV_FNAMES1-GUID CONF_MATL_GUID.
APPEND T_MGV_FNAMES1.
CALL FUNCTION MATNR_BAPI_TABLES_CONVERSION
EXPORTINGINT_TO_EXTERNAL
TABLEST_FNAMES T_MGV_FNAMES1T_MATNR PRITEMEXP.
T_MGV_FNAMES2-INT PUR_MAT.
T_MGV_FNAMES2-EXT PUR_MAT_EXTERNAL.
T_MGV_FNAMES2-VERS PUR_MAT_VERSION.
T_MGV_FNAMES2-GUID PUR_MAT_GUID.
APPEND T_MGV_FNAMES2.
T_MGV_FNAMES2-INT MATERIAL.
T_MGV_FNAMES2-EXT MATERIAL_EXTERNAL.
T_MGV_FNAMES2-VERS MATERIAL_VERSION.
T_MGV_FNAMES2-GUID MATERIAL_GUID.
APPEND T_MGV_FNAMES2.
CALL FUNCTION MATNR_BAPI_TABLES_CONVERSION
EXPORTINGINT_TO_EXTERNAL
TABLEST_FNAMES T_MGV_FNAMES2T_MATNR PRITEM.
LOOP AT PRITEMX ASSIGNING MGV_PRITEMXWHERE NOT ( PUR_MAT_EXTERNAL IS INITIAL ANDPUR_MAT_VERSION IS INITIAL ANDPUR_MAT_GUID IS INITIAL ).MGV_PRITEMX-PUR_MAT X.
ENDLOOP.
LOOP AT PRITEMX ASSIGNING MGV_PRITEMXWHERE NOT ( MATERIAL_EXTERNAL IS INITIAL ANDMATERIAL_VERSION IS INITIAL ANDMATERIAL_GUID IS INITIAL ).MGV_PRITEMX-MATERIAL X.
ENDLOOP.
*{BAPI End} generation
ENDENHANCEMENT.
*$*$-End: BAPI_PR_CHANGE_G6-------------------------------------------------------------------$*$** generate data recordSET EXTENDED CHECK OFF.fbgenmac BAPI_PR_CHANGE. #EC *SET EXTENDED CHECK ON.
* define local dataDATA: lr_bapi TYPE REF TO lcl_bapi_requisition,lf_cr TYPE mmpur_bool VALUE cl_mmpur_constantsno.* dynamic break point (Transaction SAAB - MMPUR_2105)BREAK-POINT ID mmpur_2105.CREATE OBJECT lr_bapiEXPORTINGim_preq_no numberim_actyp if_bapi_mereqverim_testrun testrun.* set header datalr_bapi-set_header( im_header prheader im_headerx prheaderx ).
* set item datalr_bapi-set_items( im_items pritem[] im_itemsx pritemx[] ).
* set accouting datalr_bapi-set_account( im_account praccount[] im_accountx praccountx[] ).
* set profit segment data for accouting datalr_bapi-set_profitsegment( praccountproitsegment[] ).
* set subcontracting componentslr_bapi-set_components( im_component prcomponents[]im_componentx prcomponentsx[] ).
* set serial numberslr_bapi-set_serialno( im_serno serialnumber[] im_sernox serialnumberx[] ).
* set delivery addresslr_bapi-set_delivery_address( praddrdelivery[] ).
* set header textslr_bapi-set_header_text( prheadertext[] ).
* set header textslr_bapi-set_item_text( pritemtext[] ).
* set version datalr_bapi-set_version( im_version prversion[] im_versionx prversionx[] ).
* set extensioninlr_bapi-set_extensionin( extensionin[] ).
* set srv outlinelr_bapi-set_srv_outline( imt_outline serviceoutline[] imt_outlinex serviceoutlinex[] ).
* set service lineslr_bapi-set_srv_service_lines( imt_service_lines servicelines[]imt_service_linesx servicelinesx[] ).
* set limit datalr_bapi-set_srv_limit_data( imt_limit_data servicelimit[]imt_limit_datax servicelimitx[] ).
* set contract limitslr_bapi-set_srv_contract_limits( imt_contract_limits servicecontractlimits[]imt_contract_limitsx servicecontractlimitsx[] ).
* set srv accounting lineslr_bapi-set_srv_acc_lines( imt_srv_acc_data serviceaccount[]imt_srv_acc_datax serviceaccountx[] ).
* set srv longtextslr_bapi-set_srv_longtexts( imt_srv_texts servicelongtexts[] ).* start processingCALL METHOD lr_bapi-process( ).*- Outbound mapping to returning structures/tables
* get header dataprheaderexp lr_bapi-get_header( ).
* get requisition numbernumber lr_bapi-my_document.
* get header textprheadertext[] lr_bapi-get_header_text( ).
* get item datapritemexp[] lr_bapi-get_items_exp( ).
* get accouting datapraccount[] lr_bapi-get_account( ).
* get subcontracting componentsprcomponents[] lr_bapi-get_components( ).
* get serial numbersserialnumber[] lr_bapi-get_serialno( ).
* get delivery addresspraddrdelivery[] lr_bapi-get_delivery_address( ).
* get item textpritemtext[] lr_bapi-get_item_text( ).
* get source of supplypritemsource[] lr_bapi-get_source( ).
* version dataallversions[] lr_bapi-get_version( ).
* get extensionoutextensionout[] lr_bapi-get_extensionout( ).
* return messagesreturn[] lr_bapi-get_return( ).
* get srv outlineserviceoutline[] lr_bapi-get_srv_outline( ).
* get service linesservicelines[] lr_bapi-get_srv_service_lines( ).
* get limit dataservicelimit[] lr_bapi-get_srv_limit_data( ).
* get contract limitsservicecontractlimits[] lr_bapi-get_srv_contract_limits( ).
* get srv accounting linesserviceaccount[] lr_bapi-get_srv_acc_lines( ).
* get srv longtextsservicelongtexts[] lr_bapi-get_srv_longtexts( ).* only for testing purpose.IF lf_cr EQ cl_mmpur_constantsyes. COMMIT WORK. ENDIF.ENHANCEMENT-POINT bapi_pr_change_g7 SPOTS es_sapl2105.
*$*$-Start: BAPI_PR_CHANGE_G7-------------------------------------------------------------------$*$*
ENHANCEMENT 2 MGV_GENERATED_BAPI_PR_CHANGE. active version
*{BAPI Begin} generation http://intranet.sap.com/materialversion
CALL FUNCTION MATNR_BAPI_TABLES_CONVERSION
EXPORTINGINT_TO_EXTERNAL X
TABLEST_FNAMES T_MGV_FNAMES1T_MATNR PRITEMEXP.
CALL FUNCTION MATNR_BAPI_TABLES_CONVERSION
EXPORTINGINT_TO_EXTERNAL X
TABLEST_FNAMES T_MGV_FNAMES2T_MATNR PRITEM.
*{BAPI End} generation
ENDENHANCEMENT.
*$*$-End: BAPI_PR_CHANGE_G7-------------------------------------------------------------------$*$*
ENDFUNCTION.点一下 Import Tab(输入这里面有好多参数
- NUMBER - 购买依赖番号 对照上面做的购买依赖票就是 购买依赖番号10014101 点一下 Table Tab
双击 PRITEM - BAPIMEREQITEMIMP - 转送构造EnjoySAP 购买依赖-明细Data
这个其实就是购买依赖明细 的构造 按一下CtrlF然后查找 Block找到下面两个明细行的字段
- REQ_BLOCKED - 购买依赖Block标记
- REASON_BLOCKING - 明细Block的理由 1-3SE37 - 界面上执行BAPI
回到上一页然后点 执行 这就是BAPI的执行界面 输入
- NUMBE - 10014101
点一下 PRITEM 输入
- PREQ - 0010 这个就是明细行的行番号指明想要改哪行 然后点 列 图标 按下 CtrlF输入 Block这样就可以查到列然后双击对象列
- REQ_BLOCKED - 购买依赖Block标记
- REASON_BLOCKING - 明细Block的理由 定位到后对象列后继续双击该对象列 这样就显示了变更页面
在这里输入想更新的字段数据然后点执行就可以了 那么该输入什么值呢
具体输入什么值这个基本干过一段时间都能知道这里也简单说一下其中一种方法
比如点一下画面的字段然后按F1再点技术情报 然后继续双击 项目名 BLCKD 然后继续 Component列的 BLCKD 字段 双击Domain BLCKD 点 值范围 tab就能看到值范围
- 1 - 被请求者Block济
- 空白 - 未Block 另外其实还可以简单通过 SE16NSE11 之类的直接看表里面既存数据
就像下面这样 回到值输入界面 输入之后点返回图标这里还有一个 PRITEMX 构造
这个一般来说和 PRITEM 成对出现
它的涵义就像一个指示器指示哪些字段要更改
这里双击它 和 PRITEM 一样输入行番号 点 列 图标找到 BLCKD然后找到对象列之后输入 X 到两个列里面表示这些字段要更改 回到输入界面可以看到 PRITEMPRITEMX 各有1条数据
点执行 这样就执行完了
可以看到 PRITEM/ PRITEMX 各执行一条数据 点 RETURN可以看到已经更新成功 回到 ME53N
哎好像更新失败了啊 那么到底为什么没有成功呢明明都已经出成功的Log了呀
其实是因为咱们没Commit。
熟悉DB知识的朋友都知道SQL执行之后要Commit 或 Rollback不然是不会反映到DB的。
那么SAP BAPI 要怎么Commit呢这就要用到Test序列 功能把Commit/Rollback给加进去执行
1-4Test顺序测试序列
Menu 汎用Module(功能模块) Test
Test顺序(测试序列)
啥叫Test顺序呢其实就是顾名思义按顺序执行多个BAPI
咱们这里就是要在 SAP Test顺序里面加入 Commit BAPI。 输入如下汎用Module序列
- BAPI_PR_CHANGE
- BAPI_TRANSACTION_COMMIT 这个就是SAP Commit BAPI 上图点 执行这样第1个汎用Module就开始执行了
和 上面的【1-3】一样在界面上输入要修改的数据 点执行这样第1个汎用Module就执行完了 点一下返回这样就开始执行第2个BAPI
直接点执行图标 这样就执行完了 再回到 ME53N这回确实是更改成功了。 1-5总结
- BAPI就是SAP的系统级函数
- 可以通过SE37界面执行BAPI和通过T-code执行的效果是一样的
- 单单执行BAPI 是更改不了数据的要通过Test顺序 把 Commit BAPI也带上这样才能提交更新 上面是通过界面来体验了一下BAPI长什么样儿怎么执行让大家有个具体的印象。
下面通过ABAP代码来执行一下BAPI从而贴近现实应用。
因为大家用BAPI不是为了傻兮兮的到SE37 去执行BAPI的更常见的是在ABAP代码中通过传参来批量执行某种动作。比如更新1000条数据中某个字段像这种通过ABAP调BAPI那太有利了。
2从ABAP角度来执行BAPI 2-1SE38
先用SE38 来创建1个调用程序。
- Program - ZTEST_BAPI01 输入
- 标题任意
- Type1 - 可实行Program
点保存 点 Local Object
这样咱们的可执行程序就做好了。
下面就要通过它来调用购买依赖变更BAPI - BAPI_PR_CHANGE Menu 编集 Pattern模式 输入
- CALL_FUNCTIONBAPI_PR_CHANGE
然后点执行 可以看到其实就是简单的把BAPI 给插进来了。
默认把所有参数都屏了。
就是说刚加进来的BAPI 函数是一个毛坯状态想用什么参数你就打开它。 然后咱们代码写写具体的含义以后有机会再说。
这里把写完的代码贴一下。
其实就是通过代码方式实现的是和上面SE37调用BAPI一样的功能。
*---------------------------------------------------------------------*
* Report ZTEST_BAPI01
*
*---------------------------------------------------------------------*
*
*
*---------------------------------------------------------------------*REPORT ZTEST_BAPI01.DATA: LV_NUM LIKE BAPIMEREQHEADER-PREQ_NO .
DATA: LT_PRITEM LIKE TABLE OF BAPIMEREQITEMIMP .
DATA: LS_PRITEM LIKE BAPIMEREQITEMIMP .
DATA: LT_PRITEMX LIKE TABLE OF BAPIMEREQITEMX .
DATA: LS_PRITEMX LIKE BAPIMEREQITEMX .
DATA: LT_RETURN LIKE TABLE OF BAPIRET2 .LV_NUM 0010014101 .
LS_PRITEM-PREQ_ITEM 0010 .
LS_PRITEM-REQ_BLOCKED 1 .
LS_PRITEM-REASON_BLOCKING 10014101-Blocked ABAP .
APPEND LS_PRITEM TO LT_PRITEM .LS_PRITEMX-PREQ_ITEM 0010 .
LS_PRITEMX-REQ_BLOCKED X .
LS_PRITEMX-REASON_BLOCKING X .
APPEND LS_PRITEMX TO LT_PRITEMX .CALL FUNCTION BAPI_PR_CHANGEEXPORTINGNUMBER LV_NUM
* PRHEADER
* PRHEADERX
* TESTRUN
* IMPORTING
* PRHEADEREXP TABLESRETURN LT_RETURNPRITEM LT_PRITEMPRITEMX LT_PRITEMX
* PRITEMEXP
* PRITEMSOURCE
* PRACCOUNT
* PRACCOUNTPROITSEGMENT
* PRACCOUNTX
* PRADDRDELIVERY
* PRITEMTEXT
* PRHEADERTEXT
* EXTENSIONIN
* EXTENSIONOUT
* PRVERSION
* PRVERSIONX
* ALLVERSIONS
* PRCOMPONENTS
* PRCOMPONENTSX
* SERVICEOUTLINE
* SERVICEOUTLINEX
* SERVICELINES
* SERVICELINESX
* SERVICELIMIT
* SERVICELIMITX
* SERVICECONTRACTLIMITS
* SERVICECONTRACTLIMITSX
* SERVICEACCOUNT
* SERVICEACCOUNTX
* SERVICELONGTEXTS
* SERIALNUMBER
* SERIALNUMBERX .DATA: X .
X X . 点一下激活 图标然后在最后一行那里打个断点执行一下看看结果。
激活 双击某一行打断点
然后点 执行 图标 双击 LT_RETURN 再双击 LT_RETURN这样就能看到结果了
跟上面 1-3 里面的执行结果是一样的。
仔细看一下的话如果 TYPE S AND ID 06那么就表示执行成功了。
咱们在代码里面也加上这个判断就是说成功之后咱们再Commit。 修改之后代码就变成像下面这样的了
*---------------------------------------------------------------------*
* Report ZTEST_BAPI01
*
*---------------------------------------------------------------------*
*
*
*---------------------------------------------------------------------*REPORT ZTEST_BAPI01.DATA: LV_NUM LIKE BAPIMEREQHEADER-PREQ_NO .
DATA: LT_PRITEM LIKE TABLE OF BAPIMEREQITEMIMP .
DATA: LS_PRITEM LIKE BAPIMEREQITEMIMP .
DATA: LT_PRITEMX LIKE TABLE OF BAPIMEREQITEMX .
DATA: LS_PRITEMX LIKE BAPIMEREQITEMX .
DATA: LT_RETURN LIKE TABLE OF BAPIRET2 .
DATA: LS_RETURN LIKE BAPIRET2 .LV_NUM 0010014101 .
LS_PRITEM-PREQ_ITEM 0010 .
LS_PRITEM-REQ_BLOCKED 1 .
LS_PRITEM-REASON_BLOCKING 10014101-Blocked ABAP .
APPEND LS_PRITEM TO LT_PRITEM .LS_PRITEMX-PREQ_ITEM 0010 .
LS_PRITEMX-REQ_BLOCKED X .
LS_PRITEMX-REASON_BLOCKING X .
APPEND LS_PRITEMX TO LT_PRITEMX .CALL FUNCTION BAPI_PR_CHANGEEXPORTINGNUMBER LV_NUM
* PRHEADER
* PRHEADERX
* TESTRUN
* IMPORTING
* PRHEADEREXP TABLESRETURN LT_RETURNPRITEM LT_PRITEMPRITEMX LT_PRITEMX
* PRITEMEXP
* PRITEMSOURCE
* PRACCOUNT
* PRACCOUNTPROITSEGMENT
* PRACCOUNTX
* PRADDRDELIVERY
* PRITEMTEXT
* PRHEADERTEXT
* EXTENSIONIN
* EXTENSIONOUT
* PRVERSION
* PRVERSIONX
* ALLVERSIONS
* PRCOMPONENTS
* PRCOMPONENTSX
* SERVICEOUTLINE
* SERVICEOUTLINEX
* SERVICELINES
* SERVICELINESX
* SERVICELIMIT
* SERVICELIMITX
* SERVICECONTRACTLIMITS
* SERVICECONTRACTLIMITSX
* SERVICEACCOUNT
* SERVICEACCOUNTX
* SERVICELONGTEXTS
* SERIALNUMBER
* SERIALNUMBERX .LOOP AT LT_RETURN INTO LS_RETURN WHERE TYPE S AND ID 06 .CALL FUNCTION BAPI_TRANSACTION_COMMIT .
ENDLOOP .2-2执行确认
执行前 代码执行
好像没啥 执行完了 之类的提示哈 执行后确认执行完了之后再次打开ME53N可以看到数据已经更改了 这样就通过在ABAP代码中执行了 BAPI 从而实现修改 购买依赖数据的功能。
可以将 BAPI 理解为SAP系统级函数通过调用它可以用很少的代码实现特殊/复杂的功能。
可以在SE37 界面上执行BAPI当然更为常用的是在 自己写的ABAP 或其他代码中调用BAPI从而实现一些批量修改之类的功能。 以上就是本章的内容。
更多SAP顾问业务知识请点击下面目录链接
https://blog.csdn.net/shi_ly/category_12216766.html