Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

badi

Former Member
0 Likes
986

Hi,

I am new to BADI. can any one help me. How to declare internal table in badi and populate data into internal table using select statment. for example how can we write code for this in badi methods.

1.When W_STAT_ORDERNO equals ‘5’ (closed status), sum all UDMCASEATTR00-AMOUNTs (1-10). If they do not equal the UDMCASEATTR00-FIN_ORIGINAL_AMT, pass an error message back to the screen.

Thanks,

Ankitha.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
867

Hi chandra,

i am sending the code, in which i want to add that logic.

METHOD IF_EX_SCMG_BEFORE_VALID_C~CHANGE .

DATA:

W_SRMADID TYPE SRMADID,

W_VBELN TYPE BELNR_D,

W_KUNNR TYPE KUNNR,

W_CLERK TYPE BUSAB,

W_CLERK_KNB5 TYPE BUSAB,

W_CLERK_KNB1 TYPE BUSAB,

W_ACCT_CLERK TYPE BUSAB,

W_CLERK_KNKK TYPE SBGRP_cm,

W_IM_VALUE TYPE STRING,

W_FIN_DOCUMENT TYPE ZZFIN_DOCUMENT,

W_BELNR TYPE UDM_KUNNR,

W_LINE_NO TYPE BUZEI,

W_GJAHR TYPE GJAHR,

W_CASE_GUID TYPE SYSUUID_C,

W_CASE_GUID_CURRENT TYPE SYSUUID_C,

W_EXT_KEY TYPE SCMG_EXT_KEY,

W_STAT_ORDERNO TYPE SCMGSTATUSONR,

LREF_CX_ROOT TYPE REF TO CX_ROOT,

L_MSGTEXT(72) TYPE C,

EX_MESSAGES TYPE SCMG_T_ATTR_RETURN_VALUE.

CLEAR: W_VBELN,

W_KUNNR,

W_CLERK, W_ACCT_CLERK, W_CLERK_KNB5, W_CLERK_KNB1,

W_FIN_DOCUMENT, W_CLERK_KNKK,

W_BELNR,

W_LINE_NO,

W_GJAHR.

  • To switch on GOS - to attach files to the case

*

DATA: GO_MYOBJECT TYPE REF TO CL_GOS_MANAGER,

LS_OBJECT TYPE BORIDENT,

LS_OBJECT_KEY TYPE SIBFINSTID,

Ex TYPE REF TO cx_scmg_case_badi.

  • trigger generic object services

IF GO_MYOBJECT IS INITIAL.

LS_OBJECT-OBJTYPE = 'BUS2022'.

LS_OBJECT = 'BUS2022'.

CREATE OBJECT GO_MYOBJECT

EXPORTING

IS_OBJECT = LS_OBJECT

IP_NO_INSTANCE = 'x'

EXCEPTIONS OTHERS = 1.

ENDIF.

TRY.

  • Want to ensure that the document & line number are not

  • already in an open case.

  • Order Status = 5 = Closed

CALL METHOD IM_CASE->GET_GUID

RECEIVING

RE_GUID = W_CASE_GUID_CURRENT.

LS_OBJECT-OBJKEY = W_CASE_GUID_CURRENT.

LS_OBJECT-OBJTYPE = 'BUS2022'.

CALL METHOD GO_MYOBJECT->SET_ID_OF_PUBLISHED_OBJECT

EXPORTING

IS_OBJECT = LS_OBJECT

EXCEPTIONS

OTHERS = 1.

W_SRMADID = 'FIN_DOCUMENT'.

CALL METHOD IM_CASE->GET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_SRMADID = W_SRMADID

RECEIVING

RE_VALUE = W_FIN_DOCUMENT.

SELECT SINGLE CASE_GUID FIN_DOCUMENT

INTO (W_CASE_GUID, W_FIN_DOCUMENT )

FROM UDMCASEATTR00

WHERE FIN_DOCUMENT = W_FIN_DOCUMENT.

IF SY-SUBRC = 0.

IF W_CASE_GUID_CURRENT <> W_CASE_GUID.

SELECT SINGLE EXT_KEY STAT_ORDERNO

INTO (W_EXT_KEY, W_STAT_ORDERNO)

FROM SCMG_T_CASE_ATTR

WHERE CASE_GUID = W_CASE_GUID.

  • IF SY-SUBRC = 0 AND W_STAT_ORDERNO <> 5. "DEVK950418

IF SY-SUBRC = 0.

MESSAGE I004(ZF) WITH W_FIN_DOCUMENT W_EXT_KEY.

