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( ).

Prototype Design Pattern

The prototype design pattern is a design pattern that is used to instantiate a class by copying, or cloning, the properties of an existing object. The new object is an exact copy of the prototype but permits modification without altering the original.


REPORT ZADN_SAMPLE.

*----------------------------------------------------------------------*
* -> CLASS cl_employee DEFINITION
*----------------------------------------------------------------------*
CLASS cl_employee DEFINITION ABSTRACT.

PUBLIC SECTION.

DATA : name TYPE string,
role TYPE string.

METHODS : clone ABSTRACT EXPORTING clone_instance TYPE REF TO cl_employee,
tostring ABSTRACT.

ENDCLASS. "cl_employee DEFINITION

*----------------------------------------------------------------------*
* -> CLASS cl_Typist DEFINITION
*----------------------------------------------------------------------*
CLASS cl_typist DEFINITION INHERITING FROM cl_employee.

PUBLIC SECTION.

DATA : wordsperminute TYPE n.

METHODS : clone REDEFINITION,
tostring REDEFINITION.

ENDCLASS. "cl_Typist DEFINITION

*----------------------------------------------------------------------*
* -> CLASS cl_typist IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_typist IMPLEMENTATION.

METHOD clone.

DATA : o_cl_typist TYPE REF TO cl_typist.

CREATE OBJECT clone_instance TYPE cl_typist.

TRY.

o_cl_typist ?= clone_instance.

MOVE : me->name TO o_cl_typist->name,
me->role TO o_cl_typist->role,
me->wordsperminute TO o_cl_typist->wordsperminute.

CATCH cx_sy_move_cast_error.

WRITE: / 'Up Cast Failed'.

ENDTRY.

ENDMETHOD. "clone

METHOD tostring.

DATA : v_msg TYPE string.

CONCATENATE : `Name = ` me->name
`, Role = ` me->role
`, Words Perminute = ` me->wordsperminute
INTO v_msg.

WRITE / v_msg.

ENDMETHOD. "tostring

ENDCLASS. "cl_typist IMPLEMENTATION

*----------------------------------------------------------------------*
* -> CLASS cl_Developer DEFINITION
*----------------------------------------------------------------------*
CLASS cl_developer DEFINITION INHERITING FROM cl_employee.

PUBLIC SECTION.

DATA : preferredlanguage TYPE string.

METHODS : clone REDEFINITION,
tostring REDEFINITION.

ENDCLASS. "cl_Developer DEFINITION

*----------------------------------------------------------------------*
* -> CLASS cl_Developer IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_developer IMPLEMENTATION.

METHOD clone.

DATA : o_cl_developer TYPE REF TO cl_developer.

CREATE OBJECT clone_instance TYPE cl_developer.

TRY.

o_cl_developer ?= clone_instance.

MOVE : me->name TO o_cl_developer->name,
me->role TO o_cl_developer->role,
me->preferredlanguage TO o_cl_developer->preferredlanguage.

CATCH cx_sy_move_cast_error.

WRITE: / 'Up Cast Failed'.

ENDTRY.

ENDMETHOD. "clone

METHOD tostring.

DATA : v_msg TYPE string.

CONCATENATE : `Name = ` me->name
`, Role = ` me->role
`, Preferred Language = ` me->preferredlanguage
INTO v_msg.

WRITE / v_msg.

ENDMETHOD. "tostring

ENDCLASS. "cl_Developer IMPLEMENTATION

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

START-OF-SELECTION.

DATA : o_base TYPE REF TO cl_employee,
o_dev TYPE REF TO cl_developer,
o_devcopy TYPE REF TO cl_developer,
o_casterror TYPE REF TO cx_sy_move_cast_error.

CREATE OBJECT o_dev.

IF o_dev IS BOUND.

o_dev->name = 'Rafael Riso'.
o_dev->role = 'Team Leader'.
o_dev->preferredlanguage = 'ABAP OO'.

ENDIF.

TRY.

o_dev->clone( IMPORTING clone_instance = o_base ).

o_devcopy ?= o_base.

CATCH cx_sy_move_cast_error INTO o_casterror.

WRITE: / 'Up Cast Failed'.

ENDTRY.

IF o_devcopy IS BOUND.

o_devcopy->name = 'Johnnie Walker'.

ENDIF.

IF o_dev IS BOUND AND o_devcopy IS BOUND.

o_dev->tostring( ).

ULINE.

o_devcopy->tostring( ).

ENDIF.

22/09/2010

Factory Method Design Pattern

The factory method pattern is a design pattern that allows for the creation of objects without specifying the type of object that is to be created in code. A factory class contains a method that allows determination of the created type at run-time.


REPORT ZADN_SAMPLE.

*----------------------------------------------------------------------*
* -> Abstract - CLASS cl_car_base DEFINITION
*----------------------------------------------------------------------*
CLASS cl_car_base DEFINITION ABSTRACT.

PUBLIC SECTION.

METHODS : set_attributes IMPORTING p_color TYPE string
p_year TYPE c,

