Right Click in ALV output ?
Hi,
I have got an ALV output.
The reqmnt now is that, if the user Right Clicks on a particular field which is displayed, it should show two transactions, and then it should go to the transaction which is selected by the user.
How to do this in ALV. Any sample code would be very helpful.
Regards.
Check this sample program..may be it will help u.
REPORT z_alv_context_menu NO STANDARD PAGE HEADING.
* Type pool declaration
TYPE-POOLS: slis.
* Internal table declaration
DATA: BEGIN OF gt_outtab OCCURS 0.
INCLUDE STRUCTURE sflight.
DATA: END OF gt_outtab.
data: gt_events TYPE slis_t_event.
* Structure / Variable declaration
DATA: g_repid LIKE sy-repid,
event TYPE slis_alv_event.
* Event: START-OF-SELECTION
START-OF-SELECTION.
* Storing the program name
g_repid = sy-repid.
* Building ALV event table
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 4
IMPORTING
et_events = gt_events
EXCEPTIONS
list_type_wrong = 1
OTHERS = 2.
IF sy-subrc = 0.
REFRESH gt_events.
* Adding records for CONTEXT_MENU event
event-name = 'CONTEXT_MENU'.
event-form = 'CONTEXT_MENU'.
APPEND event TO gt_events.
ENDIF.
* Data Selection
SELECT * FROM sflight INTO CORRESPONDING FIELDS
OF TABLE gt_outtab
UP TO 00030 ROWS.
* Display ALV grid
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
i_callback_program = g_repid
i_callback_user_command = 'USER_COMMAND'
i_structure_name = 'SFLIGHT'
it_events = gt_events
TABLES
t_outtab = gt_outtab
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* FORM html_top_of_page
FORM html_top_of_page USING top TYPE REF TO cl_dd_document.
CALL METHOD top->add_text
EXPORTING
text = 'Hello world '
sap_style = 'heading'.
CALL METHOD top->add_gap
EXPORTING
width = 200.
CALL METHOD top->add_picture
EXPORTING
picture_id = 'ENJOYSAP_LOGO'.
ENDFORM. "html_top_of_page
* Form context_menu
FORM context_menu USING e_object TYPE REF TO cl_ctmenu.
DATA: l_smenu TYPE REF TO cl_ctmenu.
IF e_object IS BOUND.
* Create custom Sub-menu to hide column on which right
* mouse button will be clicked
CREATE OBJECT l_smenu.
CALL METHOD l_smenu->add_function
EXPORTING
fcode = 'ZFN1'
text = 'Hide Column'(001).
CALL METHOD e_object->add_submenu
EXPORTING
menu = l_smenu
text = 'Hide'(002).
ENDIF.
ENDFORM. "CONTEXT_MENU
* Form user_command
FORM user_command USING r_ucomm TYPE sy-ucomm
ls_selfield TYPE slis_selfield.
DATA: g_grid TYPE REF TO cl_gui_alv_grid,
t_catalog TYPE lvc_t_fcat,
w_catalog TYPE lvc_s_fcat,
l_repid TYPE sy-repid.
CASE r_ucomm.
* When 'hide column' sub-menu is clicked from the context menu
* then hide the column from where this is happened
WHEN 'ZFN1'.
* Get the global instance of the ALV grid as well as
* it's field catalog info.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_callback_program = l_repid
e_grid = g_grid
et_fieldcat_lvc = t_catalog.
CHECK l_repid = g_repid.
IF g_grid IS BOUND AND t_catalog[] IS NOT INITIAL.
* Set the 'NO_OUT' attribute of the catalog to 'X'
w_catalog-no_out = 'X'.
* Modify the field with this above value
* on which right click occured
MODIFY t_catalog FROM w_catalog TRANSPORTING no_out
WHERE fieldname = ls_selfield-fieldname.
IF sy-subrc = 0.
* Set the field catalog with this modified one
CALL METHOD g_grid->set_frontend_fieldcatalog
EXPORTING
it_fieldcatalog = t_catalog.
ENDIF.
ENDIF.
WHEN OTHERS.
* Do nothing
ENDCASE.
ls_selfield-refresh = 'X'.
ENDFORM. "USER_COMMAND
Similar Messages
-
Hi all,
I am new here and i need ur help. I need to give the user an option to go to a transaction whenever he right clicks on the output of a report.
I need to get the cursor position to get the parameters for the transaction and then just give him an option to go there (ex:like a pop-up) when he right clicks on the report output.
Please let me know if you know how to do that. ( Its not a screen its the output of a report)
ThanksHi
Wow!!!!! I didn't know that! You are right!!!!!!!!!!
You can try to use the event AT PFn.
In your STATUS insert, in function Key section, a new function with code PFn (for example PF01).
START-OF-SELECTION.
LOOP AT ITAB.
HIDE ITAB.
WRITE: / ITAB.
ENDLOOP.
CLEAR ITAB.
AT PF01.
Get line where cursor is placed
CHECK NOT ITAB IS INITIAL.
Call Popup to confirm the action
CALL 'POPUP_TO_CONFIRM_STEP'
IMPORTING
ANSWER = ANSWER.
CHECK ANSWER = 'J'.
SET PARAMETER ID <ID> FIELD ITAB-FIELD.
CALL TRANSACTION <CODE> AND SKIP FIRST SCREEN.
CLEAR ITAB.
Max
Thanks!!! -
Execute in Back ground when push button clicked on alv output
Hi Friends,
I have a alv list display report with check boxes and a 'Detail' Push button in output
when i check the check boxes and click on the 'Detail' Push button detail report is
displayed using 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'. My requirement is if I click on 'Detail'
push button the code should also execute in back ground creating the spool. Request you
to help with sample code. I tried with below but not working.
WHEN 'DETAIL'.
call function 'START_OF_BACKGROUNDTASK'
exporting
startdate = sy-datum
starttime = sy-uzeit
exceptions
others = 1.
if sy-subrc = 1.
exit.
ELSE.
PERFORM determine_table_from_output CHANGING rs_selfield.
PERFORM call_alv_detail.
endif.
commit work.
Thanks,
Neetha.You could encapsulate the detail display in a separate report and call it in your 'DETAIL'-section like this:
DATA: lv_number TYPE tbtcjob-jobcount,
lv_name TYPE tbtcjob-jobname,
ls_rsparams TYPE rsparams,
lt_rsparams LIKE STANDARD TABLE OF ls_rsparams.
* Get free job number
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = lv_name
IMPORTING
jobcount = lv_number
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc = 0.
SUBMIT 'ZDISPLAY_DETAIL'
VIA JOB lv_name NUMBER lv_number
WITH SELECTION-TABLE lt_rsparams
AND RETURN.
IF sy-subrc = 0.
* Submit
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = lv_number
jobname = lv_name
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
ENDIF.
Regards,
Ulrich -
Hi ALL,
I have a doubt in ALV,
My requirement is that, I developed one ALV report.
Now when i double click one field i have to show some fields in a new report.
How this can be done.
Thanks & Regards,
Pradeep AlexBC ALV report will help you using OOABAP.
any method you want to use, what you need to do is pass a subroutine name to the USER_COMMAND method. either directly in the ALV FM export parameter or in the event table.
in this subroutine which you have defined for USER_COMMAND, do what ever code you want. this will trigger when you double click the ALV output. -
Double click in ALV tree output????
Hi all,
I am able to display output in tree format. But I want to add the double click functionality to some of the fields in output. Means if I double click on some value in output tree, it should call some transaction. Please help me with this issue of double clicking.
Please tell how to handle events in this report tree display.
For the following code its displaying output in tree format and in right way. But i need to add double click functionality to this.
So provide me some sample program for this one....
* create hierarchy
CALL METHOD tree1->set_table_for_first_display
EXPORTING
it_list_commentary = lt_list_commentary
i_background_id = 'ALV_BACKGROUND'
i_save = 'A'
is_variant = ls_variant
CHANGING
it_sort = gt_sort[]
it_outtab = itab_outtab
it_fieldcatalog = t_fieldcat. "gt_fieldcatalog.
* expand first level
CALL METHOD tree1->expand_tree
EXPORTING
i_level = 1.
* optimize column-width
CALL METHOD tree1->column_optimize
EXPORTING
i_start_column = tree1->c_hierarchy_column_name
i_end_column = tree1->c_hierarchy_column_name.
In grid ALV we can have double cilck functionality using code:
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = w_repid
i_callback_pf_status_set = 'PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
is_layout = ls_layout
it_fieldcat = gt_fc[]
Here we can write subroutine for USER_COMMAND and handle the double click evenet. But tell me how to provide this in tree ALV.
<REMOVED BY MODERATOR>
Regards,
Sachin
Edited by: Alvaro Tejada Galindo on Feb 14, 2008 1:47 PMHello Sachin
The following sample report ZUS_SDN_ALV_TREE_DEMO demonstrates the crucial parts for double-click event handling (nodes & items) in ALV trees.
*& Report ZUS_SDN_ALV_TREE_DEMO
*& Thread: double click in ALV tree output????
*& <a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="742412"></a>
REPORT zus_sdn_alv_tree_demo.
CLASS cl_gui_column_tree DEFINITION LOAD.
CLASS cl_gui_cfw DEFINITION LOAD.
TYPE-POOLS: abap.
TYPES: BEGIN OF ty_s_outtab.
INCLUDE TYPE knvv AS data.
TYPES: nkey TYPE lvc_nkey.
TYPES: parent_key TYPE lvc_nkey.
TYPES: END OF ty_s_outtab.
TYPES: ty_t_outtab TYPE STANDARD TABLE OF ty_s_outtab
WITH DEFAULT KEY.
DATA: gt_outtab TYPE ty_t_outtab.
DATA:
gd_okcode TYPE ui_func,
gd_repid TYPE syst-repid,
gt_fcat TYPE lvc_t_fcat,
gs_layout TYPE lvc_s_layo,
gs_variant TYPE disvariant,
go_docking TYPE REF TO cl_gui_docking_container,
go_tree TYPE REF TO cl_gui_alv_tree.
* CLASS lcl_eventhandler DEFINITION
CLASS lcl_eventhandler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
handle_node_double_click
FOR EVENT node_double_click OF cl_gui_alv_tree
IMPORTING node_key,
handle_item_double_click
FOR EVENT item_double_click OF cl_gui_alv_tree
IMPORTING node_key
fieldname.
ENDCLASS. "lcl_eventhandler DEFINITION
* CLASS lcl_eventhandler IMPLEMENTATION
CLASS lcl_eventhandler IMPLEMENTATION.
METHOD handle_node_double_click.
message 'Event=Double-Click on Node' type 'I'.
call transaction 'XD03'.
ENDMETHOD. "handle_node_double_click
METHOD handle_item_double_click.
message 'Event=Double-Click on Item' type 'I'.
call transaction 'VA03'.
ENDMETHOD. "handle_item_double_click
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
START-OF-SELECTION.
PERFORM init_controls.
gd_repid = syst-repid.
CALL METHOD go_docking->link
EXPORTING
repid = gd_repid
dynnr = '0100'
* container =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
lifetime_dynpro_dynpro_link = 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 SCREEN '0100'.
** NOTE: no elements on screen
** PROCESS BEFORE OUTPUT.
** MODULE STATUS_0100.
** PROCESS AFTER INPUT.
** MODULE USER_COMMAND_0100.
END-OF-SELECTION.
*& Module STATUS_0100 OUTPUT
* text
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
*& Module USER_COMMAND_0100 INPUT
* text
MODULE user_command_0100 INPUT.
TRANSLATE gd_okcode TO UPPER CASE.
CASE gd_okcode.
WHEN 'BACK' OR
'EXIT' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
WHEN 'REFRESH'.
WHEN OTHERS.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
*& Form init_controls
* text
* --> p1 text
* <-- p2 text
FORM init_controls .
* Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* create tree control
CREATE OBJECT go_tree
EXPORTING
parent = go_docking
node_selection_mode = cl_gui_column_tree=>node_sel_mode_multiple
item_selection = 'X' " required for double-click event on item
no_html_header = ''
no_toolbar = ''
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
illegal_node_selection_mode = 5
failed = 6
illegal_column_name = 7.
IF sy-subrc <> 0.
MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT
ENDIF.
* create Hierarchy-header
DATA ls_hierarchy_header TYPE treev_hhdr.
PERFORM build_hierarchy_header CHANGING ls_hierarchy_header.
PERFORM build_fieldcatalog.
PERFORM set_layout_and_variant.
* create emty tree-control
CALL METHOD go_tree->set_table_for_first_display
EXPORTING
** i_structure_name = 'KNVV'
is_variant = gs_variant
i_save = 'A'
* i_default = 'X'
is_hierarchy_header = ls_hierarchy_header
* is_exception_field =
* it_special_groups =
* it_list_commentary =
* i_logo =
* i_background_id =
* it_toolbar_excluding =
* it_except_qinfo =
CHANGING
it_outtab = gt_outtab
* it_filter =
it_fieldcatalog = gt_fcat.
* create hierarchy
PERFORM create_hierarchy.
* register events
PERFORM register_events.
* adjust column_width
CALL METHOD go_tree->column_optimize.
ENDFORM. " init_controls
*& Form build_hierarchy_header
* build hierarchy-header-information
* -->P_L_HIERARCHY_HEADER strucxture for hierarchy-header
FORM build_hierarchy_header CHANGING
p_hierarchy_header TYPE treev_hhdr.
p_hierarchy_header-heading = 'Hierarchy Header'. "#EC NOTEXT
p_hierarchy_header-tooltip =
'This is the Hierarchy Header !'. "#EC NOTEXT
p_hierarchy_header-width = 30.
p_hierarchy_header-width_pix = ''.
ENDFORM. " build_hierarchy_header
*& Form BUILD_FIELDCATALOG
* text
* --> p1 text
* <-- p2 text
FORM build_fieldcatalog .
REFRESH: gt_fcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
i_structure_name = 'KNVV'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
CHANGING
ct_fieldcat = gt_fcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DELETE gt_fcat FROM 8.
ENDFORM. " BUILD_FIELDCATALOG
*& Form SET_LAYOUT_AND_VARIANT
* text
* --> p1 text
* <-- p2 text
FORM set_layout_and_variant .
CLEAR: gs_layout,
gs_variant.
gs_variant-report = syst-repid.
gs_variant-handle = 'TREE'.
ENDFORM. " SET_LAYOUT_AND_VARIANT
*& Form create_hierarchy
* text
* --> p1 text
* <-- p2 text
FORM create_hierarchy .
DATA: ls_knvv TYPE sflight,
ls_outtab TYPE ty_s_outtab,
lt_outtab TYPE ty_t_outtab.
* get data
SELECT * FROM knvv INTO CORRESPONDING FIELDS OF TABLE lt_outtab
UP TO 200 ROWS . "#EC CI_NOWHERE
SORT lt_outtab BY kunnr vkorg.
* add data to tree
DATA: ld_kunnr_key TYPE lvc_nkey,
ld_vkorg_key TYPE lvc_nkey,
ld_last_key TYPE lvc_nkey.
LOOP AT lt_outtab INTO ls_outtab.
ON CHANGE OF ls_outtab-kunnr.
PERFORM add_customer_line USING ls_outtab-data
CHANGING ld_kunnr_key.
ENDON.
ON CHANGE OF ls_outtab-vkorg.
PERFORM add_salesorg_line USING ls_outtab-data
ld_kunnr_key
CHANGING ld_vkorg_key.
ENDON.
PERFORM add_complete_line USING ls_outtab-data
ld_vkorg_key
CHANGING ld_last_key.
ENDLOOP.
* calculate totals
CALL METHOD go_tree->update_calculations.
* this method must be called to send the data to the frontend
CALL METHOD go_tree->frontend_update.
ENDFORM. " create_hierarchy
*& Form add_customer_line
* add hierarchy-level 1 to tree
* -->P_LS_SFLIGHT sflight
* -->P_RELEATKEY relatkey
* <-->p_node_key new node-key
FORM add_customer_line USING us_data TYPE ty_s_outtab-data
ud_relat_key TYPE lvc_nkey
CHANGING cd_node_key TYPE lvc_nkey.
DATA: l_node_text TYPE lvc_value,
ls_data TYPE ty_s_outtab-data.
* set item-layout
DATA: lt_item_layout TYPE lvc_t_layi,
ls_item_layout TYPE lvc_s_layi.
ls_item_layout-t_image = '@A0@'. " icon_customer.
ls_item_layout-fieldname = go_tree->c_hierarchy_column_name.
ls_item_layout-style =
cl_gui_column_tree=>style_intensifd_critical.
APPEND ls_item_layout TO lt_item_layout.
* add node
l_node_text = us_data-kunnr.
DATA: ls_node TYPE lvc_s_layn.
ls_node-n_image = space.
ls_node-exp_image = space.
CALL METHOD go_tree->add_node
EXPORTING
i_relat_node_key = ud_relat_key
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = l_node_text
is_outtab_line = ls_data
is_node_layout = ls_node
it_item_layout = lt_item_layout
IMPORTING
e_new_node_key = cd_node_key.
ENDFORM. " add_customer_line
*& Form add_salesorg_line
* add hierarchy-level 1 to tree
* -->P_LS_SFLIGHT sflight
* -->P_RELEATKEY relatkey
* <-->p_node_key new node-key
FORM add_salesorg_line USING us_data TYPE ty_s_outtab-data
ud_relat_key TYPE lvc_nkey
CHANGING cd_node_key TYPE lvc_nkey.
DATA: l_node_text TYPE lvc_value,
ls_data TYPE ty_s_outtab-data.
* set item-layout
DATA: lt_item_layout TYPE lvc_t_layi,
ls_item_layout TYPE lvc_s_layi.
ls_item_layout-t_image = '@DS@'. " ICON_PARTNER_SALES_ACTIVITY
ls_item_layout-fieldname = go_tree->c_hierarchy_column_name.
ls_item_layout-style =
cl_gui_column_tree=>style_intensifd_critical.
APPEND ls_item_layout TO lt_item_layout.
* add node
l_node_text = us_data-vkorg.
DATA: ls_node TYPE lvc_s_layn.
ls_node-n_image = space.
ls_node-exp_image = space.
CALL METHOD go_tree->add_node
EXPORTING
i_relat_node_key = ud_relat_key
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = l_node_text
is_outtab_line = ls_data
is_node_layout = ls_node
it_item_layout = lt_item_layout
IMPORTING
e_new_node_key = cd_node_key.
ENDFORM. " add_salesorg_line
*& Form add_cmplete_line
* add hierarchy-level 3 to tree
* -->P_LS_SFLIGHT sflight
* -->P_RELEATKEY relatkey
* <-->p_node_key new node-key
FORM add_complete_line USING us_data TYPE ty_s_outtab-data
ud_relat_key TYPE lvc_nkey
CHANGING cd_node_key TYPE lvc_nkey.
DATA: l_node_text TYPE lvc_value.
* set item-layout
DATA: lt_item_layout TYPE lvc_t_layi,
ls_item_layout TYPE lvc_s_layi.
ls_item_layout-fieldname = go_tree->c_hierarchy_column_name.
ls_item_layout-class = cl_gui_column_tree=>item_class_checkbox.
** ls_item_layout-editable = 'X'.
APPEND ls_item_layout TO lt_item_layout.
** CLEAR ls_item_layout.
** ls_item_layout-fieldname = 'PLANETYPE'.
** ls_item_layout-alignment = cl_gui_column_tree=>align_right.
** APPEND ls_item_layout TO lt_item_layout.
l_node_text = us_data-vtweg.
DATA: ls_node TYPE lvc_s_layn.
ls_node-n_image = space.
ls_node-exp_image = space.
CALL METHOD go_tree->add_node
EXPORTING
i_relat_node_key = ud_relat_key
i_relationship = cl_gui_column_tree=>relat_last_child
is_outtab_line = us_data
i_node_text = l_node_text
is_node_layout = ls_node
it_item_layout = lt_item_layout
IMPORTING
e_new_node_key = cd_node_key.
ENDFORM. " add_complete_line
*& Form register_events
* text
* --> p1 text
* <-- p2 text
FORM register_events.
* define the events which will be passed to the backend
DATA: lt_events TYPE cntl_simple_events,
l_event TYPE cntl_simple_event.
* define the events which will be passed to the backend
l_event-eventid = cl_gui_column_tree=>eventid_expand_no_children.
APPEND l_event TO lt_events.
** l_event-eventid = cl_gui_column_tree=>eventid_checkbox_change.
** APPEND l_event TO lt_events.
** l_event-eventid = cl_gui_column_tree=>eventid_header_context_men_req.
** APPEND l_event TO lt_events.
** l_event-eventid = cl_gui_column_tree=>eventid_node_context_menu_req.
** APPEND l_event TO lt_events.
** l_event-eventid = cl_gui_column_tree=>eventid_item_context_menu_req.
** APPEND l_event TO lt_events.
** l_event-eventid = cl_gui_column_tree=>eventid_header_click.
** APPEND l_event TO lt_events.
** l_event-eventid = cl_gui_column_tree=>eventid_item_keypress.
** APPEND l_event TO lt_events.
l_event-eventid = cl_gui_column_tree=>eventid_node_double_click.
APPEND l_event TO lt_events.
l_event-eventid = cl_gui_column_tree=>eventid_item_double_click.
APPEND l_event TO lt_events.
CALL METHOD go_tree->set_registered_events
EXPORTING
events = lt_events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3.
IF sy-subrc <> 0.
MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT
ENDIF.
* set Handler
set handler:
lcl_eventhandler=>handle_node_double_click for go_tree,
lcl_eventhandler=>handle_item_double_click for go_tree.
** DATA: l_event_receiver TYPE REF TO lcl_tree_event_receiver.
** CREATE OBJECT l_event_receiver.
** SET HANDLER l_event_receiver->handle_node_ctmenu_request
** FOR tree1.
** SET HANDLER l_event_receiver->handle_node_ctmenu_selected
** FOR tree1.
** SET HANDLER l_event_receiver->handle_item_ctmenu_request
** FOR tree1.
** SET HANDLER l_event_receiver->handle_item_ctmenu_selected
** FOR tree1.
** SET HANDLER l_event_receiver->handle_checkbox_change FOR tree1.
ENDFORM. " register_events
Regards
Uwe -
ALV grid disable right click options
Hi experts,
Iam working on <b>normal</b> ALV grid.
In the output of the ALV, if we click right click,
we can see 'Cut', 'Copy text', 'Insert with Overwirte' options.
How can i disable(or remove) these 3 options?
Pls give me suggestions
Reward guaranteed,
thanks
kakiHello Kaki
You have to handle event <b>CONTEXT_MENU_REQUEST</b> (of class CL_GUI_ALV_GRID). The following sample report shows how to do that:
*& Report ZUS_SDN_ALV_CONTEXT_MENU_1
*& Flow logic of screen 100 (no screen elements; ok_code = GD_OKCODE)
*& PROCESS BEFORE OUTPUT.
*& MODULE STATUS_0100.
*& PROCESS AFTER INPUT.
*& MODULE USER_COMMAND_0100.
REPORT zus_sdn_alv_context_menu_1.
DATA:
gd_okcode TYPE ui_func,
go_docking TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container,
go_cell_top TYPE REF TO cl_gui_container,
go_cell_bottom TYPE REF TO cl_gui_container,
go_grid1 TYPE REF TO cl_gui_alv_grid,
go_grid2 TYPE REF TO cl_gui_alv_grid,
gs_layout TYPE lvc_s_layo.
DATA:
gt_knb1 TYPE STANDARD TABLE OF knb1,
gt_knvv TYPE STANDARD TABLE OF knvv.
* CLASS lcl_eventhandler DEFINITION
CLASS lcl_eventhandler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING
e_row
e_column
es_row_no
sender,
handle_context_menu_request FOR EVENT context_menu_request
OF cl_gui_alv_grid
IMPORTING
e_object
sender,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING
e_ucomm
sender.
ENDCLASS. "lcl_eventhandler DEFINITION
* CLASS lcl_eventhandler IMPLEMENTATION
CLASS lcl_eventhandler IMPLEMENTATION.
METHOD handle_double_click.
* define local data
DATA:
ls_knb1 TYPE knb1.
CHECK ( sender = go_grid1 ).
READ TABLE gt_knb1 INTO ls_knb1 INDEX e_row-index.
CHECK ( ls_knb1-kunnr IS NOT INITIAL ).
CALL METHOD go_grid1->set_current_cell_via_id
EXPORTING
* IS_ROW_ID =
* IS_COLUMN_ID =
is_row_no = es_row_no.
* Triggers PAI of the dynpro with the specified ok-code
CALL METHOD cl_gui_cfw=>set_new_ok_code( 'DETAIL' ).
ENDMETHOD. "handle_double_click
METHOD handle_context_menu_request.
* define local data
DATA: lt_fcodes TYPE ui_funcattr,
ls_fcode TYPE uiattentry,
ls_func TYPE ui_func,
lt_func TYPE ui_functions.
" Inactivate all standard functions
CALL METHOD e_object->get_functions
IMPORTING
fcodes = lt_fcodes.
LOOP AT lt_fcodes INTO ls_fcode.
ls_func = ls_fcode-fcode.
APPEND ls_func TO lt_func.
ENDLOOP.
e_object->disable_functions( lt_func ).
" Add new functions
e_object->add_separator( ).
CALL METHOD e_object->add_function
EXPORTING
fcode = 'XD03'
text = 'Call Transaction'.
CALL METHOD e_object->add_function
EXPORTING
fcode = 'DETAILS'
text = 'Display Details'.
ENDMETHOD. "handle_context_menu_request
METHOD handle_user_command.
* define local data
DATA:
ls_knb1 TYPE knb1,
ls_row TYPE lvc_s_row,
ls_col TYPE lvc_s_col.
" NOTE: in case of CL_GUI_ALV_GRID the functions of a context menu
" are handled in method USER_COMMAND.
CHECK ( e_ucomm = 'XD03' OR
e_ucomm = 'DETAILS' ).
CALL METHOD sender->get_current_cell
IMPORTING
es_row_id = ls_row
es_col_id = ls_col.
CASE e_ucomm.
WHEN 'XD03'.
READ TABLE gt_knb1 INTO ls_knb1 INDEX ls_row-index.
SET PARAMETER ID 'BUK' FIELD ls_knb1-bukrs.
SET PARAMETER ID 'KUN' FIELD ls_knb1-kunnr.
CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.
WHEN 'DETAILS'.
" NOTE: only for the sake of simplicity the event handler method
" is called
CALL METHOD lcl_eventhandler=>handle_double_click
EXPORTING
e_row = ls_row
sender = go_grid1.
WHEN OTHERS.
ENDCASE.
ENDMETHOD. "handle_user_command
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
START-OF-SELECTION.
SELECT * FROM knb1 INTO TABLE gt_knb1
WHERE bukrs = '1000'.
* Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Create splitter container
CREATE OBJECT go_splitter
EXPORTING
parent = go_docking
rows = 2
columns = 1
* NO_AUTODEF_PROGID_DYNNR =
* NAME =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Get cell container
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_cell_top.
CALL METHOD go_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_cell_bottom.
* Create ALV grids
CREATE OBJECT go_grid1
EXPORTING
i_parent = go_cell_top
EXCEPTIONS
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.
* Set event handler
SET HANDLER:
lcl_eventhandler=>handle_double_click FOR go_grid1,
lcl_eventhandler=>handle_context_menu_request FOR go_grid1,
lcl_eventhandler=>handle_user_command FOR go_grid1.
CREATE OBJECT go_grid2
EXPORTING
i_parent = go_cell_bottom
EXCEPTIONS
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.
* Display data
gs_layout-grid_title = 'Customers'.
CALL METHOD go_grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'KNB1'
is_layout = gs_layout
CHANGING
it_outtab = gt_knb1
EXCEPTIONS
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.
gs_layout-grid_title = 'Customers Details (Sales Areas)'.
CALL METHOD go_grid2->set_table_for_first_display
EXPORTING
i_structure_name = 'KNVV'
is_layout = gs_layout
CHANGING
it_outtab = gt_knvv " empty !!!
EXCEPTIONS
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.
* Link the docking container to the target dynpro
CALL METHOD go_docking->link
EXPORTING
repid = syst-repid
dynnr = '0100'
* CONTAINER =
EXCEPTIONS
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.
* NOTE: dynpro does not contain any elements
CALL SCREEN '0100'.
* Flow logic of dynpro (does not contain any dynpro elements):
*PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
*PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
END-OF-SELECTION.
*& Module STATUS_0100 OUTPUT
* text
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'. " contains push button "DETAIL"
* SET TITLEBAR 'xxx'.
* Refresh display of detail ALV list
CALL METHOD go_grid2->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
EXCEPTIONS
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*& Module USER_COMMAND_0100 INPUT
* text
MODULE user_command_0100 INPUT.
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
* User has pushed button "Display Details"
WHEN 'DETAIL'.
PERFORM entry_show_details.
WHEN OTHERS.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
*& Form ENTRY_SHOW_DETAILS
* text
* --> p1 text
* <-- p2 text
FORM entry_show_details .
* define local data
DATA:
ld_row TYPE i,
ls_knb1 TYPE knb1.
CALL METHOD go_grid1->get_current_cell
IMPORTING
e_row = ld_row.
READ TABLE gt_knb1 INTO ls_knb1 INDEX ld_row.
CHECK ( syst-subrc = 0 ).
SELECT * FROM knvv INTO TABLE gt_knvv
WHERE kunnr = ls_knb1-kunnr.
ENDFORM. " ENTRY_SHOW_DETAILS
Regards
Uwe -
Double Click on ALV Report Output, Bringing to selections creen
Hello Gurus,
Please help me When i do double click on ALV Report output , it is going back to Selection screen, actually its working as Back button. Now how to stop it.. I did debugging but i cannot trace it.PERFORM SUB_CREATE_FCAT.
DATA W_REPID LIKE SY-REPID.
W_REPID = SY-REPID.
ls_layout-colwidth_optimize = 'X'.
ls_layout-zebra = 'X'.
PERFORM SUB_SORT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = SY-CPROG
I_CALLBACK_PF_STATUS_SET = 'STATUS'
I_CALLBACK_USER_COMMAND = 'C_USERCOMMAND '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT = ls_layout
IT_FIELDCAT = IT_FIELDCAT
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
IT_SORT = IT_SORT
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
I_SAVE = 'U'
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = T_FINAL
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF. -
Acrobat 11 Pro - problem with right-click "Convert to Adobe PDF" output folder
I'm migrating from one machine running Windows XP Pro with Acrobat 8 Pro to Windows 7 Pro with Acrobat 11 Pro.
On the XP machine, when I right-click on a document and select "convert to Adobe PDF" the process works just fine - it always outputs the file to the target destination I have set in the Adobe PDF printer definition.
On the Windows 7 Pro/Acrobat 11 Pro machine, the exact same settings are ignored: the PDF will always end up in the same folder as the source file.
Both the source folder and the destination folder are on one of my office's networked drives.
Under the Printing Preferences, I have the output folder address set the same on both machines, so it *should* go to the right location on the new machine.
Oddly enough, on the Acrobat 11 Pro machine, if I select Adobe PDF as the default printer and do a test print, it *does* print to the correct folder!
This has got me stumped!
Thoughts?
(update from later in the day)
If Adobe PDF is selected as the default printer, I *can* select a bunch of documents, right-click, select "print", and Word will open up, and they'll print to the correct target folder.
So, it's "just" the right-click "Convert to Adobe PDF" that doesn't work correctly.The reinstall is typically the last ditch effort to do. The first step is Help>Repair and Help>Updates. As far as Office 2013, the PDF Maker of AA X is not compatible and you can only print. In your list of errors it showed a problem with AcroTray.exe. As a first step, go to the print and select print-to-file. The file will be a PS file (maybe with a PRN extension). Once the printer if finished, open the file in Distiller to complete the process. If that is successful, then the problem is with AcroTray. Check your running tasks to be sure AcroTray is indeed running. If not, that is likely the problem. If it is, then restart it (it is located in the Acrobat folder). AcroTray provides the interface between the PS creation and Distiller to automate the process of creating the PDF.
-
Right Click not working in published output. ??
I'm relatively new to Captivate, and NOT a developer, so please bear with me on this.
I'm recording a training video of a basic application and have a need to use a right-click to bring up a menu. This is a requirement of the app, so I need Captivate to provide the same functionality to avoid confusing the user going through the training video. I have the Click Box options set to Right Click, and it works in the Preview. However, when I Publish the finished video, the right-click does not work - only a left-click will advance to the next slide.
I found a few threads discussing issues with the right-click, but all of them were dealing with permissions issues. I'm saving the output to my desktop (Windows XP) and am launching the HTM file to confirm the video is working properly, so I don't see how a permissions issue would come into play. ?? If it is a permissions issue, how do I fix it within Captivate so that the end user can run this from any PC/MAC, where I have no control of their permissions?
Any suggestions or tips on how to get the right-click working in the final product are greatly appreciated.
DHi there
The right-click function relies on JavaScript. JavaScript may also be influenced by the Flash Security Settings.
Please try what is outlined in the link and see if your right-click suddenly begins working. Also note that you don't need to adjust these settings if you are serving content from a server. You only have to worry about it if you are testing by running from your local C drive.
Cheers... Rick
Helpful and Handy Links
Captivate Wish Form/Bug Reporting Form
Adobe Certified Captivate Training
SorcerStone Blog
Captivate eBooks -
ALV Grid Display - Dump when exporting (via right click)
Hi,
We have an ALV filled with a dynamic table because we needed dynamic columns. Our ALV has totals and subtotals. When exporting ALV via right click I get the following error:
OBJECTS_OBJREF_NOT_ASSIGNED
I observed two facts:
1.- If I disable subtotals and totals (commentig wa_cat-do_sum = 'X') export works properly, otherwise I get the dump.
2.- Having totals and subtotals enabled, if I use export icon (top toolbar) the export works properly, but using right-click export gets the same dump.
Our fieldcat is like this:
CLEAR wa_cat.
wa_cat-fieldname = g_cols.
wa_cat-seltext_s = gi_subdiv-btrtl.
wa_cat-seltext_l = gi_subdiv-btrtl.
wa_cat-datatype = 'INT4'.
wa_cat-do_sum = 'X'.
wa_cat-outputlen = '6'.
APPEND wa_cat TO fs_fldcat.
and we call ALV:
* Call ABAP List Viewer (ALV)
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = fs_fldcat
i_callback_program = v_repid
is_layout = s_layout
i_callback_user_command = 'USER_COMMAND'
it_sort = t_sort
* i_callback_top_of_page = 'F_TOP_OF_PAGE'
i_save = 'X'
TABLES
t_outtab = <t_dyntable>.
Any help will be appreciated!
Thanks,
JosepHi kat_k,
I tried to do what you say, but I still get the same error!
More ideas?
Thanks!
Josep -
Mouse right click on the field of the ALV Table
Hi Experts,
I have a requirement where i want to show some pop up to user once he does right click on one of the field of ALV table.
Can u plz tell me how i can do this.
Thanks
MaheshHi.,
In WDA there are no such event I think.,
check this thread : Right click event on dynamic alv
hope this helps u.
Thanks & Regards,
Kiran -
How to disabled 'user settings' in ALV by right clicking
Hi,
How to disable the 'user setting' context menu and corresponding popup after right clicking in the ALV.
I already tried parameter wddisableuserpersonalization = X but still I can do a right click and go to user settings.
Hope you can provide the right solution/method etc.
Thanks, JohnHi,
In my opinion this has nothing to do with auth settings... Has everything been transported cleanly?
You should double check the settings on your Acceptance machine, especially considering WD_GLOBAL_SETTING. If User-Personalization is allowed here, it will overwrite everything else.
Maybe also check WD_ANALYZE_CONFIG_USER on Acceptance machine and delete all personalizations for the user you are testing with. I once successfully messed up my Personalization with conflicting entries there...
best regards, Lukas -
Right-clicking should bring up a menu to "Copy" text in Script Output. The short cut key for copy does work as a workaround.
The tricky bit is knowing which story you want copied first. But you certainly don't want to involve system Events, or even copy and paste. This should get you started:
tell application "Adobe InDesign CS4"
set theSel to selection
set thePage to parent of item 1 of selection
set emptyFrame to text frame 1 of thePage whose contents = ""
duplicate parent story of item 1 of theSel to after insertion point 1 of emptyFrame
duplicate parent story of item 2 of theSel to after insertion point 1 of emptyFrame
end tell -
Right click event on dynamic alv
Hi,
I have a dynamic editable alv built on my webdynpro screen. Now the requirment is in the first column of the alv if the user right clicks on the cell a menu should come which has two be filled with custom menus.
Please let me know how that can be acheived.Hi,
Lekha's suggestion is working. I have done this already. it is an work around and it is not elegant as context_menu.
We have seen and also discussed in this form that the classes
CL_SALV_WD_UIE_IMAGE
CL_SALV_WD_UIE_TEXT_VIEW
are having getter and setters for menu but they are simply not working. I am not able to get them worked. I haven't heard anybody succeed in that.
So my advice, follow the workaround and save your time on this research. -
How to call a screen /t-code by double clicking on the output of an alv?
Hi,
I want to call a screen / t-code on double clicking on the output of an alv report.
Suppose we click on a value in the "Pur Req" feild of the ALV output it should open the the transaction code and give us the details of that particular value. How can I do that?
Thanx in advance..If you displaying ALV using Classes..( CL_GUI_ALV_GRID)... You need to create event receiver and register the double click event handler method dynamically.... Here's the sample code...
* C L A S S E S *
class lcl_event_receiver definition.
public section.
methods: handle_double_click
for event double_click
of cl_gui_alv_grid
importing e_row e_column.
endclass.
* CLASS lcl_event_receiver IMPLEMENTATION
class lcl_event_receiver implementation.
method handle_double_click.
data: l_cc like line of gt_cc.
data:
g_row type i,
g_value(10),
g_col type i,
g_row_id type lvc_s_row,
g_col_id type lvc_s_col,
g_row_no type lvc_s_roid.
* Read the double click cell
call method gr_grid->get_current_cell
importing
e_row = g_row
e_value = g_value
e_col = g_col
es_row_id = g_row_id
es_col_id = g_col_id
es_row_no = g_row_no.
clear wa_itab
read table gt_itab index g_row_id into wa_itab.
case g_col_id.
when 'EBELN'. "Show Process Order
if not wa_itab-ebeln is initial.
set parameter id 'BES' field wa_cc-ebeln.
call transaction 'ME22N' and skip first screen.
endif.
call method gr_grid->set_table_for_first_display
exporting
i_consistency_check = g_consistency_check
it_toolbar_excluding = gt_exclude
is_variant = gs_variant
i_save = g_save
i_default = 'X'
is_layout = g_layout
changing it_outtab = gt_cc[]
it_fieldcatalog = gt_fieldcat[]
it_sort = gt_sortcat[].
create object event_receiver.
* Register the 'Double Click' event handler method dynamically.
set handler event_receiver->handle_double_click for gr_grid.
Maybe you are looking for
-
How do I get my data back on the phone after upgrade?
Say I'm replacing my phone with a 3GS, how does iTunes tie the data it has to the phone, is it by the phone # on the SIM card? I want to make sure all my data, apps etc. gets back on the phone, what process do I need to follow?
-
Quicktime removed re-added itunes 7, error signature
Quicktime was removed from computer. itunes wouldn't start. re-installed updated itune 7. now itunes won't open. error report states- error signature. help! tried to restore, didn't work. either need to extract library or figure out my signature prob
-
Covert color pdf to a black & white
Does anyone know how to convert a color pdf into black and white? We're having some space issues on our server and have some documents that were scanned in color that we would like to convert to black and white to reduce the file size. I am using Ado
-
Time Capsule Internet WAN port is not working, what can I do to set it up?
When I plug the ethernet cable from my router to my Time Capsule it should turn on a green light in the back of the TC, but this light is not turning it on anymore, and this port is not working, how can I set it up? I want to create a wireless networ
-
Enter password to unlock disk not working
I have an external disk that I used for Time Machine, originally under Mavericks on my MBP. I then upgraded to Yosemite and was having issues with the upgrade route and so did a fresh install of Yosemite on my MBP at the advice of AppleCare reps. Tha