Quantcast
Channel: SCN : Document List - ABAP Development
Viewing all articles
Browse latest Browse all 935

Downloading all Smartforms from Package

$
0
0

Hello Everyone,

 

There are many way to download program and FM from a package. But there are less resource to find the way to download all the smartforms from a package.This document will let you through on how to download only the smartforms from a package in OOPS concept.

 

 

Step 1. Lets start with the declaration part.

 

TABLES: sscrfields.

 

TYPES: ty_raw(250TYPE x.

TYPES: BEGIN OF ty_packagedetails,

          formname   TYPE tdsfname,                           "Smart Form name

          package    TYPE devclass,                           "Package

END OF ty_packagedetails.

DATA:   v_name  TYPE formname.                               "For select-option

 

Step 2 :Now define the screen fields to get the package name. Here I have kept a select option , So we can process multiple packages.

 

SELECTION-SCREEN BEGIN OF BLOCK bl_devc WITH FRAME TITLE text-003.

SELECTION-SCREEN FUNCTION KEY 1.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN:POSITION 1.

SELECTION-SCREEN COMMENT 2(10) text-001 .

 

SELECTION-SCREEN POSITION 19.                                "For Getting the Package

SELECT-OPTIONS: so_pack FOR v_name                           "Package

                 MODIF ID gp NO INTERVALS.

                

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK bl_devc.


Step 3: Class definition


CLASS lcl_download_smartform DEFINITION FINAL.

 

   PUBLIC SECTION.

     TYPES ty_name              TYPE RANGE OF stxftxt-formname.

     CONSTANTS: c_extension     TYPE string VALUE 'C:\Users\Siv\Desktop'.

                                                                  "Object declaration

     DATA: lo_ixml              TYPE REF TO if_ixml,              "Object for xml interface.

           lo_xml_document      TYPE REF TO if_ixml_document,     "Object creating xml document

           lo_sform             TYPE REF TO cl_ssf_fb_smart_form, "Object for class CL_SSF_FB_SMART_FORM.

           lo_element           TYPE REF TO if_ixml_element.      "Object for QUERY_INTERFACE

                                                                  "Local Variable For xml

     DATA: lv_xml_ns_prefix_sf  TYPE string,                      "Variable for prefix value in xml

           lv_xml_ns_uri_sf     TYPE string,                      "For xml namespace URL

           lv_xml_ns_uri_ifr    TYPE string.                      "For xml namespace URL

 

 

     DATA: lv_formname          TYPE tdsfname,                    "Smart Form Name

           lv_languagename      TYPE sy-langu,                    "Language Name

           lv_fmnumb            TYPE tdfmnumb,                    "For geting import values

           lv_fmnumb_test       TYPE tdfmnumb.                    "For geting import values

 

     DATA: lv_filename          TYPE string,                      "File Name

           lv_drivepath         TYPE string,                      "Local Drive Path

           lv_filepath          TYPE string,                      "Full Path of File

           lv_result            TYPE i,                           "User Action in FILE_AS_DIALOG

           lv_savepackage       TYPE string,                      "Export parameter in FILE_AS_DIALOG

           lv_package           TYPE string,                      "Export parameter in FILE_AS_DIALOG

           lv_savesmartform     TYPE string,                      "Export parameter in FILE_AS_DIALOG

           lv_smartform         TYPE string,                      "Export parameter in FILE_AS_DIALOG

           lv_namespace         TYPE string,                      "For namespace

           lv_languagestring    TYPE string,                      "For Language text element

           lv_xml               TYPE string.                      "For xml text element

 

 

 

     DATA: lv_xml_document_size TYPE i,                           "Contains document size

           lv_xml_fullpath      TYPE string,                      "Containes the full address

           lv_xml_fullpath_pack TYPE string,                      "Contains full address for package        

           lv_smartname         TYPE tdsfname.                    "Export Parameter in sform

                                                                  "Variables for Language

     DATA: lv_language_str      TYPE string,

           lv_language(2)       TYPE c.

 

*&---------------Internal table and workarea-----------------------------*

                                                                  "Internal Table to hold Formname

     DATA: lt_table             TYPE STANDARD TABLE OF ty_packagedetails,

           lt_xml_xtable        TYPE STANDARD TABLE OF ty_raw,

           lx_table             TYPE ty_packagedetails.           "Workarea

 

     METHODS: package           IMPORTING i_packname TYPE ty_packagedetails

                                          i_name     TYPE stxftxt-formname ,                    

              package_download  IMPORTING i_name     TYPE ty_name.

 

ENDCLASS.                             "lcl_download_smartform DEFINITION



Step 4:We have defined two methods. method package will  help  downloading the smartforms into xml format and into the presentation server and Package_download will help in retrieving all the smartforms from package.


CLASS lcl_download_smartform IMPLEMENTATION.

 

   METHOD package_download.                                        "To get  all smart forms from package and  pass value to method package

 

     SELECT formname                                               "Selecting all the smart forms from package

            devclass

       FROM stxfadm

       INTO TABLE lt_table

      WHERE devclass IN i_name.

 

     IF sy-subrc EQ 0.

 

       LOOP AT lt_table INTO lx_table .                            "Looping values of workarea to method Package for downloading to xml

         IF lv_result = cl_gui_frontend_services=>action_cancel.

           RETURN.

         ENDIF.

         CALL METHOD package

           EXPORTING

             i_packname = lx_table

             i_name     = lx_table-package.

       ENDLOOP.

     ELSE.

       IF lv_xml_fullpath_pack IS  INITIAL.

                                                                   "Error if Package is not present in SAP

         MESSAGE s000 DISPLAY LIKE 'E'  WITH  text-004.            "Package(s) does not exist

       ENDIF.

     ENDIF.

     CLEAR lx_table.

 

   ENDMETHOD.                    "package_download

  

 

 

   METHOD package.                                               "Converts the smart forms to xml and place each package's smart form in seperate folder

 

     lv_xml            = text-026.                               ".xml

     lv_languagestring = text-025.                               "language

     lv_namespace      = text-024.                               "xmlns

     lv_xml_ns_uri_sf  = text-016.                               "urn:sap-com:SmartForms:2000:internal-structure

     lv_formname       = i_packname.                             "Formname.

     lv_languagename   = sy-langu.

 

     CREATE OBJECT lo_sform.

     CALL METHOD lo_sform->load

       EXPORTING

         im_formname    = lv_formname                            "Formname

         im_language    = lv_languagename

         im_active      = space

       IMPORTING

         ex_fmnumb      = lv_fmnumb

         ex_fmnumb_test = lv_fmnumb_test.

 

     IF lo_ixml IS INITIAL.

       lo_ixml            = cl_ixml=>create( ).

     ENDIF.

     lo_xml_document      = lo_ixml->create_document( ).

     lv_xml_ns_prefix_sf  = 'sf'.

     lv_xml_ns_uri_ifr    = text-023.                             "Urn:sap-com:sdixml-ifr:2000 (XML URL)

     CLEAR: lv_xml_document_size, lt_xml_xtable[].

     lo_sform->xml_init( ).

 

     CALL METHOD lo_sform->xml_download                           "Create XML for the entire smart form

       EXPORTING

         parent   = lo_xml_document

       CHANGING

         document = lo_xml_document.

 

     lo_element  = lo_xml_document->get_root_element( ).          "Namespace

     lo_element->set_attribute( name     = lv_xml_ns_prefix_sf

                               namespace = lv_namespace

                               value     = lv_xml_ns_uri_sf ).

     lo_element->set_attribute( name     = lv_namespace

                               value     = lv_xml_ns_uri_ifr ).

 

     lv_language_str = lv_language.                               "Language

     lo_element->set_attribute(

                         name      = lv_languagestring

                         namespace = lv_xml_ns_prefix_sf

                         value     = lv_language_str ).

 

     CALL FUNCTION 'SDIXML_DOM_TO_XML'                            "Convert DOM to xml

       EXPORTING

         document     = lo_xml_document

       IMPORTING

         size         = lv_xml_document_size

       TABLES

         xml_as_table = lt_xml_xtable

       EXCEPTIONS

         OTHERS       = 1.

     IF sy-subrc EQ 0.

       lv_savepackage = text-015.                                "Save Package

       lv_package     = text-011.                                "Package

 

       IF lv_filepath IS INITIAL.

 

         CALL METHOD cl_gui_frontend_services=>file_save_dialog  "File Save Dialog PopUp

           EXPORTING

             window_title      = lv_savepackage

             default_extension = ''

             default_file_name = lv_package

             initial_directory = c_extension

           CHANGING

             filename          = lv_filename

             path              = lv_drivepath

             fullpath          = lv_filepath

             user_action       = lv_result.

       ENDIF.

       IF lv_result = cl_gui_frontend_services=>action_cancel.

         RETURN.

       ENDIF.

 

       CONCATENATE lv_filepath                                  "Specifying the Location From Function Module

                   '\'

                   i_name

                   '\'

                   lx_table-formname lv_xml

              INTO lv_xml_fullpath_pack .

 

       CALL METHOD cl_gui_frontend_services=>gui_download

         EXPORTING

           filename     = lv_xml_fullpath_pack

           filetype     = 'BIN'

           bin_filesize = lv_xml_document_size

         CHANGING

           data_tab     = lt_xml_xtable[]

         EXCEPTIONS

           OTHERS       = 1.

       FREE: lo_xml_document, lt_xml_xtable[], lv_xml_document_size.

     ENDIF.

 

   ENDMETHOD.                    "package

                                               

 

 

ENDCLASS.                    "lcl_download_smartform IMPLEMENTATION



Step 5:


START-OF-SELECTION.

DATA: o_obj   TYPE REF TO lcl_download_smartform.

CREATE OBJECT o_obj.


IF so_pack IS  NOT  INITIAL.

       CALL METHOD o_obj->package_download

         EXPORTING

           i_name = so_pack[].

     ELSE.

       MESSAGE s000 DISPLAY LIKE 'E' WITH text-005.    "Enter Package

ENDIF.



So once once you execute , you can specify the package names in multiple selection screen


smartform1.jpg


You can see that i have added zsiva and zdam as packages, and once you execute you will get a pop for selecting the location to store, Default location will be desktop with default folder name as package.

smartform2.png

Once you click on save the code gets executed and all the smartforms from the package gets transformed to xml and starts downloading , once its starts to download you will get to see this status

smartform3.png

And once the download is over the status changes to

smartform4.png


Which means that all you smartforms from your package got downloaded to your presentation server. You can notice that the smartforms will be downloaded in specified package name .

smartform5.jpg


Hope you enjoyed this document .

Sivaganesh





Viewing all articles
Browse latest Browse all 935

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>