10.31.2009

SAP ABAP : Blocking Searchhelp and Create New Searchhelp

How to block a pre-existing search help and create new search help which contains the old ones data and the new one which entered now.

Look at this statement .

parameters :p_pernr like pa0001-pernr MATCHCODE OBJECT new_search.

If you define like this previous search help is gone.

You have to create new search help into the dictionary .

or else .



parameters :p_pernr like pa0001-pernr

define like this
use this event

AT Selection-screen on p_pernr.

under this event call this function module and pass required data .

F4IF_FIELD_VALUE_REQUEST
* F4 help also returning the value to be displayed in internal table

F4IF_INT_TABLE_VALUE_REQUEST
read more...

SAP ABAP : Attach a Search Help to the Screen Field

I have a requirement to attach a search help to the screen field. When I click on the drop-down list, it should automatically pick the company code that is already displayed on the screen and show the results.

It dosent make any sense for search help to wait for user to input the same company code which is already displayed.

Use this functionality to get help.

FORM HELP_CHECK.


*-- Set up fields to retrieve data

ltab_fields-tabname = 'ZFI_PMNTADV'.
ltab_fields-fieldname = 'CHECT'.
ltab_fields-selectflag = 'X'.
APPEND ltab_fields.

ltab_fields-tabname = 'ZFI_PMNTADV'.
ltab_fields-fieldname = 'PMNT_ADV'.
ltab_fields-selectflag = 'X'.
APPEND ltab_fields.

SORT ltab_fields.
DELETE ADJACENT DUPLICATES FROM ltab_fields.

*-- Fill values
SELECT chect
INTO TABLE ltab_values
FROM zfi_pmntadv
WHERE pmnt_adv NE space.
SORT ltab_values.
DELETE ADJACENT DUPLICATES FROM ltab_values.

CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'
EXPORTING
fieldname = 'chect'
tabname = 'zfi_pmntadv'
title_in_values_list = 'Select a value'
IMPORTING
select_value = so_chect
TABLES
fields = ltab_fields
valuetab = ltab_values
EXCEPTIONS
field_not_in_ddic = 01
more_then_one_selectfield = 02
no_selectfield = 03.


ENDFORM. "fiscal_year
read more...

Splash Screen in ABAP



I created 2 MODAL screens 0806 & 2009
0806 was for start of job spash & 20009 was an exit SPLASH
Used this effectively in a lrge DOI Excel download program..

2 JPG files with a nice Indian Welcome & fancy Bengali Text!
Each Modal scren had 2 Containers
CUSTOM_1 shaped for Picture control
CUSTOM_2 for CL_GUI_TIMER control



* Create 2 MODAL screens 0806 and 2009
* 1 CUSTOM_1 shaped to hold JPG
* and 1 CUSTOM_2 to hold TIMER


REPORT zpp_r012 LINE-SIZE 160
LINE-COUNT 72
MESSAGE-ID zpp01.

DATA: container1 TYPE REF TO cl_gui_custom_container,
container2 TYPE REF TO cl_gui_custom_container,
picture TYPE REF TO cl_gui_picture.

DATA: graphic_url(255),
g_result TYPE i,
g_linesz TYPE i,
g_filesz TYPE i,
g_name(100).

TYPES: t_graphic_line(256) TYPE x.

DATA: graphic_line TYPE t_graphic_line,
graphic_table TYPE TABLE OF t_graphic_line.


*---------------------------------------------------------------------*
* CLASS lcl_event_handler DEFINITION
*---------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION.

PUBLIC SECTION.
CLASS-METHODS: on_finished FOR EVENT finished OF cl_gui_timer.
ENDCLASS. "lcl_event_handler DEFINITION

*---------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
METHOD on_finished.
IF sy-dynnr = 2009.
LEAVE PROGRAM.
ELSE.
PERFORM f_excel_job.
ENDIF.
ENDMETHOD. "on_finished
ENDCLASS. "lcl_event_handler IMPLEMENTATION

