MIGO 行项目屏幕增强创建实例
本人诚心接ABAP远程开发任务,价格公道,有需要的联系我,欢迎个人,甲方爸爸,乙方私信联系。
1.首先创建一张自建表用于存放客制化信息
2.建立结构,在屏幕数据交换时使用
3.建立表类型
4.给之前创建的表类型设置主键
5.创建函数组和屏幕
从客制化屏幕读取录入的值
FUNCTION migo_badi_example_get_data.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" EXPORTING
*" REFERENCE(ES_MIGO_BADI_SCREEN_FIELDS) TYPE
*" MIGO_BADI_EXAMPLE_SCREEN_FIELD
*"----------------------------------------------------------------------* Get all data from fields of external screen
* First move all customer-fieldsMOVE-CORRESPONDING migo_badi_exampl TO es_migo_badi_screen_fields.
* Second move all GOITEM-fields (displayed on external screen)es_migo_badi_screen_fields-sgtxt = goitem-sgtxt.ENDFUNCTION.
FUNCTION migo_badi_example_put_data .
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" REFERENCE(IS_MIGO_BADI_SCREEN_FIELDS) TYPE
*" MIGO_BADI_EXAMPLE_SCREEN_FIELD
*"----------------------------------------------------------------------* Put all data from fields to external screen
* First fill all customer-fieldsMOVE-CORRESPONDING is_migo_badi_screen_fields TO migo_badi_exampl.
* second fill all GOITEM-fields (displayed on external screen)goitem-sgtxt = is_migo_badi_screen_fields-sgtxt.ENDFUNCTION.
FUNCTION MIGO_BADI_EXAMPLE_UPATE_DATA.
*"----------------------------------------------------------------------
*"*"Verbuchungsfunktionsbaustein:
*"
*"*"Lokale Schnittstelle:
*" TABLES
*" IT_MIGO_BADI_EXAMPLE STRUCTURE MIGO_BADI_EXAMPL
*"----------------------------------------------------------------------* Databse update:INSERT MIGO_BADI_EXAMPL FROM TABLE IT_MIGO_BADI_EXAMPLE.IF sy-subrc <> 0.MESSAGE a398(00) WITH 'Error update MIGO_BADI_EXAMPL'.ENDIF.ENDFUNCTION.
创建屏幕的时候注意设置成子屏幕
函数组top中的声明
FUNCTION-POOL migo_badi_example. "MESSAGE-ID ..TABLES: migo_badi_exampl,migo_badi_examp2,goitem.TYPES:BEGIN OF ty_s_exdata_header,line_id TYPE mb_line_id,mandt TYPE mandt,mblnr TYPE mblnr,mjahr TYPE mjahr,badi_nummer TYPE num10,END OF ty_s_exdata_header.
6.SE19创建实现
7.激活以下方法并添加代码
method IF_EX_MB_MIGO_BADI~INIT.APPEND gf_class_id TO ct_init.endmethod.
pbo_detail这个方法中的0001屏幕是可以编辑的
0002屏幕是不可以编辑
如果不想画两个屏幕就将if g_no_input is initial.这个判断删除
并将g_no_input 作为参数传入 函数,然后在画的屏幕的PBO里面根据 参数loop屏幕设置是否可以输入
METHOD if_ex_mb_migo_badi~pbo_detail.DATA: ls_extdata TYPE migo_badi_example_screen_field.
* This check is obligatory, otherwise the program flow is incorrect
* (If there would be more than one implementation of BAdI MB_MIGO_BADI,
* only one subscreen would be displayed).CHECK i_class_id = gf_class_id.
* Show screen only if there is an itemCHECK i_line_id <> 0.
* External subscreen:
* The content of global field G_NO_INPUT (set in method MODE_SET) will
* influence the number of external subsreen:if g_no_input is initial.e_cprog = 'SAPLMIGO_BADI_EXAMPLE'.e_dynnr = '0001'. "External fields: Inpute_heading = 'MIGO BAdI Example'(004).else.e_cprog = 'SAPLMIGO_BADI_EXAMPLE'.e_dynnr = '0002'. "External fields: Displaye_heading = 'MIGO BAdI EXAMPLE'(004).endif.
* Set G_LINE_ID (= line_id of item displayed on detail-tabstrip)g_line_id = i_line_id.
* Read dataREAD TABLE gt_extdata INTO ls_extdataWITH TABLE KEY line_id = i_line_id.
* Export data to function group (for display on subscreen)CALL FUNCTION 'MIGO_BADI_EXAMPLE_PUT_DATA'EXPORTINGis_migo_badi_screen_fields = ls_extdata.ENDMETHOD. "IF_EX_MB_MIGO_BADI~PBO_DETAIL
METHOD if_ex_mb_migo_badi~pai_detail.
*-----------------------------------------------------------------------
* Changing parameter E_FORCE_CHANGE can be set to 'X'. In this case
* method LINE_MODIFY is called.
* ATTENTION:
* DO NOT SET parameter E_FORCE_CHANGE = ' '. In this case you might
* overwrite parameter E_FORCE_CHANGE of another BAdI implementation.
*-----------------------------------------------------------------------DATA: ls_extdata_new TYPE migo_badi_example_screen_field,ls_extdata_old TYPE migo_badi_example_screen_field.* Only if a line existsCHECK i_line_id <> 0.
* Get data from external screenCALL FUNCTION 'MIGO_BADI_EXAMPLE_GET_DATA'IMPORTINGes_migo_badi_screen_fields = ls_extdata_new.
* Compare new data with old dataREAD TABLE gt_extdata INTO ls_extdata_oldWITH TABLE KEY line_id = i_line_id.ls_extdata_new-line_id = i_line_id.IF ls_extdata_old <> ls_extdata_new.
* If there were any changes, it's obligatory to force MIGO to trigger
* method LINE_MODIFY.e_force_change = 'X'.ENDIF.ENDMETHOD. "IF_EX_MB_MIGO_BADI~PAI_DETAIL
METHOD if_ex_mb_migo_badi~line_modify.DATA: ls_extdata_old TYPE migo_badi_example_screen_field,ls_extdata_new TYPE migo_badi_example_screen_field,ls_migo_badi_exampl TYPE migo_badi_exampl,l_subrc TYPE sy-subrc.* Get external data from internal table:READ TABLE gt_extdata INTO ls_extdata_oldWITH TABLE KEY line_id = i_line_id.l_subrc = sy-subrc.* Update data in internal table:IF l_subrc <> 0.
* Line is new: If GOITEM has a reference to a material document,
* the already existing external data can be read.IF NOT cs_goitem-mblnr IS INITIAL AND NOT cs_goitem-mjahr IS INITIALAND NOT cs_goitem-zeile IS INITIAL.SELECT SINGLE * FROM migo_badi_exampl INTO ls_migo_badi_examplWHERE mblnr = cs_goitem-mblnrAND mjahr = cs_goitem-mjahrAND zeile = cs_goitem-zeile.IF sy-subrc = 0.MOVE-CORRESPONDING ls_migo_badi_exampl TO ls_extdata_new.ENDIF.ENDIF.ls_extdata_new-sgtxt = cs_goitem-sgtxt.ls_extdata_new-line_id = i_line_id.INSERT ls_extdata_new INTO TABLE gt_extdata.ELSE.
* Line exists: Get external data entered on BAdI-subscreeen, but only
* if line_modify was called for the item displayed in the
* 'detail tabstrip'.check g_line_id = i_line_id.CALL FUNCTION 'MIGO_BADI_EXAMPLE_GET_DATA'IMPORTINGes_migo_badi_screen_fields = ls_extdata_new.ls_extdata_new-line_id = i_line_id.if ls_extdata_new-sgtxt <> ls_extdata_old-sgtxt.
* Field was changed on external screencs_goitem-sgtxt = ls_extdata_new-sgtxt.else.
* Take data from GOITEMls_extdata_new-sgtxt = cs_goitem-sgtxt.endif.MODIFY TABLE gt_extdata FROM ls_extdata_new.ENDIF.ENDMETHOD. "IF_EX_MB_MIGO_BADI~LINE_MODIFY
METHOD if_ex_mb_migo_badi~line_delete.DELETE TABLE gt_extdata WITH TABLE KEY line_id = i_line_id.
ENDMETHOD.
METHOD if_ex_mb_migo_badi~reset.
* Clear all internal data:CLEAR: gt_extdata,g_no_input,gs_exdata_header,g_cancel,g_line_id.ENDMETHOD. "IF_EX_MB_MIGO_BADI~RESET
post_document这个方法中
CALL FUNCTION 'MIGO_BADI_EXAMPLE_UPATE_DATA' IN UPDATE TASK
update task 这个关键字 是无法debug的,这个是将这个函数模块放入待执行队列
直到commit work语句时候一起提交执行
如果想debug 就将此关键字注释
METHOD if_ex_mb_migo_badi~post_document.DATA: ls_migo_badi_example TYPE migo_badi_exampl,lt_migo_badi_example TYPE TABLE OF migo_badi_exampl,ls_extdata TYPE migo_badi_example_screen_field,ls_xmseg TYPE mseg.FIELD-SYMBOLS: <gt_extdata> TYPE migo_badi_example_screen_field.
* Transaction MIGO will now post a material document.
* Any errors here MUST be issued as A-message (better: X-message)IF gt_extdata_maa IS NOT INITIAL. "Begin of 1987428
* Table gt_extdata_maa is setup in method MAA_LINE_ID_ADJUST.
* Copy data from material document into internal tableLOOP AT gt_extdata_maa INTO ls_extdata.IF g_cancel IS INITIAL.READ TABLE it_mseg INTO ls_xmsegWITH KEY line_id = ls_extdata-line_id.ELSE.READ TABLE it_mseg INTO ls_xmsegWITH KEY smbln = ls_extdata-mblnrsmblp = ls_extdata-zeilesjahr = ls_extdata-mjahr.ENDIF.IF sy-subrc IS INITIAL.MOVE-CORRESPONDING ls_extdata TO ls_migo_badi_example.MOVE-CORRESPONDING ls_xmseg TO ls_migo_badi_example.IF ls_xmseg-maa_urzei IS NOT INITIAL.ls_migo_badi_example-zeile = ls_xmseg-maa_urzei.ENDIF.APPEND ls_migo_badi_example TO lt_migo_badi_example.ENDIF.ENDLOOP. "End of 1987428ELSE. "1987428
* Copy data from material document into internal tableLOOP AT gt_extdata INTO ls_extdata.IF g_cancel IS INITIAL.READ TABLE it_mseg INTO ls_xmsegWITH KEY line_id = ls_extdata-line_id.ELSE.READ TABLE it_mseg INTO ls_xmsegWITH KEY smbln = ls_extdata-mblnrsmblp = ls_extdata-zeilesjahr = ls_extdata-mjahr.ENDIF.IF sy-subrc IS INITIAL.MOVE-CORRESPONDING ls_extdata TO ls_migo_badi_example.MOVE-CORRESPONDING ls_xmseg TO ls_migo_badi_example.APPEND ls_migo_badi_example TO lt_migo_badi_example.ENDIF.ENDLOOP.ENDIF. "1987428* The data from external detail screen can be saved now:CHECK gt_extdata IS NOT INITIAL.CALL FUNCTION 'MIGO_BADI_EXAMPLE_UPATE_DATA' IN UPDATE TASKTABLESit_migo_badi_example = lt_migo_badi_example.
* The data from external header screen can be saved now:MOVE-CORRESPONDING is_mkpf TO gs_exdata_header.CALL FUNCTION 'MIGO_BADI_EXAMPLE_UPDATE_HEAD' IN UPDATE TASKEXPORTINGis_migo_badi_header_fields = gs_exdata_header.ENDMETHOD. "IF_EX_MB_MIGO_BADI~POST_DOCUMENT
METHOD if_ex_mb_migo_badi~mode_set.
* ACTION and REFDOC will discribe the mode of transaction MIGO.
* ----------------------------------------------------------------------
* i_action:
* A01 = Goods receipt
* A02 = Return delivery
* A03 = Cancellation
* A04 = Display
* A05 = Release GR bl.st.
* A06 = Subsequent deliv.
* A07 = Goods issue
*
* i_refdoc:
* R01 = Purchase order
* R02 = Material document
* R03 = Delivery note
* R04 = Inbound delivery
* R05 = Outbound delivery
* R06 = Transport
* R07 = Transport ID code
* R08 = Order
* R09 = Reservation
* R10 = Other GR
*-----------------------------------------------------------------------* In case of 'DISPLAY' the global field G_NO_INPUT will be set to 'X'.
* The result is that a different external subscreen will be choosen in
* method PBO_DETAIL.IF i_action = 'A04' OR i_action = 'A03'.g_no_input = 'X'.ENDIF.
* In case of 'CANCEL' the global field G_CANCEL will be set to 'X'.
* The result is that in method POST_DOCUMENT a different handling is
* usedIF i_action = 'A03'.g_cancel = 'X'.ENDIF.ENDMETHOD. "IF_EX_MB_MIGO_BADI~MODE_SET
激活所有,然后进MIGO就可以实现了
以上所有的代码均可以在SAP标准实例中查看,查看方法如下
SE18-->MB_MIGO_BADI-->显示
点击转到 --->显示---->示例代码
其中也有MIGO 表头屏幕增强
MIGO 行项目屏幕增强创建实例相关推荐
- SAP采购订单抬头、行项目屏幕增强的两种方法
对SAP系统中采购订单抬头进行屏幕增强,在抬头上增加了几个customer fields,但是实现方法有点怪,是一个Z report程序,其下创建了一个屏幕,屏幕中放的就是这几个customer fi ...
- MIGO 行项目屏幕自定义字段增强示例
继上次抬头屏幕增强(MIGO 抬头屏幕自定义字段增强示例),本文章演示行项目增强示例 实现思路参考标准 MB_MIGO_BADI 增强示例类:CL_EXM_IM_MB_MIGO_BADI 1.创建增强 ...
- SAP SO销售单抬头行项目屏幕增强,新增客户自定义字段示例
1. 前言 对于销售单屏幕增强: 屏幕使用sap程序SAPMV45A标准预留的两个子屏幕8309 8459 增强出口BAdI & USER_EXIT BAdI 使用SAP BADI_SD_SA ...
- SAP 采购订单行项目屏幕增强(BADI)
导语:前面写了一个采购订单抬头增强,用SMOD的方式实现的
- 【转】采购订单行项目检查增强
采购订单行项目检查增强 使用BADI"ME_PROCESS_PO_CUST"的方法CHECK中增强,增加对采购订单行项目的校验,若发现错误,将这些错误消息按照行项目归集显示. 完整 ...
- 【增强】FI行项目报表增强任意字段
业务背景:例如在FBL1N/FBL3N/FBL5N中显示总账科目名称.供应商名称1.客户名称1 依以下步骤执行: 1.FIBF > Settings > Products > of ...
- 销售订单屏幕增强及功能增强
增强点在程序SAPMV45A中有明显标志,见下图 或查看该程序子例程以USEREXIT_开头的即为增强出口,这些出口就包含在上图的INCLUDE程序中. 1.1 .销售订单行项目屏幕增强 程序SAP ...
- VA01/VA02/VA03 屏幕增强
销售订单屏幕增强 项目中经常有销售订单屏幕增强的需求以满足客户在录入销售订单时特殊指标的录入和存储. 销售订单屏幕增强分为抬头屏幕增强和行项目屏幕增强,根据需求,完成增强开发. 1.T-code :S ...
- S4 MIGO屏幕增强
1.创建结构和表 结构:ZSMIGO_ITEM 表类型: 表 :ZTMIGO_ITEM(用来保存增强字段的值) 2.创建函数组 TOP里的代码: FUNCTION-POOL zfg_migo. &qu ...
最新文章
- Python使用matplotlib可视化条形图(bar plot)、自定义在条形图的顶部添加数值标签(Bar Chart)
- 【zz】如何去理解 拓扑排序算法
- TensorFlow实现one-hot编码【TensorFlow2入门手册】
- MCU提高ADC采样精度的几种方案
- C++ Ouput Exactly 2 Digits After Decimal Point 小数点后保留三位数字
- 一个浪漫又悲情的爱情故事...
- 浙江省计算机二级excel函数,浙江省计算机二级excel练习5操作要求
- js 将图片置灰_艾叶灰千万别扔——艾叶灰的神奇功效
- 写一些脚本的心得总结系列第3篇------同步数据到其他表
- Android进阶2之图片倒影效果 .
- 深入比特币原理(三)——交易的输入(input)与输出(output)
- Business Connectivity Services 团队博客简介
- Android - shape圆形画法(oval)
- 如何准备PMP新版大纲考试?
- iphone如何刷android系统升级,iphone4s如何刷成android系统?
- linux查看wifi信号命令_详细解析:Linux系统的无线网络命令
- Win10电脑主板型号怎么查看
- 端电压,相电压,线电压区别
- 台信M18金属感应开关传感器三线NPN常开
- 网站被攻击如何查找木马文件 以及攻击者IP