29/09/2010

Using Regex to validate email address


REPORT ZADN_SAMPLE.

*----------------------------------------------------------------------*
* -> CLASS cl_regex_test DEFINITION
*----------------------------------------------------------------------*
CLASS cl_regex_test DEFINITION FINAL.

PUBLIC SECTION.

METHODS : check_email IMPORTING p_email TYPE string.

PRIVATE SECTION.

DATA: o_regex TYPE REF TO cl_abap_regex,
o_matcher TYPE REF TO cl_abap_matcher.

ENDCLASS. "cl_regex_test DEFINITION

*----------------------------------------------------------------------*
* -> CLASS cl_regex_test IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_regex_test IMPLEMENTATION.

METHOD check_email.

* Create the regular expression:

CREATE OBJECT o_regex
EXPORTING
pattern = '^[a-zA-Z]+(([\''\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*\s+<' &
'(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})>$|^(\w[-._\w]*' &
'\w@\w[-._\w]*\w\.\w{2,3})$'.

* Check to see if the email matches the regular expression:

CREATE OBJECT o_matcher
EXPORTING
regex = o_regex
text = p_email.

IF o_matcher->match( ) NE abap_true.

MESSAGE 'Enter email address valid...' TYPE 'E'.

ELSE.

MESSAGE 'This is a valid email address...' TYPE 'S'.

ENDIF.

ENDMETHOD. "check_email

ENDCLASS. "cl_regex_test IMPLEMENTATION

************************************************************************
************************************************************************
* *
* PROGRAM FLOW LOGIC *
* *
************************************************************************

START-OF-SELECTION.

DATA : ocl_regex_test TYPE REF TO cl_regex_test.

CREATE OBJECT ocl_regex_test.

ocl_regex_test->check_email( 'abapdn.network@mail.com' ).

28/09/2010

Alert Sound in ABAP


REPORT ZADN_SAMPLE.

DATA: it_vbscript LIKE STANDARD TABLE OF soli WITH HEADER LINE,
v_vbsfile LIKE rlgrap-filename.

*-----------------------------------------------------------------------
* This code creates the vbScript to play sound ringin.wav
*-----------------------------------------------------------------------
APPEND: 'strSoundFile = "C:\WINDOWS\Media\ringin.wav"' TO it_vbscript,
'Set objShell = CreateObject("Wscript.Shell")' TO it_vbscript,
'strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)' TO it_vbscript,
'objShell.Run strCommand, 0, True' TO it_vbscript.

*-----------------------------------------------------------------------
* Generated Script file must be downloaded into the TEMP folder of
* the Windows environment
*-----------------------------------------------------------------------
CALL FUNCTION 'WS_QUERY'
EXPORTING
environment = 'TEMP'
query = 'EN'
IMPORTING
return = v_vbsfile
EXCEPTIONS
inv_query = 1
no_batch = 2
frontend_error = 3
OTHERS = 4.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ELSE.

CONCATENATE v_vbsfile '\my_script.vbs' INTO v_vbsfile.

*-----------------------------------------------------------------------
* Script file is downloaded
*-----------------------------------------------------------------------
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
filename = v_vbsfile
filetype = 'DAT'
mode = 'S'
TABLES
data_tab = it_vbscript
EXCEPTIONS
file_open_error = 1
file_write_error = 2
invalid_filesize = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
OTHERS = 8.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ELSE.

*-----------------------------------------------------------------------
* The Script file is executed
*-----------------------------------------------------------------------
CALL FUNCTION 'WS_EXECUTE'
EXPORTING
commandline = v_vbsfile
program = 'WSCRIPT.EXE'
EXCEPTIONS
frontend_error = 1
no_batch = 2
prog_not_found = 3
illegal_option = 4
OTHERS = 5.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDIF.

ENDIF.

SAP knows how to speak


REPORT ZADN_SAMPLE.

INCLUDE ole2incl.

DATA : v_objole TYPE ole2_object,
v_objolevoice TYPE ole2_object,
v_strtotalk TYPE string.