get_cartype RETURNING value(p_cartype) TYPE string.

PRIVATE SECTION.

DATA : color TYPE string,
year TYPE c LENGTH 4.

ENDCLASS. "cl_car_base DEFINITION

*----------------------------------------------------------------------*
* -> Abstract - CLASS cl_car_base IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_car_base IMPLEMENTATION.

METHOD set_attributes.

me->color = p_color.
me->year = p_year.

ENDMETHOD. "set_attributes

METHOD get_cartype.

ENDMETHOD. "get_cartype

ENDCLASS. "cl_car_base IMPLEMENTATION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_vectra DEFINITION
*----------------------------------------------------------------------*
CLASS cl_vectra DEFINITION INHERITING FROM cl_car_base.

PUBLIC SECTION.

METHODS get_cartype REDEFINITION.

ENDCLASS. "cl_vectra DEFINITION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_vectra IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_vectra IMPLEMENTATION.

METHOD get_cartype.

p_cartype = 'VECTRA'.

ENDMETHOD. "get_cartype

ENDCLASS. "cl_vectra IMPLEMENTATION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_agile DEFINITION
*----------------------------------------------------------------------*
CLASS cl_agile DEFINITION INHERITING FROM cl_car_base.

PUBLIC SECTION.

METHODS get_cartype REDEFINITION.

ENDCLASS. "cl_agile DEFINITION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_agile IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_agile IMPLEMENTATION.

METHOD get_cartype.

p_cartype = 'AGILE'.

ENDMETHOD. "get_cartype

ENDCLASS. "cl_agile IMPLEMENTATION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_prisma DEFINITION
*----------------------------------------------------------------------*
CLASS cl_prisma DEFINITION INHERITING FROM cl_car_base.

PUBLIC SECTION.

METHODS get_cartype REDEFINITION.

ENDCLASS. "cl_prisma DEFINITION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_prisma IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_prisma IMPLEMENTATION.

METHOD get_cartype.

p_cartype = 'PRISMA'.

ENDMETHOD. "get_cartype

ENDCLASS. "cl_prisma IMPLEMENTATION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_fiesta DEFINITION
*----------------------------------------------------------------------*
CLASS cl_fiesta DEFINITION INHERITING FROM cl_car_base.

PUBLIC SECTION.

METHODS get_cartype REDEFINITION.

ENDCLASS. "cl_fiesta DEFINITION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_fiesta IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_fiesta IMPLEMENTATION.

METHOD get_cartype.

p_cartype = 'FIESTA'.

ENDMETHOD. "get_cartype

ENDCLASS. "cl_fiesta IMPLEMENTATION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_focus DEFINITION
*----------------------------------------------------------------------*
CLASS cl_focus DEFINITION INHERITING FROM cl_car_base.

PUBLIC SECTION.

METHODS get_cartype REDEFINITION.

ENDCLASS. "cl_focus DEFINITION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_focus IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_focus IMPLEMENTATION.

METHOD get_cartype.

p_cartype = 'FOCUS'.

ENDMETHOD. "get_cartype

ENDCLASS. "cl_focus IMPLEMENTATION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_ka DEFINITION
*----------------------------------------------------------------------*
CLASS cl_ka DEFINITION INHERITING FROM cl_car_base.

PUBLIC SECTION.

METHODS get_cartype REDEFINITION.

ENDCLASS. "cl_ka DEFINITION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_ka IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_ka IMPLEMENTATION.

METHOD get_cartype.

p_cartype = 'KA'.

ENDMETHOD. "get_cartype

ENDCLASS. "cl_ka IMPLEMENTATION

************************************************************************
************************************************************************
* *
* FACTORY CLASSES DEFINITION *
* *
************************************************************************

*----------------------------------------------------------------------*
* -> Abstract - CLASS cl_car_factory DEFINITION
*----------------------------------------------------------------------*
CLASS cl_car_factory DEFINITION ABSTRACT.

PUBLIC SECTION.

METHODS : create_car IMPORTING p_cartype TYPE n
EXPORTING p_carinstance TYPE REF TO cl_car_base.

ENDCLASS. "cl_car_factory DEFINITION

*----------------------------------------------------------------------*
* Abstract - CLASS cl_car_factory IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_car_factory IMPLEMENTATION.

METHOD create_car.

ENDMETHOD. "create_car

ENDCLASS. "cl_car_factory IMPLEMENTATION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_chevrolet_factory DEFINITION
*----------------------------------------------------------------------*
CLASS cl_chevrolet_factory DEFINITION INHERITING FROM cl_car_factory.

PUBLIC SECTION.

METHODS : create_car REDEFINITION.

ENDCLASS. "cl_chevrolet_factory DEFINITION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_chevrolet_factory IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_chevrolet_factory IMPLEMENTATION.

METHOD create_car.

CASE p_cartype.

WHEN '100'.

CREATE OBJECT p_carinstance TYPE cl_vectra.

WHEN '200'.

CREATE OBJECT p_carinstance TYPE cl_agile.

