ABAP-小工具之Program的导出与导入

  • 使用背景
    • 界面

使用背景

在SAP某ECC版本中,迁移了一个含有screen的程序到HANA系统里,但是遇到一个问题,在迁移的时,光将屏幕通过se80创建会遇到一种情况,此ECC版本的screen的图像编辑器无法像HANA中一样调用出来,也不清楚是否是组件没装,还是其他原因,反正很是头疼。
因为是使用了 SAP 自带的ALV控件功能,ALV_SHOW

在ECC系统中,这个ALV_SHOW无法自动匹配上,而且屏幕编辑器也有问题,那么没办法,不能复制代码这种方法行不通呀!
那么怎么办,把程序导出来,以某种格式,就像JAVA一样,序列化。
所以可以使用该程序

*/---------------------------------------------------------------------\
*| This file is part of SAPlink.                                       |
*|                                                                     |
*| Copyright 2014 SAPlink project members                              |
*|                                                                     |
*| Licensed under the Apache License, Version 2.0 (the "License");     |
*| you may not use this file except in compliance with the License.    |
*| You may obtain a copy of the License at                             |
*|                                                                     |
*|     http://www.apache.org/licenses/LICENSE-2.0                      |
*|                                                                     |
*| Unless required by applicable law or agreed to in writing, software |
*| distributed under the License is distributed on an "AS IS" BASIS,   |
*| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or     |
*| implied.                                                            |
*| See the License for the specific language governing permissions and |
*| limitations under the License.                                      |
*\---------------------------------------------------------------------/
*/---------------------------------------------------------------------\
*| /  __ \           | |      (_) |         | |                        |
*| | /  \/ ___  _ __ | |_ _ __ _| |__  _   _| |_ ___  _ __ ___         |
*| | |    / _ \| '_ \| __| '__| | '_ \| | | | __/ _ \| '__/ __|        |
*| | \__/\ (_) | | | | |_| |  | | |_) | |_| | || (_) | |  \__ \        |
*|  \____/\___/|_| |_|\__|_|  |_|_.__/ \__,_|\__\___/|_|  |___/        |
*|---------------------------------------------------------------------|
*| Lead Developers : ed herrmann                                       |
*|                        ewherrmann+saplinkcred@gmail.com             |
*|                   dan mcweeney                                      |
*|                        daniel.mcweeney+saplinkcred@gmail.com        |
*|---------------------------------------------------------------------|
*| For a full list of contributors visit:                              |
*|                                                                     |
*| project homepage: http://saplink.org                                |
*| discussion group:                                                   |
*|            https://cw.sdn.sap.com/cw/groups/saplink?view=discussions|
*| project wiki:     https://wiki.sdn.sap.com/wiki/display/ABAP/SAPlink|
*\---------------------------------------------------------------------/
REPORT  zsaplink.
class zsaplink DEFINITION load. " Convenience for older SAP-Releases*/------------------------DATA----------------------------\
TABLES: sscrfields, e071, e07t.TYPE-POOLS: icon, slis, sabc, stms, trwbo.TYPES: BEGIN OF t_plugin,object TYPE ko100-object,text   TYPE ko100-text,END OF t_plugin.TYPES: BEGIN OF t_objecttable,classname TYPE string,object    TYPE ko100-object,text      TYPE ko100-text,END OF t_objecttable.TYPES: BEGIN OF t_nuggetobject,objtype TYPE string,objname TYPE string,exists  TYPE flag,END OF t_nuggetobject.
*addition of package data
****   Read all objects of the package
TYPES: BEGIN OF t_objects_package,select     TYPE char1,object     TYPE tadir-object,object_txt TYPE string,obj_name   TYPE tadir-obj_name,srcsystem  TYPE tadir-srcsystem,down_flag  TYPE char1,status     TYPE char1,msg        TYPE string,END OF t_objects_package.TYPES: BEGIN OF t_requestobject,object   TYPE e071-object,obj_name TYPE e071-obj_name,END OF t_requestobject.TYPES: tt_requestobject TYPE TABLE OF t_requestobject.TYPES: BEGIN OF gts_versions_delta,classname    TYPE classname,version_ixml TYPE zsaplink=>gts_version_info,version_sap  TYPE zsaplink=>gts_version_info,END OF gts_versions_delta.DATA: objects_package     TYPE TABLE OF t_objects_package,packageline         TYPE t_objects_package,tabletypeline       TYPE ko105,tabletypesin        TYPE TABLE OF ko105,tabletypesout       TYPE tr_object_texts,tabletypeoutline    TYPE ko100,lt_fieldcat         TYPE slis_t_fieldcat_alv,ls_fieldcat         LIKE LINE OF lt_fieldcat,ls_layout           TYPE slis_layout_alv,lv_count            TYPE i,lv_pers             TYPE i,
*end of  addition for packages
*addition of Transportit_requestobject    TYPE TABLE OF t_requestobject,wa_requestobject    TYPE t_requestobject,
*end of  addition for transportpluginline          TYPE t_plugin,pluginlist          TYPE TABLE OF t_plugin,hidid(3)            TYPE c,currenttab          TYPE string,isslinkee(1)        TYPE c VALUE ' ',objecttable         TYPE TABLE OF t_objecttable,objectline          TYPE t_objecttable,_objname            TYPE string,_objtype            TYPE string,nuggetname          TYPE string,targetobject        TYPE REF TO zsaplink,xml                 TYPE string,excclass            TYPE REF TO zcx_saplink,errormsg            TYPE string,statusmsg           TYPE string,_pluginexists       TYPE flag,_objectexists       TYPE flag,_flag               TYPE flag,errorflag           TYPE flag,it_nuggetobject     TYPE TABLE OF t_nuggetobject,wa_nuggetobject     TYPE t_nuggetobject,deffilename         TYPE string,retfilename         TYPE string,retpath             TYPE string,retfullpath         TYPE string,retuseract          TYPE i,retfiletable        TYPE filetable,retrc               TYPE sysubrc,retuseraction       TYPE i,nugg                TYPE REF TO zsaplink_nugget,stemp               TYPE string,anxmldoc            TYPE REF TO if_ixml_document,ixmldocument        TYPE REF TO if_ixml_document,foo                 TYPE REF TO data,len                 TYPE i,l_marker            TYPE i,l_offset            TYPE i,l_total_offset      TYPE i,es_selected_request TYPE trwbo_request_header,es_selected_task    TYPE trwbo_request_header,iv_organizer_type   TYPE trwbo_calling_organizer,is_selection        TYPE trwbo_selection,gt_versions_delta   TYPE STANDARD TABLE OF gts_versions_delta WITH NON-UNIQUE DEFAULT KEY,gv_version_line     TYPE sytabix.FIELD-SYMBOLS: <obj> LIKE LINE OF objects_package.*\--------------------------------------------------------------------/*/------------------------SELECTION SCREEN----------------------------\SELECTION-SCREEN BEGIN OF TABBED BLOCK tabb FOR 20 LINES.
SELECTION-SCREEN TAB (17) text-tb2 USER-COMMAND nuggDEFAULT SCREEN 120.
SELECTION-SCREEN TAB (17) text-tb1 USER-COMMAND objDEFAULT SCREEN 110.
SELECTION-SCREEN END OF BLOCK tabb.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT /1(60) cmt_ver MODIF ID ver.
SELECTION-SCREEN COMMENT /1(60) cmt_url MODIF ID ver.*Slinkee tab
SELECTION-SCREEN BEGIN OF SCREEN 110 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME.
SELECTION-SCREEN BEGIN OF BLOCK splk WITH FRAME TITLE text-slk.
PARAMETERS import TYPE c RADIOBUTTON GROUP 2 DEFAULT 'X'USER-COMMAND updown.
PARAMETERS export TYPE c RADIOBUTTON GROUP 2.
SELECTION-SCREEN END OF BLOCK splk.SELECTION-SCREEN BEGIN OF BLOCK opt WITH FRAME TITLE text-opt.
PARAMETERS filename(300) LOWER CASE TYPE c MODIF ID did.
PARAMETERS slpkg  TYPE tadir-devclass MODIF ID did.
PARAMETERS overwr TYPE c AS CHECKBOX MODIF ID did.
PARAMETERS plugin TYPE ko100-object MODIF ID uid.
PARAMETERS objname(40) TYPE c MODIF ID uid.
SELECTION-SCREEN END OF BLOCK opt.
SELECTION-SCREEN END OF BLOCK main.
SELECTION-SCREEN END OF SCREEN 110.*Nugget tab
SELECTION-SCREEN BEGIN OF SCREEN 120 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK main2 WITH FRAME.
SELECTION-SCREEN BEGIN OF BLOCK splk2 WITH FRAME TITLE text-slk.
PARAMETERS nugi TYPE c RADIOBUTTON GROUP 3 DEFAULT 'X'USER-COMMAND updown.
PARAMETERS nugd TYPE c RADIOBUTTON GROUP 3.
SELECTION-SCREEN ULINE.
PARAMETERS nugc TYPE c RADIOBUTTON GROUP 3.
PARAMETERS nuga TYPE c RADIOBUTTON GROUP 3.
PARAMETERS nugp TYPE c RADIOBUTTON GROUP 3.
PARAMETERS nugr TYPE c RADIOBUTTON GROUP 3.
SELECTION-SCREEN END OF BLOCK splk2.SELECTION-SCREEN BEGIN OF BLOCK opt2 WITH FRAME TITLE text-opt.
PARAMETERS nuggnam(300) TYPE c MODIF ID nnm.
PARAMETERS nplugin TYPE  ko100-object MODIF ID npg.
PARAMETERS nobjnam(40) TYPE c MODIF ID npg.
*      parameters nPlugIn type  KO100-object modif id npg.
PARAMETER package      TYPE tadir-devclass MODIF ID npc.
SELECT-OPTIONS  reqnugg FOR e071-trkorr NO INTERVALSNO-EXTENSION MODIF ID rnm.
PARAMETER nugfile(300) LOWER CASE TYPE c MODIF ID nfl.
PARAMETERS novrwr TYPE c AS CHECKBOX MODIF ID now.
SELECTION-SCREEN END OF BLOCK opt2.
SELECTION-SCREEN END OF BLOCK main2.
SELECTION-SCREEN END OF SCREEN 120.
*\--------------------------------------------------------------------/*/----------------------selection screen events-----------------------\
INITIALIZATION.CALL METHOD zsaplink=>getplugins(CHANGINGobjecttable = objecttable ).IMPORT isslinkee FROM MEMORY ID 'ISSLNK'.IF isslinkee = 'X'.tabb-dynnr = 110.tabb-activetab = 'OBJ'.ELSE.tabb-dynnr   = 120.tabb-activetab = 'NUGG'.ENDIF.AT SELECTION-SCREEN.CASE sscrfields-ucomm.WHEN 'OBJ'.isslinkee = 'X'.WHEN 'NUGG'.isslinkee = ' '.ENDCASE.EXPORT isslinkee TO MEMORY ID 'ISSLNK'.AT SELECTION-SCREEN OUTPUT.
*** hide/show fields according to current selectionIF import = 'X'.hidid = 'UID'.IF slpkg IS INITIAL.slpkg = '$TMP'.ENDIF.ELSEIF export = 'X'.hidid = 'DID'.ENDIF." Set default devclass for importIF nugi = 'X' AND package IS INITIAL.
*    package = '$TMP'.package = 'Z001'.ENDIF.LOOP AT SCREEN.IF screen-group1 = hidid.screen-active    = '0'.screen-invisible = '1'.ENDIF.MODIFY SCREEN.ENDLOOP.LOOP AT SCREEN.IF nugc = 'X'.IF screen-group1 = 'NNM'.screen-active    = '1'.screen-invisible = '0'.MODIFY SCREEN.ELSEIF screen-group1 = 'NPG'OR screen-group1 = 'NFL'OR screen-group1 = 'NOW'OR screen-group1 = 'NPC'OR screen-group1 = 'RNM'.screen-active    = '0'.screen-invisible = '1'.MODIFY SCREEN.ENDIF.ELSEIF nugi = 'X'.IF   screen-group1 = 'NFL'OR screen-group1 = 'NOW'.screen-active    = '1'.screen-invisible = '0'.MODIFY SCREEN.ELSEIF screen-group1 = 'NNM'OR screen-group1 ='NPG'OR screen-group1 = 'RNM'.screen-active    = '0'.screen-invisible = '1'.MODIFY SCREEN.ENDIF.ELSEIF nuga = 'X'.IF   screen-group1 = 'NFL'OR screen-group1 = 'NPG'.screen-active    = '1'.screen-invisible = '0'.MODIFY SCREEN.ELSEIF screen-group1 = 'NNM'OR screen-group1 = 'NOW'OR screen-group1 = 'NPC'OR screen-group1 = 'RNM'.screen-active    = '0'.screen-invisible = '1'.MODIFY SCREEN.ENDIF.ELSEIF nugp = 'X'.IF   screen-group1 = 'NFL'OR screen-group1 = 'NPC'.screen-active    = '1'.screen-invisible = '0'.MODIFY SCREEN.ELSEIF screen-group1 = 'NNM'OR screen-group1 = 'NOW'OR screen-group1 = 'NPG'OR screen-group1 = 'RNM'.screen-active    = '0'.screen-invisible = '1'.MODIFY SCREEN.ENDIF.ELSEIF nugd = 'X'.IF screen-group1 = 'NFL'.screen-active = '1'.screen-invisible = '0'.MODIFY SCREEN.ELSEIF screen-group1 = 'NNM'OR screen-group1 = 'NPG'OR screen-group1 = 'NOW'OR screen-group1 = 'NPC'OR screen-group1 = 'RNM'.screen-active    = '0'.screen-invisible = '1'.MODIFY SCREEN.ENDIF.ELSEIF nugr = 'X'.IF   screen-group1 = 'NFL'OR screen-group1 = 'RNM'.screen-active    = '1'.screen-invisible = '0'.MODIFY SCREEN.ELSEIF screen-group1 = 'NNM'OR screen-group1 = 'NOW'OR screen-group1 = 'NPG'OR screen-group1 = 'NPC'.screen-active    = '0'.screen-invisible = '1'.MODIFY SCREEN.ENDIF.ENDIF.ENDLOOP.*** value request for input fields
AT SELECTION-SCREEN ON VALUE-REQUEST FOR plugin.REFRESH pluginlist.LOOP AT objecttable INTO objectline.MOVE-CORRESPONDING objectline TO pluginline.APPEND pluginline TO pluginlist.ENDLOOP.CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'EXPORTINGretfield        = 'OBJECT'window_title    = 'Installed Plugins'(inp)dynpprog        = sy-repiddynpnr          = '1000'dynprofield     = 'PLUGIN'value_org       = 'S'TABLESvalue_tab       = pluginlistEXCEPTIONSparameter_error = 1no_values_found = 2OTHERS          = 3.AT SELECTION-SCREEN ON VALUE-REQUEST FOR nplugin.REFRESH pluginlist.LOOP AT objecttable INTO objectline.MOVE-CORRESPONDING objectline TO pluginline.APPEND pluginline TO pluginlist.ENDLOOP.CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'EXPORTINGretfield        = 'OBJECT'window_title    = 'Installed Plugins'(inp)dynpprog        = sy-repiddynpnr          = '1000'dynprofield     = 'NPLUGIN'value_org       = 'S'TABLESvalue_tab       = pluginlistEXCEPTIONSparameter_error = 1no_values_found = 2OTHERS          = 3.AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.CALL METHOD cl_gui_frontend_services=>file_open_dialogEXPORTINGmultiselection    = abap_falsefile_filter       = '*.slnk'default_extension = 'slnk'CHANGINGfile_table        = retfiletablerc                = retrcuser_action       = retuseraction.READ TABLE retfiletable INTO filename INDEX 1.AT SELECTION-SCREEN ON VALUE-REQUEST FOR nugfile.CALL METHOD cl_gui_frontend_services=>file_open_dialogEXPORTINGmultiselection    = abap_falsefile_filter       = 'Nugget files (*.nugg)|*.nugg|'default_extension = 'nugg'CHANGINGfile_table        = retfiletablerc                = retrcuser_action       = retuseraction.READ TABLE retfiletable INTO nugfile INDEX 1.* begin-->search help on objname according to selected plugin
* provided by Michael Diehl
AT SELECTION-SCREEN ON VALUE-REQUEST FOR objname.DATA l_object_type LIKE  euobj-id.
* l_object_type = plugin.  "commented ewH*ewH-->get most current value of plugin paramPERFORM get_current_screen_value USING 'PLUGIN' '0110'CHANGING l_object_type.IF  l_object_type IS NOT INITIAL.
*  rrq --> START of implementation for object specific value helpDATA: temp_object TYPE ko100-object.
*   move the object type to a field like the ObjectTable expectstemp_object = l_object_type.READ TABLE objecttable INTO objectline WITH KEY object = temp_object.IF sy-subrc = 0.
*    if it is found...intanciate it so you can call the right value helpCREATE OBJECT targetobjectTYPE(objectline-classname)EXPORTINGname                   = _objname._objtype = l_object_type.CALL METHOD targetobject->valuehelpEXPORTINGi_objtype = _objtypeRECEIVINGe_objname = _objname.objname = _objname.ENDIF.*commented out...moved logic to instance method of ZSAPLINK.  to be overwritten by
*objects that don't use the repository Info_system f4 Function
*   CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4'
*     EXPORTING
*       object_type           = l_object_type
*       object_name           = objname
*       suppress_selection    = 'X'
*       use_alv_grid          = ''
*       without_personal_list = ''
*     IMPORTING
*       object_name_selected  = objname
*     EXCEPTIONS
*       cancel                = 1.
*<-- rrq end of implentation for object specific value helpENDIF.AT SELECTION-SCREEN ON VALUE-REQUEST FOR nobjnam.DATA l_object_type LIKE  euobj-id.
* l_object_type = nplugin. "commented ewH*ewH-->get most current value of plugin paramPERFORM get_current_screen_value USING 'NPLUGIN' '0120'CHANGING l_object_type.IF  l_object_type IS NOT INITIAL.
*  rrq --> START of implementation for object specific value helpDATA: temp_object TYPE ko100-object.
*   move the object type to a field like the ObjectTable expectstemp_object = l_object_type.READ TABLE objecttable INTO objectline WITH KEY object = temp_object.IF sy-subrc = 0.
*    if it is found...intanciate it so you can call the right value helpCREATE OBJECT targetobjectTYPE(objectline-classname)EXPORTINGname                   = _objname._objtype = l_object_type.CALL METHOD targetobject->valuehelpEXPORTINGi_objtype = _objtypeRECEIVINGe_objname = _objname.nobjnam = _objname.ENDIF.
*commented out...moved logic to instance method of ZSAPLINK.  to be overwritten by
*objects that don't use the repository Info_system f4 Function
*   CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4'
*     EXPORTING
*       object_type           = l_object_type
*       object_name           = objname
*       suppress_selection    = 'X'
*       use_alv_grid          = ''
*       without_personal_list = ''
*     IMPORTING
*       object_name_selected  = objname
*     EXCEPTIONS
*       cancel                = 1.
*<-- rrq end of implentation for object specific value helpENDIF.
* <--end of search help on objname according to selected plugin
* provided by Michael DiehlAT SELECTION-SCREEN ON VALUE-REQUEST FOR reqnugg-low.iv_organizer_type = 'W'.
*  is_selection-reqstatus = 'R'.CALL FUNCTION 'TR_PRESENT_REQUESTS_SEL_POPUP'EXPORTINGiv_organizer_type   = iv_organizer_typeis_selection        = is_selectionIMPORTINGes_selected_request = es_selected_requestes_selected_task    = es_selected_task.reqnugg-low = es_selected_request-trkorr.AT LINE-SELECTION.IF gv_version_line IS NOT INITIAL.PERFORM show_version_info.CLEAR gv_version_line.ENDIF.*\--------------------------------------------------------------------/*/----------------------main------------------------------------------\
START-OF-SELECTION.CLEAR: errormsg, statusmsg.
************* S L I N K E E *************IF isslinkee IS NOT INITIAL._objname = objname.IF export = 'X'.
*   Export slinkeePERFORM slinkee_export.ELSEIF import = 'X'.
*   Import slinkeePERFORM slinkee_import.ENDIF.ELSE.
************* N U G G E T *************IF nugc = 'X'.
*   create empty nuggetPERFORM nugget_create.ELSEIF nuga = 'X'.
*   add object to nuggetPERFORM nugget_add_object.ELSEIF nugi = 'X'.
*   import nuggetPERFORM nugget_import.ELSEIF nugd = 'X'.
*   display objects in a nuggetPERFORM nugget_display.ELSEIF nugp = 'X'.
*   add package to nuggetPERFORM nugget_add_package.
*   rrq: enhancement 42-->ELSEIF nugr = 'X'.
*   add objects from a transport to a nuggetPERFORM nugget_add_from_transport.ENDIF.ENDIF.*\--------------------------------------------------------------------/*/----------------------displayXMLOnScreen----------------------------\
FORM displayxmlonscreen USING xmlstring TYPE string.DATA printxmldoc TYPE REF TO cl_xml_document.DATA rc TYPE sysubrc.CREATE OBJECT printxmldoc.rc = printxmldoc->parse_string( xmlstring ).CALL METHOD printxmldoc->display( ).ENDFORM.                    "displayXMLOnScreen
*\--------------------------------------------------------------------/*/----------------------downloadXMLToLM-------------------------------\
FORM downloadxmltolm USING   deffilename TYPE stringxmlstring TYPE stringCHANGING _errorflag TYPE flag.DATA retfilename TYPE string.DATA retpath TYPE string.DATA retfullpath TYPE string.DATA retuseract TYPE i.DATA deffilename_cleaned TYPE string.CLEAR _errorflag."*--- get rid of namespace slashes ---*deffilename_cleaned = deffilename.REPLACE ALL OCCURRENCES OF '/' IN deffilename_cleaned WITH '.'.CALL METHOD cl_gui_frontend_services=>file_save_dialogEXPORTINGdefault_file_name = deffilename_cleanedCHANGINGfilename          = retfilenamepath              = retpathfullpath          = retfullpathuser_action       = retuseract.IF retuseract <> 0._errorflag = 'X'.ELSE.PERFORM putonmachine USING retfullpath xmlstring.ENDIF.ENDFORM.                    "downloadXMLToLM
*\--------------------------------------------------------------------/*/------------------------putOnMachine--------------------------------\
FORM putonmachine USING fullpath TYPE string xmlstring TYPE string.*rrq: issue 43--> replace binary with char table
*old code removed, use subversion for recovery
*types: begin of t_char,
*        maxChar(65535) type C,
*       end of t_char.*data: tempTable_char type table of t_char,
*  DATA: temptable_char TYPE table_of_strings,
*        tempstring TYPE string." Gregor Wolf, 2012-02-19: Switch to binary download as it's done in ZAKEDATA xlm_xstring  TYPE xstring.DATA temptable    TYPE w3mimetabtype.DATA bin_filesize TYPE i.IF retuseract = 0." Gregor Wolf, 2012-02-19:" Independent of Server OS the download should always use Windows LinebreaksREPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lfIN xmlstring WITH cl_abap_char_utilities=>newline.REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newlineIN xmlstring WITH cl_abap_char_utilities=>cr_lf.CALL FUNCTION 'SCMS_STRING_TO_XSTRING'EXPORTINGtext   = xmlstringIMPORTINGbuffer = xlm_xstring.CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'EXPORTINGbuffer        = xlm_xstringIMPORTINGoutput_length = bin_filesizeTABLESbinary_tab    = temptable.cl_gui_frontend_services=>gui_download(EXPORTINGbin_filesize = bin_filesizefilename     = fullpathfiletype     = 'BIN'CHANGINGdata_tab     = temptableEXCEPTIONSfile_write_error          = 1no_batch                  = 2gui_refuse_filetransfer   = 3invalid_type              = 4no_authority              = 5unknown_error             = 6header_not_allowed        = 7separator_not_allowed     = 8filesize_not_allowed      = 9header_too_long           = 10dp_error_create           = 11dp_error_send             = 12dp_error_write            = 13unknown_dp_error          = 14access_denied             = 15dp_out_of_memory          = 16disk_full                 = 17dp_timeout                = 18file_not_found            = 19dataprovider_exception    = 20control_flush_error       = 21not_supported_by_gui      = 22error_no_gui              = 23OTHERS                    = 24).IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.
*    SPLIT xmlstring AT cl_abap_char_utilities=>cr_lf
*    INTO TABLE temptable_char.*    CALL METHOD cl_gui_frontend_services=>gui_download
*      EXPORTING
*        filename = fullpath
*        filetype = 'DAT'
*      CHANGING
*        data_tab = temptable_char.ENDIF.
*<--rrq: issue 43
ENDFORM.                    "putOnMachine
*\--------------------------------------------------------------------/*/----------------------uploadXMLFromLM-------------------------------\
FORM uploadxmlfromlm USING p_filename xmlstring TYPE string .DATA retfiletable TYPE filetable.DATA retrc TYPE sysubrc.DATA retuseraction TYPE i.DATA temptable TYPE table_of_strings.DATA temptable_bin TYPE TABLE OF x255.DATA filelength TYPE i.DATA l_filename TYPE string.l_filename = p_filename.CALL METHOD cl_gui_frontend_services=>gui_uploadEXPORTINGfilename                = l_filenamefiletype                = 'BIN'       " File Type BinaryIMPORTINGfilelength              = filelengthCHANGINGdata_tab                = temptable_binEXCEPTIONSfile_open_error         = 1file_read_error         = 2no_batch                = 3gui_refuse_filetransfer = 4invalid_type            = 5no_authority            = 6unknown_error           = 7bad_data_format         = 8header_not_allowed      = 9separator_not_allowed   = 10header_too_long         = 11unknown_dp_error        = 12access_denied           = 13dp_out_of_memory        = 14disk_full               = 15dp_timeout              = 16not_supported_by_gui    = 17error_no_gui            = 18OTHERS                  = 19.IF sy-subrc <> 0.CASE sy-subrc.WHEN '1'.PERFORM writemessage USING 'E' 'File Open Error'.sy-subrc = 4.EXIT.WHEN OTHERS.PERFORM writemessage USING 'E' 'Unknown Error occured'.sy-subrc = 4.EXIT.ENDCASE.ENDIF.CALL FUNCTION 'SCMS_BINARY_TO_STRING'EXPORTINGinput_length = filelengthIMPORTINGtext_buffer  = xmlstringTABLESbinary_tab   = temptable_binEXCEPTIONSOTHERS       = 1.IF sy-subrc <> 0." Just catch the sy-subrc when there was nothing replacedsy-subrc = 0.ENDIF.
*  call method CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
*        exporting
*          FILENAME = l_fileName
*        changing
*          data_tab = tempTable.
*  PERFORM createstring USING temptable CHANGING xmlstring.ENDFORM.                    "uploadXMLFromLM
*\--------------------------------------------------------------------/**/----------------------createString----------------------------------\
*FORM createstring
*      USING
*        temptable TYPE table_of_strings
*      CHANGING
*        bigstring TYPE string.
*  DATA stemp TYPE string.
*  LOOP AT temptable INTO stemp.
*    CONCATENATE bigstring stemp cl_abap_char_utilities=>cr_lf
*      INTO bigstring.
*  ENDLOOP.
*
*ENDFORM.                    "createString
**\--------------------------------------------------------------------/*/----------------------installObject---------------------------------\
FORM installobject USING l_ixmldocument TYPE REF TO if_ixml_documentl_overwriteflag TYPE flagVALUE(l_package) TYPE tadir-devclassCHANGING l_errorflag TYPE flagl_message TYPE string.DATA l_objname TYPE string.DATA l_objtype TYPE string.
*  DATA l_objtable TYPE TABLE OF t_objecttable.                             " del StefanSTATICS l_objtable TYPE TABLE OF t_objecttable.                           " ins StefanDATA l_objline TYPE t_objecttable.DATA l_targetobject TYPE REF TO zsaplink.DATA l_installobject TYPE string.DATA l_excclass TYPE REF TO zcx_saplink.CLEAR l_errorflag.TRY.CALL METHOD zsaplink=>getobjectinfofromixmldocEXPORTINGixmldocument = l_ixmldocumentIMPORTINGobjtypename  = l_objtypeobjname      = l_objname.CATCH zcx_saplink.l_errorflag = 'X'.l_message = 'Error retrieving object information ixml document'.ENDTRY.IF l_objtable IS INITIAL.                                                 " ins StefanCALL METHOD zsaplink=>getplugins( CHANGING objecttable = l_objtable ).ENDIF.                                                                    " ins StefanREAD TABLE l_objtable INTO l_objline WITH KEY object = l_objtype.IF sy-subrc <> 0.CONCATENATE 'There is no installed SAPlink plugin for object type'l_objtype l_objline-text INTO l_message SEPARATED BY space.l_errorflag = 'X'.ELSE.CREATE OBJECT l_targetobjectTYPE(l_objline-classname)EXPORTINGname                  = l_objname.IF l_package IS INITIAL.l_package = '$TMP'.ENDIF.TRY.l_installobject = l_targetobject->createobjectfromixmldoc(ixmldocument = l_ixmldocumentdevclass     = l_package  "Allow overwrite of default devclass.overwrite    = l_overwriteflag ).
*    bad timesCATCH zcx_saplink INTO l_excclass.l_message = l_excclass->get_text( ).l_errorflag = 'X'.ENDTRY.
*   good timesIF l_installobject IS NOT INITIAL.CONCATENATE 'Installed: ' l_objtype '-' l_installobjectINTO l_message SEPARATED BY space.ENDIF.ENDIF.ENDFORM.                    "installObject
*\--------------------------------------------------------------------/*/----------------------confirmOverwrite------------------------------\
FORM confirmoverwrite USING l_objinfo TYPE stringCHANGING l_answer TYPE flag.DATA l_message TYPE string.DATA l_title TYPE string.CLEAR l_answer.l_title = 'Overwrite confirm. Proceed with CAUTION!'.CONCATENATE 'You have selected to overwrite originals.'l_objinfo 'will be overwritten. Are you sure?'INTO l_message SEPARATED BY space.CALL FUNCTION 'POPUP_TO_CONFIRM'EXPORTINGtitlebar              = l_titletext_question         = l_messagetext_button_1         = 'Yes'text_button_2         = 'Yes to all'default_button        = '1'display_cancel_button = 'X'IMPORTINGanswer                = l_answer.
ENDFORM.                    "confirmOverwrite
*\--------------------------------------------------------------------/*/----------------------checkObject-----------------------------------\
FORM checkobject USING l_ixmldocument TYPE REF TO if_ixml_documentCHANGING l_objtype      TYPE stringl_objname      TYPE stringl_pluginexists TYPE flagl_objectexists TYPE flag.zsaplink=>checkobject(EXPORTINGi_ixmldocument = l_ixmldocument    " IF_IXML_DOCUMENTIMPORTINGe_objtype      = l_objtypee_objname      = l_objnamee_pluginexists = l_pluginexists    " General Flage_objectexists = l_objectexists    " General Flag).ENDFORM.                    "checkObject
*\--------------------------------------------------------------------/*/---------------------get_current_screen_value-----------------------\
FORM get_current_screen_value  USING    l_screen_fieldl_screen_numberCHANGING l_screen_value.DATA it_dynpfields TYPE STANDARD TABLE OF dynpread.DATA wa_dynpfields TYPE dynpread.wa_dynpfields-fieldname = l_screen_field.APPEND wa_dynpfields TO it_dynpfields.CALL FUNCTION 'DYNP_VALUES_READ'EXPORTINGdyname               = sy-cprogdynumb               = l_screen_numbertranslate_to_upper   = 'X'
*     REQUEST              = ' '
*     PERFORM_CONVERSION_EXITS = ' '
*     PERFORM_INPUT_CONVERSION = ' '
*     DETERMINE_LOOP_INDEX = ' 'TABLESdynpfields           = it_dynpfieldsEXCEPTIONSinvalid_abapworkarea = 1invalid_dynprofield  = 2invalid_dynproname   = 3invalid_dynpronummer = 4invalid_request      = 5no_fielddescription  = 6invalid_parameter    = 7undefind_error       = 8double_conversion    = 9stepl_not_found      = 10OTHERS               = 11.IF sy-subrc <> 0.
*  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ELSE.READ TABLE it_dynpfields INTO wa_dynpfieldsWITH KEY fieldname = l_screen_field.IF sy-subrc = 0.l_screen_value = wa_dynpfields-fieldvalue.ENDIF.ENDIF.ENDFORM.                    " get_current_screen_value
*/---------------------writeMessage-----------------------\
FORM writemessage USING VALUE(p_type) TYPE sy-msgtyVALUE(p_msg).CASE p_type.WHEN 'E' OR 'A' OR 'X'.WRITE / icon_led_red AS ICON.WHEN 'W'.WRITE / icon_led_yellow AS ICON.WHEN OTHERS.WRITE / icon_led_green AS ICON.ENDCASE.WRITE p_msg.
ENDFORM.                    "WriteMessage*/-------------------------pf_status_set-------------------\
FORM pf_status_set USING rt_extab TYPE slis_t_extab.SET PF-STATUS 'SELOBJ' EXCLUDING rt_extab.ENDFORM.                    "pf_status_set
*/-------------------------user_command_user-------------------\
FORM user_command_user USING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.CASE r_ucomm.WHEN 'TAKE'.rs_selfield-exit = 'X'.ENDCASE.
ENDFORM.                    "user_command_user*---------------build_fieldCatalog---------------------------------*
FORM build_fieldcatalog .
*** Display list to select the objects for downloadingls_fieldcat-fieldname = 'OBJECT'.ls_fieldcat-seltext_l = 'Object/Plugin'.APPEND ls_fieldcat TO lt_fieldcat.ls_fieldcat-fieldname = 'OBJECT_TXT'.ls_fieldcat-seltext_l = 'Object/Plugin'.APPEND ls_fieldcat TO lt_fieldcat.ls_fieldcat-fieldname = 'OBJ_NAME'.ls_fieldcat-seltext_l = 'Object name'.APPEND ls_fieldcat TO lt_fieldcat.ls_fieldcat-fieldname = 'DOWN_FLAG'.ls_fieldcat-seltext_s = 'Plugin'.ls_fieldcat-seltext_l ='Plugin available'.APPEND ls_fieldcat TO lt_fieldcat.ls_fieldcat-fieldname = 'MSG'.ls_fieldcat-seltext_s = 'Message'.ls_fieldcat-seltext_l ='Status Message'.APPEND ls_fieldcat TO lt_fieldcat.ls_layout-box_fieldname     = 'SELECT'.ls_layout-f2code            = 'MYPICK' .ls_layout-colwidth_optimize = 'X'.ls_layout-lights_fieldname  = 'STATUS'.
ENDFORM.                    " build_fieldCatalog
*&--------------------------------------------------------------------*
*&      Form  ShowInitialGrid
FORM showinitialgrid  TABLES   p_objects.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program       = 'ZSAPLINK'i_callback_pf_status_set = 'PF_STATUS_SET'i_callback_user_command  = 'USER_COMMAND_USER'i_grid_title             = 'Select objects'it_fieldcat              = lt_fieldcatis_layout                = ls_layoutTABLESt_outtab                 = p_objectsEXCEPTIONSOTHERS                   = 0.ENDFORM.                    " ShowInitialGrid
*&---------------------------------------------------------------------*
*&      Form  showResultsGrid
FORM showresultsgrid  TABLES   p_objects.
*    ** Display resultsCALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_callback_program      = 'ZSAPLINK'i_callback_user_command = 'USER_COMMAND_USER'it_fieldcat             = lt_fieldcati_grid_title            = 'Download results'is_layout               = ls_layoutTABLESt_outtab                = p_objectsEXCEPTIONSOTHERS                  = 0.ENDFORM.                    " showResultsGrid
*&---------------------------------------------------------------------*
*&      Form  check_objects
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_objects .DATA: lo_object  TYPE REF TO object,lo_saplink TYPE REF TO zsaplink,l_flag     TYPE flag,l_name     TYPE string.DATA: ptab      TYPE abap_parmbind_tab,ptab_line TYPE abap_parmbind.LOOP AT objects_package ASSIGNING <obj>.
*     Check what can be downloaded and what can not.READ TABLE objecttable INTO objectlineWITH KEY object = <obj>-object.IF sy-subrc = 0.
* Validate if object is fully implemented and can be accessedREFRESH ptab.ptab_line-name = 'NAME'.ptab_line-kind = cl_abap_objectdescr=>exporting.l_name = <obj>-obj_name.GET REFERENCE OF l_nameINTO ptab_line-value.INSERT ptab_line INTO TABLE ptab.CREATE OBJECT lo_objectTYPE(objectline-classname)PARAMETER-TABLEptab.lo_saplink ?= lo_object.l_flag = lo_saplink->checkexists( ).
*        Plug-in exists... set flag and make selected by defaultIF l_flag IS NOT INITIAL.<obj>-down_flag = 'X'.<obj>-select = 'X'.ELSE.DELETE TABLE objects_package FROM <obj>.CONTINUE.ENDIF.ELSE.<obj>-msg = 'No Plugin Available'.<obj>-down_flag = ' '.ENDIF.
*     get textsREFRESH tabletypesin.tabletypeline-object = <obj>-object.APPEND tabletypeline TO tabletypesin.CALL FUNCTION 'TRINT_OBJECT_TABLE'TABLEStt_types_in  = tabletypesintt_types_out = tabletypesout.LOOP AT tabletypesout INTO tabletypeoutline.<obj>-object      = tabletypeoutline-object.<obj>-object_txt = tabletypeoutline-text.ENDLOOP.ENDLOOP.SORT objects_package BY down_flag DESCENDING object ASCENDING.ENDFORM.                    " check_objects
*&---------------------------------------------------------------------*
*&      Form  CreateEmptyNugget
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM createemptynugget USING p_nuggname.ixmldocument = zsaplink_nugget=>createemptyxml(nuggetname = p_nuggname ).xml = zsaplink=>convertixmldoctostring( ixmldocument ).CONCATENATE 'NUGG_' p_nuggname '.nugg' INTO stemp.CLEAR errorflag.PERFORM downloadxmltolm USING stemp xmlCHANGING errorflag.IF errorflag IS NOT INITIAL.EXIT.ENDIF.ENDFORM.                    " CreateEmptyNugget*rrq: enhancement 3 & 42-->
*&---------------------------------------------------------------------*
*&      Form  addObjectstoNugget
*&---------------------------------------------------------------------*
FORM addobjectstonugget .PERFORM check_objects.PERFORM build_fieldcatalog.PERFORM showinitialgrid TABLES objects_package.IF sy-ucomm <> 'TAKE'.RETURN.ENDIF .*  DownloadingCALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTINGpercentage = 1text       = 'Upload file'.PERFORM uploadxmlfromlm USING nugfile xml.ixmldocument = zsaplink=>convertstringtoixmldoc( xml ).TRY.CREATE OBJECT nuggEXPORTINGixmldocument = ixmldocument.CATCH zcx_saplink.MESSAGE 'Internal error createing nugget ' TYPE 'I'.RETURN.ENDTRY.DESCRIBE TABLE objects_package LINES lv_count.LOOP AT objects_package ASSIGNING <obj>WHERE down_flag = 'X' AND select = 'X'.lv_pers = sy-tabix * 100 / lv_count .CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'EXPORTINGpercentage = lv_perstext       = <obj>-obj_name._objname = <obj>-obj_name. "nobjNam.stemp = <obj>-object.      "nplugin.TRY.nugg->addobjecttonugget(objname = _objname objtype = stemp ).CATCH zcx_saplink INTO excclass.errormsg = excclass->get_text( ).
*        perform writeMessage using 'E' errorMsg.<obj>-msg = errormsg.<obj>-status = 1.CONTINUE.ENDTRY.<obj>-msg = 'Added to nugget'.<obj>-status = 3.ENDLOOP.READ TABLE objects_package INTO packagelineWITH KEY status = 3. "ewH:do not download if none addedIF sy-subrc = 0.ixmldocument = nugg->createixmldocfromnugget( ).xml = zsaplink=>convertixmldoctostring( ixmldocument ).stemp = nugfile.PERFORM putonmachine USING stemp xml.ENDIF.PERFORM showresultsgrid TABLES objects_package.ENDFORM.                    " addObjectstoNugget
*  <--rrq: enhancement 3 & 42*&---------------------------------------------------------------------*
*&      Form  WRITE_PLUGIN_VERSION_INFO
*&---------------------------------------------------------------------*
*  Inform of updated versions of plugins if information found in file
*----------------------------------------------------------------------*
FORM write_plugin_version_info USING io_ixml_document TYPE REF TO if_ixml_documentiv_object_type   TYPE clike.DATA: rootnode         TYPE REF TO if_ixml_node,rootattr         TYPE REF TO if_ixml_named_node_map,attrnode         TYPE REF TO if_ixml_node,nodename         TYPE string,attributelist    TYPE REF TO if_ixml_named_node_map,nodeiterator     TYPE REF TO if_ixml_node_iterator,attributenode    TYPE REF TO if_ixml_node,value            TYPE string,name             TYPE string,ls_version_delta LIKE LINE OF gt_versions_delta.FIELD-SYMBOLS:<value>          TYPE any,<ls_objecttable> LIKE LINE OF objecttable.
*--------------------------------------------------------------------*
* Get Version information from class
*--------------------------------------------------------------------*READ TABLE objecttable ASSIGNING <ls_objecttable> WITH KEY object = iv_object_type.CHECK sy-subrc = 0. " No corresponding plugin --> we already display a message "missing plugin"ls_version_delta-version_sap = zsaplink=>get_version_info_static( <ls_objecttable>-classname ).*--------------------------------------------------------------------*
* Get Version information from ixml
*--------------------------------------------------------------------*CHECK io_ixml_document IS BOUND.  " no need to continue if this is no valid ixml documentrootnode ?= io_ixml_document->get_root_element( ).attributelist = rootnode->get_attributes( ).CHECK attributelist IS BOUND.nodeiterator = attributelist->create_iterator( ).CHECK nodeiterator IS BOUND.attributenode = nodeiterator->get_next( ).WHILE attributenode IS NOT INITIAL.name = attributenode->get_name( ).ASSIGN COMPONENT name OF STRUCTURE ls_version_delta-version_ixml TO <value>.IF sy-subrc = 0.<value> = attributenode->get_value( ).ENDIF.attributenode = nodeiterator->get_next( ).ENDWHILE.*--------------------------------------------------------------------*
* Compare versions
*--------------------------------------------------------------------*ls_version_delta-classname =  <ls_objecttable>-classname.
* Major versionIF ls_version_delta-version_ixml-zsaplink_plugin_major_version < ls_version_delta-version_sap-zsaplink_plugin_major_version.RETURN.  " we have a newer version --> goodELSEIF ls_version_delta-version_ixml-zsaplink_plugin_major_version > ls_version_delta-version_sap-zsaplink_plugin_major_version.WRITE: 'Major update in plugin' COLOR 6,<ls_objecttable>-classname COLOR 3,'. Update of plugin necessary --> see information' COLOR 6, icon_information AS ICON HOTSPOT ON.APPEND ls_version_delta  TO gt_versions_delta.gv_version_line = sy-tabix.HIDE  gv_version_line.CLEAR gv_version_line.RETURN.ENDIF.
* Major version equal - now check minor versionIF ls_version_delta-version_ixml-zsaplink_plugin_minor_version < ls_version_delta-version_sap-zsaplink_plugin_minor_version.RETURN.  " we have a newer version --> goodELSEIF ls_version_delta-version_ixml-zsaplink_plugin_minor_version > ls_version_delta-version_sap-zsaplink_plugin_minor_version.WRITE: 'Minor update in plugin' COLOR 7,<ls_objecttable>-classname COLOR 3,'. Update of plugin recommended --> see information' COLOR 7, icon_information AS ICON HOTSPOT ON.APPEND ls_version_delta  TO gt_versions_delta.gv_version_line = sy-tabix.HIDE  gv_version_line.CLEAR gv_version_line.RETURN.ENDIF.
* Major and minor version equal - build-numer doesn't matter hereENDFORM.                    " WRITE_PLUGIN_VERSION_INFO*&---------------------------------------------------------------------*
*&      Form  SHOW_VERSION_INFO
*&---------------------------------------------------------------------*
FORM show_version_info.FIELD-SYMBOLS: <ls_version_delta> LIKE LINE OF gt_versions_delta.READ TABLE gt_versions_delta ASSIGNING <ls_version_delta> INDEX gv_version_line.CHECK sy-subrc = 0.WRITE:/ 'New version of class', <ls_version_delta>-classname COLOR 6,'found'.SKIP 2.IF <ls_version_delta>-version_ixml-zsaplink_plugin_major_version > <ls_version_delta>-version_sap-zsaplink_plugin_major_version.WRITE:/ 'Major version - Installed in SAP:'  COLOR 7,                 <ls_version_delta>-version_sap-zsaplink_plugin_major_version COLOR 7,/ 'Major version - Found  in   file:'  COLOR 7 INTENSIFIED OFF, <ls_version_delta>-version_ixml-zsaplink_plugin_major_version COLOR 7.ELSEIF <ls_version_delta>-version_ixml-zsaplink_plugin_minor_version > <ls_version_delta>-version_sap-zsaplink_plugin_minor_version.WRITE:/ 'Minor version - Installed in SAP:'  COLOR 7,                 <ls_version_delta>-version_sap-zsaplink_plugin_minor_version COLOR 7,/ 'Minor version - Found  in   file:'  COLOR 7 INTENSIFIED OFF, <ls_version_delta>-version_ixml-zsaplink_plugin_minor_version COLOR 7.ENDIF.WRITE:/   'Build         - Installed in SAP:'  COLOR 5 INTENSIFIED OFF, <ls_version_delta>-version_sap-zsaplink_plugin_build_version,/   'Build         - Found   in  file:'  COLOR 5 INTENSIFIED OFF, <ls_version_delta>-version_ixml-zsaplink_plugin_build_version.SKIP.WRITE:/   'Info - Part1  - Found   in  file:'  COLOR 5 INTENSIFIED OFF, <ls_version_delta>-version_ixml-zsaplink_plugin_info1,/   'Info - Part2  - Found   in  file:'  COLOR 5 INTENSIFIED OFF, <ls_version_delta>-version_ixml-zsaplink_plugin_info2,/   'Info - Part3  - Found   in  file:'  COLOR 5 INTENSIFIED OFF, <ls_version_delta>-version_ixml-zsaplink_plugin_info3,/   'Info - Part4  - Found   in  file:'  COLOR 5 INTENSIFIED OFF, <ls_version_delta>-version_ixml-zsaplink_plugin_info4,/   'Info - Part5  - Found   in  file:'  COLOR 5 INTENSIFIED OFF, <ls_version_delta>-version_ixml-zsaplink_plugin_info5.ENDFORM.                    " SHOW_VERSION_INFO*&---------------------------------------------------------------------*
*&      Form  SLINKEE_EXPORT
*&---------------------------------------------------------------------*
FORM slinkee_export.IF plugin IS INITIAL.MESSAGE s208(00) WITH 'object type required'.EXIT.ELSEIF _objname IS INITIAL.MESSAGE s208(00) WITH 'object name required'.EXIT.ENDIF.READ TABLE objecttable INTO objectline WITH KEY object = plugin.IF sy-subrc <> 0.CONCATENATE 'Plugin for object type'(plo) plugin'is not installed on this system'(noi) INTO errormsgSEPARATED BY space.PERFORM writemessage USING 'E' errormsg.EXIT.ENDIF.CREATE OBJECT targetobjectTYPE(objectline-classname)EXPORTINGname                   = _objname.TRY.ixmldocument = targetobject->createixmldocfromobject( ).CATCH zcx_saplink INTO excclass.errormsg = excclass->get_text( ).PERFORM writemessage USING 'E' errormsg.ENDTRY.IF errormsg IS NOT INITIAL.EXIT.ENDIF.xml = zsaplink=>convertixmldoctostring( ixmldocument ).CONCATENATE plugin '_' _objname '.slnk' INTO deffilename.CLEAR errorflag.PERFORM downloadxmltolm USING deffilename xmlCHANGING errorflag.IF errorflag IS NOT INITIAL.MESSAGE s208(00) WITH 'Action cancelled'.EXIT.ENDIF.PERFORM displayxmlonscreen USING xml.
ENDFORM.                    " SLINKEE_EXPORT*&---------------------------------------------------------------------*
*&      Form  SLINKEE_IMPORT
*&---------------------------------------------------------------------*
FORM slinkee_import .IF filename IS INITIAL.MESSAGE s208(00) WITH 'slinkee filename required'.EXIT.ENDIF.PERFORM uploadxmlfromlm USING filename xml.IF sy-subrc <> 0.EXIT.ENDIF.ixmldocument = zsaplink=>convertstringtoixmldoc( xml ).
*     run some checks before installPERFORM checkobject USING ixmldocumentCHANGING _objtype_objname_pluginexists_objectexists.MOVE _objtype TO plugin.READ TABLE objecttable INTO objectline WITH KEY object = plugin.IF _objtype = 'NUGG'.MESSAGE s208(00) WITH 'use nugget tab for nugget import'.EXIT.ELSEIF _pluginexists IS INITIAL.CONCATENATE 'Plugin for object type'(plo) _objtype'is not installed on this system'(noi) INTO errormsgSEPARATED BY space.PERFORM writemessage USING 'E' errormsg.EXIT.ELSEIF _objectexists = 'X' AND overwr IS INITIAL.CONCATENATE _objtype objectline-text _objname'already exists. Use overwrite orginals option to replace'INTO errormsg SEPARATED BY space.PERFORM writemessage USING 'E' errormsg.EXIT.ELSEIF _objectexists = 'X' AND overwr = 'X'.CONCATENATE _objtype _objname INTO stemp SEPARATED BY space.PERFORM confirmoverwrite USING stempCHANGING _flag.IF _flag = 'A'. "cancelPERFORM writemessage USING 'W' 'Import cancelled by user'.EXIT.ENDIF.ENDIF.*     install objectPERFORM installobject USING ixmldocumentoverwrslpkgCHANGING errorflagstatusmsg.IF errorflag = 'X'.PERFORM writemessage USING 'E' statusmsg.EXIT.ELSE.PERFORM writemessage USING 'S' statusmsg.ENDIF.MESSAGE s208(00) WITH 'Import successful'.
ENDFORM.                    " SLINKEE_IMPORT*&---------------------------------------------------------------------*
*&      Form  NUGGET_CREATE
*&---------------------------------------------------------------------*
FORM nugget_create .IF nuggnam IS INITIAL.MESSAGE s208(00) WITH 'enter name of new nugget to be created'.EXIT.ENDIF.stemp = nuggnam.PERFORM createemptynugget USING stemp.
ENDFORM.                    " NUGGET_CREATE*&---------------------------------------------------------------------*
*&      Form  NUGGET_ADD_OBJECT
*&---------------------------------------------------------------------*
FORM nugget_add_object .IF nplugin IS INITIAL.MESSAGE s208(00) WITH 'object type required'.EXIT.ELSEIF nobjnam IS INITIAL.MESSAGE s208(00) WITH 'object name required'.EXIT.ELSEIF nugfile IS INITIAL.MESSAGE s208(00) WITH 'nugget filename required'.EXIT.ENDIF.READ TABLE objecttable INTO objectline WITH KEY object = nplugin.IF sy-subrc <> 0.CONCATENATE 'Plugin for object type'(plo) nplugin'is not installed on this system'(noi) INTO errormsgSEPARATED BY space.PERFORM writemessage USING 'E' errormsg.EXIT.ENDIF.stemp = nuggnam.PERFORM uploadxmlfromlm USING nugfile xml.IF sy-subrc <> 0.EXIT.ENDIF.ixmldocument = zsaplink=>convertstringtoixmldoc( xml ).CREATE OBJECT nuggEXPORTINGixmldocument = ixmldocument._objname = nobjnam.stemp = nplugin.TRY.nugg->addobjecttonugget( objname = _objname objtype = stemp ).CATCH zcx_saplink INTO excclass.errormsg = excclass->get_text( ).PERFORM writemessage USING 'E' errormsg.EXIT.ENDTRY.ixmldocument = nugg->createixmldocfromnugget( ).xml = zsaplink=>convertixmldoctostring( ixmldocument ).
*      concatenate  nuggNam '.nugg' into sTemp.stemp = nugfile.PERFORM putonmachine USING stemp xml.
ENDFORM.                    " NUGGET_ADD_OBJECT*&---------------------------------------------------------------------*
*&      Form  NUGGET_IMPORT
*&---------------------------------------------------------------------*
FORM nugget_import .IF nugfile IS INITIAL.MESSAGE s208(00) WITH 'nugget filename required'.EXIT.ENDIF.PERFORM uploadxmlfromlm USING nugfile xml.IF sy-subrc <> 0.EXIT.ENDIF.ixmldocument = zsaplink=>convertstringtoixmldoc( xml ).nuggetname = zsaplink_nugget=>getnuggetinfo( ixmldocument ).CONCATENATE 'Start import of nugget' nuggetname INTO statusmsgSEPARATED BY space.PERFORM writemessage USING 'S' statusmsg.SKIP.CREATE OBJECT nuggEXPORTINGixmldocument = ixmldocument.*     check for installed pluginsCLEAR errorflag.REFRESH it_nuggetobject.anxmldoc = nugg->getnextobject( ).WHILE anxmldoc IS NOT INITIAL.CLEAR: _objtype, _objname, _pluginexists, _objectexists,wa_nuggetobject.PERFORM checkobject USING anxmldocCHANGING _objtype_objname_pluginexists_objectexists.IF _pluginexists IS INITIAL.CONCATENATE 'Plugin for object type'(plo) _objtype'is not installed on this system'(noi) INTO errormsgSEPARATED BY space.PERFORM writemessage USING 'E' errormsg.errorflag = 'X'.ELSEIF _objectexists = 'X' AND novrwr IS INITIAL.CONCATENATE _objtype _objname 'already exists. Use overwrite''orginals option to replace'INTO errormsg SEPARATED BY space.PERFORM writemessage USING 'W' errormsg.PERFORM write_plugin_version_info USING anxmldoc_objtype.errorflag = 'X'.else.CONCATENATE _objtype _objnameINTO errormsg SEPARATED BY space.PERFORM writemessage USING 'S' errormsg.PERFORM write_plugin_version_info USING anxmldoc_objtype.ENDIF.wa_nuggetobject-objtype = _objtype.wa_nuggetobject-objname = _objname.wa_nuggetobject-exists = _objectexists.APPEND wa_nuggetobject TO it_nuggetobject.anxmldoc = nugg->getnextobject( ).ENDWHILE.IF errorflag = 'X'.EXIT.ENDIF.*     confirm overwriteLOOP AT it_nuggetobject INTO wa_nuggetobject WHERE exists = 'X'.CLEAR _flag.CONCATENATE wa_nuggetobject-objtype wa_nuggetobject-objnameINTO stemp SEPARATED BY space.PERFORM confirmoverwrite USING stempCHANGING _flag.IF _flag = '1'. "yesCONTINUE.ELSEIF _flag = '2'. "yes to allCLEAR errorflag.EXIT.ELSEIF _flag = 'A'. "cancelPERFORM writemessage USING 'W' 'Import cancelled by user'.errorflag = 'X'.EXIT.ENDIF.ENDLOOP.IF errorflag = 'X'.EXIT.ENDIF.*     installnugg->reset( ). "reset nugget iteratoranxmldoc = nugg->getnextobject( ).WHILE anxmldoc IS NOT INITIAL.CLEAR statusmsg.PERFORM installobject USING anxmldocnovrwrpackageCHANGING errorflagstatusmsg.IF errorflag = 'X'.PERFORM writemessage USING 'E' statusmsg.EXIT.ELSE.PERFORM writemessage USING 'S' statusmsg.anxmldoc = nugg->getnextobject( ).ENDIF.ENDWHILE.IF errorflag = 'X'.EXIT.ENDIF.
ENDFORM.                    " NUGGET_IMPORT*&---------------------------------------------------------------------*
*&      Form  NUGGET_DISPLAY
*&---------------------------------------------------------------------*
FORM nugget_display .IF nugfile IS INITIAL.MESSAGE s208(00) WITH 'nugget filename required'.EXIT.ENDIF.PERFORM uploadxmlfromlm USING nugfile xml.IF sy-subrc <> 0.EXIT.ENDIF.ixmldocument = zsaplink=>convertstringtoixmldoc( xml ).TRY.nuggetname = zsaplink_nugget=>getnuggetinfo( ixmldocument ).CATCH zcx_saplink.WRITE:/ 'Internal error in nuggethandling - program aborted'.RETURN.ENDTRY.WRITE: / 'Object list for nugget ', nuggetname. SKIP.CREATE OBJECT nuggEXPORTINGixmldocument = ixmldocument.anxmldoc = nugg->getnextobject( ).IF anxmldoc IS INITIAL.errormsg = 'You have an empty Nugget'.PERFORM writemessage USING 'W' errormsg.EXIT.ENDIF.WHILE anxmldoc IS NOT INITIAL.TRY.CALL METHOD zsaplink=>getobjectinfofromixmldocEXPORTINGixmldocument = anxmldocIMPORTINGobjtypename  = _objtypeobjname      = _objname.CATCH zcx_saplink.errormsg = 'You have a corrupt Nugget'.PERFORM writemessage USING 'E' errormsg.EXIT.ENDTRY.CONCATENATE _objtype _objname INTO statusmsg SEPARATED BY space.PERFORM writemessage USING 'S' statusmsg.PERFORM write_plugin_version_info USING anxmldoc_objtype.anxmldoc = nugg->getnextobject( ).ENDWHILE.ENDFORM.                    " NUGGET_DISPLAY
*&---------------------------------------------------------------------*
*&      Form  NUGGET_ADD_PACKAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM nugget_add_package .
*   rrq: enhancement 3-->IF package  IS INITIAL.MESSAGE s208(00) WITH 'package required'.EXIT.ENDIF.IF nugfile IS INITIAL.MESSAGE s208(00) WITH 'nugget filename required'.EXIT.ENDIF."// Mar: Added logic discard deleted objects from Package - 10/05/2009IF sy-saprl NE '701'."// Mar: Added logic discard deleted objects from Package - 10/05/2009SELECT object obj_name srcsystem       " ##TOO_MANY_ITAB_FIELDSFROM tadirINTO CORRESPONDING FIELDS OF TABLE objects_packageWHERE devclass  EQ packageAND  pgmid      EQ 'R3TR'."// Mar: Added logic discard deleted objects from Package - 10/05/2009ELSE.SELECT object obj_name srcsystem      " ##TOO_MANY_ITAB_FIELDSFROM tadirINTO CORRESPONDING FIELDS OF TABLE objects_packageWHERE devclass  EQ packageAND  pgmid      EQ 'R3TR'AND  delflag    NE 'X'.ENDIF."// Mar: Added logic discard deleted objects from Package - 10/05/2009IF sy-subrc <> 0.MESSAGE s208(00) WITH 'Package does not exist or empty'.RETURN.ENDIF.PERFORM addobjectstonugget.
*   <-- rrq: enhancement 3
ENDFORM.                    " NUGGET_ADD_PACKAGE*&---------------------------------------------------------------------*
*&      Form  NUGGET_ADD_FROM_TRANSPORT
*&---------------------------------------------------------------------*
FORM nugget_add_from_transport .DATA: reqname TYPE string.DATA: l_trkorr  TYPE e07t-trkorr,l_as4text TYPE e07t-as4text.IF nugfile IS INITIAL.MESSAGE s208(00) WITH 'nugget filename required'.EXIT.ENDIF.IF reqnugg[] IS INITIAL.MESSAGE s208(00) WITH 'Request number required'.EXIT.ENDIF.SELECT SINGLE trkorr FROM e070 INTO l_trkorrWHERE trkorr IN reqnugg.IF sy-subrc <> 0.MESSAGE s208(00) WITH 'Transport not found'.EXIT.ENDIF.SELECT SINGLE trkorr as4textFROM  e07tINTO (l_trkorr, l_as4text)WHERE  trkorr   IN reqnuggAND  langu    EQ sy-langu.*     ewH-->retrieve tasks as well as transportsRANGES: ra_reqnugg FOR e070-trkorr.DATA: wa_trkorr  TYPE e070-trkorr,it_trkorr  TYPE TABLE OF e070-trkorr,wa_reqnugg LIKE LINE OF ra_reqnugg.SELECT trkorr FROM e070 INTO TABLE it_trkorrWHERE strkorr IN reqnugg.ra_reqnugg[] = reqnugg[].LOOP AT it_trkorr INTO wa_trkorr.wa_reqnugg-sign = 'I'.wa_reqnugg-option = 'EQ'.wa_reqnugg-low = wa_trkorr.APPEND wa_reqnugg TO ra_reqnugg.ENDLOOP.
*     <--ewHSELECT object obj_nameFROM  e071INTO TABLE it_requestobject
*      WHERE  TRKORR in ReqNugg.WHERE  trkorr IN ra_reqnugg "ewHAND pgmid = 'R3TR'. "ewH: don't need subobjectsIF sy-subrc = 0.reqname = l_trkorr.ELSE.MESSAGE s208(00) WITH 'No R3TR objects in request'.EXIT.ENDIF.LOOP AT it_requestobject INTO wa_requestobject.MOVE-CORRESPONDING wa_requestobject TO packageline.APPEND packageline TO objects_package.ENDLOOP.PERFORM addobjectstonugget.
ENDFORM.                    " NUGGET_ADD_FROM_TRANSPORT

