Tuesday, June 28, 2011

IDOC Step-by-Step. INBOUND process

Continue from outbound process...


In Client 812 Steps:

Function Module Creation:

Create a Function Module to update the table from the IDOC segments

Go to SE37

Specify a name and click on create.


Specify the Import parameters in Import tab

Specify the Export parameters in Export tab

Specify the Table parameters in Tables tab

Specify the Exceptions in Exception tab

Click on Source code Tab.

====================================================
 FUNCTION ZIDOC_ZDEMO_MATEIAL.
*"---------------------------------------------------------------------- *"*"Local Interface: Details for importing, exporting, tables, exceptions
*" IMPORTING
*" REFERENCE(INPUT_METHOD) LIKE BDWFAP_PAR-INPUTMETHD
*" REFERENCE(MASS_PROCESSING) LIKE BDWFAP_PAR-MASS_PROC
*" EXPORTING
*" REFERENCE(WORKFLOW_RESULT) LIKE BDWF_PARAM-RESULT
*" REFERENCE(APPLICATION_VARIABLE) LIKE BDWF_PARAM-APPL_VAR
*" REFERENCE(IN_UPDATE_TASK) LIKE BDWFAP_PAR-UPDATETASK
*" REFERENCE(CALL_TRANSACTION_DONE) LIKE BDWFAP_PAR-CALLTRANS
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*" RETURN_VARIABLES STRUCTURE BDWFRETVAR
*" SERIALIZATION_INFO STRUCTURE BDI_SER
*" EXCEPTIONS
*" WRONG_FUNCTION_CALLED
*"----------------------------------------------------------------------

* Include File containing ALE constants
INCLUDE MBDCONWF.

TABLES : zdemo_material.

DATA : W_ZSEGMENT LIKE ZSEGMENT.

DATA : T_zdemo_material LIKE zdemo_material OCCURS 0 WITH HEADER LINE.
WORKFLOW_RESULT = C_WF_RESULT_OK.

LOOP AT IDOC_CONTRL.
IF IDOC_CONTRL-MESTYP NE 'ZCLIENTMSG'.
RAISE WRONG_FUNCTION_CALLED.
ENDIF.

* Before reading a new entry, clear application buffer
LOOP AT IDOC_DATA WHERE DOCNUM EQ IDOC_CONTRL-DOCNUM.
W_ZSEGMENT = IDOC_DATA-SDATA.
MOVE-CORRESPONDING W_ZSEGMENT TO T_zdemo_material.
INSERT INTO zdemo_material VALUES T_zdemo_material.
ENDLOOP.

UPDATE zdemo_material FROM T_zdemo_material.

IF SY-SUBRC EQ 0.
IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.
IDOC_STATUS-STATUS = '53'.
IDOC_STATUS-MSGTY = 'I'.
IDOC_STATUS-MSGID = 'YM'.
IDOC_STATUS-MSGNO = '004'.
IDOC_STATUS-MSGV1 = T_zdemo_material-MANDT.
APPEND IDOC_STATUS.
CLEAR IDOC_STATUS.
ELSE.
IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.
IDOC_STATUS-STATUS = '51'.
IDOC_STATUS-MSGTY = 'E'.
IDOC_STATUS-MSGID = 'YM'.
IDOC_STATUS-MSGNO = '005'.
IDOC_STATUS-MSGV1 = T_zdemo_material-MANDT.
APPEND IDOC_STATUS.
CLEAR IDOC_STATUS.

WORKFLOW_RESULT = C_WF_RESULT_ERROR.
RETURN_VARIABLES-WF_PARAM = 'Error_Idocs'.
RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
APPEND RETURN_VARIABLES.
CLEAR RETURN_VARIABLES.
ENDIF.
ENDLOOP.
ENDFUNCTION.
====================================================

Assign FM to Logical Message:

Go to TCODE WE57

Click on Display / Change button.

Click on New Entries

Define Input Method for Inbound Function Module:

Go to TCODE BD51

Click on Display / Change button

Click on New Entries

Creating Process Code:

Go to TCODE WE42

Click on Display / Change Button

Click on New Entries

It will take to you previous screen. Double Click on Logical Message in left side tree.

Click on Display / Change button

Click on New Entries button

Generating the Partner Profile:

Go to TCODE BD64.

Select the Model View which you distributed in client 812.

Click on Environment Menu -> Generate Partner Profile .Execute.