DATA timer TYPE REF TO cl_gui_timer.
DATA event_handler TYPE REF TO lcl_event_handler.
DATA timeout TYPE i VALUE '3'.

*&---------------------------------------------------------------------*
* SELECTION-SCREEN DESIGN
*
*&---------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b2sels WITH FRAME TITLE text-002.
PARAMETERS: pwerks LIKE mseg-werks OBLIGATORY, "THIS Plant
pbudat LIKE mkpf-budat OBLIGATORY. "THIS Date
SELECTION-SCREEN: END OF BLOCK b2sels.

*&---------------------------------------------------------------------*
* INITIALIZATION EVENT
*
*&---------------------------------------------------------------------*
INITIALIZATION.

*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN EVENT
*
*&---------------------------------------------------------------------*
**Use this EVENT to validate SELECTION-SCREEN
AT SELECTION-SCREEN.


*&---------------------------------------------------------------------*
* START-OF-SELECTION EVENT
*
*&---------------------------------------------------------------------*
START-OF-SELECTION.

CALL SCREEN 0806 STARTING AT 30 4.

*&---------------------------------------------------------------------*
*& Form f_excel_job
*&---------------------------------------------------------------------*
FORM f_excel_job.

* LOTS of Code

CALL SCREEN 2009 STARTING AT 30 4.

ENDFORM. "f_excel_job

** LOTS of CODE

*&---------------------------------------------------------------------*
*& Form getpicurl
*&---------------------------------------------------------------------*
FORM getpicurl.

OPEN DATASET g_name FOR INPUT IN BINARY MODE.

REFRESH graphic_table.
CLEAR g_filesz.

DO.
CLEAR graphic_line.
READ DATASET g_name INTO graphic_line ACTUAL LENGTH g_linesz.

ADD g_linesz TO g_filesz.

APPEND graphic_line TO graphic_table.
IF sy-subrc <> 0.
EXIT.
ENDIF.

ENDDO.

CLOSE DATASET g_name.

CLEAR graphic_url.

CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = 'IMAGE'
subtype = 'GIF'
TABLES
data = graphic_table
CHANGING
url = graphic_url
EXCEPTIONS
dp_invalid_parameter = 1
dp_error_put_table = 2
dp_error_general = 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.
EXIT.
ENDIF.


IF graphic_url IS NOT INITIAL.

CALL METHOD picture->clear_picture
EXCEPTIONS
error = 1.

CALL METHOD picture->load_picture_from_url
EXPORTING
url = graphic_url
IMPORTING
RESULT = g_result.

CALL METHOD picture->set_display_mode
EXPORTING
display_mode = picture->display_mode_normal_center
EXCEPTIONS
error = 1.

CALL METHOD cl_gui_cfw=>update_view.
ENDIF.

ENDFORM. "getpicurl

*---------------------------------------------------------------------*
* MODULE zjncpbo OUTPUT screen 0806
*---------------------------------------------------------------------*
MODULE zjncpbo OUTPUT.

MOVE 'NAMASTE.JPG' TO g_name.

CREATE OBJECT: container1 EXPORTING container_name = 'CUSTOM_1',
container2 EXPORTING container_name = 'CUSTOM_2',
picture EXPORTING parent = container1,
timer EXPORTING parent = container2.

SET HANDLER lcl_event_handler=>on_finished FOR timer.

* Start Timer
timer->interval = timeout.
CALL METHOD timer->run.

PERFORM getpicurl.

CALL METHOD cl_gui_cfw=>flush.

ENDMODULE. " PBO

*---------------------------------------------------------------------*
* MODULE zjncpbo2 OUTPUT screen 2009
*---------------------------------------------------------------------*
MODULE zjncpbo2 OUTPUT.

MOVE 'THANKS.JPG' TO g_name.

CREATE OBJECT: container1 EXPORTING container_name = 'CUSTOM_1',
container2 EXPORTING container_name = 'CUSTOM_2',
picture EXPORTING parent = container1,
timer EXPORTING parent = container2.