RAISE EXCEPTION TYPE cx_scmg_case_badi "DEVK950418

EXPORTING

TEXTID = 'CASE ALREADY EXISTS'.

RETURN.

ENDIF.

  • ENDIF. "DEVK950418

ENDIF.

ENDIF.

  • Need to get the account clerk based on customer number

  • if it is not entered get it from KNB1

  • If supplied, verify against knb1 & KNB5.

  • if valid do nothing, if not - move out the value based on

  • order status

W_SRMADID = 'STAT_ORDERNO'.

CALL METHOD IM_CASE->GET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_SRMADID = W_SRMADID

RECEIVING

RE_VALUE = W_STAT_ORDERNO.

W_SRMADID = 'CUSTOMER'.

CALL METHOD IM_CASE->GET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_SRMADID = W_SRMADID

RECEIVING

RE_VALUE = W_KUNNR.

W_SRMADID = 'ACCT_CLERK'.

CALL METHOD IM_CASE->GET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_SRMADID = W_SRMADID

RECEIVING

RE_VALUE = W_ACCT_CLERK.

SELECT SINGLE BUSAB INTO W_CLERK_KNB1

FROM KNB1

WHERE KUNNR = W_KUNNR

AND BUKRS = '1001'.

SELECT SINGLE BUSAB INTO W_CLERK_KNB5

FROM KNB5

WHERE KUNNR = W_KUNNR

AND BUKRS = '1001'.

  • If no clerk,& status = 00 send out KNB1 value

IF W_STAT_ORDERNO = 00.

IF W_ACCT_CLERK IS INITIAL.

W_SRMADID = 'ACCT_CLERK'.

W_IM_VALUE = W_CLERK_KNB1.

CALL METHOD IM_CASE->SET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_VALUE = W_IM_VALUE

IM_SRMADID = W_SRMADID.

MESSAGE I006(ZF) WITH W_CLERK_KNB1.

ELSE.

IF ( W_ACCT_CLERK = W_CLERK_KNB1

OR W_ACCT_CLERK = W_CLERK_KNB5 ). "* Do nothing

ELSE.

W_SRMADID = 'ACCT_CLERK'.

W_IM_VALUE = W_CLERK_KNB1. "** Send out KNB1 value

CALL METHOD IM_CASE->SET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_VALUE = W_IM_VALUE

IM_SRMADID = W_SRMADID.

MESSAGE I006(ZF) WITH W_CLERK_KNB1.

ENDIF.

ENDIF.

ENDIF.

*

IF ( W_STAT_ORDERNO = 1 OR W_STAT_orderno = 2

or W_STAT_ORDERNO = 3 ) .

IF W_ACCT_CLERK = W_CLERK_KNB1. "* Do nothing

ELSE.

W_SRMADID = 'ACCT_CLERK'.

W_IM_VALUE = W_CLERK_KNB1. "** Send out KNB1 value

CALL METHOD IM_CASE->SET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_VALUE = W_IM_VALUE

IM_SRMADID = W_SRMADID.

MESSAGE I006(ZF) WITH W_CLERK_KNB1.

ENDIF.

ENDIF.

*

IF W_STAT_ORDERNO = 1.

W_SRMADID = 'ZRESPONS'.

W_IM_VALUE = 'UNASSIGNED'.

CALL METHOD IM_CASE->SET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_VALUE = W_IM_VALUE

IM_SRMADID = W_SRMADID.

ENDIF.

  • If status = 4, send validate against Knkk

*

IF ( W_STAT_ORDERNO = 4 ) .

SELECT SINGLE SBGRP INTO W_CLERK_KNKK

FROM KNKK

WHERE KUNNR = W_KUNNR

AND KKBER = 'US01'.

IF W_ACCT_CLERK = W_CLERK_KNKK. "* Do nothing

ELSE.

W_SRMADID = 'ACCT_CLERK'.

W_IM_VALUE = W_CLERK_KNKK. "** Send out KNkk value

CALL METHOD IM_CASE->SET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_VALUE = W_IM_VALUE

IM_SRMADID = W_SRMADID.

MESSAGE I006(ZF) WITH W_CLERK_KNKK.

ENDIF.

ENDIF.

*

  • Need to ensure the document is valid

  • First check BSID, if not there BSAD, if not there

  • error message

*

W_BELNR = W_FIN_DOCUMENT(10).

W_LINE_NO = W_FIN_DOCUMENT+10(3).

IF NOT W_KUNNR IS INITIAL AND

NOT W_FIN_DOCUMENT IS INITIAL.

