Skip to Content
author's profile photo Former Member
Former Member

Viewing a file which is in Application Server [al11]

Hi All

I have a file which is residing in Application Server [al11 tcode], how i can display the file using LinkToURL UI Element,

what is the path which i need give in the REFERENCE parameter of the UI Element.

Thanks in Advance

Regards

Chaitanya.A

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

3 Answers

  • Posted on Feb 12, 2009 at 12:49 PM

    Just becuase the file is in the filesystem of the application server, doesn't necessarily mean that it is exposed to the network at all. This really depends upon your OS and if you have a file share or external web server connected to the OS of your application server.

    However if you want to temporarily create a URL via the ABAP application server for a file in the filesystem you can do so by placing the content into the ICM cache.

    So you would read the file from the filesystem using the normal ABAP dataset commands.

    Here is a small example where I am doing this with different image formats:

    ****Create the cached response object that we will insert our content into
      data: cached_response type ref to if_http_response.
      create object cached_response
        type
          cl_http_response
        exporting
          add_c_msg        = 1.
    *  cached_response->set_compression( options = cached_response->IF_HTTP_ENTITY~CO_COMPRESS_IN_ALL_CASES ).
     try. " ignore, if compression can not be switched on
          call method cached_response->set_compression
            exporting
              options = cached_response->co_compress_based_on_mime_type
            exceptions
              others  = 1.
        catch cx_root.
      endtry.
    ****set the data and the headers
      data: l_app_type type string.
      data: l_xstring type xstring.
      case i_format.
        when 'BMP'.
          cached_response->set_data( me->gx_content ).
          l_app_type = 'image/x-ms-bmp'.
        when 'GIF'.
          me->get_content_ext_format(
            exporting
              i_format  = i_format
            importing
              e_xstream = l_xstring ).
          cached_response->set_data( l_xstring ).
          l_app_type = 'image/gif'.
        when 'JPG'.
          me->get_content_ext_format(
            exporting
              i_format  = i_format
            importing
              e_xstream = l_xstring ).
          cached_response->set_data( l_xstring ).
          l_app_type = 'image/jpeg'.
        when 'TIF'.
          me->get_content_ext_format(
            exporting
              i_format  = i_format
            importing
              e_xstream = l_xstring ).
          cached_response->set_data( l_xstring ).
          l_app_type = 'image/tiff'.
        when 'PNG'.
          me->get_content_ext_format(
            exporting
              i_format  = i_format
            importing
              e_xstream = l_xstring ).
          cached_response->set_data( l_xstring ).
          l_app_type = 'image/png'.
        when others.
          raise exception type zcx_abap_bitmap.
      endcase.
    *
      cached_response->set_header_field( name  = if_http_header_fields=>content_type
                                         value = l_app_type ).
    *
    *
    ******Set the filename into the response header
    *  cached_response->set_header_field( name  = 'Content-Encoding'
    *                                     value = 'compress' ).
    
    ****Set the Response Status
      cached_response->set_status( code = 200 reason = 'OK' ).
    
    ****Set the Cache Timeout - 60 seconds - we only need this in the cache
    ****long enough to build the page and allow the IFrame on the Client to request it.
      cached_response->server_cache_expire_rel( expires_rel = i_cache_timeout ).
    
    ****Create a unique URL for the object
      data: guid type guid_32.
      call function 'GUID_CREATE'
        importing
          ev_guid_32 = guid.
      concatenate i_path '/' guid '.' i_format into r_url.
    
    ****Cache the URL
      cl_http_server=>server_cache_upload( url      = r_url
                                           response = cached_response ).

    Another option would be to create a custom ICF handler class. In this class you could pass the file name as URL parameters, read the content using ABAP DATASET commands and return the content in the response object.

    Handler classes have to implement the IF_HTTP_EXTENSION Interface. You implent the method HANDLE_REQUEST.

    Here is an example implementation of the HANDLE_REQUEST:

    * Inform ICF to "keep" (reuse) this handler, and that we answered the HTTP request
      if_http_extension~lifetime_rc = if_http_extension=>co_lifetime_keep.
      if_http_extension~flow_rc     = if_http_extension=>co_flow_ok.
    
    * Determine image name from URL ~script_name/~path_info (= image_name)
      data: name type string.
      name = server->request->get_header_field( name = if_http_header_fields_sap=>path_info ).
      translate name to upper case.
      if strlen( name ) >= 1 and name(1) = '/'.
        shift name left.
      endif.
    
    * Application logic
      data: content type xstring.
      content = me->load( name ).
      if xstrlen( content ) is initial.
        raise exception type cx_http_ext_exception exporting msg = 'Invalid URL!'.
      endif.
    
    * Set up HTTP response
      server->response->set_status( code = 200 reason = 'OK' ).
      server->response->set_header_field( name = if_http_header_fields=>content_type   value = 'image/png' ).
      server->response->server_cache_expire_rel( expires_rel = 86000 ).
      server->response->set_header_field( name = if_http_header_fields=>cache_control value = 'max-age=86000' ).
      server->response->set_data( content ).

    3rd option would be to create an ICM File Handler. I detailed this functionality in the SAP Press book Advanced BSP Programming. It is covered in Chapter 16.2. Here is an exerpt:

    The Internet Communication Manager (ICM) allows just such access to any file

    system accessible to the underlying operating system. You can map operating file

    system directories into ICM URL paths using the profile parameter icm/HTTP/

    file_access_<xx>.

    If you have never maintained one of the system-profile parameters, now is good

    time to make friends with your Basis administrator. With the following additions

    to our instance profile and a quick restart of the ICM, we are now able to access

    file system directories via HTTP.

    icm/HTTP/file_access_0 =

    PREFIX=/doc/, DOCROOT=/usr,BROWSEDIR=2

    icm/HTTP/file_access_1 =

    PREFIX=/doc2/,

    DOCROOT=
    server\SAPPatches\Netweaver04,BROWSEDIR=2

    In the first entry, we are just going to map to the local directory usr. We are able

    to control the useru2019s options to browser a directory via the additional parameter

    BROWSEDIR. The possible values are: 0 u2013 no browsing allowed, 1 u2013 only file names

    are displayed, and 2 u2013 file names along with their size and last change date are displayed.

    The second entry really shows off the power of this profile parameter. We are able

    to expose a directory on a remote server via UNC paths. Of course the security on

    that directory would have to be open to allow read-and-browse access. There is

    also no real mechanism to apply security to the ICM URL for this file access node,

    so you will want to be careful what you expose through it.

    Add a comment
    10|10000 characters needed characters exceeded

    • You can't build a physical path that shoots off the drive share because everything you access must be relative to the directory prefix.

      So as you access your file_access_1 the URL would have to being with
      sy-host \ doc2 \ <whatever directory>

      Think of doc2 as a share name for whatever endpoint you specify in DOCROOT.

  • author's profile photo Former Member
    Former Member
    Posted on Feb 25, 2009 at 08:51 AM

    Hi

    Any Idea

    Thanks and Regards

    Chaitanya.A

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Sep 10, 2009 at 03:26 AM

    closed

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.