SET HANDLER lcl_event_handler=>on_finished FOR timer.

* Start Timer
timer->interval = timeout.
CALL METHOD timer->run.

PERFORM getpicurl.

CALL METHOD cl_gui_cfw=>flush.

ENDMODULE.
read more...

What is the difference between SY-UCOMM and OK_CODE in Dialog Program?

sy-ucomm is for doing the functions what the user wishes to do at that particular event. You use it in menus and other place . this mainly in using

ok_code is generally used in screen as of I have used. You will define the function in the screen. and you can use it in the main program.

ok_code acts just as a temporary variable that stores the value of sy-ucomm.


When user interacts with the screen elements, the function code that you have assigned is filled in the sy-ucomm field which is turn gets reflected in OK_CODE.

In your ABAP programs, you should work with the OK_CODE field instead of SY-UCOMM. There are two reasons for this: Firstly, the ABAP program has full control over fields declared within it, and secondly, you should never change the value of an ABAP system field. However, you should also always initialize the OK_CODE field in an ABAP program for the following reason:

In the same way that the OK_CODE field in the ABAP program and the system field SY-UCOMM receive the contents of the corresponding screen fields in the PAI event, their contents are also assigned to the OK_CODE screen field and system field SYST-UCOMM in the PBO event. Therefore, you must clear the OK_CODE field in the ABAP program to ensure that the function code of a screen is not already filled in the PBO event with an unwanted value. This is particularly important when the next PAI event can be triggered with an empty function code (for example, using ENTER). Empty function codes do not affect SY-UCOMM or the OK_CODE field, and consequently, the old field contents are transported.
read more...

Change the Input Fields Dynamically in a Screen ABAP Dialog Programming

ABAP Dialog Programming Questions:

How to change the input fields dynamically in a screen which consists of 9 text fields?
Moreover the user must not enter values in some of the input fields where the values are given.

1.If you want to change the input fields on some user input then use 'user-command ac' after the field on which you want the action.
2.Specify the modif id 'xxx' for each screen object.


3.Then in the event 'AT SELECTION-SCREEN ON OUTPUT' loop at screen. check the screen-group1(modif id ) of screen objects and change the status of the object.
4.You can view all the screen attribute from se11.

The following example may help you:

SELECTION-SCREEN BEGIN OF BLOCK 001.
PARAMETERS: P_MRU RADIOBUTTON GROUP SEL DEFAULT 'X' USER-COMMAND AC,
P_PART RADIOBUTTON GROUP SEL.
SELECT-OPTIONS P1 FOR MODIF ID PRT.
SELECT-OPTIONS G1 FOR MODIF ID MRU.
SELECTION-SCREEN END OF BLOCK 001.

AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF P_MRU = 'X'.
IF SCREEN-GROUP1 = 'PRT'.
SCREEN-INPUT = '0'.
ENDIF.
IF SCREEN-GROUP1 = 'MRU'.
SCREEN-INPUT = '1'.
ENDIF.
ELSEIF P_PART = 'X'.
IF SCREEN-GROUP1 = 'MRU'.
SCREEN-INPUT = '0'.
ENDIF.
IF SCREEN-GROUP1 = 'PRT'.
SCREEN-INPUT = '1'.
ENDIF.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
read more...

ABAP : A Sample Hide & Get Cursor in Interactive Programming

Hide & Get Cursor is used in interactive programming ( in the event AT LINE-selection).
Using Hide in Loop..Endloop, you can get the field name At Line-Select
Event While Double Clicking That Line.

****PROG.BEGIN***************************************************************
*&------------------------------------------------------------
*& Report ZPREM_INTERACTIVE *
*&
*&------------------------------------------------------------*
*&
*&
*&------------------------------------------------------------*

REPORT zprem_interactive .

TYPES : BEGIN OF ty_test,
code TYPE i,
name(10) TYPE c,
amount TYPE p DECIMALS 2,
END OF ty_test.

