MFS に関して生じる可能性があるいくつかの問題を次に示します (ただし、次に限定されません)。
問題
メインフレームでは、フィールドの切り捨てに使用される MFS の null 文字は x'3F' と定義されます。IMS 対応エンタープライズ サーバーでは、MFS null 文字はデフォルトで x'1A' と定義されます。これは ASCII の x'3F' に該当します。
解決方法
MFS null 文字を別の文字または 16 進値に変換できます。これを行うには、Enterprise Server Administration でエンタープライズ サーバー インスタンスを編集し、[Server]、[Properties]、[MSS]、[IMS]、[TM] タブの [MFS null character] フィールドに値を指定します。
問題
文字リテラルを使用して MFS 属性の値を指定した場合、ASCII でコンパイルした際の結果の値は、EBCDIC でコンパイルした際に取得する値とは異なります。たとえば、次の 2 つのコード フラグメントは、EBCDIC 文字セットでコンパイルした場合は同じ結果になります。ただし、ASCII を使用すると、最初の例の動作が異なり、'{A' は C0C1 ではなく 16 進数 7B41 に変換されます。
文字リテラルを使用して指定した属性:
05 ATTRIBUTE-VARIABLES. 10 CURSOR-ATTR PIC X(2) VALUE '{A'. 10 ERROR-ATTR PIC X(2) VALUE '{I'. 10 OK-ATTR PIC X(2) VALUE ' A'. 10 PROT-ATTR PIC X(2) VALUE ' 1'.
16 進数/2 進法を使用して指定した属性:
05 ATTRIBUTE-VARIABLES. 10 CURSOR-ATTR PIC X(2) VALUE X'C0C1'. 10 ERROR-ATTR PIC X(2) VALUE X'C0C9'. 10 OK-ATTR PIC X(2) VALUE X'00C1'. 10 PROT-ATTR PIC X(2) VALUE X'00F1'.
解決方法
プログラムの移行を容易にするために、MFS 属性の値が文字と 2 進法のどちらを使用してコード化されるかを、トランザクションまたはシステム レベルで指定できます(トランザクション定義に指定した値によって、システムの値がオーバーライドされます)。
属性値が文字リテラルとしてコード化されるように指定した場合、Enterprise Server は MFS 属性の値を、プログラムが EBCDIC としてコンパイルされた際に使用される値に自動で変換します。たとえば、'{A' を属性に割り当て、ASCII でコンパイルすることにより、生成された 16 進数の値 7B41 は、正しい値 C0C1 に変換されます。属性値をバイナリ データとして指定する場合、Enterprise Server は処理を行いません。
別の解決策として、文字ではなく x'nn' 表記法 (上記の 2 番目の例で使用) を使用するようにプログラムを編集します。
問題
MFLD HEX102,LTH=030,FILL=X'DF'Enterprise Server は、実行時にこれらの値を EBCDIC に自動的に変換しますが、COBOL プログラムは X'DF' のフィールドを調べます。
解決方法
充填文字の 16 進値を変換せずに維持するには、HEXFILL 指令を使用して MFS を生成する必要があります。詳細については、「HEXFILL」を参照してください。