check the partner profile details.

Go to TCODE WE20. Select the partner system name.

Transferring the IDOC control records from Client 800 to 812:

In source system, go to TCODE SE38. (In client 800)

Execute the Report program which you created.

Check in Destination System: (Here client 800)

Go to TCODE WE02


Check in Destination System: (Here client 812)

Go to TCODE WE02



Check in ZDEMO_MATERIAL table in SE11.


Done!..

====================================================

Took Reference from the link given below:

IDOC Step-by-Step. OUTBOUND process

TO Process IDOCS the following TCODES will be used.

On both sides:

Logical System Names SALE

Setup RFC destinations SM59

Port Destinations WE21

In Source system:

Segment Creation WE31

Basic IDOC Type Creation WE30

Message Type Creation WE81

Assign Message Type To Basic IDOC Type WE82

Distribution Model BD64

Writing Report Program SE38

Partner Profile WE20

Message control NACE

Check IDOCs WE02, WE05

In Destination System:

Creating FM SE37

Assign FM to Logical Message WE57

Define I/P method for Inbound FM BD51

Create Process Code WE42

Generate Partner Profile BD64.

--------------------------------------------------------------------------------

Note:Different clients but same server.

Creating the Logical System Names and Assigning to Clients:

created on client 800.


created on client 812.


Creating the RFC Connection Names:

create RFC in SM59 for both clients 800 and 812.



Creating RFC ports:

Go to TCODE WE21.

create in 800 and RFC destination which was created in 812...EC3812


create in 812 and RFC destination which was created in 800...EC3

Creating table structure:

ð Go to TCODE SE11.

ð Specify table name as zdemo_material.( in client 800 EC3)

Creating IDOC Segments:

Go to TCODE WE31.

Specify a name and Click on Create Button.



Creating Basic IDOC Type:

Go to TCODE WE30

Specify a name to your IDOC and click on create button.

after creating NOTE: Go to menu EDIT->Click Set Release



Creating Message Type:

Go to TCODE WE81.

Click on Display / Change button.


Assign Message Type to Basic IDOC Type:

Go to TCODE WE82

Click on Display / Change Button


Creating Model View and Distributing and Generating Partner profile:

Go to TCODE BD64

Click on Display/ Change button

Click on Edit menu -> Model View -> Create

Specify description of model view and technical name in dialog box and press continue.

Select your model view and click on Edit menu -> Add Message type

In dialog box specify the sender, receiver, message type and click on continue.


Click on Environment Menu -> Generate Partner profile

It will show the following screen, click on execute.


Note: Dont create in client 812, because we are using the same server. It will be automatically created in the client 812. check bd64 in client 812.

Click on Back button 2 times, it will take back to Distribution Model screen.

Click on Edit Menu -> Model View -> Distribute.


MODEL VIEW Created.

check partner profile

Go to TCODE WE20

In displayed screen select the partner system in left side tree under Partner Type LS.


Write a Report Program in SE38

To create IDOC control records and transfer it to destination partner system.

====================================================

REPORT ZDEMO_IDOCSEND.

TABLES: zdemo_material.

DATA : S_CTRL_REC LIKE EDIDC, "Idoc Control Record
S_ZSEGMENT LIKE ZSEGMENT. "CUSTOMER Header Data

DATA : T_zdemo_material LIKE zdemo_material OCCURS 0 WITH HEADER LINE.

DATA : T_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE. "Data Records
DATA : T_COMM_IDOC LIKE EDIDC OCCURS 0 WITH HEADER LINE. "Generated Communication IDOc

CONSTANTS :C_ZSHSTUSEG LIKE EDIDD-SEGNAM VALUE 'ZSEGMENT'.
CONSTANTS: C_IDOCTP LIKE EDIDC-IDOCTP VALUE 'ZSTUDENTIDOC'.
*** Selection Screen
SELECT-OPTIONS : S_BUKRS FOR zdemo_material-BUKRS OBLIGATORY.
PARAMETERS : C_MESTYP LIKE EDIDC-MESTYP DEFAULT 'ZCLIENTMSG', "Message Type
C_RCVPRT LIKE EDIDC-RCVPRT DEFAULT 'LS', "Partner type of receiver
C_LOGSYS LIKE EDIDC-RCVPRN DEFAULT 'EC3812'.
* C_RCVPOR LIKE EDIDC-RCVPOR DEFAULT 'A000000018',
* C_SNDPRN LIKE EDIDC-SNDPRN DEFAULT 'EC3',
* C_SNDPRT LIKE EDIDC-SNDPRT DEFAULT 'LS'. "Destination System
DATA ZSEGMENT.

