05-22-2006 5:45 PM
Hi~
I need your help.
The FM CLSC_SELECT_OBJECTS_FROM_CLASS contain CLSD_CALL_SEARCH_DIALOG to get objects.
But I found something weird problem as below.
I can get over 5,000 objects from CLSD_CALL_SEARCH_DIALOG by se37. but I can get only 100 object from CLSC_SELECT_OBJECTS_FROM_CLASS. I input same classification follow hierachy.
I don't know why, please help me.
FUNCTION clsc_select_objects_from_class.
"----
*" IMPORTING
*" VALUE(CLASSES) LIKE KLAH-CLASS DEFAULT SPACE
*" VALUE(DEPARTMENTAL_VIEW) LIKE RMCLS-ABTEIL
*" DEFAULT SPACE
*" VALUE(KLART) LIKE KLAH-KLART DEFAULT SPACE
*" VALUE(NO_F8_IN_RESULT) LIKE SY-BATCH DEFAULT SPACE
*" VALUE(RESET_INDX_MEMORY_COUNTER) LIKE SY-BATCH
*" DEFAULT 'X'
*" VALUE(TABLE) LIKE TCLO-OBTAB
*" VALUE(KEY_DATE) LIKE SY-DATUM DEFAULT SY-DATUM
*" VALUE(I_LOWER_DATE) LIKE SY-DATUM OPTIONAL
*" VALUE(OBJECT_LIKE_INOB_CUOBJ) LIKE SY-BATCH
*" DEFAULT SPACE
*" VALUE(F_SEARCH_RESULT_NO_DISPLAY) LIKE RMCLS-
*" XFLAG DEFAULT
*" SPACE
*" VALUE(RESULT_NO_DISPLAY) LIKE RMCLS-XFLAG DEFAULT *" SPACE
*" VALUE(VALUES_ALREADY_IN_DDB) DEFAULT SPACE
*" VALUE(F_TAKE_OVER_ONE_OBJ) LIKE RMCLS-XFLAG
*" DEFAULT SPACE
*" VALUE(PREP_FUNCTION_UNIT) LIKE RS38L-NAME DEFAULT *" SPACE
*" VALUE(I_WITH_VALUES) TYPE C DEFAULT SPACE
*" VALUE(I_SKIP_FIRST_SCREEN) TYPE C DEFAULT 'X'
*" TABLES
*" OBJECTS STRUCTURE CLOBJ
*" CLASSIFICATIONS STRUCTURE AUSP OPTIONAL
*" EXCEPTIONS
*" PF03
*" PF12
*" PF15
*"----
DATA:
l_take_over_objects TYPE clselbool,
l_display_result TYPE clselbool,
l_read_user_options TYPE clselbool VALUE 'X',
l_ok_code like sy-ucomm,
l_cldar TYPE cldar,
l_objects_tab LIKE clsel_search_objects
OCCURS 0 WITH HEADER LINE.
IMPORT cldar TO l_cldar FROM MEMORY ID 'X'.
IF sy-subrc IS INITIAL.
CLEAR l_read_user_options.
ENDIF.
IF no_f8_in_result IS INITIAL.
l_take_over_objects = c_x.
ENDIF.
IF result_no_display IS INITIAL.
l_display_result = c_x.
ENDIF.
CALL FUNCTION 'CLSD_CALL_SEARCH_DIALOG'
EXPORTING
i_class_type = klart
i_top_class = classes
i_objecttype = table
i_key_date = key_date
i_lower_date = i_lower_date
i_take_over_objects = l_take_over_objects
i_pop_up = ' '
i_display_result = l_display_result
i_display_hierarchy = 'X'
i_leave_to_sytcode = ' '
i_read_user_options = l_read_user_options
i_status_free = 'X'
i_status_locked = l_cldar-dar_sperr
i_status_incomplete = l_cldar-dar_unv
i_not_valuated = l_cldar-dar_unb
IMPORTING
e_ok_code = l_ok_code
TABLES
e_objects_tab = l_objects_tab
e_values_tab = classifications
EXCEPTIONS
inconsistent_parameters = 1
no_objects_found = 2
canceled = 3
OTHERS = 4.
IF sy-subrc <> 0.
RAISE pf12.
ENDIF.
IF l_ok_code = 'BACK'.
RAISE PF03.
ENDIF.
IF l_ok_code = 'END'.
RAISE pf15.
ENDIF.
SORT classifications BY objek mafid.
LOOP AT l_objects_tab.
IF object_like_inob_cuobj IS INITIAL.
READ TABLE classifications WITH KEY
objek = l_objects_tab-cuobj
mafid = l_objects_tab-mafid
BINARY SEARCH.
IF sy-subrc IS INITIAL.
LOOP AT classifications FROM sy-tabix.
IF classifications-objek <> l_objects_tab-cuobj
OR classifications-mafid <> l_objects_tab-mafid.
EXIT.
ENDIF.
classifications-objek = l_objects_tab-object.
MODIFY classifications TRANSPORTING objek.
ENDLOOP.
ENDIF.
objects-obj = l_objects_tab-object.
ELSE.
objects-obj = l_objects_tab-object.
ENDIF.
objects-mafid = l_objects_tab-mafid.
objects-statu = l_objects_tab-status.
objects-obtab = l_objects_tab-obtab.
APPEND objects.
ENDLOOP.
EXIT.
Message was edited by: You Seob Koh
05-22-2006 5:49 PM
We will have the output of huge list, by clicking display entire list we can see them
Have a try.
cheers
Manohar
Message was edited by: Manohar
05-22-2006 5:56 PM
You can use FM CLSC_SELECT_OBJECTS instead:
PERFORM get_objects_in_class. "top level of class
PERFORM get_objects_in_class2. "remaining class levels and objs
*&---------------------------------------------------------------------*
*& Form GET_OBJECTS_IN_CLASS
*&---------------------------------------------------------------------*
FORM get_objects_in_class.
* get class internal number --------------------------------------------
SELECT * FROM klah
WHERE klart = '042'
AND class IN s_class.
* get objects using class id -------------------------------------------
CLEAR exp_objects2.
REFRESH exp_objects2.
CALL FUNCTION 'CLSC_SELECT_OBJECTS'
EXPORTING
imp_direction = ' '
imp_exit_after_found = ' '
imp_klah = klah
imp_language = sy-langu
imp_language_neutral = ' '
imp_no_of_sortcolumns = 5
imp_object = ' '
imp_object_feature = ' '
TABLES
exp_objects = exp_objects2
exp_values = exp_values
imp_features = imp_features
imp_seltab = imp_seltab
EXCEPTIONS
no_objects_found = 01
one_object_found = 02.
IF sy-subrc = 01.
MESSAGE e025 WITH 'No objects found.'.
ELSE.
LOOP AT exp_objects2.
MOVE-CORRESPONDING exp_objects2 TO exp_objects.
MOVE klah-class TO exp_objects-class.
COLLECT exp_objects.
ENDLOOP.
ENDIF.
ENDSELECT.
IF sy-subrc NE 0.
MESSAGE e025 WITH 'Type and Class not found.'.
ENDIF.
ENDFORM. " GET_OBJECTS_IN_CLASS
*&---------------------------------------------------------------------*
*& Form GET_OBJECTS_IN_CLASS2
*&---------------------------------------------------------------------*
FORM get_objects_in_class2.
DATA: inobjek LIKE inob-cuobj.
LOOP AT exp_objects
WHERE mafid = 'K'. "classes
* get class internal number --------------------------------------------
SELECT * FROM klah
WHERE klart = '042'
AND class = exp_objects-obj.
ENDSELECT.
* get objects using class id -------------------------------------------
CLEAR exp_objects2. REFRESH exp_objects2.
CALL FUNCTION 'CLSC_SELECT_OBJECTS'
EXPORTING
imp_direction = ' '
imp_exit_after_found = ' '
imp_klah = klah
imp_language = sy-langu
imp_language_neutral = ' '
imp_no_of_sortcolumns = 5
imp_object = ' '
imp_object_feature = ' '
TABLES
exp_objects = exp_objects2
exp_values = exp_values
imp_features = imp_features
imp_seltab = imp_seltab
EXCEPTIONS
no_objects_found = 01
one_object_found = 02.
IF sy-subrc = 0.
LOOP AT exp_objects2.
MOVE-CORRESPONDING exp_objects2 TO exp_objects.
MOVE klah-class TO exp_objects-class.
COLLECT exp_objects.
ENDLOOP.
ENDIF.
ENDLOOP. "exp_objects
* keep objects only ----------------------------------------------------
LOOP AT exp_objects
WHERE mafid NE 'O'. "objects
DELETE exp_objects.
ENDLOOP.
* Convert internal nunbers to object numbers
LOOP AT exp_objects.
inobjek = exp_objects-obj.
CALL FUNCTION 'CUOB_GET_OBJECT'
EXPORTING
object_number = inobjek
IMPORTING
object_id = exp_objects-obj
EXCEPTIONS
not_found = 1.
CHECK NOT sy-subrc EQ 1.
MODIFY exp_objects.
ENDLOOP.
* Put the Funds Centres and classifications into a table to be used by
* a binary search.
LOOP AT exp_objects.
MOVE exp_objects-obj+4(6) TO fund_class-fund.
APPEND fund_class.
ENDLOOP.
SORT fund_class BY fund.
ENDFORM. " GET_OBJECTS_IN_CLASS2
Rob