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'.
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 進法のどちらを使用してコード化されるかを、トランザクションまたはシステム・レベルで指定できます (トランザクション定義に指定した値によって、システムの値が上書きされます)。
属性値が文字リテラルとしてコード化されるように指定した場合、エンタープライズ・サーバは MFS 属性の値を、プログラムが EBCDIC としてコンパイルされた場合に使用される値に自動で変換します。例えば、'{A' を属性に割り当て、ASCII でコンパイルすることにより、生成された 16 進数の値 7B41 は、正しい値 C0C1 に変換されます。属性値をバイナリ・データとして指定する場合、エンタープライズ・サーバはアクションを行いません。
別の解決策として、文字ではなく x'nn'表記法 (上記の 2 番目の例で使用) を使用するようにプログラムを編集します。
MFLD HEX102,LTH=030,FILL=X'DF'エンタープライズ・サーバは、実行時にこれらの値を EBCDIC に自動的に変換しますが、COBOL プログラムは X'DF' のフィールドを調べます。
充填文字の 16 進値を変換せずに維持するには、HEXFILL 指令を使用して MFS を生成する必要があります。詳細は、HEXFILL を参照してください。