sapdev logo background
sapdev logo sapdev logo
Comments

Execute Standard SAP Transaction from BSP using dynamically created shortcut




The ABAP/HTML code below shows you how to execute a standard SAP transaction from your BSP application, the example is built around calling tcode PA20 but this is just for demonstration purposes and you can use whichever transaction you want.

If you have not created a BSP before you will need to look the following example of creating a simple BSP application just to get an understanding of the basic components. You can then use the information below to build the BSP.

Properties Tab


Layout Tab

<%@page language="abap"%>
<%@extension name="htmlb" prefix="htmlb"%>


<form>
<% if display_url is not initial. %>
     <a href="<%=display_url%>"> PA20</a>
<% endif.%>
</form>

Page Attributes Tab
display_url TYPE STRING


Event Handler Tab - OnInitialization

types: begin of t_shortcut_par,
    fieldname(60) type c,
    fieldvalue(255) type c,
  end of t_shortcut_par.

data: ld_userid type  syuname,
      ld_transaction type  tcode value 'PA20',
      ld_shortcut type  string,
      it_shortcut_param type standard table of t_shortcut_par,
      wa_shortcut_param like line of it_shortcut_param,
      sapworkdir     type     sdok_chtrd.

data ld_response type ref to if_http_response.

data: ld_guid        type     guid_32 ,
      ld_pagename   type     string,
      wa_parameters  type     tihttpnvp.

**** Declaration for shortcut content
DATA: ld_tcodefields TYPE text255.

* code is based on that in OSS note: 103019
  ld_userid = sy-uname.

* Check if transaction code is available
  SELECT SINGLE tcode FROM tstc
                INTO ld_transaction
                WHERE tcode EQ ld_transaction.

  REFRESH it_shortcut_param.

  TRANSLATE ld_transaction to UPPER CASE.
  CASE ld_transaction.
* This is an example of how to pre-populate fields on the transaction
    when 'PA20'.
      wa_shortcut_param-fieldname = 'RP50G-PERNR'.
      wa_shortcut_param-fieldvalue = '910650'. "Employee number
      APPEND wa_shortcut_param to it_shortcut_param.

      wa_shortcut_param-fieldname = 'RP50G-CHOIC'. "Infotype field
      wa_shortcut_param-fieldvalue = '0002'.  "Org Infotype
      APPEND wa_shortcut_param to it_shortcut_param.

      wa_shortcut_param-fieldname = 'RP50G-TIMR1'. "Period field
      wa_shortcut_param-fieldvalue = 'X'.     "Today selected"
      APPEND wa_shortcut_param to it_shortcut_param.
  endcase.

* Populate the parameters to be passed to the tcode shortcut
  IF NOT it_shortcut_param[] IS INITIAL.
    CLEAR ld_tcodefields.
    LOOP AT it_shortcut_param into wa_shortcut_param.
      CONCATENATE ld_tcodefields wa_shortcut_param-fieldname '='
      wa_shortcut_param-fieldvalue ';' INTO ld_tcodefields.
    ENDLOOP.
  ENDIF.

*Create the shortcut details for the required transaction
* Adding the * to the begining of the tcode is supposed to skip first screen
* but not sure this works
  CONCATENATE '*' ld_transaction into ld_transaction.
  CALL FUNCTION 'SWN_CREATE_SHORTCUT'
    EXPORTING
      i_transaction           = ld_transaction
*      I_SYSTEM_COMMAND        = 'DIS'
      i_parameter             = ld_tcodefields
      i_sysid                 = sy-sysid
      i_client                = sy-mandt
      i_user                  = ld_userid
      i_language              = sy-langu
      i_windowsize            = 'Normal window'
    IMPORTING
      shortcut_string         = ld_shortcut
    EXCEPTIONS
      inconsistent_parameters = 1
      OTHERS                  = 2.

  CREATE OBJECT ld_response TYPE cl_http_response
    EXPORTING
      add_c_msg = 1.

  ld_response->set_cdata( ld_shortcut ).
  ld_response->set_header_field( name  = if_http_header_fields=>content_type
                                 value = 'application/octet-stream' ).
  ld_response->set_status( code = 200 reason = 'OK' ).
  ld_response->server_cache_expire_rel( expires_rel = 180 ).

  CALL FUNCTION 'GUID_CREATE'
    IMPORTING
      ev_guid_32 = ld_guid.

  CONCATENATE ld_guid '.sap' INTO ld_pagename.

* Get Absolute URL (Protocol, Host, Port, ...) of BSP Application
  CALL METHOD cl_http_ext_webapp=>create_url_for_bsp_application
    EXPORTING
      bsp_application      = runtime->application_url
      bsp_start_page       = ld_pagename
      bsp_start_parameters = wa_parameters
    IMPORTING
      abs_url              = display_url.

* Activates the url so that it is valid and ready to use
  cl_http_server=>server_cache_upload( url      = display_url
                                       response = ld_response ).

See here for ... BSP code and examples




comments powered by Disqus