WHEN '300'.

CREATE OBJECT p_carinstance TYPE cl_prisma.

ENDCASE.

ENDMETHOD. "create_car

ENDCLASS. "cl_chevrolet_factory IMPLEMENTATION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_ford_factory DEFINITION
*----------------------------------------------------------------------*
CLASS cl_ford_factory DEFINITION INHERITING FROM cl_car_factory.

PUBLIC SECTION.

METHODS : create_car REDEFINITION.

ENDCLASS. "cl_ford_factory DEFINITION

*----------------------------------------------------------------------*
* -> Concrete - CLASS cl_ford_factory IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_ford_factory IMPLEMENTATION.

METHOD create_car.

CASE p_cartype.

WHEN '100'.

CREATE OBJECT p_carinstance TYPE cl_fiesta.

WHEN '200'.

CREATE OBJECT p_carinstance TYPE cl_focus.

WHEN '300'.

CREATE OBJECT p_carinstance TYPE cl_ka.

ENDCASE.

ENDMETHOD. "create_car

ENDCLASS. "cl_ford_factory IMPLEMENTATION

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

START-OF-SELECTION.

PARAMETERS : p_type1 TYPE n LENGTH 3 OBLIGATORY DEFAULT '100',
p_type2 TYPE n LENGTH 3 OBLIGATORY DEFAULT '100'.

DATA : o1_chevrolet_factory TYPE REF TO cl_car_factory,
o2_ford_factory TYPE REF TO cl_car_factory.

DATA : o1_car TYPE REF TO cl_car_base,
o2_car TYPE REF TO cl_car_base.

DATA : v_type1 TYPE string,
v_type2 TYPE string.


CREATE OBJECT : o1_chevrolet_factory TYPE cl_chevrolet_factory,
o2_ford_factory TYPE cl_ford_factory.

o1_chevrolet_factory->create_car( EXPORTING p_cartype = p_type1
IMPORTING p_carinstance = o1_car ).

o2_ford_factory->create_car( EXPORTING p_cartype = p_type2
IMPORTING p_carinstance = o2_car ).

IF o1_car IS BOUND.

o1_car->set_attributes( EXPORTING p_color = 'BLACK'
p_year = '2010' ).

v_type1 = o1_car->get_cartype( ).

WRITE : / 'Car Type : ', v_type1.

ULINE.

ENDIF.

IF o2_car IS BOUND.

o2_car->set_attributes( EXPORTING p_color = 'BLACK'
p_year = '2010' ).

v_type2 = o2_car->get_cartype( ).

WRITE : / 'Car Type : ', v_type2.

ENDIF.

21/09/2010

Singleton Design Pattern


REPORT ZADN_SAMPLE.

*----------------------------------------------------------------------*
* CLASS cl_applicationstate DEFINITION
*----------------------------------------------------------------------*
CLASS cl_applicationstate DEFINITION CREATE PRIVATE.

PUBLIC SECTION.

DATA : hostname TYPE c LENGTH 128,
ip_addrs TYPE c LENGTH 15.

CLASS-METHODS : getstate EXPORTING p_instance TYPE REF TO cl_applicationstate.

PRIVATE SECTION.

METHODS : constructor.

CLASS-DATA : _instance TYPE REF TO cl_applicationstate.

ENDCLASS. "cl_ApplicationState DEFINITION


*----------------------------------------------------------------------*
* CLASS cl_applicationstate IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_applicationstate IMPLEMENTATION.

METHOD constructor.

ENDMETHOD. "constructor

METHOD getstate.

IF _instance IS NOT BOUND.

CREATE OBJECT _instance.

p_instance = _instance.

ELSE.

p_instance = _instance.

ENDIF.

ENDMETHOD. "getstate

ENDCLASS. "cl_ApplicationState IMPLEMENTATION

START-OF-SELECTION.

DATA : o1_cl_applicationstate TYPE REF TO cl_applicationstate,
o2_cl_applicationstate TYPE REF TO cl_applicationstate.

cl_applicationstate=>getstate( IMPORTING p_instance = o1_cl_applicationstate ).

IF o1_cl_applicationstate IS BOUND.

o1_cl_applicationstate->hostname = 'LOCALHOST'.
o1_cl_applicationstate->ip_addrs = '127.0.0.1'.

ENDIF.

cl_applicationstate=>getstate( IMPORTING p_instance = o2_cl_applicationstate ).

WRITE / : o1_cl_applicationstate->hostname,
o1_cl_applicationstate->ip_addrs.

ULINE.

WRITE / : o2_cl_applicationstate->hostname,
o2_cl_applicationstate->ip_addrs.

ULINE.

IF o1_cl_applicationstate EQ o2_cl_applicationstate.

WRITE / 'Objetos são iguais'.

ENDIF.

UI Output Options with Local Class


REPORT ZADN_SAMPLE.

*----------------------------------------------------------------------*
* CLASS cl_UI_manager DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_ui_manager DEFINITION.

PUBLIC SECTION.