SELECT GJAHR INTO W_GJAHR

UP TO 1 ROWS FROM BSID

WHERE BUKRS = '1001'

AND BELNR = W_BELNR

AND KUNNR = W_KUNNR.

ENDSELECT.

IF SY-SUBRC NE 0.

SELECT GJAHR INTO W_GJAHR

UP TO 1 ROWS FROM BSAD

WHERE BUKRS = '1001'

AND BELNR = W_BELNR

AND KUNNR = W_KUNNR.

ENDSELECT.

IF SY-SUBRC NE 0.

MESSAGE I005(ZF) WITH W_BELNR W_KUNNR.

RETURN.

ENDIF.

ENDIF.

ENDIF.

5 REPLIES 5
Read only

Former Member
0 Likes
867

Ankita,

This is just an example how you decalre and int table:

TYPES: BEGIN OF typ_xxx,

abc TYPE xxx,

efg TYPE yyy,

ijk TYPE zzz,

END OF typ_xxx.

DATA: ls_xxx TYPE typ_xxx.

You can fill the int table just the way you do in a report.

The code you asked may look something like this.

CASE W_STAT_ORDERNO .

total = UDMCASEATTR00-AMOUNT1 + UDMCASEATTR00-AMOUNT2 + UDMCASEATTR00-AMOUNT3 + UDMCASEATTR00-AMOUNT4 + UDMCASEATTR00-AMOUNT5 + UDMCASEATTR00-AMOUNT6 + UDMCASEATTR00-AMOUNT7 + UDMCASEATTR00-AMOUNT8 + UDMCASEATTR00-AMOUNT9 + UDMCASEATTR00-AMOUNT10.

if total <> UDMCASEATTR00-FIN_ORIGINAL_AMT.

MESSAGE Exxx(message class) .

endif.

when '5'.

ENDACSE.

Regards,

Chandra Kancharla

Read only

0 Likes
867

Hi Chandra,

thanks for u response, i have some problem.....

Types: begin of it_udmcaseattr00,

amount1 type udmcaseattr00-amount1,

amount2 type udmcaseattr00-amount2,

amount3 type udmcaseattr00-amount3,

.

.

.

amount10 type udmcaseattr00-amount10,

total type udmcaseattr00-amount,

end of it_udmcaseattr00.

data: it_udmcaseattr001 type table of it_udmcaseattr00.

data: wa_udmcaseattr001 like line of it_udmcaseattr001.

if ( w_stat_orderno = 5).

select * from udmcaseattr00 into table it_udmcaseattr001.

total = UDMCASEATTR00-AMOUNT1 + UDMCASEATTR00-AMOUNT2 + UDMCASEATTR00-AMOUNT3 + UDMCASEATTR00-AMOUNT4 + UDMCASEATTR00-AMOUNT5 + UDMCASEATTR00-AMOUNT6 + UDMCASEATTR00-AMOUNT7 + UDMCASEATTR00-AMOUNT8 + UDMCASEATTR00-AMOUNT9 + UDMCASEATTR00-AMOUNT10.

endselect.

endif.

if total <> UDMCASEATTR00-FIN_ORIGINAL_AMT.

MESSAGE i007(zf) .

endif.

When i checked thid code i am getting error in select statement. the error is it_udmcaseattr001 unicode not convertable.

can u tell me how to select the day from table udmcaseattr00 and place them into internal table.Plz help me...i am waiting for ur reply

Thanks,

Ankitha

Read only

Former Member
0 Likes
868

Hi chandra,

i am sending the code, in which i want to add that logic.

METHOD IF_EX_SCMG_BEFORE_VALID_C~CHANGE .

DATA:

W_SRMADID TYPE SRMADID,

W_VBELN TYPE BELNR_D,

W_KUNNR TYPE KUNNR,

W_CLERK TYPE BUSAB,

W_CLERK_KNB5 TYPE BUSAB,

W_CLERK_KNB1 TYPE BUSAB,

W_ACCT_CLERK TYPE BUSAB,

W_CLERK_KNKK TYPE SBGRP_cm,

W_IM_VALUE TYPE STRING,

W_FIN_DOCUMENT TYPE ZZFIN_DOCUMENT,

W_BELNR TYPE UDM_KUNNR,

W_LINE_NO TYPE BUZEI,

W_GJAHR TYPE GJAHR,

W_CASE_GUID TYPE SYSUUID_C,

W_CASE_GUID_CURRENT TYPE SYSUUID_C,

W_EXT_KEY TYPE SCMG_EXT_KEY,

