セグメント化プログラム設計上の考慮事項

セグメント化プログラムを設計するときに、多数の要因を考慮する必要があります。

  • 呼び出し先プログラムがセグメント化された converse を実行する (つまり、プログラムが converse ステートメントを含んでおり、segmented プロパティーが YES に設定されている) 場合は、以下の考慮事項が適用されます。
    • 呼び出しチェーン内のすべてのプログラムで、segmented プロパティーが YES に設定されている必要があります。つまり、プログラム A (非セグメント化) がプログラム B (非セグメント化) を呼び出し、プログラム B がプログラム C (セグメント化) を呼び出す場合、プログラム A と B でも segmented プロパティーを YES に設定する必要があります。
    • プログラムをセグメント化プログラムに変更すると、コンシュームするリソースが増えるため、セグメント化 converse を実行するプログラムを呼び出すと、その実行単位のパフォーマンスに悪影響を与える可能性があります。
  • セグメンテーションは現行システム・タスクを終了します。CICS® および IMS™ は、タスク終了時にすべてのリカバリー可能リソースをコミットします。
  • セグメント化された converse 全体にわたってレコードを更新用に保持 (ロック) することはできません。
    注: converse 全体にわたってレコードを更新用に保持すると、ユーザーの思考時間中にもリソースがロックされ、追加のユーザーがそのレコードにアクセスできなくなるため、これはどのシステムにおいても良い手法ではありません。

    converse 全体にわたってレコードを更新用に保持するよりも良いアプローチについては、次の例のコードを参照してください。

    customerRecord Customer;
    savedRecord Customer;
    updateComplete char(1) = "N";
    
    // check that data has not changed during user think time
    customerRecord.CustomerID = 1;
    get customerRecord;
    while (updateComplete == "N")
      move customerRecord to savedRecord byName;
      move customerRecord to custDetailForm byName;
      converse custDetailForm;
      // validate input data on custDetail form
      // assuming validation passed, continue
      get customerRecord forUpdate;
      // check all fields in customerRecord to determine 
      // whether anything changed during user think time
      if (customerRecord.field1 == savedRecord.field1
      && customerRecord.field2 == savedRecord.field2
       ...
      && customerRecord.fieldn == savedRecord.fieldn )
        // if no changes, move changed data from form to customerRecord
        replace customerRecord;
        updateComplete = "Y";
      else
        // message to user that data was modified by someone else
      end
    end
    
    record Customer type ...
      field1 ...
      field2 ...
      ...
      fieldn ...
    end
  • セグメント化モードで実行している場合、forUpdate キーワードで作成されるロックと、ファイルまたはデータベース内の現在位置は、converse ステートメント中に失われます。
  • プログラム構造と I/O オブジェクトが、処理中のロールアウト/ロールインによって発生する応答遅延時間を決定します。
    • 最も長い遅延は、書式または大きいレコードに大量の変数フィールド・データを持つセグメント化プログラムで、ユーザーの思考時間が短いときに発生します。
    • 最も短い遅延は、書式上の変数フィールド・データの量が少なく、小さいレコードしかないメニュー・タイプ・プログラムで、ユーザーの思考時間が長い場合に発生します。
  • CICS では、端末の PROFILE エントリーまたは TYPETERM エントリーに対して UCTRAN オペランドが YES に設定されている場合、CICS はセグメント化モードでのコードの実行時に書式からのユーザー・データを大文字に変換します。CICS によるユーザー・データの大文字への変換により、EGL upperCase プロパティーは無効になります。
  • CICS システムでは、ユーザーが Enter キーまたはファンクション・キーを押すと、システムは入力データを CICS を介して EGL プログラムに戻します。CICS は、データの先頭を調べ、基本マッピング・サポート (BMS) コマンドを検索します。セグメント化プログラムを設計する場合、EGL 書式の最初の物理変数フィールドが有効な BMS ページング・コマンドを含まないようにしてください。CICS におけるセグメント化プログラムの設計上の考慮事項の詳細については、CICS の資料を参照してください。