Enterprise Resource Planning PortalERPGenie.COM Enterprise Resource Planning Portal

   Advertise | BLOG

Web ERPGenie.COM

Home | Vote for us |

ERPGenie.COM -> SAP Interfacing Technology -> ITS -> Development -> New IAC

Quicklinks

YOUR LOGO


1         Introduction

To program a new IAC you need to perform the following steps:

1.       Develop a dialog transaction that performs the required task. 
This is a special dialog transaction that does not contain any screen 
controls. Ie. No GUI-STATUS, help. All flow must be controlled from the 
screen itself.

2.       Generate a service file linking to the above-mentioned transaction

3.       Generate a language resource file for the service

4.       Generate a HTML template per dialog screen. This template should be 
modified to represent a friendlier interface. Standard HTML and JAVA 
can be used so long as when you refer to SAP objects and syntax you 
used the SAP HTML Business format. For details of the SAP HTML 
Business syntax, refer to the help files in the SAP@Studio.

Our Example scenario described:

Our aim is to develop a 1-screen application that updates a purchase 
order with a reference number (waybill number) as well as a custom table 
call ZWAYBILL. It also calls 2 reports that list current waybill numbers and 
generates a list of waybill numbers, in ZWAYBILL, to work with.

2         SAP Portion

2.1        Creating the program and transaction

Create a dialog program called ZWAYBILL_ENTRY

2.2        Create screen

Create screen 100 which will capture the waybill, PO combination.

2.2.1       Screen attributes

 

2.2.2       Screen layout

2.2.3       Element List

WAYBILL                                Text         6              24            15            15            1                                              0

WAYBILL                                I/O            6              41            12            12            1              CHAR                      0

BSTNR                                     Text         7              24            15            15            1                                              0

BSTNR                                     I/O            7              41            10            10            1              CHAR                      0

BUTTON_SAVE                       Push        9              22            4              4              1                                              0

BUTTON_LIST                         Push        9              29            4              4              1                                              0

BUTTON_QUIT                         Push        9              35            4              4              1                                              0

BUTTON_GENE                       Push        9              41            24            24            1                                              0

                OKCODE                  OK           0              0              20            20            1              OK                          0

2.2.4       Screen Flow

process before output.                 

module init_0100.                    

*                                      

process after input.                   

  chain.                               

    field: waybill, bstnr.              

    module check_0100.                 

  endchain.                            

  module user_command_0100.            

2.3        SAP Programs

The following are example programs of the dialog and report kind, used in the 
example.

2.3.1       Dialog entry program

*&---------------------------------------------------------------------*

*& Report  ZWAYBILL_ENTRY                                              *

*&---------------------------------------------------------------------*

INCLUDE ZWAYBTOP                                .           "

* INCLUDE ZWAYBO01                                .                    *

* INCLUDE ZWAYBI01                                .                    *

* INCLUDE ZWAYBF01                                .                    *

 

*&---------------------------------------------------------------------*

*&      Module  INIT_0100  OUTPUT

*&---------------------------------------------------------------------*

MODULE INIT_0100 OUTPUT.

  CLEAR: WAYBILL, BSTNR.

ENDMODULE.                             " INIT_0100  OUTPUT

 

*&---------------------------------------------------------------------*

*&      Module  CHECK_0100  INPUT

*&---------------------------------------------------------------------*