界面

一目了然,赶快储备起来吧!

ABAP-小工具之Program的导出与导入相关推荐

  1. 一些能提高ABAP开发人员日常工作效率的ABAP小工具

    I write some small ABAP tools for my daily work. Some of them might not be so useful at first glance ...

  2. 我用Python + PAGE(Tkinter GUI) + pandas做了个企查查导出模板转机器人模板的小工具

    产品需求 企查查导出的Excel文件是这样的 客户的机器人软件需要导入的模板是这样的 简单说就是要做个小工具将企查查导出的Excel通过pandas分析整理后按照客户给出的模板表头生成新的Excel文 ...

  3. jQuery开发之windows边栏小工具开发(Gadget development)- wi...

    为什么80%的码农都做不了架构师?>>>    jQuery开发之windows边栏小工具开发(Gadget development)- windows小工具实现的电话薄查询工具 作 ...

  4. [分享] jQuery开发之windows边栏小工具开发(Gadget development)- windows小工具实现的公司内部分机查询工具...

    作者:Terry li - GBin1.com 使用vista和win7的朋友可能都或多或少的使用过windows小工具,这些小工具可以被自由的添加到桌面上并且快速实现一定的功能,比如,天气预报,股票 ...

  5. 动手使用ABAP Channel开发一些小工具,提升日常工作效率

    今天的故事要从ABAP小游戏说起. 中国的ABAP从业者们手头或多或少都搜集了一些ABAP小游戏,比如下面这些. 消灭星星: 扫雷: 来自我的朋友刘梦,公众号"SAP干货铺"里的俄 ...

  6. 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法

       懒人小工具2:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法    github地址:https://github.com/Jimmey-Jiang/J ...

  7. 动手使用ABAP Channel开发一些小工具,提升日常工作效率 1

    今天的故事要从ABAP小游戏说起. 中国的ABAP从业者们手头或多或少都搜集了一些ABAP小游戏,比如下面这些. 消灭星星: 扫雷: 来自我的朋友刘梦,公众号"SAP干货铺"里的俄 ...

  8. 【小工具】CSDN博客导出工具-Java集成Maven开发

    CSDN博客导出工具 之前一直想把CSDN的博客导入到自己的网站中,可是由于博客比较多,后面受朋友老郭启发,就找了个时间用Java开发了这款小工具. 转载请注明出处:http://chenhaoxia ...

  9. mysql 常用小工具包_mssql+mysql小工具(无需环境依赖)-mysql数据库批量实体CS类导出工具下载v3.0免费版-西西软件下载...

    mysql数据库批量实体CS类导出工具是一个功能简单的数据库小工具,可以选中数据表执行查询,以及自定义sql语句,查询或者执行增删改,可以查看目标服务器对应数据库以及表和字段信息,不需要单独安装mys ...