CREATE OBJECT v_objolevoice 'SAPI.SpVoice'.

v_strtotalk = 'SAP is the market and technology leader in business management software'.

CALL METHOD OF v_objolevoice 'Speak' = v_objole
EXPORTING #1 = v_strtotalk.

WAIT UP TO 1 SECONDS.

v_strtotalk = 'ABAP DEVELOPER NETWORK'.

CALL METHOD OF v_objolevoice 'Speak' = v_objole
EXPORTING #1 = v_strtotalk.

FREE: v_objolevoice,v_objole.

27/09/2010

Introduction to SpreadsheetML in ABAP

SpreadsheetML is an XML dialect developed by Microsoft to represent information in an Excel workbook. This column, explores the concept, schema definition, and some scenarios in which it makes sense to programmatically generate Excel workbooks using Office 2003 and SpreadsheetML.

Excel workbooks using Office 2003 and SpreadsheetML



REPORT ZADN_SAMPLE.

*----------------------------------------------------------------------*
* -> CLASS cl_xls_generator DEFINITION
*----------------------------------------------------------------------*
CLASS cl_xls_generator DEFINITION.

PUBLIC SECTION.

METHODS : crete_xls_data,
save_xls_data.

PRIVATE SECTION.

TYPES : BEGIN OF line_data,
fname TYPE c LENGTH 50,
lname TYPE c LENGTH 50,
phone TYPE c LENGTH 20,
END OF line_data.

DATA : v_filename TYPE string,
v_path TYPE string,
v_fullpath TYPE string ,
it_data TYPE STANDARD TABLE OF line_data,
it_xls TYPE STANDARD TABLE OF string,
wa_data LIKE LINE OF it_data,
wa_xls LIKE LINE OF it_xls.

ENDCLASS. "cl_xls_generator DEFINITION

*----------------------------------------------------------------------*
* -> CLASS cl_xls_generator IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_xls_generator IMPLEMENTATION.

METHOD crete_xls_data.

DO 30 TIMES.

CLEAR me->wa_data.

me->wa_data-fname = `Rafael`.
me->wa_data-lname = `Riso`.
me->wa_data-phone = `(99) 9999 - 9999`.

APPEND me->wa_data TO me->it_data.

ENDDO.

ENDMETHOD. "crete_xls_data

METHOD save_xls_data.

CLEAR me->wa_data.

APPEND '' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND '
' TO me->it_xls.
APPEND '
' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND 'First Name' TO me->it_xls.
APPEND '
' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND 'Last Name' TO me->it_xls.
APPEND '
' TO me->it_xls.
APPEND '' TO me->it_xls.
APPEND 'Phone Number' TO me->it_xls.
APPEND '
' TO me->it_xls.
APPEND '
' TO me->it_xls.

LOOP AT me->it_data INTO me->wa_data.

CLEAR me->wa_xls.

APPEND '' TO it_xls.

APPEND '' TO it_xls.

CONCATENATE '' me->wa_data-fname '' INTO me->wa_xls.

APPEND me->wa_xls TO me->it_xls.

CLEAR me->wa_xls.

APPEND '
' TO me->it_xls.

APPEND '' TO me->it_xls.

CONCATENATE '' me->wa_data-lname '' INTO me->wa_xls.

APPEND me->wa_xls TO me->it_xls.

CLEAR me->wa_xls.

APPEND '
' TO me->it_xls.

APPEND '' TO me->it_xls.

CONCATENATE '' me->wa_data-phone '' INTO me->wa_xls.

APPEND me->wa_xls TO me->it_xls.

CLEAR me->wa_xls.

APPEND '
' TO me->it_xls.

APPEND '
' TO me->it_xls.

ENDLOOP.

APPEND '
' TO me->it_xls.
APPEND '
' TO me->it_xls.
APPEND '
' TO me->it_xls.

CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = 'Enter File Name'
default_extension = 'xls'
file_filter = '*.xls'
initial_directory = 'c:'
prompt_on_overwrite = 'X'
CHANGING
filename = me->v_filename
path = me->v_path
fullpath = me->v_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = me->v_fullpath
filetype = 'ASC'
show_transfer_status = 'X'
CHANGING
data_tab = me->it_xls[]
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDMETHOD. "save_xls_data

ENDCLASS. "cl_xls_generator IMPLEMENTATION

************************************************************************
************************************************************************
* *
* PROGRAM FLOW LOGIC *
* *
************************************************************************

START-OF-SELECTION.

DATA : o_cl_xls_generator TYPE REF TO cl_xls_generator.

CREATE OBJECT o_cl_xls_generator.

o_cl_xls_generator->crete_xls_data( ).
o_cl_xls_generator->save_xls_data( ).

24/09/2010

Builder Design Pattern

The builder pattern is a design pattern that allows for the step-by-step creation of complex objects using the correct sequence of actions. The construction is controlled by a director object that only needs to know the type of object it is to create.


REPORT ZADN_SAMPLE.

*----------------------------------------------------------------------*
* -> CLASS cl_Meal DEFINITION
*----------------------------------------------------------------------*
CLASS cl_meal DEFINITION.

PUBLIC SECTION.

DATA : sandwich TYPE string,
sideorder TYPE string,
drink TYPE string,
offer TYPE string,
price TYPE p LENGTH 4 DECIMALS 2.

METHODS : tostring.

ENDCLASS. "cl_Meal DEFINITION

*----------------------------------------------------------------------*
* -> CLASS cl_meal IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_meal IMPLEMENTATION.

METHOD tostring.

DATA : v_msg TYPE string,
v_price TYPE c LENGTH 15.

WRITE me->price TO v_price.

CONCATENATE : `Sandwich: `
me->sandwich
` - SideOrder: `
me->sideorder
` - Drink: `
me->drink
` - Offer: `
me->offer
` - Price: R$ `
v_price INTO v_msg.

WRITE / v_msg.

ENDMETHOD. "ToString

ENDCLASS. "cl_meal IMPLEMENTATION

*----------------------------------------------------------------------*
* -> CLASS cl_MealBuilder DEFINITION
*----------------------------------------------------------------------*
CLASS cl_mealbuilder DEFINITION ABSTRACT.

PUBLIC SECTION.

METHODS : addsandwich ABSTRACT,
addsideorder ABSTRACT,
adddrink ABSTRACT,
addofferitem ABSTRACT,
setprice ABSTRACT,
getmeal ABSTRACT EXPORTING p_meal TYPE REF TO cl_meal.

ENDCLASS. "cl_MealBuilder DEFINITION

*----------------------------------------------------------------------*
* -> CLASS cl_MealDirector DEFINITION
*----------------------------------------------------------------------*
CLASS cl_mealdirector DEFINITION.

PUBLIC SECTION.

METHODS : makemeal IMPORTING p_mealbuilder TYPE REF TO cl_mealbuilder.

ENDCLASS. "cl_MealDirector DEFINITION

*----------------------------------------------------------------------*
* -> CLASS cl_mealdirector IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_mealdirector IMPLEMENTATION.

METHOD makemeal.

p_mealbuilder->addsandwich( ).
p_mealbuilder->addsideorder( ).
p_mealbuilder->adddrink( ).
p_mealbuilder->addofferitem( ).
p_mealbuilder->setprice( ).

ENDMETHOD. "MakeMeal

ENDCLASS. "cl_mealdirector IMPLEMENTATION

*----------------------------------------------------------------------*
* -> CLASS cl_JollyVegetarianMealBuilder DEFINITION
*----------------------------------------------------------------------*
CLASS cl_jollyvegetarianmealbuilder DEFINITION INHERITING FROM cl_mealbuilder.

PUBLIC SECTION.

METHODS : constructor,
addsandwich REDEFINITION,
addsideorder REDEFINITION,
adddrink REDEFINITION,
addofferitem REDEFINITION,
setprice REDEFINITION,
getmeal REDEFINITION.