METHODS : constructor,
set_field_options IMPORTING p_name TYPE c
p_required TYPE c
p_input TYPE c
p_output TYPE c,
commit_ui_changes.

PRIVATE SECTION.

DATA : it_screen TYPE SORTED TABLE OF screen WITH UNIQUE KEY name.

ENDCLASS. "cl_UI_manager DEFINITION

*----------------------------------------------------------------------*
* CLASS cl_UI_manager IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_ui_manager IMPLEMENTATION.

METHOD constructor.

LOOP AT SCREEN.

INSERT screen INTO TABLE me->it_screen.

ENDLOOP.

ENDMETHOD. "constructor

METHOD set_field_options.

FIELD-SYMBOLS : <fs_screen> TYPE screen.

READ TABLE me->it_screen ASSIGNING <fs_screen> WITH KEY name = p_name.

IF <fs_screen> IS ASSIGNED.

<fs_screen>-required = p_required.
<fs_screen>-input = p_input.
<fs_screen>-output = p_output.

ENDIF.

ENDMETHOD. "set_field_options

METHOD commit_ui_changes.

FIELD-SYMBOLS : <fs_screen> TYPE screen.

LOOP AT SCREEN.

READ TABLE me->it_screen ASSIGNING <fs_screen> WITH KEY name = screen-name.

IF <fs_screen> IS ASSIGNED.

MODIFY SCREEN FROM <fs_screen>.

ENDIF.

ENDLOOP.

ENDMETHOD. "commit_UI_changes

ENDCLASS. "cl_UI_manager IMPLEMENTATION

DATA o_cl_ui_manager TYPE REF TO cl_ui_manager.

PARAMETERS : p_1 TYPE c LENGTH 10,
p_2 TYPE c LENGTH 10.

PARAMETERS : ch_1 RADIOBUTTON GROUP xc USER-COMMAND selec,
ch_2 RADIOBUTTON GROUP xc.

INITIALIZATION.

CREATE OBJECT o_cl_ui_manager.

AT SELECTION-SCREEN OUTPUT.

IF o_cl_ui_manager IS BOUND.

o_cl_ui_manager->set_field_options( p_name = 'P_1'
p_required = '0'
p_input = '0'
p_output = '1' ).

o_cl_ui_manager->set_field_options( p_name = 'P_2'
p_required = '1'
p_input = '1'
p_output = '1' ).

o_cl_ui_manager->commit_ui_changes( ).

ENDIF.

17/09/2010

W3C DOM and the SAP iXML Library


REPORT ZADN_SAMPLE.

*----------------------------------------------------------------------*
* -> Local Class Definitions *
*----------------------------------------------------------------------*

CLASS lcl_dom_xmlprocessor DEFINITION.

PUBLIC SECTION.

CLASS-METHODS : class_constructor,
main.

METHODS : constructor,
add_partner IMPORTING im_id TYPE string
im_type TYPE i
im_name TYPE string
im_date TYPE d,
show_document.

PRIVATE SECTION.

CLASS-DATA : ixml_factory TYPE REF TO if_ixml.

DATA : partners_doc TYPE REF TO if_ixml_document,
partners_node TYPE REF TO if_ixml_element.

ENDCLASS. "lcl_dom_xmlprocessor DEFINITION

*----------------------------------------------------------------------*
* - > CLASS lcl_dom_xmlprocessor IMPLEMENTATION *
*----------------------------------------------------------------------*
* - > LOcal Class Implementation *
*----------------------------------------------------------------------*
CLASS lcl_dom_xmlprocessor IMPLEMENTATION.

METHOD class_constructor.

* Retrieve a reference to the iXML factory:
ixml_factory = cl_ixml=>create( ).

ENDMETHOD. "class_constructor

METHOD constructor.

* Create a new DOM-based XML document:
partners_doc = ixml_factory->create_document( ).

* Create the root "partners" element:
partners_node =
partners_doc->create_simple_element(
name = 'Partners'
parent = partners_doc ).

ENDMETHOD. "constructor

METHOD main.

* Method-Local Data Declarations:
DATA: lo_dom_processor TYPE REF TO lcl_dom_xmlprocessor.

* Create an instance of the test driver class:
CREATE OBJECT lo_dom_processor.

* Add a couple of partners to the list:
lo_dom_processor->add_partner( im_id = '12345'
im_type = 2
im_name = 'SAP Developer Network, SDN.'
im_date = '20060201' ).

lo_dom_processor->add_partner( im_id = '33589'
im_type = 1
im_name = 'ABAP Developer Network, Brasil.'
im_date = '20090911' ).

lo_dom_processor->add_partner( im_id = '23456'
im_type = 2
im_name = 'SAP Press, Books Online.'
im_date = '20090615' ).

* Display the resultant XML document on the screen:
lo_dom_processor->show_document( ).

ENDMETHOD. "main

METHOD add_partner.

* Method-Local Data Declarations:
DATA: lo_partner_node TYPE REF TO if_ixml_element,
lv_type TYPE string,
lv_creation_date TYPE string.

