2015-02-05 6 views
4

이 기본 ABAP 질문에 사과드립니다. ABAP에서 메소드를 호출하는 다양한 방법은 무엇입니까? 그리고 그들의 "공식"이름은 무엇입니까? 수행, 메서드 호출 및 내부/인라인 메서드 호출에 대해 들어 봤습니다.ABAP에서 메소드를 호출하는 다른 방법

Perform perform은 PERFORM 키워드 및 메서드를 사용하여 CALL METHOD 구문을 호출합니다. 그러나 "내부"또는 "인라인 메서드 호출"이란 무엇입니까?

+0

어디에서이 용어들에 대해 들어 보셨습니까? – vwegert

+0

실행 가능한 프로그램을 호출하는 또 다른 방법은 "SUBMIT"입니다. –

답변

0

많은 것들이 섞여 있습니다. 친절하고 먼저 여기에서 몇 가지 기본 사항부터 시작하십시오.

메서드는 클래스의 멤버 함수의 공식 이름입니다. 메서드에 관해서는 메서드를 사용하는 경우 Object oriented prorgamming (OOP)에 대해 설명합니다. 메서드 호출 변형에는 약 2 ~ 3 가지 방법이 있습니다. 나중에 OO 패러다임을 개발하기로 결정했다면, 나에 대해 약속 한 후에, 자세히 읽어 보도록하겠습니다. 그리고 당신은해야합니다.

함수는 단지 몇 개의 호출자로부터 호출하여 재사용 할 수있는 작은 (또는 큰) 코드 조각입니다. 그것은 OOP 패러다임이 아니며, prorgamming이 시작된 이래로 존재합니다. 그럼에도 불구하고 그것은 거의 "더 큰"정의를 가지고 있습니다. 당신이 저에게 약속한다면, 그것에 대해 자세히 이야기 해 드리겠습니다. ABAP를 전혀 개발하지 않으려는 경우에 그렇습니다.

수행 하시겠습니까? "수행"은 양식 루틴을 호출하는 abap 키워드입니다. 양식 루틴은 실제 오래된 학교 기능 (abap에서와 동일)이며 프로그래밍이 시작된 좋은 옛날부터의 기능과 가장 유사합니다. 재사용 가능한 코드의 작은 조각. 귀하의 prorgamm에서 어디서든지 호출 할 수 있지만 때로는 다른 곳에서 호출 할 수도 있습니다 (지금은 너무 멀리 있습니다).

그래서 세 개 또는 세 개를 이미 혼합하면 내부 또는 인라인에 대해 이야기하기에 좋은 위치에 있지 않은 것입니다. 죄송하지만, 그대로입니다. 그것은 불쾌하지 않습니다.

다른 언어로 개발 한 적이 있습니까?

+0

사실 저는 Java로 개발하고 ABAP 프로그램을 자동으로 분석하고 변환하는 (기존) 도구로 작업합니다. 이 ABAP 프로그램은 텍스트로 제공되므로 SAP 시스템에 직접 액세스 할 수 없습니다. 저는 ABAP 초보자이며 비행 중에 배우고 있습니다. 나는 ABAP에서 프로그램 할 생각이 결코 없다는 것을 당신에게 약속합니다. 하지만 나 앞에서는 모든 연령대와 스타일에서 기인 한 거대한 ABAP 코드 기반을 가지고 있으며이를 파악하려고합니다. –

+0

그렇다면 perform : perform 다음에 formroutine의 이름이옵니다. 코드에서이 이름을 검색하면 모든 전화를 찾을 수 있습니다. 주의해서 각 포함을 확인하십시오. 정의 앞에 폼이 있습니다. 따라서 x, y를 사용하여 calculate_sth를 수행하십시오. 어딘가에 "폼 calculate_sth 사용하여 X 타입 I, Y I 형. "즐 endform. " – icbytes

6

다음은 인라인 메서드 호출의 가능성입니다.

IMPORTING 매개 변수와 선택적으로 하나의 RETURN 매개 변수 만있는 소위 기능적 메서드를 호출하는 경우이 함수를 이와 같이 호출 할 수 있습니다.

CLASS lcl_test DEFINITION. 
    PUBLIC SECTION. 
    CLASS-METHODS: 
     func_meth 
     IMPORTING 
      i_param TYPE i 
     RETURNING 
      VALUE(r_res) TYPE char1. 
ENDCLASS. 

l_res = lcl_test=>func_meth(1). 

* you could also call it like this 
l_res = lcl_test=>func_meth(i_param = 1). 

* also this variant is possible 
l_res = lcl_test=>func_meth(EXPORTING i_param = 1). 

* the traditional CALL METHOD syntax would be like this 
CALL METHOD lcl_test=>func_meth 
    EXPORTING 
    i_param = 1 
    RECEIVING 
    r_res = l_res. 

IMPORTING 매개 변수가 둘 이상인 경우 매개 변수의 이름을 지정해야합니다.

CLASS lcl_test DEFINITION. 
    PUBLIC SECTION. 
    CLASS-METHODS: 
     func_meth 
     IMPORTING 
      i_param1 TYPE i 
      i_param2 TYPE i 
     RETURNING 
      VALUE(r_res) TYPE char1. 
ENDCLASS. 

l_res = lcl_test=>func_meth(
    i_param1 = 1 
    i_param2 = 2 
). 

가 내보내거나있어서의 파라미터를 변경하는 경우는 인라인 호출은 여전히 ​​가능하지만, 파라미터 범주는 명시 적으로 지정한다.

CLASS lcl_test DEFINITION. 
    PUBLIC SECTION. 
    CLASS-METHODS: 
     func_meth 
     IMPORTING 
      i_param TYPE i 
     EXPORTING 
      e_param TYPE c 
     CHANGING 
      c_param TYPE n. 
ENDCLASS. 

lcl_test=>func_meth(
    EXPORTING 
    i_param = 1 
    IMPORTING 
    e_param = l_param 
    CHANGING 
    c_param = l_paramc 
). 
0

행운을 빈다. 예상보다 훨씬 어려울 것입니다. 예를 들어, ABAP에는 실제 메소드 호출이 발생하고 있음을 알기가 정말 어렵게 만드는 매크로 처리 기능이 있습니다. 그럼에도 불구하고 컴파일 될 악의적 인 예 :

DATA: l_foo TYPE c LENGTH 32. 

DEFINE foo. 
    l_&4 = cl_&1_&3&5&2&9if_&1_&3&5_&8~&7_&3&5_c&6(). 
END-OF-DEFINITION. 

foo system = u foo uid 32 create static >. 

매크로는 시스템의 일부 영역에서 광범위하게 사용됩니다. 행운을 빌어서 파서와 매크로 프로세서를 사용하지 않고도 이런 종류의 메소드를 호출 할 수 있습니다.

+0

같은 그 정의가 내 생각, 그것이 내가 이해 것과, 그 어렵지 않을 것입니다 가지고, 그는에 포트 ABAP에있다 자바, 분명히 새로운 jababap 물건 때문입니다. 그래서, 특수 파서를 만드는 로컬 텍스트 파일에 클래스를 다운로드하면, 사실 생각조차하지 않습니다, 그들은 표준 있지만, 물건을 운반 할 것입니다. – icbytes

+0

우리는 ABAP을 ABAP으로 변환합니다. 변환 도구는 Java로 작성되었으며, ABAP를 모두 포함합니다. 불행히도 ALL은 파서와 도구가 이미 존재합니다. 10 년 이상의 작업 결과로 시작했습니다. 그것을 들여다 보아라. 그리고 ABAP에. 나 앞에 산이있다. –

관련 문제