문제

아래는 객체를 만드는 코드 스 니펫입니다.

Form userexit_save_document_prepare.
  data: /bks/exitmanager type ref to /bks/exit_manager.
  create object /bks/exitmanager
         exporting main_prog = 'SAPMV45A'
                   exit_form = 'USEREXIT_SAVE_DOCUMENT_PREPARE'.
  include /bks/exitman.
ENDFORM.

문서에서 이것을 얻었습니다

성능의 이유로, 매개 변수 "main_prog"및 "exit_form"은 userexits의 경우 모든 단일 화면 필드에 대해 "sapmv45a"에서 "user_field_modification"과 같이 종종 수행되는 경우에 채워야합니다.

1) 개체 /bks /exitmanager를 만들 때 정확히 무슨 일이 일어 났습니까? 객체 등에 메모리가 할당 되었습니까?

2) 성능의 이유로 생성 객체의 내보내기 매개 변수를 채워야하는 이유는 무엇입니까?

도움이 되었습니까?

해결책

100% 확실하지는 않지만 여기에 가장 좋은 추측이 있습니다.

  1. /bks/exitmanager라는 객체가 구성됩니다 (이것은 클래스/bks/exit_manager 또는 더 구체적 으로이 클래스의 객체에 대한 참조/"포인터"를 구체적으로). 생성자 "코드는 호출됩니다 (아마도 일부 인스턴스 변수를 통화로 전달한 것으로 설정 함).

  2. 이러한 매개 변수를 명시 적으로 전달하는 경우 런 타임에서 "계산"할 필요가 없습니다 (예 : 통화 스택을 보면). 이것은 특히 자주 수행 해야하는 경우 (문서에 설명 된대로) 시간을 절약해야합니다.

다른 팁

그것은 /bks /exit_manager가 실제로 무엇인지, 그리고 당신이 달성하려는 것을 간략하게 설명하는 데 도움이 될 것입니다.

irongoofy가 쓴 내용에 대한 확장 :

데이터 : /bks /exitmanager type ref to /bks /exit_manager 필드 기호와 마찬가지로 프로그램의 ABAP 메모리에서 참조 포인터를 만듭니다. 또한 이미 삭제되어야합니다. 포함 된 경우 포함을 이동해야합니다.

객체 /bks /exitmanager를 생성 main_prog = 'sapmv45a'exit_form = 'userexit_save_document_prepare'. 이것은 선언 된 클래스를 기반으로 객체 인스턴스를 생성하고 참조 포인터에 할당합니다. 먼저 생성자 메소드를 호출하여이를 수행합니다. /BKS /EXIT_MANAGER를 시험해 보면 내보내는 데 필요한 것을 정확히 알 수 있습니다.

/bks /exit_manager의 생성자를 보지 않고 무슨 일이 일어나고 있는지, 왜 매개 변수를 전달 해야하는지 말하는 것은 불가능합니다. 설정 버퍼를 유지하는 것이 일반적인 패턴입니다 (열쇠가 매개 변수이고 복잡하고 시간이 많이 걸리는 값을 보유하는 값을 가진 정적 해시 테이블을 생각해보십시오). 이 경우 직접 액세스 할 수 없지만 해시 테이블을 사용하여 출구 핸들러 자체의 참조를 유지하는 정적 공장 메소드 만 사용하는 보호 된 생성자를 예상했을 것입니다. 약한 참조를 최적으로 사용합니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top