W_STAT_ORDERNO TYPE SCMGSTATUSONR,

LREF_CX_ROOT TYPE REF TO CX_ROOT,

L_MSGTEXT(72) TYPE C,

EX_MESSAGES TYPE SCMG_T_ATTR_RETURN_VALUE.

CLEAR: W_VBELN,

W_KUNNR,

W_CLERK, W_ACCT_CLERK, W_CLERK_KNB5, W_CLERK_KNB1,

W_FIN_DOCUMENT, W_CLERK_KNKK,

W_BELNR,

W_LINE_NO,

W_GJAHR.

  • To switch on GOS - to attach files to the case

*

DATA: GO_MYOBJECT TYPE REF TO CL_GOS_MANAGER,

LS_OBJECT TYPE BORIDENT,

LS_OBJECT_KEY TYPE SIBFINSTID,

Ex TYPE REF TO cx_scmg_case_badi.

  • trigger generic object services

IF GO_MYOBJECT IS INITIAL.

LS_OBJECT-OBJTYPE = 'BUS2022'.

LS_OBJECT = 'BUS2022'.

CREATE OBJECT GO_MYOBJECT

EXPORTING

IS_OBJECT = LS_OBJECT

IP_NO_INSTANCE = 'x'

EXCEPTIONS OTHERS = 1.

ENDIF.

TRY.

  • Want to ensure that the document & line number are not

  • already in an open case.

  • Order Status = 5 = Closed

CALL METHOD IM_CASE->GET_GUID

RECEIVING

RE_GUID = W_CASE_GUID_CURRENT.

LS_OBJECT-OBJKEY = W_CASE_GUID_CURRENT.

LS_OBJECT-OBJTYPE = 'BUS2022'.

CALL METHOD GO_MYOBJECT->SET_ID_OF_PUBLISHED_OBJECT

EXPORTING

IS_OBJECT = LS_OBJECT

EXCEPTIONS

OTHERS = 1.

W_SRMADID = 'FIN_DOCUMENT'.

CALL METHOD IM_CASE->GET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_SRMADID = W_SRMADID

RECEIVING

RE_VALUE = W_FIN_DOCUMENT.

SELECT SINGLE CASE_GUID FIN_DOCUMENT

INTO (W_CASE_GUID, W_FIN_DOCUMENT )

FROM UDMCASEATTR00

WHERE FIN_DOCUMENT = W_FIN_DOCUMENT.

IF SY-SUBRC = 0.

IF W_CASE_GUID_CURRENT <> W_CASE_GUID.

SELECT SINGLE EXT_KEY STAT_ORDERNO

INTO (W_EXT_KEY, W_STAT_ORDERNO)

FROM SCMG_T_CASE_ATTR

WHERE CASE_GUID = W_CASE_GUID.

  • IF SY-SUBRC = 0 AND W_STAT_ORDERNO <> 5. "DEVK950418

IF SY-SUBRC = 0.

MESSAGE I004(ZF) WITH W_FIN_DOCUMENT W_EXT_KEY.

RAISE EXCEPTION TYPE cx_scmg_case_badi "DEVK950418

EXPORTING

TEXTID = 'CASE ALREADY EXISTS'.

RETURN.

ENDIF.

  • ENDIF. "DEVK950418

ENDIF.

ENDIF.

  • Need to get the account clerk based on customer number

  • if it is not entered get it from KNB1

  • If supplied, verify against knb1 & KNB5.

  • if valid do nothing, if not - move out the value based on

  • order status

W_SRMADID = 'STAT_ORDERNO'.

CALL METHOD IM_CASE->GET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_SRMADID = W_SRMADID

RECEIVING

RE_VALUE = W_STAT_ORDERNO.

W_SRMADID = 'CUSTOMER'.

CALL METHOD IM_CASE->GET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_SRMADID = W_SRMADID

RECEIVING

RE_VALUE = W_KUNNR.

W_SRMADID = 'ACCT_CLERK'.

CALL METHOD IM_CASE->GET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_SRMADID = W_SRMADID

RECEIVING

RE_VALUE = W_ACCT_CLERK.

SELECT SINGLE BUSAB INTO W_CLERK_KNB1

FROM KNB1

WHERE KUNNR = W_KUNNR

AND BUKRS = '1001'.

SELECT SINGLE BUSAB INTO W_CLERK_KNB5

FROM KNB5

WHERE KUNNR = W_KUNNR

AND BUKRS = '1001'.

  • If no clerk,& status = 00 send out KNB1 value