***START-OF-SELECTION
START-OF-SELECTION.
PERFORM GENERATE_DATA_RECORDS.
PERFORM GENERATE_CONTROL_RECORD.
PERFORM SEND_IDOC.
*&---------------------------------------------------------------------*
*& Form GENERATE_DATA_RECORDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GENERATE_DATA_RECORDS .
SELECT * FROM zdemo_material
INTO TABLE T_zdemo_material
WHERE BUKRS IN S_BUKRS.
IF SY-SUBRC NE 0.
MESSAGE E398(00) WITH 'No Company code Found'.
ENDIF.
PERFORM ARRANGE_DATA_RECORDS.
ENDFORM. " GENERATE_DATA_RECORDS
*&---------------------------------------------------------------------*
*& Form GENERATE_CONTROL_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GENERATE_CONTROL_RECORD .
* S_CTRL_REC-RCVPOR = C_RCVPOR. "Receiver Port
S_CTRL_REC-MESTYP = C_MESTYP. "Message type
S_CTRL_REC-IDOCTP = C_IDOCTP. "Basic IDOC type
S_CTRL_REC-RCVPRT = C_RCVPRT. "Partner type of receiver
S_CTRL_REC-RCVPRN = C_LOGSYS. "Partner number of receiver
* S_CTRL_REC-SNDPRT = C_SNDPRT. "Sender Partner type
* S_CTRL_REC-SNDPRN = C_SNDPRN. "Sender Partner Number
ENDFORM. " GENERATE_CONTROL_RECORD
*&---------------------------------------------------------------------*
*& Form SEND_IDOC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SEND_IDOC .
CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
EXPORTING
MASTER_IDOC_CONTROL = S_CTRL_REC
* OBJ_TYPE = ''
* CHNUM = ''
TABLES
COMMUNICATION_IDOC_CONTROL = T_COMM_IDOC
MASTER_IDOC_DATA = T_EDIDD
EXCEPTIONS
ERROR_IN_IDOC_CONTROL = 1
ERROR_WRITING_IDOC_STATUS = 2
ERROR_IN_IDOC_DATA = 3
SENDING_LOGICAL_SYSTEM_UNKNOWN = 4
OTHERS = 5
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
COMMIT WORK.
LOOP AT T_COMM_IDOC.
WRITE:/ 'IDoc Generated - ', T_COMM_IDOC-DOCNUM.
ENDLOOP.
ENDIF.
ENDFORM. " SEND_IDOC
*&---------------------------------------------------------------------*
*& Form ARRANGE_DATA_RECORDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ARRANGE_DATA_RECORDS .

SORT T_zdemo_material BY BUKRS.

LOOP AT T_zdemo_material.
S_ZSEGMENT-MANDT = T_zdemo_material-MANDT.
S_ZSEGMENT-BUKRS = T_zdemo_material-BUKRS.
S_ZSEGMENT-BUTXT = T_zdemo_material-BUTXT.
S_ZSEGMENT-ORT01 = T_zdemo_material-ORT01.
s_ZSEGMENT-ADRNR = T_zdemo_material-ADRNR.
T_EDIDD-SEGNAM = C_ZSHSTUSEG.
T_EDIDD-SDATA = S_ZSEGMENT.
APPEND T_EDIDD.
CLEAR T_EDIDD.
ENDLOOP.
ENDFORM. " ARRANGE_DATA_RECORDS

====================================================

Now execute the program, and specify the range of records to transfer



Idoc generated id you will get.

Go to TCODE WE02 to check the generated IDOC control records.

Click on Execute or Refersh

If u find the Status Yellow.

Then Go se38.. Program name: RSEOUT00...Execute


Go to TCODE WE02 to check the generated IDOC control records.


====================================================

Took Reference from the link given below:

Tuesday, June 21, 2011

READ_TEXT function module

how to use the READ_TEXT function module to read SAP long text. Every text in SAP has its own ID and NAME, by passing these parameters into the READ_TEXT function, we can get all the text in the SAP long text object.





You can find a sample program here. CLICK HERE