DATA : it_test TYPE STANDARD TABLE OF ty_test WITH HEADER LINE INITIAL SIZE 10.

DATA : wa TYPE ty_test,
chk1 TYPE c,
fldname(30), fldval(50).

*set pf-status 'PF01'.
*set titlebar 'PF01'.
*

INITIALIZATION.
it_test-code = 300.
it_test-name = 'Ramesh'.
it_test-amount = 5500.
APPEND it_test.

wa-code = 207.
wa-name = 'Prem'.
wa-amount = 5000.
APPEND wa TO it_test.

it_test-code = 117.
it_test-name = 'James Bond'.
it_test-amount = 9900.
INSERT it_test INDEX 3.

it_test-code = 217.
it_test-name = 'Sivaraman'.
it_test-amount = 9900.
INSERT it_test INDEX 3.

it_test-code = 201.
it_test-name = 'Saravanan'.
it_test-amount = 1000.
APPEND it_test.

it_test-code = 210.
it_test-name = 'Shanmugam'.
it_test-amount = 6000.
APPEND it_test.

WRITE : / 'Loop Display ( Appended rows ) :-'.
LOOP AT it_test.
WRITE : / chk1 AS CHECKBOX,
sy-tabix, sy-vline, it_test-code, it_test-name, it_test-amount.
HIDE : it_test-code, it_test-name.
ENDLOOP.
SKIP.

END-OF-SELECTION.
CLEAR : it_test-code, it_test-name.
WRITE : / 'this from end of selection'.


*&--------------------------------------------------------------------*
*& Form DISP1
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM disp1.
WINDOW STARTING AT 15 10
ENDING AT 80 15.
DO.
CLEAR chk1.
READ LINE sy-index FIELD VALUE chk1.
IF sy-subrc NE 0.
EXIT.
ELSE.
CHECK chk1 NE space.
WRITE : / it_test-code, it_test-name.
MODIFY CURRENT LINE :
FIELD VALUE chk1 FROM ' '
FIELD FORMAT chk1 INPUT OFF.
ENDIF.
ENDDO.
ENDFORM. "DISP1

***line double click ****
AT LINE-SELECTION.
CHECK sy-lsind = 1.
WINDOW STARTING AT 5 4
ENDING AT 85 20.
WRITE: / 'THE USER DOUBLE-CLICKED A LINE IN THE REPORT'.
WRITE: / sy-lisel.
WRITE : / 'Sometime ',it_test-name, ' is good '.
WRITE : / 'Sometime ',it_test-name, ' is bad '.
WRITE : / 'Sometime ',it_test-name, ' is rich '.
WRITE : / 'Sometime ',it_test-name, ' is poor '.
WRITE : / 'Who knows, who is ',it_test-name, ' ? '.
WRITE : /, / 'we can also use this in SELECT statement'.
CLEAR : it_test-code, it_test-name.

.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

ULINE.
SKIP.
SKIP.
WRITE : / 'Below from Get Cursor Field...'.
GET CURSOR FIELD fldname VALUE fldval.
CONDENSE fldname.
CONDENSE fldval.
WRITE : / 'You have clicked ', fldname, ' & its value is ', fldval.

***function key press F6 ****
AT PF06.
PERFORM disp1.

*AT USER-COMMAND.
* CASE SY-UCOMM.
* WHEN 'STOP' OR 'CANCEL'.
* LEAVE TO SCREEN 0.
* WHEN 'TESTME'.
* PERFORM DISP1.
* ENDCASE.
read more...

SAP ABAP : Dialog Box : "Common used of Dialog Screen for Display, Change, Delete

It is not required of you to create and maintain different dialog screen for each screen functions for Create, Change, Delete and Dispaly. You can shared the used of a single Dialog Screen and used the MODIFY SCREEN to make the Field to be modify or not. Modifications and maintenance will be easier when user request you to change any screen layout.

