web-dev-qa-db-fra.com

Différentes façons d’appeler des méthodes dans ABAP

Désolé pour cette question de base ABAP. Quelles sont les différentes manières d'appeler des méthodes dans ABAP? Et quels sont leurs noms "officiels"? J'ai entendu parler de perform, d'un appel de méthode et d'un appel de méthode interne/en ligne.

Perform utilise le mot-clé PERFORM et la méthode appelle la syntaxe CALL METHOD, je suppose. Mais qu'est-ce qu'un appel "interne" ou "de méthode en ligne"? 

6
Ulrich Scholz

Ce sont les possibilités d'un appel de méthode en ligne.

Si vous appelez la méthode fonctionnelle qui ne comporte que les paramètres IMPORTING et éventuellement un paramètre RETURN, vous pouvez l'appeler ainsi.

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.

S'il y a plus d'un paramètre IMPORTING, vous devez spécifier le nom des paramètres.

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
).

Si la méthode contient des paramètres EXPORTING ou CHANGING, un appel en ligne est toujours possible, mais les catégories de paramètres doivent être spécifiées explicitement.

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
).
9
Jagger

Bonne chance dans votre quête - vous constaterez que cette tâche est beaucoup plus difficile que prévu. Par exemple, ABAP contient une fonction de traitement de macros qui rendra très difficile la détection d’un appel de méthode. Un exemple malicieux qui compilera néanmoins:

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 >.

Vous constaterez que les macros sont largement utilisées dans certaines parties du système. Bonne chance pour trouver la méthode appelle dans ce genre de choses sans utiliser l'analyseur intégré et le processeur de macros.

0
vwegert

Vous avez énormément mélangé beaucoup de choses.

Méthode est le nom officiel d’une fonction membre d’une classe. En d’autres termes, si vous parlez de méthodes, vous parlez de prorgamming orienté objet (OOP). Il existe environ deux ou trois manières de variantes d'appel de méthode, au moins en abap. Entrons dans les détails plus tard, après que vous me promettez, de lire à ce sujet, si vous décidez de développer les paradigmes OO suivants. Et tu devrais.

La fonction est simplement une fonction, un petit (ou un gros) morceau de code pouvant être appelé à partir de plusieurs appelants, pour être réutilisé. Ce n'est pas un paradigme OOP et existe depuis le début du prorgamming. Néanmoins, en résumé, il a une légère définition "plus grande", parlons-en plus en détail, si vous me promettez de lire à ce sujet. Et vous devriez, si vous souhaitez développer ABAP du tout.

Effectuer? "Perform" est un mot clé abap permettant d'appeler des routines de formulaire. Les routines de formulaire sont les véritables fonctions anciennes de l’école - équivalentes en abap, très similaires aux fonctions du bon vieux temps, lorsque la programmation a commencé. parfois d’ailleurs (c’est trop loin pour vous maintenant).

Donc, si vous mélangez déjà ces trois (ou deux de ces trois), alors vous n'êtes même pas dans une bonne position, pour parler de interne ou en ligne, du tout. Je suis désolé, mais c'est , tel quel. Ce n'est pas offensant.

Avez-vous déjà développé dans une autre langue?

0
icbytes