* Copy the parameters into string format:
lv_type = im_type.

CONCATENATE im_date+0(4) im_date+4(2) im_date+6(2) INTO lv_creation_date SEPARATED BY '-'.

* Create a partner node:
lo_partner_node = partners_doc->create_simple_element( name = 'Partner'
parent = partners_node ).

* Set the "type" attribute on the partners:
lo_partner_node->set_attribute( name = 'Type' value = lv_type ).

* Fill in the remaining information for the partner:
partners_doc->create_simple_element( name = 'PartnerId'
value = im_id
parent = lo_partner_node ).

partners_doc->create_simple_element( name = 'Name'
value = im_name
parent = lo_partner_node ).

partners_doc->create_simple_element( name = 'CreationDate'
value = lv_creation_date
parent = lo_partner_node ).

ENDMETHOD. "add_partner

METHOD show_document.

* Display the XML document on the screen:
CALL FUNCTION 'SDIXML_DOM_TO_SCREEN'
EXPORTING
document = partners_doc
EXCEPTIONS
no_document = 1
OTHERS = 2.

ENDMETHOD. "show_document

ENDCLASS. "lcl_dom_xmlprocessor IMPLEMENTATION

*----------------------------------------------------------------------*
* -> START-OF-SELECTION Event Module *
*----------------------------------------------------------------------*

START-OF-SELECTION.
lcl_dom_xmlprocessor=>main( ).



Source: SAP

16/09/2010

REGEX SAMPLE


REPORT ZRR_SAMPLE.

TYPE-POOLS: abap.

DATA: lt_html TYPE TABLE OF string,
lo_pattern TYPE REF TO cl_abap_regex,
lo_matcher TYPE REF TO cl_abap_matcher,
ls_match TYPE match_result,
lv_header TYPE string,
lv_header_txt TYPE string.

FIELD-SYMBOLS: <lfs_html> TYPE string,
<lfs_sub> TYPE submatch_result.

START-OF-SELECTION.

* Build the HTML document sample:
APPEND '<html><head></head><body>' TO lt_html.
APPEND '<H1>String Processing Techniques</H1>' TO lt_html.
APPEND '<h2>ABAP Character Types</h2>' TO lt_html.
APPEND '<H2>Developing a String Library</h2>' TO lt_html.
APPEND '<h3>Designing the API</h3>' TO lt_html.
APPEND '<h3>...</h3>' TO lt_html.
APPEND '</body></html>' TO lt_html.

* Extract a table of contents from the HTML document:
TRY.
* Parse the regex pattern:
CREATE OBJECT lo_pattern
EXPORTING
pattern = '<([h][1-6]).*>(.*)</\1>'
ignore_case = abap_true.

* Create a matcher to search the example HTML document:
lo_matcher = lo_pattern->create_matcher( table = lt_html ).

* Add each match to the table of contents:
WHILE lo_matcher->find_next( ) EQ abap_true.

* Retreive the next match found in the HTML document:
ls_match = lo_matcher->get_match( ).

READ TABLE lt_html INDEX ls_match-line ASSIGNING <lfs_html>.

* Since we are using backreferences, the captured text
* is actually stored in the submatch results:
LOOP AT ls_match-submatches ASSIGNING <lfs_sub>.

IF sy-tabix EQ 1.

lv_header = <lfs_html>+<lfs_sub>-offset(<lfs_sub>-length).

ELSEIF sy-tabix EQ 2.

lv_header_txt = <lfs_html>+<lfs_sub>-offset(<lfs_sub>-length).

ENDIF.

ENDLOOP.

* Output the table of contents record:
CASE lv_header.

WHEN 'H1' OR 'h1'.
WRITE: / lv_header_txt.
WHEN 'H2' OR 'h2'.
WRITE: / '##', lv_header_txt.
WHEN 'H3' OR 'h3'.
WRITE: / '####', lv_header_txt.

ENDCASE.

ENDWHILE.

CATCH cx_sy_regex.
"Invalid regular expression pattern...
CATCH cx_sy_matcher.
"Problem generating matcher instance...

ENDTRY.


Source: SAP

Comparing Strings


REPORT ZRR_SAMPLE.

TYPE-POOLS: abap.

PARAMETERS: p_str1 TYPE string,
p_str2 TYPE string.

DATA: lv_equal_flag TYPE abap_bool.

START-OF-SELECTION.

PERFORM check_char_is_equal USING p_str1
p_str2
CHANGING lv_equal_flag.

IF lv_equal_flag EQ abap_true.

WRITE: / 'Os valores são iguais...'.

ELSE.

WRITE: / 'Os valores não são iguais...'.

ENDIF.

*----------------------------------------------------------------------*
* -> FORM check_char_is_equal *
*----------------------------------------------------------------------*
* -> Realiza a verificação dos valores informados *
*----------------------------------------------------------------------*
FORM check_char_is_equal USING im_string1
im_string2
CHANGING ch_flag.

