Skip to Content

It has been really a while that I blogged on sdn due to the hectic schedules of my marriage:-)). Finally, I pulled up my socks to write one, which was an awaiting one.

Going to the flash back of my XI implementation I learn by heart that we need to download a Textpad /SAP NW studio for deploying /developing java mapping programs and there are lot of security/logistic concerns to do so. We finally used Text pad for whatever reasons and I used to feel XI need to come up with editors for all types of mapping, as that would be ideal.

This is the driving factor, which has made me to blog today. I have developed a proto java editor in the integration stack of XI and exposing it to sdn folks. It is not a user-friendly and enhanced java editor but indeed a simple one to start with. Definitely it can form the base for developing a more advanced one.

There is an excellent blog “Java-Editor Inside ABAP” by Vijay. It is definitely a great one but there are few bottle necks of the approach as described below:

1.Installation of JDK/JVM on every client PC’S which might not be feasible as it is an overhead.

2.Editor-call for ITAB is used which can take only 72 characters in a single line.

3.Files are stored on the client’s machine and so it is not integrated with the App Server.

Probably that is the solution for WAS < 6.20.But we can have a more enhanced one for WAS>= 6.20 as we have JVM installed on WAS and so we use it.

New Approach:

1.Create a Folder in WAS for storing java files and give the appropriate permissions for the folder. You can view the directory structure using AL11 transaction.

2.Create/Modify the java files using the report ZJAVA_EDITOR_IN_XI that provides an interface to save the java files in app server. You use the same SE38 editor for creating/modifying java code.

3.Check the jdk/jvm directory on your WAS through AL11 in ‘/usr’ directory and confirm with basis about the right directory where jdk/jvm is installed.

4.Create 2 commands

zjava

and

zjavac

in SM69 transaction. In place of operating system command give “/usr/< Your WAS Java Folder Path> /bin/java” for zjava and “/usr/< Your WAS Java Folder Path> /bin/javac” for zjavac commands. You can test this command using SM49 transaction. These commands are used from ZJAVA_EDITOR_IN_XI report in the FM SXPG_COMMAND_EXECUTE for executing/compiling the java programs.

Pictural Representation

Create Java File:

Creates Java File

Modify Java File:

Modify Java File

Compile Java File:

Compile Java File

Execute Java File:

Execute Java File

Source Code:

&—-


*& Report  ZJAVA_EDITOR_IN_XI                                          *

*&                                                                     *

&—-


*&                                                                     *

*&                                                                     *

&—-


REPORT  zjava_editor_in_xi.

*************Data Declarations***************************************

PARAMETERS:p_name(20) OBLIGATORY LOWER CASE.

PARAMETERS :p1 RADIOBUTTON GROUP jfnc.

PARAMETERS :p2 RADIOBUTTON GROUP jfnc.

PARAMETERS :p3  RADIOBUTTON GROUP jfnc.

PARAMETERS :p4  RADIOBUTTON GROUP jfnc.

****Path of the appserver where files have to be stored****************************************

DATA: class_path(100)  VALUE ‘/local//’.

**************************************************************************************************

DATA msg(100).

TYPES: line TYPE string.

DATA: itab TYPE STANDARD TABLE OF line.

DATA line TYPE string.

************************************************************************

********Creates Java files in the path specified******************************

IF p1 = ‘X’.

  CLEAR itab[].

  CONCATENATE ‘Class’ p_name ‘{}’ INTO line SEPARATED BY space.

  APPEND line TO itab.

  INSERT REPORT ‘ZJAVTEST’ FROM itab PROGRAM TYPE  ‘I’.

  EDITOR-CALL FOR REPORT ‘ZJAVTEST’.

  CLEAR itab[].

  READ REPORT ‘ZJAVTEST’ INTO itab.

  CONCATENATE class_path p_name ‘.java’ INTO class_path.

  OPEN DATASET class_path FOR OUTPUT MESSAGE msg  IN TEXT MODE  ENCODING DEFAULT .

  IF sy-subrc <> 0.

    WRITE / msg.

    STOP.

  ENDIF.

  LOOP AT itab INTO line.

    TRANSFER line TO class_path.

  ENDLOOP.

  CLOSE DATASET class_path.

  DELETE REPORT ‘ZJAVTEST’.

ENDIF.

***********************************************************************************

********Modify Java Files in the path specified*********************************