MODULE CHECK_0100 INPUT.

  CHECK OKCODE <> 'QUIT'.

  CHECK OKCODE <> 'LIST'.

  CHECK OKCODE <> 'GENE'.

 

  IF WAYBILL = ' '.

    MESSAGE E999(B1) WITH 'Waybill is a required field, please enter!'.

  ENDIF.

  IF BSTNR = ' '.

    MESSAGE E999(B1) WITH 'PO # is a required field, please enter!'.

  ENDIF.

 

  PERFORM ADD_LEADING_ZEROS CHANGING WAYBILL.

  PERFORM ADD_LEADING_ZEROS10 CHANGING BSTNR.

  SELECT SINGLE * FROM ZWAYBILL WHERE

         WAYBILL = WAYBILL.

  IF SY-SUBRC = 0.

    IF ZWAYBILL-BSTNR <> ' '.

      MESSAGE E999(B1) WITH

     WAYBILL ':Waybill already assigned to PO:' ZWAYBILL-BSTNR.

      EXIT.

    ENDIF.

  ELSE.                                "No waybill

    MESSAGE E999(B1) WITH

    'Waybill # has not yet been generated:' WAYBILL.

  ENDIF.

  SELECT SINGLE * FROM ZWAYBILL WHERE

         BSTNR   = BSTNR.

  IF SY-SUBRC = 0.

    MESSAGE E999(B1) WITH

    BSTNR ': PO already has waybill:' ZWAYBILL-WAYBILL.

    EXIT.

  ENDIF.

  SELECT SINGLE * FROM EKKO WHERE

         EBELN   = BSTNR.

  IF SY-SUBRC <> 0.

    MESSAGE E999(B1) WITH

   'PO does not exist:' BSTNR.

    EXIT.

  ENDIF.

ENDMODULE.                             " CHECK_0100  INPUT

 

*&---------------------------------------------------------------------*

*&      Module  USER_COMMAND_0100  INPUT

*&---------------------------------------------------------------------*

MODULE USER_COMMAND_0100 INPUT.

  CASE OKCODE.

    WHEN 'SAVE'.

      REFRESH ZWAYITAB.

      MOVE: SY-UNAME TO ZWAYITAB-UNAME,

            SY-DATUM TO ZWAYITAB-DATUM,

            SY-UZEIT TO ZWAYITAB-UZEIT,

            WAYBILL  TO ZWAYITAB-WAYBILL,

            SY-MANDT TO ZWAYITAB-MANDT,

            BSTNR    TO ZWAYITAB-BSTNR.

      APPEND ZWAYITAB.

      SELECT SINGLE * FROM ZWAYBILL WHERE

            WAYBILL = WAYBILL.

      IF SY-SUBRC = 0.

        IF ZWAYBILL-BSTNR = ' '.

          PERFORM UPDATE_PO USING WAYBILL BSTNR.

          IF RETURN_CODE = 0.

            UPDATE ZWAYBILL FROM TABLE ZWAYITAB.

            MESSAGE I999(B1) WITH BSTNR 'saved with waybill:' WAYBILL.

          ELSE.

           MESSAGE I999(B1) WITH BSTNR 'NOT saved for waybill:' WAYBILL.

          ENDIF.

        ELSE.

         MESSAGE I999(B1) WITH 'Waybill assigned to PO:' ZWAYBILL-BSTNR.

        ENDIF.

      ELSE.

        MESSAGE I999(B1) WITH 'That waybill has not been generated:'

                         WAYBILL.

        EXIT.

      ENDIF.

    WHEN 'LIST'.

      SUBMIT Z_LIST_WAYBILL VIA SELECTION-SCREEN AND RETURN.

    WHEN 'GENE'.

      SUBMIT Z_GEN_WAYBILL VIA SELECTION-SCREEN AND RETURN.

    WHEN 'QUIT'.

      LEAVE PROGRAM.

  ENDCASE.

ENDMODULE.                             " USER_COMMAND_0100  INPUT

 

*&---------------------------------------------------------------------*

*&      Form  ADD_LEADING_ZEROS

*&---------------------------------------------------------------------*

FORM ADD_LEADING_ZEROS CHANGING P_NUMBER.

  DATA: T_NUMBER(12) TYPE N.

 

  MOVE P_NUMBER TO T_NUMBER.

  MOVE T_NUMBER TO P_NUMBER.

ENDFORM.                               " ADD_LEADING_ZEROS

 

*&---------------------------------------------------------------------*

*&      Form  ADD_LEADING_ZEROS10

*&---------------------------------------------------------------------*

FORM ADD_LEADING_ZEROS10 CHANGING P_NUMBER.

  DATA: T_NUMBER(10) TYPE N.

 

  MOVE P_NUMBER TO T_NUMBER.

  MOVE T_NUMBER TO P_NUMBER.

 