DATA: lv_string1 TYPE string,
lv_string2 TYPE string.

lv_string1 = im_string1.
lv_string2 = im_string2.

TRANSLATE lv_string1 TO UPPER CASE.
TRANSLATE lv_string2 TO UPPER CASE.

IF lv_string1 EQ lv_string2.

ch_flag = abap_true.

ELSE.

ch_flag = abap_false.

ENDIF.

ENDFORM. " FORM check_char_is_equal

14/09/2010

OpenSQL WHERE Clauses - Interactive and Dynamic


REPORT ZRR_SAMPLE.

PARAMETERS dbtab TYPE tabname DEFAULT 'SPFLI'.

TYPE-POOLS rsds.

DATA : field_tab TYPE TABLE OF rsdsfields,
table_tab TYPE TABLE OF rsdstabs,
cond_tab TYPE rsds_twhere.

DATA : table LIKE LINE OF table_tab,
cond LIKE LINE OF cond_tab.

DATA : tadir_wa TYPE tadir,
selid TYPE rsdynsel-selid.

DATA : dref TYPE REF TO data,
alv TYPE REF TO cl_salv_table.

FIELD-SYMBOLS <table> TYPE STANDARD TABLE.

SELECT SINGLE *
FROM tadir
INTO tadir_wa
WHERE pgmid = 'R3TR' AND
object = 'TABL' AND
obj_name = dbtab.

IF sy-subrc <> 0.

MESSAGE 'Tabela Não Encontrada' TYPE 'I' DISPLAY LIKE 'E'.
LEAVE PROGRAM.

ENDIF.

table-prim_tab = dbtab.

APPEND table TO table_tab.

CALL FUNCTION 'FREE_SELECTIONS_INIT'
EXPORTING
kind = 'T'
IMPORTING
selection_id = selid
TABLES
tables_tab = table_tab
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.

MESSAGE 'Erro ao Executar a Inicialização' TYPE 'I' DISPLAY LIKE 'E'.
LEAVE PROGRAM.

ENDIF.

CALL FUNCTION 'FREE_SELECTIONS_DIALOG'
EXPORTING
selection_id = selid
title = 'Seleção Dinamica'
as_window = ' '
IMPORTING
where_clauses = cond_tab
TABLES
fields_tab = field_tab
EXCEPTIONS
OTHERS = 4.

IF sy-subrc <> 0.

MESSAGE 'Erro ao Definir as Condições de Seleção' TYPE 'I'.
LEAVE PROGRAM.

ENDIF.

READ TABLE cond_tab WITH KEY tablename = dbtab INTO cond.

IF sy-subrc <> 0.

MESSAGE 'Todos os Registros serão' TYPE 'I'.

ENDIF.

CREATE DATA dref TYPE TABLE OF (dbtab).

ASSIGN dref->* TO <table>.

TRY.

SELECT *
FROM (dbtab)
INTO TABLE <table>
WHERE (cond-where_tab).

CATCH cx_sy_dynamic_osql_error.

MESSAGE 'Erro no Open SQL Dinamico' TYPE 'I' DISPLAY LIKE 'E'.
LEAVE PROGRAM.

ENDTRY.

TRY.

cl_salv_table=>factory( IMPORTING r_salv_table = alv
CHANGING t_table = <table> ).

alv->display( ).

CATCH cx_salv_msg.

MESSAGE 'Erro ao Criar o ALV' TYPE 'I' DISPLAY LIKE 'E'.

ENDTRY.

13/09/2010

Add Button in Report and Change Icon Image


REPORT ZRR_SAMPLE.

TYPE-POOLS: icon.

TABLES: sscrfields.

CONSTANTS: true TYPE true VALUE 'T',
false TYPE false VALUE 'F'.

DATA: g_use_pipe TYPE boole_d,
sc_functxt TYPE smp_dyntxt.

PARAMETERS: p_carrid TYPE s_carr_id,
p_cityfr TYPE s_from_cit.

SELECTION-SCREEN FUNCTION KEY 1.

INITIALIZATION.

g_use_pipe = true.

AT SELECTION-SCREEN.

CASE sscrfields-ucomm.
WHEN 'FC01'.
IF g_use_pipe = true.

g_use_pipe = false.

ELSE.

g_use_pipe = true.

ENDIF.
WHEN OTHERS.
ENDCASE.

AT SELECTION-SCREEN OUTPUT.

IF g_use_pipe = true.

sc_functxt-icon_id = icon_view_expand_horizontal.
sc_functxt-quickinfo = 'Change field separator'.
sc_functxt-icon_text = 'Use Tab delimiter'.
sscrfields-functxt_01 = sc_functxt.

ELSE.

sc_functxt-icon_id = icon_view_expand_vertical.
sc_functxt-quickinfo = 'Change field separator'.
sc_functxt-icon_text = 'Use PIPE delimiter'.
sscrfields-functxt_01 = sc_functxt.

ENDIF.

Expand- Collapse Button in Selection Screen


REPORT ZRR_SAMPLE.