Finding Enhancement Implicit and Explicit Spot

Tcode SENH

you have to pass Program name ,

and it displays all types of enhancements in that .

\PR:\IC: ---> Implicit Enh Spot
\PR:\EX: ---> Explicit Enh Spot



Find BADI's in Different ways

1>First go to any transaction->iN THE menu bar SYSTEM->STATUS->Get the program name ->double click->u will go to the program attached to the tcode.Now search term will be CALL CL_EXITHANDLER.Now u will get list of BADI'S available..

2>Goto SE24->Give class name as CL_EXITHANDLER->Display->double click on get_instance mathod->Now u will go inside the method->Now put break point on the cl_exithandler.Now go to any transaction code and pass dat..U will see that it will be stopped on the break point which u set on the cl_exithandler...In the exit name u can find list of badi's attached to the tcode..

There are multiple ways of searching for BADI.

• Finding BADI Using CL_EXITHANDLER=>GET_INSTANCE
• Finding BADI Using SQL Trace (TCODE-ST05).
• Finding BADI Using Repository Information System (TCODE- SE84).

1. Go to the Transaction, for which we want to find the BADI, take the example of Transaction VD02. Click on System->Status. Double click on the program name. Once inside the program search for ‘CL_EXITHANDLER=>GET_INSTANCE’.
Make sure the radio button “In main program” is checked. A list of all the programs with call to the BADI’s will be listed.
The export parameter ‘EXIT_NAME’ for the method GET_INSTANCE of class CL_EXITHANDLER will have the user exit assigned to it. The changing parameter ‘INSTANCE’ will have the interface assigned to it. Double click on the method to enter the source code.Definition of Instance would give you the Interface name.

2. Start transaction ST05 (Performance Analysis).
Set flag field "Buffer trace"
Remark: We need to trace also the buffer calls, because BADI database tables are buffered. (Especially view V_EXT_IMP and V_EXT_ACT)
Push the button "Activate Trace". Start transaction VA02 in a new GUI session. Go back to the Performance trace session.
Push the button "Deactivate Trace".
Push the button "Display Trace".
The popup screen "Set Restrictions for Displaying Trace" appears.
Now, filter the trace on Objects:
• V_EXT_IMP
• V_EXT_ACT

Push button "Multiple selections" button behind field Objects
Fill: V_EXT_IMP and V_EXT_ACT

All the interface class names of view V_EXT_IMP start with IF_EX_. This is the standard SAP prefix for BADI class interfaces. The BADI name is after the IF_EX_.
So the BADI name of IF_EX_CUSTOMER_ADD_DATA is CUSTOMER_ADD_DATA

3. Go to “Maintain Transaction” (TCODE- SE93).
Enter the Transaction VD02 for which you want to find BADI.
Click on the Display push buttons.
Get the Package Name. (Package VS in this case)

Go to TCode: SE84->Enhancements->Business Add-inns->Definition
Enter the Package Name and Execute.

Here you get a list of all the Enhancement BADI’s for the given package MB.
The simplese way for finding BADI is
1. chooes Tcode Program & package for that Tcode.
2. Go to Tcode se18
3. Press F4
4. search by package or by program.

Find Enhancement for Particular Tcode.

Go to se38.

create a report program and past it.

------------------------------------------------------

REPORT
Y_USER_EXIT_SEARCH .

TABLES : TSTC, TADIR, MODSAPT, MODACT, TRDIR, TFDIR, ENLFDIR.

TABLES : TSTCT.

DATA : JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE.

DATA : FIELD1(30).

DATA : V_DEVCLASS LIKE TADIR-DEVCLASS.

PARAMETERS : P_TCODE LIKE TSTC-TCODE OBLIGATORY.

WRITE: 'sy ucom=', SY-UCOMM.

SELECT SINGLE * FROM TSTC WHERE TCODE EQ P_TCODE.

IF SY-SUBRC EQ 0.

SELECT SINGLE * FROM TADIR WHERE PGMID = 'R3TR'

AND OBJECT = 'PROG'

AND OBJ_NAME = TSTC-PGMNA.

MOVE : TADIR-DEVCLASS TO V_DEVCLASS.

IF SY-SUBRC NE 0.

SELECT SINGLE * FROM TRDIR WHERE NAME = TSTC-PGMNA.

IF TRDIR-SUBC EQ 'F'.