IF p2 = ‘X’.

  CLEAR itab[].

  CONCATENATE class_path p_name ‘.java’ INTO class_path.

  OPEN DATASET class_path FOR INPUT MESSAGE msg  IN TEXT MODE  ENCODING DEFAULT .

  IF sy-subrc <> 0.

    WRITE / msg.

    STOP.

  ENDIF.

  DO.

    CLEAR line.

    READ DATASET class_path INTO line.

    IF sy-subrc <> 0.

      EXIT.

    ELSE.

      APPEND line TO itab.

    ENDIF.

  ENDDO.

  INSERT REPORT ‘ZJAVTEST’ FROM itab PROGRAM TYPE  ‘I’.

  EDITOR-CALL FOR REPORT ‘ZJAVTEST’.

  IF sy-subrc EQ 0.

    READ REPORT ‘ZJAVTEST’ INTO itab.

    DELETE DATASET class_path.

    OPEN DATASET class_path FOR OUTPUT MESSAGE msg  IN TEXT MODE  ENCODING DEFAULT .

    IF sy-subrc <> 0.

      WRITE / msg.

      STOP.

    ENDIF.

    LOOP AT itab INTO line.

      TRANSFER line TO class_path.

    ENDLOOP.

    CLOSE DATASET class_path.

    DELETE REPORT ‘ZJAVTEST’.

  ENDIF.

ENDIF.

*****************************************************************************************

*****************Compiles Java files***************************************************

IF p3 = ‘X’.

  DATA : i_comp LIKE TABLE OF btcxpm WITH HEADER LINE.

  DATA add_par_c LIKE sxpgcolist-parameters.

****Location of java file is given in add_par_c.

  CONCATENATE class_path p_name ‘.java’ INTO add_par_c.

  CALL FUNCTION ‘SXPG_COMMAND_EXECUTE’

    EXPORTING

      commandname                   = ‘ZJAVAC’

      additional_parameters         = add_par_c

       TABLES

      exec_protocol                 = i_comp

    EXCEPTIONS

      no_permission                 = 1

      command_not_found             = 2

      parameters_too_long           = 3

      security_risk                 = 4

      wrong_check_call_interface    = 5

      program_start_error           = 6

      program_termination_error     = 7

      x_error                       = 8

      parameter_expected            = 9

      too_many_parameters           = 10

      illegal_command               = 11

      wrong_asynchronous_parameters = 12

      cant_enq_tbtco_entry          = 13

      jobcount_generation_error     = 14

      OTHERS                        = 15.

  .

  IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ELSE.

    LOOP AT i_comp.

      WRITE:/ i_comp-message.

    ENDLOOP.

  ENDIF.

ENDIF.

*************************************************************************

************Executes Java Files*****************************************

IF p4 = ‘X’.

  DATA : i_exec LIKE TABLE OF btcxpm WITH HEADER LINE.

  DATA add_par_e LIKE sxpgcolist-parameters.

****Location of class file is given in add_par_e.

  CONCATENATE class_path p_name  INTO add_par_e.

  CALL FUNCTION ‘SXPG_COMMAND_EXECUTE’

    EXPORTING

      commandname                   = ‘ZJAVA’

      additional_parameters         = add_par_e

     TABLES

      exec_protocol                 = i_exec

    EXCEPTIONS

      no_permission                 = 1

      command_not_found             = 2

      parameters_too_long           = 3

      security_risk                 = 4

      wrong_check_call_interface    = 5

      program_start_error           = 6

      program_termination_error     = 7

      x_error                       = 8

      parameter_expected            = 9

      too_many_parameters           = 10

      illegal_command               = 11

      wrong_asynchronous_parameters = 12

      cant_enq_tbtco_entry          = 13

      jobcount_generation_error     = 14

      OTHERS                        = 15.

  .

  IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
LOOP AT i_exec.
WRITE:/ i_exec-message.
ENDLOOP.
ENDIF.

ENDIF.
*************************************************************************

Execution Snapshot :

Text Eléments:

Text Elements

Create Java File: User selects to create Hello World Java file.

Create

Report calls ABAP Editor with an empty template class HelloWorld {}.

Empty Template

User adds a comment and press save button, which saves the java file in the app server.

Save after coding

Modify Java File: User selects to modify Hello World Java file.

Modify

Report calls ABAP Editor with the code that is created in previous step.User adds main method and saves.

Add Main Method

Execute Java Files: User compiles the java files using compile option and then clicks execute.

Execute

Output:

Output

Probably this might be useful when you need to do use java in ABAP Proxies and also if we enhance the editor in a well-defined manner we can get more benefit out of it.

To report this post you need to login first.

3 Comments

You must be Logged on to comment or reply to a post.

  1. Thorsten Nordholm Søbirk
    I personally see no reason to try to implement a Java IDE (however rudimentary) which runs in SAPGUI. There are so many feature-rich Java IDEs available that it seems pointless.
    I do, however, agree that we need better facilities for developing Java mappings and User-Defined Functions for Message Mappings. My preference in this area would be integration with NetWeaver Developer Studio.

    Regards,
    Thorsten

    (0) 
    1. Sravya Talanki Post author
      Even I donot prefer to use that editor myself..Just another approach…that is all…probably you wanna have a flavour of java & ABAP…this is useful..:)
      (0) 

Leave a Reply