最新文章

  1. MDK生成的BIN文件用DNW通过USB下载RAM中运行的问题
  2. Chrome浏览器不支持字体小于12px的解决办法
  3. Linux系统下Hadoop运行环境搭建
  4. 面向消息的中间件 (Message-Oriented Middleware, MOM)
  5. node --- 使用mongoose连接mongoDB,并初始化所有的Schema
  6. Github项目推荐|可视化 GAN 的训练过程
  7. asp 文本转时间_三分钟学会在ASP.NET Core MVC 中使用Cookie
  8. ucc编译器(优化)
  9. 香港高校校长对话盖茨:技术与社会
  10. idea主题颜色Linux,intellij idea 主题大全,看不惯idea 那2种主题的来这里了
  11. 【图像处理】MATLAB:图像压缩
  12. 批量建立域帐号,摆脱管理员的痛!(原创+实战)
  13. c语言入门经典必背18个程序
  14. 2022中国边缘计算企业20强
  15. seo外链工具是什么?外链工具有用吗?
  16. PS人像修图技巧——高低频磨皮
  17. 5000头奶牛的数字化之旅
  18. CSS笔记(菜鸟教程)
  19. 解决Linux上rar压缩包文件无法解压缩的问题
  20. Python总结-学习方向和方法

热门文章

  1. coinbase交易里的第三个output是什么?
  2. html 文字 横线 自动长度,css怎么设置下划线的长度?
  3. 【建议收藏】7 个“最佳”AI 视频生成器
  4. 井通科技SWTC三个方面:合规,应用和社区
  5. 奔走在算法的大路上(一)排序之插入排序
  6. 发送到桌面快捷方式命名方式_最好和最差的方式发送简历
  7. SpringCloud 微服务分布式 应用笔记(三)
  8. 爱课程 c语言程序设计 苏小红,2018秋高级语言程序设计(苏小红)
  9. 元月元日是哪一天_下元节是哪一天,几月几日
  10. 美团和滴滴的战争,饿了么如何选择?