Sunday, March 22, 2009

Embedding paint.exe in SAP GUI transactions

Here is some code to embed the paint application into a GUI application. Tablet signatures, anyone? However, my preferred approach is using a Flex components in web dynpros - much slicker but you will need EP1 for NW.



report zzzzzzzz.

include ole2incl.

selection-screen begin of screen 1100.
selection-screen end of screen 1100.

*----------------------------------------------------------------------*
* CLASS cl_paint DEFINITION
*----------------------------------------------------------------------*
class cl_paint definition.

public section.

methods:
constructor,

on_close_document
for event on_close_document of i_oi_document_proxy
importing document_proxy has_changed.

private section.

data:
go_control type ref to i_oi_container_control,
go_proxy type ref to i_oi_document_proxy.


endclass. "cl_paint DEFINITION

*----------------------------------------------------------------------*
* CLASS cl_paint IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class cl_paint implementation.

method constructor.

data:
retcode type soi_ret_string.

*-- Create the OLE control
call method c_oi_container_control_creator=>get_container_control
importing
control = go_control
retcode = retcode.
call method c_oi_errors=>raise_message
exporting
type = 'E'.

*-- Attach the OLE control to the screen container
call method go_control->init_control
exporting
r3_application_name = 'Signature Pad'(000)
inplace_enabled = 'X'
inplace_scroll_documents = 'X'
parent = cl_gui_container=>screen0
register_on_close_event = 'X'
register_on_custom_event = 'X'
importing
retcode = retcode.
call method c_oi_errors=>raise_message
exporting
type = 'E'.

*-- Create a proxy to the Paint application in the OLE container
call method go_control->get_document_proxy
exporting
document_type = 'Paint.Picture'
document_format = 'OLE'
importing
document_proxy = go_proxy
retcode = retcode.
if retcode ne c_oi_errors=>ret_ok.
exit.
endif.

*-- Create a new paint document
call method go_proxy->create_document
exporting
create_view_data = 'X'
open_inplace = 'X'
importing
retcode = retcode.
if retcode ne c_oi_errors=>ret_ok.
exit.
endif.

set handler me->on_close_document for go_proxy.

endmethod. "constructor


method on_close_document.

" Save the signature here

endmethod.

endclass. "cl_paint IMPLEMENTATION


start-of-selection.

data:
go_picture type ref to cl_paint.

create object go_picture.

call selection-screen 1100.

1 comment:

Unknown said...

Hi ,

This is useful code, but I am not able to save the paint file in desktop.can you please add the code for saving the file as well ?