SAP MIGO屏幕增强详解编程语言
2023-06-13 09:11:48 时间
DATA:lv_godynpro TYPE string VALUE (SAPLMIGO)GODYNPRO,
lv_gohead TYPE string VALUE (SAPLMIGO)GOHEAD.
ASSIGN (lv_godynpro) TO godynpro .
godynpro -action godynpro -refdoc
2.自定义表、结构
3.函数组
屏幕上数据放的是ymmt_migo
注意:需要参考数据字段
获取屏幕上的数据 将数据放入屏幕上注意这里gv_flag来控制屏幕是否可编辑,放在屏幕PBO上
更新到数据库 4.BADI实现创建实施
5.实现方法IF_EX_MB_MIGO_BADI~INIT
METHOD if_ex_mb_migo_badi~init. * regristration of badi-implementation: * Append class attribute GF_CLASS_ID (=MIGO_BADI_IMPLEMENTATION1) to * regristration table. append gf_class_id to ct_init. ENDMETHOD.
IF_EX_MB_MIGO_BADI~PBO_DETAIL
METHOD if_ex_mb_migo_badi~pbo_detail. DATA: ls_extdata TYPE ymms_migo. * 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 SY-UNAME = WANGXING. CHECK i_class_id = gf_class_id. * Show screen only if there is an item CHECK 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 = SAPLYWXMIGO_BADI(006). "程序名为定义的函数组的名称前加“SAPL“。 e_dynnr = 1001. "External fields: Input e_heading = MIGO BADI TEST(004). "显示标签的名称 * ENDIF. * Set G_LINE_ID (= line_id of item displayed on detail-tabstrip) g_line_id = i_line_id. * Read data READ TABLE gt_data INTO ls_extdata WITH TABLE KEY line_id = i_line_id. * Export data to function group (for display on subscreen) CALL FUNCTION YWXMIGO_PUT_DATA EXPORTING is_migo_data = ls_extdata iv_flag = g_no_input. ENDMETHOD.
IF_EX_MB_MIGO_BADI~PAI_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 ymms_migo, ls_extdata_old TYPE ymms_migo. * Only if a line exists CHECK i_line_id 0. * Get data from external screen CALL FUNCTION YWXMIGO_GET_DATA IMPORTING es_migo_data = ls_extdata_new. * Compare new data with old data READ TABLE gt_data INTO ls_extdata_old WITH 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, its obligatory to force MIGO to trigger * method LINE_MODIFY. e_force_change = X. ENDIF. ENDMETHOD.
IF_EX_MB_MIGO_BADI~LINE_MODIFY
METHOD if_ex_mb_migo_badi~line_modify. DATA: ls_extdata_old TYPE ymms_migo, ls_extdata_new TYPE ymms_migo, ls_migo_badi_exampl TYPE ymmt_migo, l_subrc TYPE sy-subrc. * Get external data from internal table: READ TABLE gt_data INTO ls_extdata_old WITH 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 INITIAL AND NOT cs_goitem-zeile IS INITIAL. SELECT SINGLE * FROM ymmt_migo INTO ls_migo_badi_exampl WHERE mblnr = cs_goitem-mblnr AND mjahr = cs_goitem-mjahr AND 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_data. 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 YWXMIGO_GET_DATA IMPORTING es_migo_data = 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 screen * cs_goitem-sgtxt = ls_extdata_new-sgtxt. * else. ** Take data from GOITEM * ls_extdata_new-sgtxt = cs_goitem-sgtxt. * endif. MODIFY TABLE gt_data FROM ls_extdata_new. ENDIF. ENDMETHOD.
IF_EX_MB_MIGO_BADI~LINE_DELETE
METHOD if_ex_mb_migo_badi~line_delete. DELETE TABLE gt_data WITH TABLE KEY line_id = i_line_id. ENDMETHOD.
IF_EX_MB_MIGO_BADI~RESET
METHOD if_ex_mb_migo_badi~reset. * clear all internal data: CLEAR: gt_data, g_no_input, gs_exdata_header, g_cancel, g_line_id. ENDMETHOD.
IF_EX_MB_MIGO_BADI~POST_DOCUMENT
METHOD if_ex_mb_migo_badi~post_document. DATA: ls_migo_badi_example TYPE ymmt_migo, lt_migo_badi_example TYPE TABLE OF ymmt_migo, ls_extdata TYPE ymms_migo, 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) * Copy data from material document into internal table LOOP AT gt_data INTO ls_extdata. IF g_cancel IS INITIAL. READ TABLE it_mseg INTO ls_xmseg WITH KEY line_id = ls_extdata-line_id. ELSE. READ TABLE it_mseg INTO ls_xmseg WITH KEY smbln = ls_extdata-mblnr smblp = ls_extdata-zeile sjahr = 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. ls_migo_badi_example-erfmg = ls_extdata-erfmg. ls_migo_badi_example-erfme = ls_extdata-erfme. APPEND ls_migo_badi_example TO lt_migo_badi_example. ENDIF. ENDLOOP. * The data from external detail screen can be saved now: CHECK gt_data IS NOT INITIAL. CALL FUNCTION YWXMIGO_UPDATE_DATA IN UPDATE TASK TABLES it_migo_data = 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 TASK * EXPORTING * is_migo_badi_header_fields = gs_exdata_header. ENDMETHOD.
IF_EX_MB_MIGO_BADI~MODE_SET
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 * used IF i_action = A03. g_cancel = X. ENDIF. ENDMETHOD.
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/18002.html
cgojava相关文章
- sap系统的ooalv的学习标准程序详解编程语言
- SAP中的Currency Converting Factor详解编程语言
- SAP RFC详解编程语言
- SAP客户标准信用额度修改和创建详解编程语言
- SAP常见查询组合详解编程语言
- SAP物料批次管理配置及操作手册详解编程语言
- SAP 移动类型详解编程语言
- SAP 《MM学习指南》操作记录—- 计划协议及交货计划详解编程语言
- SAP如何批量设置采购信息记录删除标记详解编程语言
- SAP 采购订单价格确定过程详解编程语言
- SAP MM移动平均价和标准价逻辑详解编程语言
- SAP MM中如何修改物料的评估类详解编程语言
- SAP-批量修改主数据(客户、供应商、物料)详解编程语言
- SAP S4 BP事务代码的业务伙伴和供应商,客户之间的表关系详解编程语言
- SAP MM批次管理(1)物料与批次–大海详解编程语言
- SAP中MTO & MTS的区别分析详解编程语言
- SAP常用知识点{系统变量|TCODE|消息类型|数据类型|变量声明|Internal Table}详解编程语言
- SAP ABAP收货或者货物移动(MIGO,MB11,MB1A)在保存时候的增强点详解编程语言
- SAP ABAP如何隐藏你写的程序代码(危险,请小心谨慎)详解编程语言
- SAP Memory & ABAP Memory详解编程语言
- SAP监控常用TCODE详解编程语言
- [SAP ABAP开发技术总结]动态语句、动态程序详解编程语言