DATA: wf_ucomm TYPE sy-ucomm.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECTION-SCREEN PUSHBUTTON /01(30) but1 USER-COMMAND but1.
SELECTION-SCREEN PUSHBUTTON /01(30) but2 USER-COMMAND but2.
PARAMETERS: p_test TYPE c.
SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = 'ICON_EXPAND'
IMPORTING
RESULT = but1
EXCEPTIONS
OTHERS = 0.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = 'ICON_COLLAPSE'
IMPORTING
RESULT = but2
EXCEPTIONS
OTHERS = 0.

AT SELECTION-SCREEN.

IF sy-ucomm EQ 'BUT1'.
wf_ucomm = 'BUT1'.
ELSEIF sy-ucomm EQ 'BUT2'.
wf_ucomm = 'BUT2'.
ENDIF.

AT SELECTION-SCREEN OUTPUT.

IF wf_ucomm IS INITIAL.
LOOP AT SCREEN.
IF screen-name CS 'P_TEST' OR
screen-name EQ 'BUT2'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSEIF wf_ucomm EQ 'BUT1'.
LOOP AT SCREEN.
IF screen-name CS 'P_TEST' OR
screen-name EQ 'BUT2'.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
IF screen-name EQ 'BUT1'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSEIF wf_ucomm EQ 'BUT2' .
LOOP AT SCREEN.
IF screen-name CS 'P_TEST' OR
screen-name EQ 'BUT2'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
IF screen-name EQ 'BUT1'.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.

Expand- Collapse Button in Selection Screen


REPORT ZRR_SAMPLE.

DATA: wf_ucomm TYPE sy-ucomm.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECTION-SCREEN PUSHBUTTON /01(30) but1 USER-COMMAND but1.
SELECTION-SCREEN PUSHBUTTON /01(30) but2 USER-COMMAND but2.
PARAMETERS: p_test TYPE c.
SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = 'ICON_EXPAND'
IMPORTING
RESULT = but1
EXCEPTIONS
OTHERS = 0.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = 'ICON_COLLAPSE'
IMPORTING
RESULT = but2
EXCEPTIONS
OTHERS = 0.

AT SELECTION-SCREEN.

IF sy-ucomm EQ 'BUT1'.
wf_ucomm = 'BUT1'.
ELSEIF sy-ucomm EQ 'BUT2'.
wf_ucomm = 'BUT2'.
ENDIF.

AT SELECTION-SCREEN OUTPUT.

IF wf_ucomm IS INITIAL.
LOOP AT SCREEN.
IF screen-name CS 'P_TEST' OR
screen-name EQ 'BUT2'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSEIF wf_ucomm EQ 'BUT1'.
LOOP AT SCREEN.
IF screen-name CS 'P_TEST' OR
screen-name EQ 'BUT2'.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
IF screen-name EQ 'BUT1'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSEIF wf_ucomm EQ 'BUT2' .
LOOP AT SCREEN.
IF screen-name CS 'P_TEST' OR
screen-name EQ 'BUT2'.
screen-active = 0.
MODIFY SCREEN.
ENDIF.
IF screen-name EQ 'BUT1'.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.

ZEBRA PRINTER - ZPL SAMPLE CODE

Necessidade: Imprimir etiqueta em impressora ZEBRA.

Solução: No exemplo abaixo podemos substituir os valores fixos por variaveis criadas em um smartform por exemplo.

Aqui o objetivo é simplesmente mostrar um exemplo sobre a codificação ZPL. Copie o arquivo cole no bloco de notas e mande imprimir na impressora ZEBRA, para visualizar o resultado.


