SAP-BADI屏幕增強實例MB-MIGO-BADI_第1頁
SAP-BADI屏幕增強實例MB-MIGO-BADI_第2頁
SAP-BADI屏幕增強實例MB-MIGO-BADI_第3頁
SAP-BADI屏幕增強實例MB-MIGO-BADI_第4頁
SAP-BADI屏幕增強實例MB-MIGO-BADI_第5頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

.5/5以下根據(jù)系統(tǒng)實例做的最終效果:SE11建立數(shù)據(jù)表,主要是用于存放附加的數(shù)據(jù);MANDT MANDT CLNT 3 0 客戶端MBLNR MBLNR CHAR 10 0 物料憑證編號MJAHR MJAHR NUMC 4 0 物料憑證年度ZEILE MBLPO NUMC 4 0 物料憑證中的項目BADI_ERFMG ERFMG QUAN 13 3 以輸入單位計的數(shù)量BADI_ERFME ERFME UNIT 3 0 條目單位建立結(jié)構(gòu),在屏幕數(shù)據(jù)交換時使用建立表類型設(shè)置關(guān)鍵字段:SE80建立函數(shù)組創(chuàng)建屏幕1000,設(shè)計格式,插入附加字段創(chuàng)建function:ZJIM_BADI_EXAMPLE_GET_DATA*"*"*"Local

interface:*"

EXPORTING*"

REFERENCE<ES_MIGO_BADI_SCREEN_FIELDS>

TYPE*"

ZJIM_BADI_EXAMPLE_SCREEN_FIELD*"*

Get

all

data

from

fields

of

external

screen*

First

move

all

customer-fieldsMOVE-CORRESPONDING

zjim_badi_exampl

TO

es_migo_badi_screen_fields.*

Second

move

all

GOITEM-fields

<displayed

on

external

screen>function:ZJIM_BADI_EXAMPLE_PUT_DATA*"*"*"Local

interface:*"

IMPORTING*"

REFERENCE<IS_MIGO_BADI_SCREEN_FIELDS>

TYPE*"

ZJIM_BADI_EXAMPLE_SCREEN_FIELD*"*

Put

all

data

from

fields

to

external

screen*

First

fill

all

customer-fieldsMOVE-CORRESPONDING

is_migo_badi_screen_fields

TO

ZJIM_badi_exampl.*

second

fill

all

GOITEM-fields

<displayed

on

external

screen>function:ZJIM_BADI_EXAMPLE_UPDATE_DATA*"*"*"Update

function

module:*"*"*"Local

interface:*"

TABLES*"

IT_MIGO_BADI_EXAMPLE

STRUCTURE

ZJIM_BADI_EXAMPL*"*

Databse

update:INSERT

zjim_BADI_EXAMPL

FROM

TABLE

IT_MIGO_BADI_EXAMPLE.IF

sy-subrc

<>

0.MESSAGE

a398<00>

WITH

'Error

update

MIGO_BADI_EXAMPL'.ENDIF.INCLUDE:LZJIM_BADI001TOPTABLES

:

Zjim_badi_exampl.到這里增強的準備工作就做完了,下面開始創(chuàng)建實現(xiàn):SE19創(chuàng)建實現(xiàn)創(chuàng)建執(zhí)行類ZCL_IM_JIM_MIGO_BADI,激活ZJIM_MIGO_BADI雙擊類維護類屬性GT_EXTDATA用于數(shù)據(jù)交換,類型為ZJIM_TY_T_EXTDATA表類型,激活以下方法并維護: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.METHOD

IF_EX_MB_MIGO_BADI~PBO_DETAIL

.DATA:

ls_extdata

TYPE

zjim_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

=

'SAPLZJIM_BADI001'<006>."程序名為定義的函數(shù)組的名稱前加"SAPL"。

e_dynnr

=

'1000'.

"External

fields:

Input

e_heading

=

'ZJIM'<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_extdata

WITH

TABLE

KEY

line_id

=

i_line_id.*

Export

data

to

function

group

<for

display

on

subscreen>CALL

FUNCTION

'ZJIM_BADI_EXAMPLE_PUT_DATA'EXPORTING

is_migo_badi_screen_fields

=

ls_extdata.ENDMETHOD.

"IF_EX_MB_MIGO_BADI~PBO_DETAILMETHOD

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

zjim_badi_example_screen_field,

ls_extdata_old

TYPE

zjim_badi_example_screen_field.*

Only

if

a

line

existsCHECK

i_line_id

<>

0.*

Get

data

from

external

screenCALL

FUNCTION

'ZJIM_BADI_EXAMPLE_GET_DATA'IMPORTING

es_migo_badi_screen_fields

=

ls_extdata_new.*

Compare

new

data

with

old

dataREAD

TABLE

gt_extdata

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,

it's

obligatory

to

force

MIGO

to

trigger*

method

LINE_MODIFY.

e_force_change

=

'X'.ENDIF.ENDMETHOD.

"IF_EX_MB_MIGO_BADI~PAI_DETAILMETHOD

IF_EX_MB_MIGO_BADI~LINE_MODIFY

.DATA:

ls_extdata_old

TYPE

zjim_badi_example_screen_field,

ls_extdata_new

TYPE

zjim_badi_example_screen_field,

ls_migo_badi_exampl

TYPE

zjim_badi_exampl,

l_subrc

TYPE

sy-subrc.*

Get

external

data

from

internal

table:READ

TABLE

gt_extdata

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

INITIALAND

NOT

cs_goitem-zeile

IS

INITIAL.SELECT

SINGLE

*

FROM

zjim_badi_exampl

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_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

'ZJIM_BADI_EXAMPLE_GET_DATA'IMPORTING

es_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

screen*

cs_goitem-sgtxt

=

ls_extdata_new-sgtxt.*

else.**

Take

data

from

GOITEM*

ls_extdata_new-sgtxt

=

cs_goitem-sgtxt.*

endif.MODIFY

TABLE

gt_extdata

FROM

ls_extdata_new.ENDIF.ENDMETHOD.

"IF_EX_MB_MIGO_BADI~LINE_MODIFYMETHOD

IF_EX_MB_MIGO_BADI~LINE_DELETE

.DELETE

TABLE

gt_extdata

WITH

TABLE

KEY

line_id

=

i_line_id.ENDMETHOD.

"IF_EX_MB_MIGO_BADI~LINE_DELETEMETHOD

IF_EX_MB_MIGO_BADI~POST_DOCUMENT

.DATA:

ls_migo_badi_example

TYPE

ZJIM_badi_exampl,

lt_migo_badi_example

TYPE

TABLE

OF

zjim_badi_exampl,

ls_extdata

TYPE

zjim_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>*

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_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.APPEND

ls_migo_badi_example

TO

lt_migo_badi_example.ENDIF.ENDLOOP.*

The

data

f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論