PROCESS BEFORE OUTPUT.
MODULE 0250_STATUS.
LOOP.
MODULE STATUS_0120.
ENDLOOP.

LOOP.
MODULE STATUS_0110.
ENDLOOP.

LOOP.
MODULE STATUS_0100.
ENDLOOP.
*
PROCESS AFTER INPUT.
MODULE REFRESH_0250.
LOOP.
MODULE USER_COMMAND_0120.
ENDLOOP.

LOOP.
MODULE USER_COMMAND_0110.
ENDLOOP.

* For example, if the user enter the Delete Screen, you will make all the Fields non-Editable.
*&---------------------------------------------------------------------*
*& Module 0250_STATUS OUTPUT
*&---------------------------------------------------------------------*
* text *
*----------------------------------------------------------------------*
MODULE 0250_STATUS OUTPUT.
SET PF-STATUS 'Z250'.
SET TITLEBAR 'Z250'.
IF OKSAVE = 'DEL'.
* Make the SAVE Menu button inactive
SET PF-STATUS 'Z250' EXCLUDING 'SAVE'.

* Make all the Fields non-Editable
LOOP AT SCREEN.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDLOOP.
ENDIF.

* For example, if the user enter the Modify Screen, you will make all the Fields Group 1 that
* have a 'M' non-Editable.
* You specify the 'M' for Group 1 using the Screen Painter Attribute
IF OKSAVE = 'MOD'.
* Make the DELE Menu button inactive
SET PF-STATUS 'Z250' EXCLUDING 'DELE'.

* Make all the Fields Groups 'M' non-Editable
LOOP AT SCREEN.
check screen-group1 = 'M'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
CLEAR OKCODE.
ENDMODULE.
read more...

SAP Basis & Security Authorization : How to apply OSS notes to my R/3 system?

In order to fix one of the problem in R/3 system, SAP will asked you to download an OSS notes which is a ".car" file.

To work with a CAR File do the following at OS Level:

Get into OS as adm

Copy the .CAR file to a Temporary Directory.

Uncompress the file with SAPCAR

Copy the the data file generated in the data transport directory
( ej: = /usr/Sap/trans/data).

Copy the the cofile file generated in the cofiles transport directory
( = ej: /usr/Sap/trans/cofiles).

Run transaction STMS

Upload the support package with SPAM transaction and the support package will show "New support packages".

Examples of CAR command :-

1) UNIX only:

Log on as user adm.
cd /usr/sap/trans
CAR -xvf tmp/.CAR -V

2) Windows NT only:

Log on as user ADM.
cd \USR\SAP\TRANS
CAR -xvf TMP\.CAR

This Will create two(2) FILES

After you run SPAM you MUST run STMS and check the transport queues

**********

As per 315963 note you can direct made the changes in the program or you can apply the support pack.

a) If you want to apply correction then first you need to register the object in SAP, so that you will get the Access key and then you can make the changes.

b) If you want to import the support pack then you need to down load from SAP market-place. and this is in CAR file. and then you need extract the same using CAR utility.
ex: CAR -xvf abc.car

or

you can directly apply the patch from SAPGUI, login to 000 client and then you can load the patch from Presentation server.

Also check what is your current basis patch level?

For example if you want to apply patch 07 and you are having 05 then you need to apply 06 and then apply 07.

**********

Things to take note of:-

It would definitely be better to apply the latest spam/saint spam manager, tp, R3trans and possibly a new kernel patch.

This is not a simple task to complete on the fly. By applying SAP support packs, you may run into problems with SPDD and SPAU adjustments. Also include the fact that the support packages may break one of your transactions. You may want to test this in your sandbox environment, if you have one, before tackling it.

In most situation when you apply support packages, it can takes about 3 weeks to fully test the support packages before you can apply them to the production system.

Do test your "golden" transactions to make sure that they are not broken. If you are not familiar with SPDD and/or SPAU adjustments than do not attempt to load support packages.

You may be better off just to modify the SAP object in question via OSS note.
read more...