Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Error: Access via 'NULL' object reference not possible.

Former Member
0 Likes
1,526

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 .

10 REPLIES 10
Read only

SuhaSaha
Product and Topic Expert
Product and Topic Expert
0 Likes
1,458

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

Read only

Former Member
0 Likes
1,458

Hi Suhas,

Thanks a lot for information. Could you please let me know how to instantiate the method.

Read only

Former Member
0 Likes
1,458

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.

Read only

Former Member
0 Likes
1,458

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

Read only

Former Member
0 Likes
1,458

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.

Read only

Former Member
0 Likes
1,458

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

Read only

Former Member
0 Likes
1,458

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

Read only

Former Member
0 Likes
1,458

Hi Shreyansh,

Could you post the complete code, as the message below is not very clear.

Regards,

Chen

Read only

Former Member
0 Likes
1,458

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

Read only

Former Member
0 Likes
1,458
  • 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.