안녕하세요?
초보적인 질문 하나 드립니다. ㅎ
제가 지금 새로운 싸이트에 들어왔는데 한 2년여동안 SALV만 사용하다가
여기 와서 Reuse ALV 사용하려니까 예전에 했던 기억이 잘 안나네요..
ALV 결과를 Display 해준 후에 저장버튼을 누르면 작업이 수행되고
작업 완료 후에는 저장버튼을 비활성 시키고 싶은데요..
예전 기억으로는 작업 종료후에 SET PF-STATUS '1000' EXCLUDING extab.
요거만 쓰면 됐던 것 같은데 이상하게 잘 안되네요..
물론 extab 안의 fcode에는 'SAVE' append 했구요..
다른 부분에 또 설정해주어야 하는 부분이 있는지 알려주시면 감사하겠습니다..
아 그리고 추가적인 질문인데요..
처음 ALV 호출 시에는 필드 최적화 옵션을 넣어서 뿌렸는데요..
user_command 부분에서 rs_selfield-refresh = 'X'. 표시해주면
인터널테이블의 변경된 부분을 refresh 해서 보여주잖아요.
그런데 저장 시에 받아온 message 필드가 내용이 길다보니 짤려서 보이네요.
물론 마우스로 늘려서 보면 되지만 다시 최적화 옵션을 적용하려면 어떻게 해야 하나요?
예전에 가지고 있던 소스들을 노트북 포맷하는 바람에 다 날려버렸어요..
초보적인 질문이지만 좀 도와주세요~ ㅎㅎ
댓글 5
-
bd
2009.08.14 22:17
-
수욕정이풍부지
2009.08.14 22:32
bd 님 질문을 잘 이해못하셨나 보네요..
첫번째 질문에서 저 구문이 당연히 없애는 건지 저도 알고 있습니다.
저장을 하고 난 이후에는 두 번 작업을 못하도록 저장버튼을 비활성 시키려고 하는데
안없어지니까 질문 드린 거구요..
두번째는 당연히 COLWIDTH_OPTIMIZE = 'X' 체크 해주었습니다.
하지만 저장을 했을 때 BAPI를 타게 되고 거기서 에러 메시지가 나오게 되면 받아서 저장을 하게 되는데
BAPI 작업결과를 보여주기 위해서 refresh를 시켜준 겁니다.
rs_selfield-refresh = 'X' 만으로도 변경된 인터널 테이블의 결과를 보여주긴 하는데
변경된 메시지필드의 길이에 맞춰서 다시 최적화가 되지 않으니까 질문 드린 거구요..
-
데이
2009.08.15 02:43
alv가 생성될때 이미 값이 정해져있고 펑션 alv refresh 는 데이터 바뀐것만 refresh 되는 걸로 알고있는데요
아마 작업완료후 alv를 free 시키고.. 새로 생성하면 원하시는 것과 비슷한 결과가 나오지 않을까 생각됩니다 ^^;
-
StoryGuy97™
2009.08.19 22:22
어떤 식으로 alv 를 구성하셨는지 잘 모르겠습니다만 container 로 class alv 를 구성하셨다면
i_appl_events 에 'X' 를 해주셔야 PBO를 타면서 STATUS를 refresh 하게 됩니다.
도움되셨으면 좋겠네요
CREATE OBJECT G_GRID
EXPORTING
I_PARENT = CONTAINER.
I_APPL_EVENTS = 'X'.
-
비안개
2009.10.07 22:25
안녕하세요... 쪽지로 답변드립니다.
Reuse ALV에서 저장 후에 저장 버튼 비활성 시키는 방법 중...
1. 저장버튼을 누르면 작업이 수행되고 작업 완료 후에는 저장버튼을 비활성 시키고 싶은데요..
답변은
REUSE_ALV_GRID_DISPLAY 을 사용하신거 같은데...
SLIS_T_EVENT_EXIT 라는 속성(이벤트 후 처리) 값이 있습니다.
사용법은
DATA:
GT_ALV_EVENT_EXIT TYPE SLIS_T_EVENT_EXIT. "글로벌
로직
DATA:
LS_EVENT_EXIT TYPE SLIS_EVENT_EXIT.
REFRESH GT_ALV_EVENT_EXIT.
* 이벤트 UCOMM(OK_CODE)값 세팅
LS_EVENT_EXIT-UCOMM = 'SAVE'.
* 처리전
*LS_EVENT_EXIT-BEFORE = 'X'.
* 처리후
LS_EVENT_EXIT-AFTER = 'X'.
APPEND LS_EVENT_EXIT TO GT_ALV_EVENT_EXIT.
CLEAR LS_EVENT_EXIT.
위의 값은 처리전을 'X'로 주면 처리하기 전에 미리 작성한 로직을 태우고 처리후를 'X'로 주면 처리 후 미리 작성한 로직을 태웁니다.
미리 만든 로직은 USER_COMMAND 이벤트로 갑니다.
REUSE_ALV_GRID_DISPLAY 중 EXPORTING 데이터 중
IT_EVENT_EXIT에 GT_ALV_EVENT_EXIT를 주시면 됩니다.
위의 처리를 하려면 USER_COMMAND 이벤트를 정의를 하셔야 합니다.
그럼 USER_COMMAND 파트에서 코드가 'SAVE'일 때 STATUS값을 다시 설정해주시면 됩니다.
첫번째
...EXCLUDING extab.
extab에 있는 버튼 들은 Stauts에서 다 빼라 라는 구문 입니다.
save를 사용하시려고 하신다면 extab에는 값이 들어 가면 안되겠죠
두번째
alv layout import 셋팅하실때
COLWIDTH_OPTIMIZE = 'X'. 주시면 됩니다.
F1 키를 활용하시면 후다닥 찾으실수 있는 두가지 질문 이내요 ^^
좋은 하루되세요