|
1 IntroductionTo program a new IAC you need to perform the following steps: 1. Develop a dialog transaction that performs the required task. 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 Our Example scenario described: Our aim is to develop a 1-screen application that updates a purchase 2 SAP Portion2.1 Creating the program and transactionCreate a dialog program called ZWAYBILL_ENTRY 2.2 Create screenCreate screen 100 which will capture the waybill, PO combination. 2.2.1 Screen attributes
2.2.3 Element ListWAYBILL 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 Flowprocess before output. module init_0100. * process after input. chain. field: waybill, bstnr. module check_0100. endchain. module user_command_0100. 2.3 SAP ProgramsThe following are example programs of the dialog and report kind, used in the 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 programs2 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 These 2 reports are linked to in the web page template. They need the · They need authorization groups assigned to their program attributes. The · The reports need to be released for the Internet. Use transaction SMW0 to · The report can be added to a report tree in order to access the report via Note: You can transport the tree but the reports need to be released for the 2.3.2.1 Example of Z_GEN_WAYBILLREPORT 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'. | |||||||||