Skip to Content


This is about a simple ABAP Utility . It will post ABAP object’s documentation to Google, for the purpose of displaying translated text in your logon language or in English.




You can also use this weblog for extending workbench functionality.

The Problem :


Not sure if you’ve faced this problem but I found that quite a few of the function modules are not provided with English documentation – however documentation in German does exist for most of these.



Actually I made the problem afterwards. Frankly speaking, I didn’t write this utility because I wanted to solve any problem. It was just for the fun !!

[ Now where is the fun part? – keep on reading, it’s in The End 🙂 ]

Benefits :

You can write a weblog on SDN about it.

    1. It will extend the functionality of the ABAP workbench function[-code] “documentation”

, to get the documentation translated online using Google.

It translates into (other) logon language – if documentation exist in English.

    1. Translates into English – if documentation exists only in German.

When no documentation exist at all then you can be sure about that immediately.

Processing :


You can run the report program directly from SE38 as well . But it will be good if you can embed the functionality in ABAP Workbench itself .

Implementation for BADI WB_PROCESS_FCODE -Method DISPATCH

: It calls the main utility program Z_RMTIWARI_ABAP_DOC_TRANSLATOR, whenever someone clicks on the ‘Documentation’ of ABAP Workbench Menu.. 


method IF_EX_WB_PROCESS_FCODE~DISPATCH .
Data : lv_OBJECT type DOKHL-OBJECT.
Data : lv_obj_id type DOKHL-ID.
data : lv_langp  type char5.
data : lv_typ    type c.
data : lt_dokil type standard table of dokil.
data : wa_dokil type dokil.


*P_OK_CODE
Check P_OK_CODE eq ‘WB_DOCUMENTATION’.
break-point.
  IF sy-tcode eq ‘SE37’.
   get parameter id ‘LIB’ field lv_OBJECT.
   lv_obj_id = ‘FU’.
   lv_typ = ‘T’.


  ELSEIF sy-tcode eq ‘SE38’.
    get parameter id ‘RID’ field lv_OBJECT.
    lv_obj_id = ‘RE’.
    lv_typ = ‘E’.


  ELSE.


  • Not implemented as yet


  ENDIF.


   select *
    into table lt_dokil
    from DOKIL
   where ID     eq lv_obj_id
     and OBJECT eq lv_OBJECT
     and TYP    eq lv_typ.


    check sy-subrc eq 0.


    READ TABLE lt_dokil into wa_dokil with key langu = sy-langu.


    check sy-subrc ne 0.


    READ TABLE lt_dokil into wa_dokil with key langu = ‘E’.


     if sy-subrc eq 0 .


  •       Translate from english to logon language

        concatenate ‘en|’ sy-langu into lv_langp.


     else.

  •      Get German and translate to English.

       lv_langp = ‘de|en’.


     endif.


     SUBMIT Z_RMTIWARI_ABAP_DOC_TRANSLATOR AND RETURN
       WITH   P_ID       = lv_obj_id
       WITH   P_OBJECT   = lv_object
       WITH   P_LANGP    = lv_langp.


endmethod.

Program Z_RMTIWARI_ABAP_DOC_TRANSLATOR :

The program accepts inputs for the function module name & the language pair in. It simply gets the available documentation of the object and then generates the HTML code for Google translation FORM. The HTML Page gets downloaded to ‘C:\Temp’ folder on your PC and subsequently called by the program in your default browser.


REPORT  Z_RMTIWARI_ABAP_DOC_TRANSLATOR          .
—-



  •       ABAP Document Translator – using Google – Date – 18.02.2006

—-



  •       Written By: Ram Manohar Tiwari                     

—-



—-



  • This utility will accept ABAP documentation objects and will submit
  • the text to google in order to  translate it from one language to
  • other.

*

  • This utility is useful for translating the function module and other
  • ABAP Object’s documenations from German to English, in case it is
  • only available in German.

*

  • You can also translate the documentation from english to any other
  • (available) language,in case, for you, English is as good as German.

*—-


  • This utility is developed on MiniSAP .