IF W_STAT_ORDERNO = 00.

IF W_ACCT_CLERK IS INITIAL.

W_SRMADID = 'ACCT_CLERK'.

W_IM_VALUE = W_CLERK_KNB1.

CALL METHOD IM_CASE->SET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_VALUE = W_IM_VALUE

IM_SRMADID = W_SRMADID.

MESSAGE I006(ZF) WITH W_CLERK_KNB1.

ELSE.

IF ( W_ACCT_CLERK = W_CLERK_KNB1

OR W_ACCT_CLERK = W_CLERK_KNB5 ). "* Do nothing

ELSE.

W_SRMADID = 'ACCT_CLERK'.

W_IM_VALUE = W_CLERK_KNB1. "** Send out KNB1 value

CALL METHOD IM_CASE->SET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_VALUE = W_IM_VALUE

IM_SRMADID = W_SRMADID.

MESSAGE I006(ZF) WITH W_CLERK_KNB1.

ENDIF.

ENDIF.

ENDIF.

*

IF ( W_STAT_ORDERNO = 1 OR W_STAT_orderno = 2

or W_STAT_ORDERNO = 3 ) .

IF W_ACCT_CLERK = W_CLERK_KNB1. "* Do nothing

ELSE.

W_SRMADID = 'ACCT_CLERK'.

W_IM_VALUE = W_CLERK_KNB1. "** Send out KNB1 value

CALL METHOD IM_CASE->SET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_VALUE = W_IM_VALUE

IM_SRMADID = W_SRMADID.

MESSAGE I006(ZF) WITH W_CLERK_KNB1.

ENDIF.

ENDIF.

*

IF W_STAT_ORDERNO = 1.

W_SRMADID = 'ZRESPONS'.

W_IM_VALUE = 'UNASSIGNED'.

CALL METHOD IM_CASE->SET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_VALUE = W_IM_VALUE

IM_SRMADID = W_SRMADID.

ENDIF.

  • If status = 4, send validate against Knkk

*

IF ( W_STAT_ORDERNO = 4 ) .

SELECT SINGLE SBGRP INTO W_CLERK_KNKK

FROM KNKK

WHERE KUNNR = W_KUNNR

AND KKBER = 'US01'.

IF W_ACCT_CLERK = W_CLERK_KNKK. "* Do nothing

ELSE.

W_SRMADID = 'ACCT_CLERK'.

W_IM_VALUE = W_CLERK_KNKK. "** Send out KNkk value

CALL METHOD IM_CASE->SET_SINGLE_ATTRIBUTE_VALUE

EXPORTING

IM_VALUE = W_IM_VALUE

IM_SRMADID = W_SRMADID.

MESSAGE I006(ZF) WITH W_CLERK_KNKK.

ENDIF.

ENDIF.

*

  • Need to ensure the document is valid

  • First check BSID, if not there BSAD, if not there

  • error message

*

W_BELNR = W_FIN_DOCUMENT(10).

W_LINE_NO = W_FIN_DOCUMENT+10(3).

IF NOT W_KUNNR IS INITIAL AND

NOT W_FIN_DOCUMENT IS INITIAL.

SELECT GJAHR INTO W_GJAHR

UP TO 1 ROWS FROM BSID

WHERE BUKRS = '1001'

AND BELNR = W_BELNR

AND KUNNR = W_KUNNR.

ENDSELECT.

IF SY-SUBRC NE 0.

SELECT GJAHR INTO W_GJAHR

UP TO 1 ROWS FROM BSAD

WHERE BUKRS = '1001'

AND BELNR = W_BELNR

AND KUNNR = W_KUNNR.

ENDSELECT.

IF SY-SUBRC NE 0.

MESSAGE I005(ZF) WITH W_BELNR W_KUNNR.

RETURN.

ENDIF.

ENDIF.

ENDIF.

Read only

0 Likes
867

I aint sure which system you are in. I dont see table udmcaseattr00 in my R/3 system (ecc 5.0).

But try with this statement and see if this works,

select * from udmcaseattr00 into corresponding fileds of table it_udmcaseattr001.

Thanks,

Chandra

Read only

0 Likes
867

Hi ,

how can we write code in above method for this case....

1.For each UDMCASEATTR00-COST_CENTER (1-10) make sure the respective COMPANY_CODE (1-10) and BUSINESS (1-10) areas are filled. You will have to search table CSKS for this information. Use CONTROLLING_AREA ”CONU” (find the BUKRS and GSBER for the KOSTL).

please if any can help me.

Thanks,

Ankitha