SELECT SINGLE * FROM TFDIR WHERE PNAME = TSTC-PGMNA.

SELECT SINGLE * FROM ENLFDIR WHERE FUNCNAME = TFDIR-FUNCNAME.

SELECT SINGLE * FROM TADIR WHERE PGMID = 'R3TR'

AND OBJECT = 'FUGR'

AND OBJ_NAME EQ ENLFDIR-AREA.

MOVE : TADIR-DEVCLASS TO V_DEVCLASS.

ENDIF.

ENDIF.

SELECT * FROM TADIR INTO TABLE JTAB WHERE PGMID = 'R3TR'

AND OBJECT = 'SMOD'

AND DEVCLASS = V_DEVCLASS.

SELECT SINGLE * FROM TSTCT WHERE SPRSL EQ SY-LANGU AND

TCODE EQ P_TCODE.

FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.

WRITE:/(19) 'Transaction Code - ',

20(20) P_TCODE,

45(50) TSTCT-TTEXT.

SKIP.

IF NOT JTAB[] IS INITIAL.

WRITE:/(95) SY-ULINE.

FORMAT COLOR COL_HEADING INTENSIFIED ON.

WRITE:/1 SY-VLINE,

2 'Exit Name',

21 SY-VLINE ,

22 'Description',

95 SY-VLINE.

WRITE:/(95) SY-ULINE.

LOOP AT JTAB.

SELECT SINGLE * FROM MODSAPT WHERE SPRSL = SY-LANGU AND

NAME = JTAB-OBJ_NAME.

FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

WRITE:/1 SY-VLINE,

2 JTAB-OBJ_NAME HOTSPOT ON,

21 SY-VLINE ,

22 MODSAPT-MODTEXT,

95 SY-VLINE.

ENDLOOP.

WRITE:/(95) SY-ULINE.

DESCRIBE TABLE JTAB.

SKIP.

FORMAT COLOR COL_TOTAL INTENSIFIED ON.

WRITE:/ 'No of Exits:' , SY-TFILL.

ELSE.

FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.

WRITE:/(95) 'No User Exit exists'.

ENDIF.

ELSE.

FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.

WRITE:/(95) 'Transaction Code Does Not Exist'.

ENDIF.

AT LINE-SELECTION.

GET CURSOR FIELD FIELD1.

CHECK FIELD1(4) EQ 'JTAB'.

SET PARAMETER ID 'MON' FIELD SY-LISEL+1(10).

CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.

Thursday, June 2, 2011

BADIs (Bussiness Add-Ins)



BADIs is an enhancement technique based on ABAP Objects.

Used to attach additional software to standard SAP source code with out modifying the original object.

Two different vies of BADI are available.

1. Definition view

2. Implementation view.

Procedures to find out the BADIs.

Procedure 1:

Execute SPRO.

click on SAP reference IMG.


BADI definitions for customer master.

-----------------------------------------------------------------

Procedure 2:

Find out the packages for standard transaction.(VS)

go to se80.

package VS.

Enhancements

classic BADIs Def.


we can also open BADI definition through SE18.

-----------------------------------------------------------------

Procedure 3:

Execute SE93.

transaction XD01.

program name: SAPMF02D

find: cl_exithandler=>get_instance.

double click on g_additional_data.

check the type.

DATA: G_ADDITIONAL_DATA TYPE REF TO IF_EX_CUSTOMER_ADD_DATA.


Wednesday, June 1, 2011

Screen Exits

Execute SMOD

press F4.

packages CN( transaction CJ01)

CNEX0006 is screen exit to add customer field.

come to initial screen of SMOD

CNEX0006

Screen area.

-----------------------------------------------------------------

Come to CMOD transaction.

PS-MSDOC (project name)

display.

Click on Enhancement Assignment .

CNEX0006.

click on Component.

Click on the Screen Exit : screen number Example:600.

" If it is not created or your creating for a new transaction.

select the table PROJ

Select the fields.

for PBO

EXIT_SAPLCJWB_002.

go to the INCLUDE ZXCN1U11.

write the code(dont modify the exiting code)

For PAI

EXIT_SAPLCJWB_003

go to the INCLUDE ZXCN1U12.

write the code(dont modify the exiting code).

-----------------------------------------------------------------

Testing:

Transaction CJ01.

project def. : P-0022

click on Details.

Project Definition customer fields.

You will get the Screen Exit there.

Done!..