*—-


  • SELECTION SCREEN

*—-


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : P_ID            LIKE     DOKHL-ID DEFAULT ‘FU’ OBLIGATORY,
             P_LANGU            LIKE     SY-LANGU DEFAULT ‘D’  NO-DISPLAY,
             P_OBJECT     LIKE     DOKHL-OBJECT OBLIGATORY,
             P_LANGP        TYPE CHAR5  default ‘de|en’ OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1 .


SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE text-002.


SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_OUTDIR LIKE rlgrap-filename obligatory default ‘C:\temp’.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B2.


—-



  • Data declaration

—-



data : gv_directory LIKE rlgrap-filename,
       gv_file_name TYPE STRING,
       gv_html_file_name(100) TYPE C.


data : lt_doc_text type standard table of TLINE with header line.


DATA : BEGIN OF gt_html OCCURS 0,
        rec(200) TYPE c,
       END OF gt_html.


DATA : gv_html_wa        like line of gt_html.


—-



DATA: begin of lt_VALUETAB occurs 0,
       P_LANGP type char5,
       DESC    type char100,
      end of lt_VALUETAB .


data : lt_return_tab type standard table of DDSHRETVAL with header line.
data : lv_prog type sy-repid,
       lv_dynnr type sy-dynnr.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_LANGP.


  CLEAR lt_valuetab. REFRESH lt_valuetab.


  lv_prog = sy-repid.
  lv_dynnr = sy-dynnr.


  lt_valuetab-P_LANGP = ‘de|en’.
  lt_valuetab-DESC = ‘German to English’.
  APPEND lt_valuetab.


  lt_valuetab-P_LANGP = ‘de|fr’.
  lt_valuetab-DESC = ‘German to French’.
  APPEND lt_valuetab.


  lt_valuetab-P_LANGP = ‘en|de’.
  lt_valuetab-DESC = ‘English to German’.
  APPEND lt_valuetab.


  lt_valuetab-P_LANGP = ‘en|es’.
  lt_valuetab-DESC = ‘English to Spanish’.
  APPEND lt_valuetab.


  lt_valuetab-P_LANGP = ‘en|fr’.
  lt_valuetab-DESC = ‘English to French’.
  APPEND lt_valuetab.


  lt_valuetab-P_LANGP = ‘en|it’.
  lt_valuetab-DESC = ‘English to Italian’.
  APPEND lt_valuetab.


  lt_valuetab-P_LANGP = ‘en|pt’.
  lt_valuetab-DESC = ‘English to Portuguese’.
  APPEND lt_valuetab.


  lt_valuetab-P_LANGP = ‘en|ja’.
  lt_valuetab-DESC = ‘English to Japanese BETA’.
  APPEND lt_valuetab.


  lt_valuetab-P_LANGP = ‘en|ko’.
  lt_valuetab-DESC = ‘English to Korean BETA’.
  APPEND lt_valuetab.


  lt_valuetab-P_LANGP = ‘en|cn’.
  lt_valuetab-DESC = ‘English to Chinese(Simplified) BETA’.
  APPEND lt_valuetab.


  • Call the help value screen

  CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
       EXPORTING
            retfield        = ‘P_LANGP’
            dynpprog        = lv_prog
            dynpnr          = lv_dynnr
            dynprofield     = ‘P_LANGP’
            value_org       = ‘S’
       TABLES
            value_tab       = lt_VALUETAB
            RETURN_TAB      = lt_return_tab
       EXCEPTIONS
            parameter_error = 1
            no_values_found = 2
            OTHERS          = 3.
  IF sy-subrc <> 0.

  •    …

  ENDIF.


START-OF-SELECTION.


