2015-02-05 3 views
4

Извините за этот базовый вопрос ABAP. Каковы различные способы вызова методов в ABAP? И каковы их «официальные» имена? Я слышал о вызове функции, методе и внутреннем/встроенном вызове метода.Различные способы вызова методов в ABAP

Выполнение использует ключевое слово PERFORM и метод для вызова синтаксиса CALL METHOD. Но что такое «внутренний» или «встроенный вызов метода»?

+0

Где вы слышали об этих условиях? – vwegert

+0

По-видимому, другим способом вызова исполняемой программы является «SUBMIT» –

ответ

0

Вы массово перепутали многие вещи. Позволяет быть добрым и начинать с некоторых основ:

Метод - это официальное название функции-члена класса, означает, что если вы говорите о методах, вы говорите об объектно-ориентированном prorgamming (ООП). Существует около двух или трех способов вариантов вызова метода, по крайней мере, в abap. Давайте подробно рассмотрим позже, после того, как вы пообещаете мне, прочитать об этом, если вы решите разработать следующие OO-парадигмы. И ты должен.

Функция - это просто функция, небольшая (или большая) часть кода, которую можно вызвать от нескольких вызывающих абонентов, для повторного использования. Это не парадигма ООП, и существует с тех пор, как началась prorgamming. Тем не менее, в абапе оно имеет небольшое «большее» определение, давайте поговорим об этом подробно, если вы пообещаете мне, чтобы прочитать об этом. И вы должны, если хотите разработать ABAP вообще.

Выполнить? «Выполнить» - это ключевое слово abap для вызова форм-подпрограмм. Форма-подпрограммы - это настоящие старые школьные функции, эквивалентные в абапе, наиболее похожие на функции из старых добрых времен, когда началось программирование. Небольшие фрагменты кода многократного использования, который может быть вызван из любого места в вашем prorgamm, но иногда из другого места (сейчас это слишком далеко для вас).

Итак, если вы смешиваете эти три (или два из этих трех) уже, то вы даже не в хорошем положении, чтобы говорить о внутренних или встроенных. Извините, но это, как есть. Это не обидно.

Вы когда-либо разрабатывали на другом языке?

+0

На самом деле, я разрабатываю Java и работаю над (существующим) инструментом, который автоматически анализирует и преобразует программы ABAP. Эти программы ABAP предоставляются нам как текст, поэтому инструмент не имеет прямого доступа к системам SAP. Я новичок в ABAP, и я учусь на лету. Я обещаю вам, что у меня никогда не будет намерения программировать в ABAP. Но передо мной у меня есть гигантские кодовые базы ABAP, происходящие из всех возрастов и стилей, и я стараюсь понять это. –

+0

Итак, тогда для выполнения: выполнить следует имя формы. Если вы ищете это имя в коде, вы найдете все его звонки. Будьте внимательны и проверяйте каждое из них. Определение предшествует форма. Так что выполните calculate_sth с помощью x, y. имеет где-то его определение как «форма calculate_sth с использованием х типа 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 к java, конечно, потому что из нового jababap-материала. Поэтому загрузка классов в локальные текстовые файлы, создание специального парсера, должна работать, на самом деле я даже не думаю, что они будут стандартом порта, но только z-stuff. @op: я прав? – icbytes

+0

Мы преобразуем ABAP в ABAP. Инструмент преобразования написан на Java, и мы охватываем все ABAP. К сожалению, это означает, что ВСЕ. Парсер и инструмент уже существуют - в результате работы более 10 лет. чтобы посмотреть в нее - и в ABAP. Там передо мной гора. –

Смежные вопросы