ENDFORM.                               " ADD_LEADING_ZEROS10

 

*&---------------------------------------------------------------------*

*&      Form  UPDATE_PO

*&---------------------------------------------------------------------*

FORM UPDATE_PO USING    P_WAYBILL

                        P_BSTNR.

*** Declarations for BDC update

  DATA: C_TCODE_ME22 LIKE SY-TCODE VALUE 'ME22'.

  DATA BEGIN OF MESSTAB OCCURS 10.

          INCLUDE STRUCTURE BDCMSGCOLL.

  DATA END OF MESSTAB.

 

  REFRESH BDCDATA.

  PERFORM APPEND_BDC USING 'SAPMM06E' '0105' '          ' '        '.

  PERFORM APPEND_BDC USING '        ' '    ' 'RM06E-BSTNR' P_BSTNR.

  PERFORM APPEND_BDC USING '        ' '    ' 'BDC_OKCODE' '/00'.

  PERFORM APPEND_BDC USING 'SAPMM06E' '0120' '          ' '   '.

  PERFORM APPEND_BDC USING '        ' '    ' 'BDC_OKCODE' '=KOPF'.

  PERFORM APPEND_BDC USING 'SAPMM06E' '0101' '          ' '        '.

  PERFORM APPEND_BDC USING '        ' '    ' 'EKKO-IHREZ' P_WAYBILL.

  PERFORM APPEND_BDC USING '        ' '    ' 'BDC_OKCODE' '=DR'.

  PERFORM APPEND_BDC USING 'SAPDV70A' '0100' '          ' '   '.

  PERFORM APPEND_BDC USING '        ' '    ' 'BDC_OKCODE' '=V70S'.

*--- Call transaction with errors to BDC -----------------------------

  REFRESH MESSTAB.

  CALL TRANSACTION C_TCODE_ME22 USING BDCDATA MODE 'N' UPDATE 'S'

       MESSAGES INTO MESSTAB.

 

  RETURN_CODE = SY-SUBRC.

 

  IF RETURN_CODE = 0.

    LOOP AT MESSTAB.

      IF MESSTAB-MSGTYP = 'E'.

        RETURN_CODE = MESSTAB-MSGNR.

        MESSAGE ID MESSTAB-MSGID TYPE 'E' NUMBER MESSTAB-MSGNR.

        EXIT.

      ENDIF.

    ENDLOOP.

  ENDIF.

 

*--- Here we check the return code, if there was an error, we put the

*    transaction in a BDC session for the user to review and correct.

  IF RETURN_CODE NE 0.

    CALL FUNCTION 'BDC_OPEN_GROUP'

         EXPORTING

              CLIENT = SY-MANDT

              GROUP  = 'ZKJW'

              USER   = SY-UNAME

              KEEP   = 'X'.

    CALL FUNCTION 'BDC_INSERT'

         EXPORTING

              TCODE     = C_TCODE_ME22

         TABLES

              DYNPROTAB = BDCDATA.

    CALL FUNCTION 'BDC_CLOSE_GROUP'

         EXCEPTIONS

              NOT_OPEN    = 1

              QUEUE_ERROR = 2

              OTHERS      = 3.

  ENDIF.

ENDFORM.                               " UPDATE_PO

 

*&---------------------------------------------------------------------*

*&      Form  APPEND_BDC

*&---------------------------------------------------------------------*

FORM APPEND_BDC USING    VALUE(P_PROG)

                         VALUE(P_SCREEN)

                         VALUE(P_NAM)

                         VALUE(P_VAL).

  CLEAR BDCDATA.

 

  IF P_PROG NE SPACE.

    BDCDATA-PROGRAM   = P_PROG.

    BDCDATA-DYNPRO    = P_SCREEN.

    BDCDATA-DYNBEGIN  = 'X'.

    BDCDATA-FNAM      = P_NAM.

    BDCDATA-FVAL      = P_VAL.

  ELSE.

    BDCDATA-FNAM      = P_NAM.

    BDCDATA-FVAL      = P_VAL.

  ENDIF.

  APPEND BDCDATA.