PRIVATE SECTION.

DATA : o_meal TYPE REF TO cl_meal.

ENDCLASS. "cl_JollyVegetarianMealBuilder DEFINITION

*----------------------------------------------------------------------*
* -> CLASS cl_jollyvegetarianmealbuilder IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_jollyvegetarianmealbuilder IMPLEMENTATION.

METHOD constructor.

super->constructor( ).

CREATE OBJECT o_meal.

ENDMETHOD. "constructor

METHOD addsandwich.

o_meal->sandwich = `Vegeburger`.

ENDMETHOD. "addsandwich

METHOD addsideorder.

o_meal->sideorder = `Fries`.

ENDMETHOD. "addsideorder

METHOD adddrink.

o_meal->drink = `Orange Juice`.

ENDMETHOD. "adddrink

METHOD addofferitem.

o_meal->offer = `Donut Voucher`.

ENDMETHOD. "addofferitem

METHOD setprice.

o_meal->price = `4.99`.

ENDMETHOD. "setprice

METHOD getmeal.

p_meal = me->o_meal.

ENDMETHOD. "getmeal

ENDCLASS. "cl_jollyvegetarianmealbuilder IMPLEMENTATION


*----------------------------------------------------------------------*
* -> CLASS cl_mischievousbrazilianbuilder DEFINITION
*----------------------------------------------------------------------*
CLASS cl_mischievousbrazilianbuilder DEFINITION INHERITING FROM cl_mealbuilder.

PUBLIC SECTION.

METHODS : constructor,
addsandwich REDEFINITION,
addsideorder REDEFINITION,
adddrink REDEFINITION,
addofferitem REDEFINITION,
setprice REDEFINITION,
getmeal REDEFINITION.

PRIVATE SECTION.

DATA : o_meal TYPE REF TO cl_meal.

ENDCLASS. "cl_mischievousbrazilianbuilder DEFINITION


*----------------------------------------------------------------------*
* -> CLASS cl_mischievousbrazilianbuilder IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_mischievousbrazilianbuilder IMPLEMENTATION.

METHOD constructor.

super->constructor( ).

CREATE OBJECT o_meal.

ENDMETHOD. "constructor

METHOD addsandwich.

o_meal->sandwich = `X-TUDO Burger`.

ENDMETHOD. "addsandwich

METHOD addsideorder.

o_meal->sideorder = `Fries`.

ENDMETHOD. "addsideorder

METHOD adddrink.

o_meal->drink = `Caipirinha`.

ENDMETHOD. "adddrink

METHOD addofferitem.

o_meal->offer = `Weekend Happy`.

ENDMETHOD. "addofferitem

METHOD setprice.

o_meal->price = `15.49`.

ENDMETHOD. "setprice

METHOD getmeal.

p_meal = me->o_meal.

ENDMETHOD. "getmeal

ENDCLASS. "cl_mischievousbrazilianbuilder IMPLEMENTATION

************************************************************************
************************************************************************
* *
* PROGRAM FLOW LOGIC *
* *
************************************************************************

START-OF-SELECTION.

DATA : o_director TYPE REF TO cl_mealdirector,
o_jvmb TYPE REF TO cl_jollyvegetarianmealbuilder,
o_mvbb TYPE REF TO cl_mischievousbrazilianbuilder,
o_vegmeal TYPE REF TO cl_meal,
o_brameal TYPE REF TO cl_meal.

CREATE OBJECT : o_director,
o_jvmb,
o_mvbb.

o_director->makemeal( EXPORTING p_mealbuilder = o_jvmb ).

o_jvmb->getmeal( IMPORTING p_meal = o_vegmeal ).

o_director->makemeal( EXPORTING p_mealbuilder = o_mvbb ).

o_mvbb->getmeal( IMPORTING p_meal = o_brameal ).

o_vegmeal->tostring( ).

o_brameal->tostring( ).