P_LANGU = P_LANGP(1).

  • Get the document text

  CALL FUNCTION ‘DOCU_GET’
    EXPORTING

  •     EXTEND_EXCEPT                = ‘ ‘

      ID                           = P_ID
      LANGU                        = P_LANGU
      OBJECT                       = P_OBJECT

  •     TYP                          = ‘E’
  •     VERSION                      = 0
  •     VERSION_ACTIVE_OR_LAST       = ‘L’
  •     PRINT_PARAM_GET              = ‘X’
  •   IMPORTING
  •     DOKSTATE                     =
  •     DOKTITLE                     =
  •     HEAD                         =
  •     DOKTYP                       =

    TABLES
      LINE                         = lt_doc_text
   EXCEPTIONS
     NO_DOCU_ON_SCREEN            = 1
     NO_DOCU_SELF_DEF             = 2
     NO_DOCU_TEMP                 = 3
     RET_CODE                     = 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.
  ENDIF.


  • Create the google html form for the document text.

  PERFORM convert_doc_to_html TABLES  lt_doc_text
                                      gt_html.


  Concatenate ‘Trans_’ P_OBJECT ‘.html’ into  gv_html_file_name.


  PERFORM prepare_file_name   USING   p_outdir
                                      gv_html_file_name
                           CHANGING   gv_file_name.


  PERFORM download_html_file_on_pc tables    gt_html
                                    using    gv_file_name.


  PERFORM show_html_file using gv_file_name.


END-OF-SELECTION.


&—-



*&      Form  prepare_file_name
&—-



  •       text

—-



  •      –>x_directory    text
  •      –>x_program_name text
  •      –>y_file_name    text

—-



FORM prepare_file_name USING x_directory
                             x_file
                    CHANGING y_file_name.


  CONCATENATE x_directory ‘\’ x_file into y_file_name.


ENDFORM.                    ” prepare_file_name
&—-



*&      Form  download_html_file_on_pc
&—-



  •       text

—-



  • –>  p1        text
  • <–  p2        text

—-



FORM download_html_file_on_pc tables   yt_download
                              using    x_outfile type string.


  • Use gui_download if file is located on the local PC.
  • WS_download only works in foreground

  IF sy-batch EQ ‘X’.
    MESSAGE e001(AQ) WITH
   ‘This program cannot be executed in background’.

  •   ERROR: Unable to download locally stored files when running in
  •   background

  ELSE.


    CALL FUNCTION ‘GUI_DOWNLOAD’
      EXPORTING
        FILENAME                = x_outfile
        FILETYPE                = ‘ASC’
      TABLES
        DATA_TAB                = yt_download
      EXCEPTIONS
        FILE_WRITE_ERROR        = 1
        NO_BATCH                = 2
        GUI_REFUSE_FILETRANSFER = 3
        INVALID_TYPE            = 4
        NO_AUTHORITY            = 5
        UNKNOWN_ERROR           = 6
        HEADER_NOT_ALLOWED      = 7
        SEPARATOR_NOT_ALLOWED   = 8
        FILESIZE_NOT_ALLOWED    = 9
        HEADER_TOO_LONG         = 10
        DP_ERROR_CREATE         = 11
        DP_ERROR_SEND           = 12
        DP_ERROR_WRITE          = 13
        UNKNOWN_DP_ERROR        = 14
        ACCESS_DENIED           = 15
        DP_OUT_OF_MEMORY        = 16
        DISK_FULL               = 17
        DP_TIMEOUT              = 18
        FILE_NOT_FOUND          = 19
        DATAPROVIDER_EXCEPTION  = 20
        CONTROL_FLUSH_ERROR     = 21
        OTHERS                  = 22.

  • Status of download

    CASE sy-subrc.
      WHEN 0.
        MESSAGE I002(AQ) WITH
        ‘HTML page downloaded as ‘ x_outfile.


      WHEN OTHERS.

  •        Upload unsuccessful – error message

        MESSAGE ID SY-MSGID TYPE ‘E’ NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDCASE.
  ENDIF.


ENDFORM.                    ” download_html_file_on_pc
&—-



*&      Form  convert_code_to_html
&—-



  •       text

—-



  •      –>P_GT_REP_TABLE  text
  •      –>P_GT_HTML  text

—-



FORM convert_doc_to_html  TABLES xt_REP_TABLE structure TLINE
                                  yt_HTML.


  DEFINE add_html.
    yt_html = &1.
    APPEND yt_html.


  END-OF-DEFINITION.


  • Add Header to HTML

  add_html ‘
          into lv_langp_html.