^XA
^LL310
^PRA
^FO760,415^GB060,725,3^FS
^FO760,970^GB060,170,43^FS
^FO770,40^ADR,40,10^FR^FH_^FDRAFAEL RISO | ^FS
^FO770,235^ADR,40,10^FR^FH_^FD01^FS
^FO465,030^GB290,010,40^FS
^FO500,030^AR,25,60^FR^FH_^FDESTOQUE^FS
^FO730,070^GB025,1070,20^FS
^FO733,080^ADR,14,14^FR^FH_^FDNOSSO CODIGO^FS
^FO733,335^ADR,14,14^FR^FH_^FDDESCRICAO^FS
^FO665,070^GB090,250,3^FS
^FO665,319^GB090,820,3^FS
^FO640,070^GB025,1070,20^FS
^FO640,080^ADR,14,14^FR^FH_^FDLARGURA^FS
^FO640,280^ADR,14,14^FR^FH_^FDCOMPRIMENTO^FS
^FO640,490^ADR,14,14^FR^FH_^FDPECAS^FS
^FO640,700^ADR,14,14^FR^FH_^FDQUANTIDADE^FS
^FO640,975^ADR,14,14^FR^FH_^FDUND^FS
^FO575,070^GB090,200,3^FS
^FO575,269^GB090,210,3^FS
^FO575,478^GB090,190,3^FS
^FO575,667^GB090,300,3^FS
^FO575,966^GB090,173,3^FS
^FO550,070^GB025,1070,20^FS
^FO525,070^GB025,535,20^FS
^FO550,250^ADR,14,14^FR^FH_^FDUNIDADE METALICA^FS
^FO525,225^ADR,14,14^FR^FH_^FDORIGEM DESTINO^FS
^FO550,810^ADR,14,14^FR^FH_^FDETIQUETA^FS
^FO465,070^GB090,267,3^FS
^FO465,337^GB090,267,3^FS
^FO465,604^GB090,535,83^FS
^FO030,030^GB325,010,40^FS
^FO110,030^AR,25,60^FR^FH_^FDCLIENTE^FS
^FO440,030^GB025,1110,20^FS
^FO330,070^GB025,1070,20^FS
^FO333,080^ADR,14,10^FR^FH_^FDMATERIA PRIMA^FS3
^FO333,435^ADR,14,10^FR^FH_^FDPRODUTO ACABADO^FS
^FO333,795^ADR,14,10^FR^FH_^FDCODIGO SEGURANCA^FS
^FO275,070^GB080,356,3^FS
^FO275,425^GB080,356,3^FS
^FO275,780^GB080,359,3^FS
^FO250,070^GB025,1070,20^FS
^FO253,080^ADR,14,14^FR^FH_^FDNOTA^FS3
^FO253,275^ADR,14,14^FR^FH_^FDEMISSOR^FS
^FO195,070^GB080,200,3^FS
^FO195,269^GB080,870,3^FS
^FO170,070^GB025,1070,20^FS
^FO173,080^ADR,14,14^FR^FH_^FDPEDIDO^FS3
^FO173,275^ADR,14,14^FR^FH_^FDITEM^FS
^FO173,380^ADR,14,14^FR^FH_^FDCLIENTE^FS
^FO115,070^GB080,200,3^FS
^FO115,269^GB080,100,3^FS
^FO115,369^GB080,770,3^FS
^FO090,070^GB025,1070,20^FS
^FO093,080^ADR,14,14^FR^FH_^FDORDEM PRODUCAO^FS
^FO093,275^ADR,14,14^FR^FH_^FDCOD.EMB^FS
^FO093,380^ADR,14,14^FR^FH_^FDDATA ENTREGA^FS
^FO093,595^ADR,14,14^FR^FH_^FDEMISSAO ETIQUETA^FS
^FO093,890^ADR,14,14^FR^FH_^FDVOLUME^FS
^FO093,890^ADR,14,14^FR^FH_^FDREGIAO^FS
^FO030,070^GB060,200,3^FS
^FO030,269^GB060,100,3^FS
^FO030,368^GB060,213,3^FS
^FO030,580^GB060,300,3^FS
^FO030,880^GB060,139,3^FS
^FO030,880^GB060,260,33^FS
^FO770,425^ASR,20,20^FR^FD02^FS
^FO770,415^ASR,20,20^FR^FH_^FD03^FS
^FO670,080^ASR,20,15^FR^FH_^FD04^FS
^FO670,325^ASR,15,15^FD05^FS
^FO580,80^ASR,40,17^FR^FH_^FD06^FS
^FO580,280^ASR,40,17^FR^FH_^FD07^FS
^FO580,490^ASR,40,17^FR^FH_^FD08^FS
^FO580,690^ASR,50,60^FR^FH_^FD09^FS
^FO580,1000^ASR,40,40^FR^FH_^FD10^FS
^FO470,080^ASR,20,20^FR^FH_^FD11^FS
^FO470,380^ASR,20,20^FR^FH_^FD12^FS
^FO470,635^ASR,80,120^FR^FD13^FS
^FO280,080^ASR,30,14^FR^FH_^FD14^FS
^FO280,435^ASR,30,14^FR^FH_^FD15^FS
^FO118,080^ASR,30,30^FR^FH_^FD16^FS
^FO118,280^ASR,30,30^FR^FH_^FD17^FS
^FO118,380^ASR,20,20^FR^FH_^FD18^FS
^FO200,080^ASR,30,20^FR^FH_^FD19^FS
^FO200,290^ASR,30,15^FR^FH_^FD20^FS
^FO035,080^ASR,30,30^FR^FH_^FD21^FS
^FO035,280^ASR,30,30^FR^FH_^FD22^FS
^FO035,385^ASR,20,15^FR^FH_^FD23^FS
^FO035,590^ASR,15,15^FR^FH_^FD24^FS
^FO035,890^ASR,15,15^FR^FH_^FD25^FS
^FO035,890^ASR,40,40^FR^FH_^FD26^FS
^FO440,480^ADR,14,10^FR^FDETIQUETA EM CODIGO DE BARRAS^FS3
^FO390,90^BY2^BCR,45,Y,N,N^FD27^FS
^FO50,1150^BY2^BCN,35,Y,N,N^FD28^FS
^FO280,780^B7R,5,2,5,10,N^FD29^FS
^ISFIXO0001,Y^FS
^XZ