클릭해 주셔서 감사합니다.
처음으로 BADI 과제를 맡게 되었습니다만,
역시나 처음부터 모르는 것 투성이네요...
---- 개요 ----
*발생한 문제
물류창고에서 피킹이 완료된 출하전표를,
업무에 미숙한 본사 직원이 수정해 버리는 문제가 발생.
*해결 대책
피킹이 완료된 출하 전표에 대해 수정을 가하려 할 경우에
에러 메세지 OR E-MAIL 통지 기능을 추가 함.
상기의 문제를 출하 처리 비지니스 ADDIN 으로 처리 하려 함.
*상세
클래스 LE_SHP_DELIVERY_PROC 의
인터페이스IF_EX_LE_SHP_DELIVERY_PROC 의 메소드,
CHANGE_DELIVERY_HEADER
CHANGE_DELIVERY_ITEM
를 이용하여 변경이 있을경우 메세지, 혹은 E-MAIL 통지를 실행함.
---- 질문 -----
여기서 질문입니다만,
유저가 전표에 수정을 가했을 경우 상기의 메소드가 호출이 됩니다만,
메소드에서 이용할 수 있는 정보(파라메터)들이
Current Delivery Item
Current Delivery Header
Current Status of Delivery Headers
Database Status: Delivery Header
Current Status of Delivery Items
Database Status: Delivery Items
등으로, 이를 이용해서 변경된 명세라던가 헤더를 판별 해 내,
변경된 정보를 통지 하는 곳 까지는 가능 할 것 같습니다..
그런데 문제는 TEXT 에서 발생하는데요..
HEADER 의 TEXT 혹은
명세(ITEM)의 TEXT 에서 수정이 이루어졌을 때는, 상기의 메소드가 호출이 안 되더군요.
예) CASE MARK TEXT의 변경..
SAVE_DOCUMENT_PREPARE 등을 이용해서
최종적으로 처지를 해 줄 수도 있을 것 같습니다만..
여기서, 유저가 변경을 하려고 하는 TEXT 내용이 어느 파라메터에 담겨 있는지
즉, 어떻게 하면 취득을 할 수 있는지가 궁금합니다.
필요한 정보는
1. 기존의 TEXT
2. 유저가 변경을 가한(아직 저장은 하지 않은) TEXT
... 로
1.의 경우는 Function 등으로 취득이 가능합니다만..
2.의 경우는 대체 어디에 저장이 되어서, 어떤 방법으로 취득을 해 와야 하는지를 모르겠습니다.
긴 글 읽어주셔서 감사합니다.
댓글 6
-
정군
2009.09.08 23:13
-
요요
2009.09.09 02:07
택스트 탭으로 가셔서 세부 아이콘 누르시면 텍스트 에디터 변경화면 나올 거예요.
그럼 메뉴에 이동->헤더를 누르시면 텍스트이름/언어/텍스트ID/텍스트오브젝트가 있을텐데요
그것을 read_text 펑션에 넣어서 조회하시면 됩니다.
텍스트 이름이 오더번호가 될 거니까요.
그부분만 해당 오더번호로 변경하시고 나머지 변수는 고정값으로 사용하시면 될 거예요.
하지만 컨트롤을 어떻게 해야할 지는 고민이네요.
테스트 환경이 되지 않아 확인이 안되네요. ^^; 좋은 결과 있으시길..
-
JiruMi
2009.09.09 04:45
정군님// 답변 감사드립니다.
dirty assign 으로 검색을 해서 조사를 해 봤습니다만, 내공이 없어 조금 어렵더군요.
한가지, 전표 처리시에 디버그로 조사 해보니 저장 전에 함수 `SD_COMMIT_TEXT` 가 실행이 되던데, 이 부근에 포인트가 있을까 하고 찾아 보는 중입니다. 파라미터로써 전달하는 값은, 플래그 류의 정보와 전표 번호 등이 다 지만.. 어딘가 메모리에 떠 있는 텍스트를 DB로 갱신하는 처리가 있을 지도 모른다는 희망만 가지고 있습니다.. ^
-
JiruMi
2009.09.09 04:50
요요님 // 답변 감사드립니다.
제가 원하는 정보는
1. 시스템에 저장 된 상태의 TEXT
2. 유저가 변경을 가한(아직 저장은 하지 않은) TEXT
이며, 해결이 되지 않고 있는 부분은 2.번 입니다.
READ_TEXT 를 이용하는 방법은, 1.번의 이미 시스템에 저장이 된 뒤의 TEXT 정보로 보여집니다.
제가 잘못 이해 한 거라면(상기의 방법이 메모리로부터 취득 방법이었다면) 죄송합니다만, 다시 설명 부탁드립니다..
-
요요
2009.09.09 20:32
SD 에 대한 개발 환경이 안되어 있어서 테스트는 못해봤는데요
아래의 메모리 ID 로 저장했다가 읽는 것 같더라구요.
테스트 환경이 환경이 되신다면 INCLUDE MV45AFZZ 의 FORM USEREXIT_SAVE_DOCUMENT 이나
해당 BADI 에서 아래 코딩으로 데이터가 읽히시는지 확인해 보시면 될 것 같은 생각이 듭니다.
해당 텍스트에 대하여 READ_TEXT로 읽으면 저장되기 이전데이터가 읽히고
아래 코딩으로 읽혀진 메모리의 텍스트를 읽으면 현재 텍스트가 읽혀
비교가 가능하실 것 같네요.
메로리 id 값은 현재 이곳 상황에서의 메모리 id 값입니다
확인은 FUNCTION 'SAVE_TEXT' 의 맨 아래쪽 EXPORT 부분에 중단점 거시고
확인하시면 될 거예요.
SD 담당이 아니라서 맞을진 모르겠지만 좋은 결과 있으시길 바랍니다.
DATA BEGIN OF theader.
INCLUDE STRUCTURE thead.
DATA END OF theader.
DATA lines TYPE TABLE OF tline.
DATA memory_id(30) VALUE 'SAPLSTXD000001'.
IMPORT thead TO theader
tline TO lines
FROM MEMORY ID memory_id. -
JiruMi
2009.09.09 21:03
요요님// 답변 감사드립니다.
마침 COMIT_TEXT 를 뒤지다가 저장전의 TEXT의 취득에 성공 했었는데요,
정확히 요요님이 설명하시는 위의 방법을 이용 했었습니다.
위 메모리의 내용이 BADI 에서도 IMPORT 가능하더군요.
남은 문제는, 텍스트가 변경 되는 시점의 체크 타이밍인데.. 아직까지 SAVE_DOCUMENT_PREPARE 이외에 마땅한 해법을 못 찾고 있네요..
답변 감사드리며, 오늘도 즐거운 하루 되시기 바랍니다!
메모리에 있기만 하다면야.. 읽는 방법들이 있습니다만...
제가 잘 모르는 badi라서 테스트가 어렵네요.
badi를 보니 웬만한 값은 이전/이후값이 다 있는 듯해 보이던데...
굳이 못찾는다 하심은 아예 그 필드가 받는 파라미터에 없다는 이야기 같네요.
메모리에 있는 데이터를 불러오는 것은 dirty assign이란 것을 찾아서 확인해 보세요.
abap의 특징을 이용해서 받아오는 것을 외국애가 SDN에서 한 번 보여준 적이 있습니다.
저희쪽에선 간혹 쓰긴하구요...