안녕하세요. 주로 SERCH_HELP를 사용할때는 모듈풀이나, MethOD에서 이벤트를 사용해서 서치헬프를
사용했었는데... 이번에 운영을 하다보니 펑션을 사용한 ALV에서 서치헬프를 하게 되었습니다.
제가 원하는 것은 특정필드에 있는 F4를 클릭했을때, 그 해달 라인에 있는 자재번호를 비교해서 그 자재에 해당하는
서치헬프값만을 보여주고 싶습니다.
필드 카달로그에
LS_FIELDCAT_LVC-F4AVAILABL = 'X'.
LS_FIELDCAT_LVC-REF_FIELD = P_FIELDNAME.
LS_FIELDCAT_LVC-REF_TABLE = 'ZSDS164'.
위와 같은식으로 설정을 하면, 말그대로.. 딕셔너리에 있는 전체값을 가져오더라구요.
설정을 하지 않으면... 아예 F4텝이 뜨지를 않구요. 이게 그냥 CHAR3자리로 만든 필드라....
이게 없으면 안되는 것 같습니다.
나름 생각을 해보고 강제로 DATA_CHANGED를 이벤트탭에 추가해 이 이벤트를 발생시키면서,
DATA : G_DATA_CHANGED TYPE SLIS_FORMNAME VALUE 'ALV_DATA_CHANGED'.
MOVE SLIS_EV_DATA_CHANGED TO LS_EVENT-NAME.
MOVE G_DATA_CHANGED TO LS_EVENT-FORM.
APPEND LS_EVENT TO IT_EVENTCAT.
F4탭을 누루는 부분에...
*&---------------------------------------------------------------------
*& Form ALV_DATA_CHANGED
*&---------------------------------------------------------------------
* text
*----------------------------------------------------------------------
FORM ALV_DATA_CHANGED USING RR_DATA_CHANGED TYPE REF TO
CL_ALV_CHANGED_DATA_PROTOCOL.
PERFORM SET_POSSIBLE_ENTRY.
ENDFORM. " ALV_DATA_CHANGED
*&---------------------------------------------------------------------*
*& Form SET_POSSIBLE_ENTRY
*&---------------------------------------------------------------------*
FORM SET_POSSIBLE_ENTRY .
DATA : SELECTFIELD LIKE HELP_INFO-FIELDNAME,
IT_FIELDS LIKE HELP_VALUE OCCURS 1 WITH HEADER LINE,
SELECT_VALUE LIKE HELP_INFO-FLDVALUE,
LD_TABIX LIKE SY-TABIX.
CLEAR : SELECTFIELD, IT_FIELDS, SELECT_VALUE, LD_TABIX.
* F4를 눌렀을때 보여지는 필드 선언.
DATA : BEGIN OF IT_VALUE OCCURS 0,
ARBN LIKE ZASDT054-ARBN,
END OF IT_VALUE.
REFRESH : IT_FIELDS, IT_FIELDS, IT_VALUE.
* 화면 필드 선언 -> 선택된 값을 화면 필드에 뿌려줄때 사용.
DATA: SCR_FIELDS LIKE DYNPREAD OCCURS 0 WITH HEADER LINE.
CLEAR: IT_VALUE, IT_VALUE[].
SELECT ARBN FROM ZASDT054
INTO CORRESPONDING FIELDS OF TABLE IT_VALUE
WHERE MATNR EQ IT_ALV-MATNR.
*F4를 눌렀을때 HIT LIST를 보여준다.
IT_FIELDS-TABNAME = 'ZASDT054'.
IT_FIELDS-FIELDNAME = 'ARBN'.
IT_FIELDS-SELECTFLAG = 'X'. "실제 선택되는 값에 'X' 표시
APPEND IT_FIELDS.
CALL FUNCTION 'HELP_VALUES_GET_NO_DD_NAME'
EXPORTING
SELECTFIELD = SELECTFIELD
IMPORTING
IND = LD_TABIX
SELECT_VALUE = SELECT_VALUE
TABLES
FIELDS = IT_FIELDS
FULL_TABLE = IT_VALUE
EXCEPTIONS
FULL_TABLE_EMPTY = 1
NO_TABLESTRUCTURE_GIVEN = 2
NO_TABLEFIELDS_IN_DICTIONARY = 3
MORE_THEN_ONE_SELECTFIELD = 4
NO_SELECTFIELD = 5
OTHERS = 6.
* Double Click시 값을 화면에 Display
CHECK NOT LD_TABIX IS INITIAL.
READ TABLE IT_VALUE INDEX LD_TABIX.
IT_ALV-ZZMCD = SELECT_VALUE.
ENDFORM. " SET_POSSIBLE_ENTRY
위와같은 로직을 넣었더니, 이 로직을 탄후에, ALV카탈로그에서 등록한 F4기능이 사용되는... 즉 프로그래밍한...
구문과 딕셔너리의 구문이 두번연속으로 발생하고 있습니다.
음... 새로만드는 것이면.. 속편하게... 메소드로 이벤트처리해버릴텐데.... 운영의 길은 험난하네요,
이렇게 값이 두번 중복되는 걸 막는 방법이라던지, 간편하게 사용할 수 있는 방법을 알고 계시다면,
저에게 한수 지도 해주시면, 감사하겠습니다. o(__)o