0

コードのいくつかの場所で、データ フィールド (別のフィールド シンボルのコンポーネント) をフィールド シンボルに割り当てる必要があります。再利用性のために、このコードをプロシージャにカプセル化することにしましたが、フィールド シンボルをこのプロシージャに渡す方法がわかりません。

LOOP bseg ASSIGNING <bseg>
...
PERFORM assigning USING <bseg>
                  CHANGING <wrbtr>.
...
ENDLOOP.

FORM assigning USING <bseg> TYPE bseg
               CHANGING <wrbtr> TYPE bseg-wrbtr
IF ...
  some logic here
  ASSIGN <bseg>-wrbtr TO <wrbtr>.
ELSE
  ASSIGN <bseg>-skfbt TO <wrbtr>.
ENDIF.

ENDFORM.

このコードは機能しません。

フィールド シンボル参照も変更するにはどうすればよいですか?

4

1 に答える 1

2

これは不可能です。少なくとも、あなたがしようとしている方法では不可能です。フィールド シンボルは、実際のポインターとして渡すことはできません。そのようなものが必要な場合は、実際の参照を使用する必要があります。

コードの残りの部分について何も知らない - 少し奇妙に見えます。BSEG フィールドのデータを直接変更する必要があるのはなぜですか? コード全体でカスタム値を転送するためにフィールドを「悪用」しているとしか思えませんが、それは通常悪い考えです。これを行う必要がある場合は、次のようにします。

LOOP bseg ASSIGNING <bseg>.
   IF foo.
    l_my_wrbtr = <bseg>-wrbtr.
  ELSE.
    l_my_wrbtr = <bseg>-skfbt.
  ENDIF.

  " ... pro'lly thousands of lines I don't even want to see...

  IF foo.
    <bseg>-wrbtr = l_my_wrbtr.
  ELSE.
    <bseg>-skfbt = l_my_wrbtr.
  ENDIF.
ENDLOOP.    
于 2012-08-24T14:10:39.797 に答える