‎2011 Jun 08 11:04 AM
Dear Experts,
I am new to oops concept. I am getting short dump error for below code. Please suggest me how to resolve this issue.
DATA: L_SCRIPT_COLLECTION TYPE REF TO i_oi_script_collection.
CALL METHOD L_SCRIPT_COLLECTION->ADD_SCRIPT_FROM_TABLE
EXPORTING NO_FLUSH = ''
SCRIPT_NAME = 'Macro'
SCRIPT_TYPE = L_SCRIPT_COLLECTION->SCRIPT_TYPE_VBSCRIPT
SCRIPT_TABLE = LT_SOURCE_CODE
IMPORTING ERROR = GC_ERROR
RETCODE = L_RETURN_CODE .
‎2011 Jun 08 11:13 AM
From the code snippet it looks like the method ADD_SCRIPT_FROM_TABLE( ) is an instance method.
In order to use an instance method you need to have a valid instance of the same class/interface. Looks like you have not instantiated the object ref. variable prior to using it!
Read the SAP documentation on CREATE OBJECT before proceeding!
BR,
Suhas
‎2011 Jun 08 12:03 PM
Hi Suhas,
Thanks a lot for information. Could you please let me know how to instantiate the method.
‎2011 Jun 08 12:19 PM
Hi Suhas,
This code is working fine.
data: GC_DOCUMENT TYPE REF TO I_OI_DOCUMENT_PROXY.
gc_document->get_spreadsheet_interface(
EXPORTING
no_flush = ' '
IMPORTING
error = gc_error
sheet_interface = gc_spreadsheet
).
how to instantiale the methos as you said earlier?. I am also calling in this way but getting sump in my code...pleas help.
‎2011 Jun 08 12:21 PM
Hi,
You cannot instantiate a method, you create an instance of the class using CREATE OBJECT ABAP statement as mentioned by Suhas in the previous note.
Anyways, L_SCRIPT_COLLECTION is referring to an interface and not a class. So you can inherit that interface to define your local/global class.
And once you have this class you can create an instance using CREATE OBJECT, and invoke the method.
Anyways, could you provide more info on your requirement?
Regards,
Chen
‎2011 Jun 08 12:30 PM
Hi Chen,
I am just trying to add the VB Script(Macro) to the active spread sheet which is getting generated in ABAP report output.
For this reason I want to call the method ADD_SCRIPT_FROM_TABLE.
but they are calling methods from the interfaces I_OI_DOCUMENT_PROXY and I_OI_SPREADSHEET. and it creates document.
so i am trying to call the interface method in the same way they are calling. But getting short dump.
DATA: GC_DOCUMENT TYPE REF TO I_OI_DOCUMENT_PROXY,
TYPES:
TS_SOURCE_CODE TYPE TEXT1024,
TT_SOURCE_CODE TYPE STANDARD TABLE OF TS_SOURCE_CODE WITH DEFAULT KEY.
DATA: LS_SOURCE_CODE TYPE TS_SOURCE_CODE,
LT_SOURCE_CODE TYPE TT_SOURCE_CODE,
L_RETURN_CODE TYPE SOI_RET_STRING.
Building the Script - every line has to end with cr/lf
LS_SOURCE_CODE = 'Sub Macro1()'.
CONCATENATE LS_SOURCE_CODE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE = 'ActiveSheet.PageSetup.PrintArea = ""'.
CONCATENATE LS_SOURCE_CODE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE = 'With ActiveSheet.PageSetup'.
CONCATENATE LS_SOURCE_CODE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE = '.Orientation = xlLandscape'.
CONCATENATE LS_SOURCE_CODE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE = '.PaperSize = xlPaperA4'.
CONCATENATE LS_SOURCE_CODE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE = '.FitToPagesWide = 1'.
CONCATENATE LS_SOURCE_CODE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE = '.FitToPagesTall = 1'.
CONCATENATE LS_SOURCE_CODE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE = 'End With'.
CONCATENATE LS_SOURCE_CODE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE = 'End Sub'.
CONCATENATE LS_SOURCE_CODE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
*Getting error here
CALL METHOD L_SCRIPT_COLLECTION->ADD_SCRIPT_FROM_TABLE
EXPORTING NO_FLUSH = ''
SCRIPT_NAME = 'Macro'
SCRIPT_TYPE = L_SCRIPT_COLLECTION->SCRIPT_TYPE_VBSCRIPT
SCRIPT_TABLE = LT_SOURCE_CODE
IMPORTING ERROR = GC_ERROR
RETCODE = L_RETURN_CODE .
APPEND gc_error TO gt_error_table.
CALL METHOD C_OI_ERRORS=>RAISE_MESSAGE
EXPORTING
TYPE = 'E'.
Calling the script:
CALL METHOD GC_DOCUMENT->EXECUTE_MACRO
EXPORTING
MACRO_STRING = 'Macro_demo_1'
SCRIPT_NAME = 'Macro' "#EC NOTEXT
NO_FLUSH = SPACE
IMPORTING error = gc_error.
APPEND gc_error TO gt_error_table.
‎2011 Jun 10 11:24 AM
Hi Shreyansh,
Looking at the above code i still do not see where you have created an instance of the class - L_SCRIPT_COLLECTION,
*Getting error here
CALL METHOD L_SCRIPT_COLLECTION->ADD_SCRIPT_FROM_TABLE
EXPORTING NO_FLUSH = ''
SCRIPT_NAME = 'Macro'
SCRIPT_TYPE = L_SCRIPT_COLLECTION->SCRIPT_TYPE_VBSCRIPT
SCRIPT_TABLE = LT_SOURCE_CODE
IMPORTING ERROR = GC_ERROR
RETCODE = L_RETURN_CODE .
I see that you are using Office Integration using "I_OI_DOCUMENT_PROXY".
So all that you have to do is call the method GET_SCRIPT_COLLECTION of GC_DOCUMENT, that is once you have created the gc_document instance. This method will return an instance of a class that inherits from "I_IO_SCRIPT_COLLECTION" and once you have this you should be able to add the script later and then use EXECUTE_MACRO of GC_DOCUMENT maybe.
CALL METHOD GC_DOCUMENT->proxy->get_script_collection
EXPORTING
no_flush = space
IMPORTING
scripts = L_SCRIPT_COLLECTION.
CALL METHOD L_SCRIPT_COLLECTION->ADD_SCRIPT_FROM_TABLE
EXPORTING NO_FLUSH = ''
SCRIPT_NAME = 'Macro'
SCRIPT_TYPE = L_SCRIPT_COLLECTION->SCRIPT_TYPE_VBSCRIPT
SCRIPT_TABLE = LT_SOURCE_CODE
IMPORTING ERROR = GC_ERROR
RETCODE = L_RETURN_CODE .
Regards,
Chen
‎2011 Jun 11 9:53 AM
Hi Chen,
I am sorry..I just missed it..I was doing in it other way..so was not able to add the script.
Thanks a lot for your information. I have done as you suggested to the add the script from table. Its working fine.
But now I have problem in executing Macro.
CALL METHOD GC_DOCUMENT->EXECUTE_MACRO
EXPORTING
MACRO_STRING = 'Macro1'
NO_FLUSH = ''
IMPORTING error = gc_error.
APPEND gc_error TO gt_error_table.
I am getting error: Error "Cannot run the macro 'ThisWorkbook.Macro1'. The mac" occurred during macro execution.
Message no. SOFFICEINTEGRATION230
Kindly suggest me how to execute the macro.
Thanks in advance.
Edited by: shreyansh babagond on Jun 11, 2011 2:28 PM
‎2011 Jun 13 6:19 AM
Hi Shreyansh,
Could you post the complete code, as the message below is not very clear.
Regards,
Chen
‎2011 Jun 13 10:22 AM
Hi Chen,
Our aim to set the print format of the output spread sheet(GC_DOCUMENT) default to Landscape,A4,1wide:1 tall. So I have done investigation to do it through pagesetup or some formatting but could not achieve this.
I thought of adding macro to the spreadsheet and execute it in backgroud so that hopefully it will keep the spreadsheet in required format.
Hope you understoond our requiremet. In my second query, I was talking about adding macro(vb script ) to spreadsheet(GC_DOCUMENT). But now I want to execute it.
Help us in executing the macro. I suspect there might be some problem in macro but could not able to find it. pls help us.
Thanks in advacen
DATA: GT_TOTALS TYPE ZHGRS_EPLAN_T06,
GF_OKCODE TYPE SYUCOMM,
GCL_APPLICATION TYPE REF TO LCL_APPLICATION,
GC_SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
GC_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GC_CONTAINER_1 TYPE REF TO CL_GUI_CONTAINER,
GC_CONTAINER_2 TYPE REF TO CL_GUI_CONTAINER,
GC_TREE TYPE REF TO CL_GUI_SIMPLE_TREE,
GC_CONTROL TYPE REF TO I_OI_CONTAINER_CONTROL,
GC_SPREADSHEET TYPE REF TO I_OI_SPREADSHEET,
GC_DOCUMENT TYPE REF TO I_OI_DOCUMENT_PROXY,
GF_DOCUMENT_TYPE TYPE SOI_DOCUMENT_TYPE VALUE SOI_DOCTYPE_EXCEL_SHEET.
DATA: ls_total TYPE zhgrs_eplan_s06.
REFRESH: gt_error_table.
1. Create Control-Instance
c_oi_container_control_creator=>get_container_control(
IMPORTING
control = gc_control
error = gc_error
RETCODE =
).
APPEND gc_error TO gt_error_table.
PERFORM CHECK_SHOW_ERRORS_SINGLE.
2. Initialization
gc_control->init_control(
EXPORTING
DYNPRO_NR = SY-DYNNR
GUI_CONTAINER =
inplace_enabled = 'X'
INPLACE_MODE = 0
INPLACE_RESIZE_DOCUMENTS = ' '
inplace_scroll_documents = 'X'
INPLACE_SHOW_TOOLBARS = 'X'
no_flush = 'X'
PARENT_ID = cl_gui_cfw=>dynpro_0
r3_application_name = 'Profit Loss Statement'(t03)
REGISTER_ON_CLOSE_EVENT = ' '
REGISTER_ON_CUSTOM_EVENT = ' '
REP_ID = SY-REPID
SHELL_STYLE = 1384185856
parent = gc_container_2
NAME =
AUTOALIGN = 'x'
IMPORTING
error = gc_error
RETCODE =
EXCEPTIONS
javabeannotsupported = 1
OTHERS = 2
).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'A' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
APPEND gc_error TO gt_error_table.
PERFORM CHECK_SHOW_ERRORS_SINGLE.
3. Create the document
gc_control->get_document_proxy(
EXPORTING
DOCUMENT_FORMAT = 'NATIVE'
document_type = gf_document_type
no_flush = 'X'
REGISTER_CONTAINER = ' '
IMPORTING
document_proxy = gc_document
error = gc_error
RETCODE =
).
APPEND gc_error TO gt_error_table.
PERFORM CHECK_SHOW_ERRORS_SINGLE.
gc_document->create_document(
EXPORTING
CREATE_VIEW_DATA = ' '
document_title = 'Profit Loss Statement'(t03)
no_flush = 'X'
open_inplace = 'X'
OPEN_READONLY = ' '
ONSAVE_MACRO = ' '
STARTUP_MACRO = ''
IMPORTING
error = gc_error
RETCODE =
).
APPEND gc_error TO gt_error_table.
4. Check and get spreadsheet
gc_document->has_spreadsheet_interface(
EXPORTING
no_flush = 'X'
IMPORTING
error = gc_error
is_available = gf_si_available
RETCODE =
).
APPEND gc_error TO gt_error_table.
gc_document->get_spreadsheet_interface(
EXPORTING
no_flush = ' '
IMPORTING
error = gc_error
sheet_interface = gc_spreadsheet
RETCODE =
).
APPEND gc_error TO gt_error_table.
Edited by: shreyansh babagond on Jun 13, 2011 2:52 PM
‎2011 Jun 13 10:24 AM
Continuing to above code..
TS_SOURCE_CODE TYPE TEXT1024,
TT_SOURCE_CODE TYPE STANDARD TABLE OF TS_SOURCE_CODE WITH DEFAULT KEY.
TYPES: BEGIN OF TY_SCRIPT,
VALUE(80) TYPE C,
END OF TY_SCRIPT.
DATA: LS_SOURCE_CODE TYPE TY_SCRIPT,"TS_SOURCE_CODE,
LT_SOURCE_CODE TYPE TABLE OF TY_SCRIPT,
L_RETURN_CODE TYPE SOI_RET_STRING.
Building the Script - every line has to end with cr/lf
LS_SOURCE_CODE-VALUE = 'Sub Macro1()'.
CONCATENATE LS_SOURCE_CODE-VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE-VALUE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE-VALUE = 'ActiveSheet.PageSetup.PrintArea = ""'.
CONCATENATE LS_SOURCE_CODE-VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE-VALUE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE-VALUE = 'With ActiveSheet.PageSetup'.
CONCATENATE LS_SOURCE_CODE-VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE-VALUE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE-VALUE = '.Orientation = xlLandscape'.
CONCATENATE LS_SOURCE_CODE-VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE-VALUE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE-VALUE = '.PaperSize = xlPaperA4'.
CONCATENATE LS_SOURCE_CODE-VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE-VALUE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE-VALUE = '.FitToPagesWide = 1'.
CONCATENATE LS_SOURCE_CODE-VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE-VALUE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE-VALUE = '.FitToPagesTall = 1'.
CONCATENATE LS_SOURCE_CODE-VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE-VALUE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE-VALUE = 'End With'.
CONCATENATE LS_SOURCE_CODE-VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE-VALUE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
LS_SOURCE_CODE-VALUE = 'End Sub'.
CONCATENATE LS_SOURCE_CODE-VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF
INTO LS_SOURCE_CODE-VALUE.
APPEND LS_SOURCE_CODE
TO LT_SOURCE_CODE.
DATA: L_SCRIPT_COLLECTION TYPE REF TO i_oi_script_collection.
CALL METHOD GC_DOCUMENT->get_script_collection
EXPORTING
no_flush = ''
IMPORTING
scripts = L_SCRIPT_COLLECTION.
CALL METHOD L_SCRIPT_COLLECTION->ADD_SCRIPT_FROM_TABLE
EXPORTING NO_FLUSH = ''
SCRIPT_NAME = 'Macro'
SCRIPT_TYPE = L_SCRIPT_COLLECTION->SCRIPT_TYPE_VBSCRIPT
SCRIPT_TABLE = LT_SOURCE_CODE
IMPORTING ERROR = GC_ERROR
RETCODE = L_RETURN_CODE .
APPEND gc_error TO gt_error_table.
DATA: L_RETVALUE TYPE C.
CALL METHOD GC_DOCUMENT->EXECUTE_MACRO
EXPORTING
MACRO_STRING = 'Macro1'"'Module1.Macro' "'R3UpdateTables' " 'module1.R3StartupMacro'
SCRIPT_NAME = 'Macro'
NO_FLUSH = ''
IMPORTING error = gc_error
retcode = L_RETURN_CODE.
APPEND gc_error TO gt_error_table.