ENDFORM.                               " APPEND_BDC

2.3.2       Report programs

2 Reports were written to:

·         display a list of waybill numbers against Pos (Z_LIST_WAYBILL)

·         generate a list of waybill numbers for use with the dialog program 
(Z_LIST_WAYBILL)

These 2 reports are linked to in the web page template. They need the 
following characteristics before they can be run, via the web, using WEBRFC:

·         They need authorization groups assigned to their program attributes. The 
ITS user that runs the report, via the WEBRFC, needs to have the rights to 
run reports from this authorization group. (SE38)

·         The reports need to be released for the Internet. Use transaction SMW0 to 
release the program.

·         The report can be added to a report tree in order to access the report via 
the standard reporting tree structure available through the standard web 
interface. Go to the IMG and search for ‘Reporting Tree’ in order to find the 
place to update the tree.

Note: You can transport the tree but the reports need to be released for the 
internet in each client that it is required in.

2.3.2.1     Example of Z_GEN_WAYBILL

REPORT  Z_GEN_WAYBILL NO STANDARD PAGE HEADING.

*                        DATA DECLARATION                              *

***** TABLE DECLARATIONS

TABLES: ZWAYBILL.

 

***** DATA DECLARATIONS

DATA:  TEMP_VAL LIKE SY-TABIX.

DATA:    BEGIN OF ZWAYITAB OCCURS 1000,

          MANDT   LIKE SY-MANDT,

          WAYBILL LIKE ZWAYBILL-WAYBILL,

          BSTNR   LIKE ZWAYBILL-BSTNR,

          UNAME   LIKE ZWAYBILL-UNAME,

          DATUM   LIKE ZWAYBILL-DATUM,

          UZEIT   LIKE ZWAYBILL-UZEIT.

DATA     END   OF ZWAYITAB.

DATA: T_WAYB1(12) TYPE N,

      T_WAYB2(12) TYPE N.

 

*                         SELECTION SCREEN                             *

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

PARAMETERS: WAYB1 LIKE ZWAYBILL-WAYBILL,

            WAYB2 LIKE ZWAYBILL-WAYBILL.

SELECTION-SCREEN END OF BLOCK B1.

 

*                              MAIN LOGIC                              *

***** START-OF-SELECTION

START-OF-SELECTION.

  DATA: CNT1(1000) TYPE I.

  IF WAYB2 =' ' AND WAYB1 = ' '.

    MESSAGE E999(B1) WITH 'You have to make a selection.'.

    EXIT.

  ENDIF.

  IF WAYB1 <> ' ' AND WAYB2 = ' '. WAYB2 = WAYB1. ENDIF.

  IF WAYB1 =' ' AND WAYB2 <> ' '. WAYB1 = 0. ENDIF.

  MOVE WAYB1 TO T_WAYB1.

  MOVE WAYB2 TO T_WAYB2.

  MOVE T_WAYB1 TO WAYB1.

  MOVE T_WAYB2 TO WAYB2.

  CNT1 = 0.

  WHILE WAYB1 <= WAYB2.

    MOVE: SY-UNAME TO ZWAYITAB-UNAME,

          SY-DATUM TO ZWAYITAB-DATUM,

          SY-UZEIT TO ZWAYITAB-UZEIT,

          WAYB1  TO ZWAYITAB-WAYBILL,

          SY-MANDT TO ZWAYITAB-MANDT,

          ' '      TO ZWAYITAB-BSTNR.

    INSERT INTO ZWAYBILL VALUES ZWAYITAB.

    IF SY-SUBRC = 0.

      ADD 1 TO CNT1.

    ENDIF.

    ADD 1 TO WAYB1.

    MOVE WAYB1 TO T_WAYB1.

    MOVE T_WAYB1 TO WAYB1.

  ENDWHILE.

  IF SY-SUBRC <> 0.

    WRITE: /1 'No records added'.