長いデータ構造名を短くする
Question
IBM には、修飾データ構造を省略表現する方法はありますか。5 段階の深さに埋め込んだ XML (例: Inbound.BOL.number.type.commodity) があります。こういった名前を入力するのが面倒なのです。例えば、「Inbound.BOL,」より後の部分だけ入力して、残りを省略するような方法はありますか。
Answer
ある、とも、ない、とも言えます。特に、データ構造で使用されている接頭部を省略できるような方法はありません。しかし、入力時に短くする方法はあります。この問題について、私のお気に入りのアプローチをお見せします。
思うに、あなたのデータ構造は次のような感じなのでしょう。
D type_t ds D field1 2a D field2 9p 0 D commodity 10a D number_t ds qualified D something 8a D otherthing 11p 3 D type likeds(type_t) D Bol_t ds D x 10i 0 D y 9p 2 D number likeds(number_t) D Inbound ds qualified inz D foo 10a D bar 7p 0 D bol likeds(bol_t)
入力に時間が掛かりすぎるのが不満だと思います。以下のようにキー入力しなければならないのでしょう。
if Inbound.bol.number.type.commodity = 'F2506'; // do something endif; if Inbound.bol.number.type.field1 = 'XY'; // do something endif; if Inbound.bol.number.type.field2 = 1234; // do something endif;
これが面倒だということにはまったく同感です。現実では、名前はこの例よりはるかに複雑になる場合が多々あります。こうした長い名前を入力するのは確かに戸惑うでしょう。1 つ簡単な (しかし直感では理解できないと思われる) 方法として、次のようにポインター・ロジックを使用する方法があります。
D type ds likeds(type_t) D based(p_type) p_type = %addr(Inbound.bol.number.type); if type.commodity = 'F2506'; // do something endif; if type.field1 = 'XY'; .. etc ..
型のフォーマットが Inbound.bol.number.type とまったく同じで、さらに LIKEDS キーワードのおかげで同じフォーマットであることがわかるため、これは効果大です。ポインター・ロジック (BASED キーワードおよび %ADDR() BIF) で、型データ構造を強制的にコンピューターのメモリーの Inbound.bol.number.type DS と同じスポットに入れます。同じメモリーにあるため、同じ値が入っていることになります。また、(データ構造の重ね合わせフィールドのように) 片方を変更すると、もう一方も変更されます。
ポインターを使用するのが嫌な場合 (多くの人がそうです) は、別の解決方法としてサブプロシージャーを使用する方法があります。データ構造の型レベルを処理するロジックを handleType() というサブプロシージャーに組み込み、その DS 部分をプロシージャーに渡すだけです。
handleType(Inbound.bol.number.type);
次に、プロシージャーは構造の型部分のみ認識すればよいのです。以下の例を見てください。
P handleType B D handleType PI D type likeds(type_t) /free if type.commodity = 'F2506'; // do something; endif; ... etc. ... /end-free P E
ポインターおよびプロシージャーの両方の技法で、DS を読み取り、それに変更を加えることができます。変更内容は元の DS に反映されます。