endif.


  • Remove the space in < /textarea> – this is for SDN weblog

add_html ‘< /textarea>’.
add_html lv_langp_html.
add_html ‘

‘.
add_html ‘‘.
add_html ‘‘.
add_html ‘‘.
add_html ‘

‘.


  • Close HTML Tags

  add_html ‘</BODY>’.
  add_html ‘</HTML>’.


ENDFORM.                    ” convert_code_to_html
&—-



*&      Form  show_html_file
&—-



  •       text

—-



  •      –>X_FILE_NAME  text

—-



FORM show_html_file  USING    X_FILE_NAME.


data : lv_url(200) type c.


lv_url = x_file_name.
CALL FUNCTION ‘CALL_BROWSER’
  EXPORTING
    URL                          = lv_url.


ENDFORM.                    ” show_html_file

The Result:


For example : You can open a function module say ABAP_DOCU_SHOW using transaction SE37 .
Further click on Menu Function .


Since the BADI is implemented for function code ‘documentation’, the utility will be called and Google translated text from German to English will be shown in your default browser.


Google
Also there seems to be some problem with the google translation and it does not respect end-of-sentence or line-breaks http://www.worldlingo.com/ could have done better . That makes the translated text look like some kind of garbage. Also, there seems to be some encoding related issue. But that should not be very difficult to resolve.
</P>

To report this post you need to login first.

6 Comments

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

  1. Eddy De Clercq
    Hi,

    I wondered why you don’t use simplier methods like the one described in https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/just%20browsi
    ng%20Around.article

    I’m not saying that my code is better (in the contrary), but using the local machine as in between stage could result in unwanted problems with the browser (see the multitude of forum threads on the call_browser) or the file system (e.g. Tivoli managed PCs).
    If the SAP server act as client you don’t need to worry about that anymore.

    Eddy

    (0) 
    1. Ram Manohar Tiwari Post author
      Hi Eddy,

      Thanks for your comments.
      I do have that class cl_http_client in my miniSAP version and I also understand your concern for Browsers 🙂

      But
      1. cl_http_client is only available from 4.7 onwards at least I could not find it on the 4.6C version to which I’ve the access.
      2. In order to make that work, we might well have to first configure the proxies or firewalls, which does not actually belong to the expertise domain of ABAP developers.
      3. Ultimately, Google result has to be shown in a browser [ as whatever that was called was not an API / web-service ]..unless you want to go for

      (0) 
  2. Anton Wenzelhuemer
    hi there,

    I hope you’re not serious about using such a translation service for other reasons then for making yourself a joke about it.

    It’s not only those technical problems of line breaking or UTF characters, it just makes almost no sense with respect to the very content.

    I just say ‘User attitudes’.
    Or my runner-up favourite ‘postage G parameters’.
    But the best of all ist the translation of the coding …IF EMERGENCY of docu_container IS INITIAL.

    please don’t you ever trust in this. but I am sure you were just doing this for the fun of it :-))

    regards,
    anton

    (0) 
    1. Ram Manohar Tiwari Post author
      In terms of getting comments, this weblog has crossed my previous best.
      Earlier, in one of my very few weblogs, I was rewarded with 2 comments (including mine)

      Thank You for your kind attention !!

      (0) 
  3. Michelle Crapo

    Wow – I was looking around for some post to consume a webservice from ABAP while avoiding PI.   AND WebAS AND Java.   Plus I have no experience with this.   PI Proxy bring it on.  That’s easy.  

    Anyway – I came across your post.  I’m glad you got a record number of responses!   I’m glad they are pointing people like me in the right direction.   I am disappointed you didn’t get any positive comments.

    So years later, and a dollar short.   Thank you for the post!  The responses and the blog have helped me out.   I’m glad you were exploring different parts of SAP, and figuring out how they work.  

    I’m looking forward to reading your newer posts!

    Michelle

    (0) 

Leave a Reply