2016-05-23 15 views
5

私は以下のコードを持っています。汎用モジュール呼び出し内の機能メソッド呼び出し、なぜEXPORTINGでのみですか?

REPORT ZZY. 

CLASS lcl_main DEFINITION FINAL CREATE PRIVATE. 
    PUBLIC SECTION. 
    CLASS-METHODS: 
     convert_to_xstring 
     IMPORTING 
      i_param1 TYPE i 
      i_param2 TYPE i 
     RETURNING 
      VALUE(rv_result) TYPE xstring, 
     main. 
ENDCLASS. 

CLASS lcl_main IMPLEMENTATION. 
    METHOD convert_to_xstring. 
    ENDMETHOD. 

    METHOD main. 
    DATA: lt_binary_tab TYPE STANDARD TABLE OF x. 

    DATA(lv_result) = convert_to_xstring(i_param1 = 1 i_param2 = 2). 

    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' 
     EXPORTING 
     buffer = lcl_main=>convert_to_xstring(
        EXPORTING 
        i_param1 = 1 
        i_param2 = 2 
       ) 
     TABLES 
     binary_tab = lt_binary_tab. 

    ENDMETHOD. 
ENDCLASS. 

START-OF-SELECTION. 
    lcl_main=>main(). 

機能モジュール呼び出しの一部ではない機能メソッド呼び出しは、そのように記述することができます。

DATA(lv_result) = convert_to_xstring(i_param1 = 1 i_param2 = 2). 

私は

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' 
    EXPORTING 
    buffer    = lcl_main=>convert_to_xstring(i_param1 = 1 i_param2 = 2) 
    TABLES 
    binary_tab   = lt_binary_tab. 

上に書かれたとおりに正確にそれを使用したい場合しかし、私は、次の構文エラーを取得します。

フィールド「CONVERT_TO_XSTRINGは(」不明である。これは、どちらも 指定したテーブルの一つでも「DATA」文で定義されていない。「DATA」声明。

それは、コンパイラのニーズのように見えます属性とメソッドを区別するために、この場合、いくつかのガイダンス。コンパイラはEXPORTINGを記述することなく、このようなケースをできるようにするために、なぜそれがあいまいなのでしょうか?

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' 
    EXPORTING 
    buffer    = lcl_main=>convert_to_xstring(EXPORTING i_param1 = 1 i_param2 = 2) 
    TABLES 
    binary_tab   = lt_binary_tab. 
+1

これらのメソッドの呼び出しは[関数のメソッド](https://help.sap.com/abapdocu_70/en/ABAPMETHODS_FUNCTIONAL.htm)と呼ばれ、[インライン関数またはメソッド](https:// en .wikipedia.org/wiki/Inline_function)、AFAIKはABAPには存在しません。私はむしろ2つを混同しないでください。そして、あなたの質問については、 'コール関数'が混乱している - それは十分な答えですか? ;-) – vwegert

+1

[インライン](https://scn.sap.com/community/abap/blog/2013/05/23/abap-news-for-release-740--inline-宣言)の宣言を混乱させるようにしますか?私は、このメソッド呼び出しの方法は、実際には非常に最初から機能的な名前が付けられているので、私は言い換えることができます。私はC++で 'inline'関数を覚えていますが、プリプロセッサマクロにとっては良い選択肢です。 – Jagger

答えて

2

ABAPのデザインは非常に悪いです。ザ・関数呼び出しのようなものですが、すべてのコマンドと組み合わせて使うことはできません。たとえば、WRITEコマンドは、機能メソッド呼び出しと組み合わせて機能しません。これは、関数のメソッド呼び出しとの「部分互換」のようなものです。 私はなぜ(おそらく、Sap Devの人々が酔っていたのか)わからないが、それは単に私たちが生きなければならない事実である。

+1

うん、私は同意するが、この場合、機能的な方法を使用することは可能であり、「ハック」で完了する必要があるだけである。 「EXPORTING」を使用する必要がない場合には、ここで何が起こるのか疑問に思う。 – Jagger

+1

私は、ある種の「バグ」だと思います。しかし、誰も知っている、樹液の世界では... –

関連する問題