メインフレームおよびミッドレンジのモダナイゼーションプロジェクトでは、しばしばレガシーのグリーンスクリーンロジックが IBM Rational Host Access Transformation Services (HATS)、Rocket LegaSuite、またはカスタム5250エミュレーションゲートウェイなどのツールを使用してウェブラッパーにカプセル化されます。テスターはしばしばウェブレイヤが単純なパススルーとして機能すると仮定しますが、EBCDICキャラクターエンコーディング、5250フィールド属性、およびHTML5ウィジェット間の変換は、バリデーションロジック、エラーメッセージ、および同時実行制御がソースシステムから逸脱する可能性のある抽象化レイヤを導入します。この質問は、レガシー端末エミュレーションと最新のウェブプロトコルの交差点での新たな振る舞いをテストする候補者の能力を探ります。
コアの課題は、5250端末セッションの状態を持つ性質と、無状態のHTTPリクエスト-レスポンスサイクルにあります。レガシーアプリケーションは、フィールドレベルの制約 (署名された数値ゾーン、必須入力、フィールド退出チェックなど) を強制するために 5250 データストリームに依存し、ENTER、CLEAR、ROLL UP、または ROLL DOWN のような特定のユーザーアクションを通知するために AID コードを使用します。複数のユーザーが同じ DB2 for i のレコードにウェブラッパーを通じてアクセスすると、基盤となる5250セッション管理は、レコードロック待機、デッドロックタイムアウト、およびCPF (Control Program Facility) エラーメッセージを正しくプロキシして、適切なブラウザインスタンスに返さなければなりません。セッションが交差することなく、また、カーソル位置のコンテキストを失わないように。
体系的な方法論は、プロトコルの忠実度テスト、同時実行ストレステスト、および ビジュアルパリティバリデーション の三層アプローチを必要とします。
まず、Wireshark または IBM i Access Client Solutions トレースを使用して生の 5250 データストリームをキャプチャし、フィールド属性と AID シーケンスのベースラインを確立します。各フィールドタイプ (アルファ、暗黙の小数を持つ数値、MDY区切りを含む日付フィールド) を試験するテストケースを作成し、ウェブラッパーがホストの EDTCDE および EDTWRDロジックを反映するクライアント側の JavaScript バリデーションを通じて同じ制約を強制することを確認します。
次に、制御された Windows ターミナルセッションとブラウザインスタンスを使用して同じデータベースレコードをターゲットにして、マルチユーザーシナリオを構成します。5250エミュレーターの MSGWAIT ステータスが、ウェブレイヤに非ブロッキングの AJAX ポーリングまたは WebSocket 通知として正しく伝播することを確認し、ブラウザセッションがタイムアウトしたり、離脱したりした際に DASD レコードロックが適切に解放されることを検証します。
三番目に、Applitools や Sikuliのようなピクセル完璧な比較ツールを使用して、サブファイル(スクロール可能なグリッド)のレンダリングがグリーンスクリーンの行/列の整列と一致していることを保証します。部分的なページ更新が HTML テーブルの仮想スクロールと同期する必要がある SFLSIZ および SFLPAG のロール動作に特に注意を払います。
ある流通会社の IBM i ベースの在庫システムのモダナイゼーションイニシアチブ中、QAチームは新しい HTML5 インターフェースを使用している倉庫ユーザーが互いの在庫調整を意図せずに上書きしていることを発見しました。レガシーのグリーンスクリーンアプリケーションは、同時の編集が発生した場合に 「ユーザーXによるレコード使用中」 を表示し、正しくレコードロックを強制していました。しかし、ウェブラッパーは両方のユーザーが同時に編集モードに入ることを許可しているように見え、結果的に一般的な HTTP 500 エラーとして提示される ODBCレイヤーでトリガーされた 「更新競合」 データベースエラーを引き起こし、データの整合性問題とユーザーの混乱を引き起こしました。
同じ DB2 レコードへのすべてのリクエストをシリアライズするサーバー側のキューを実装し、シングルトンアダプターパターンを通じて、ウェブラッパーが単一の 5250 ワークステーションのブロッキング動作を模倣することを強制します。このアプローチは、データの整合性を保証し、完全に同時修正を防ぐことができ、Redis 分散ロックを使用して簡単に実装できます。しかし、高いボリュームの倉庫シフト中にはパフォーマンスが低下するボトルネックを作成し、ユーザーがマージ競合解決の可能性を期待する現代的なウェブUXの期待から逸脱しています。
その後のコミットを特定の競合メッセージで拒否することを許可しながら、DB2 RRN(相対レコード番号)またはタイムスタンプ列を使用して行レベルのバージョニングを活用します。この方法は、サイレント上書きを防ぎ、読み取りが重い操作に対してよりスケーラブルであり、競合解決ワークフローに対する明確なフィードバックを提供するために RESTfulな慣行に一致します。しかし、レガシーの物理ファイルに対してスキーマの修正が必要であり、このファイルは技術的に IBM i 記録システムによって所有されているため、レガシープログラムがバージョン列を自動的に更新しない可能性があり、グリーンスクリーンとウェブユーザーの間で同期のギャップを生じる可能性があります。
5250エミュレーションレイヤーを構成して、IBM i のネイティブレコードロック状態メッセージ (CPF5027, CPF5074) をウェブインターフェースにモーダルダイアログとして透過的にプロキシすることで、グリーンスクリーンエクスペリエンスとの正確な振る舞いの整合性を維持します。このアプローチは、変更なしに元のビジネスロジックを保存し、ウェブユーザーが端末ユーザーと同じメッセージとタイミングを見ることを保証し、既存の IBM i セキュリティおよび監査トレイルをミドルウェアの干渉なしに活用します。欠点は、記録ロックを保持している 5250 セッションを「孤立化」する可能性があるため、ユーザーがブラウザを更新したり、接続を失ったりする場合にセッション管理が複雑になることです。
チームは、規制環境 (製薬流通) が FDA 21 CFR Part 11 準拠のために古いインターフェースと新しいインターフェース間の絶対的な行動の整合性を必要としたため、解決策Cを選択しました。レコード競合の処理においていかなる逸脱もレガシーシステムのバリデーションドキュメントを無効にする可能性があります。ブラウザタブごとに持続的な端末セッションを維持する WebSocket ベースの 5250 セッションブリッジを実装することで、ラッパーはレコードロック待機と MSGID 表示をリアルタイムで正確に反映できるようになりました。
ウェブインターフェースは、グリーンスクリーンの 「レコード使用中」 の動作を成功裏に再現し、最新のスタイルのモーダルで CPF メッセージの正確なレプリカを表示しました。続く負荷テストにより、5250 セッションプールは、各ブラウザタブが専用の QINTER サブシステムジョブを消費するため、ピークの倉庫交通を処理するために自動スケーリング設定が必要であることが確認されました。このプロジェクトは、コア RPG プログラムを再記述することなく FDA バリデーションを達成しましたが、ユーザーの接続が突然切断された場合に意図しないロックを保持している可能性のある孤立した 5250 セッションを追跡するために監視ダッシュボードが追加されました。
ホストがサブファイルページを動的に初期化する場合、SFLINZ および SFLRNA キーワードを持つサブファイル制御レコード (SFLCTL) がウェブラッパーによって正しく解釈されることをどのように確認しますか?
候補者はしばしば可視データ行のみに焦点を当て、5250 サブファイルがページサイズ、サブファイルサイズ、およびスクロールインジケーターを定義する制御レコード形式に依存していることを見逃します。SFLINZ (サブファイル初期化) がアクティブな場合、ホストは空のレコードを送信し、これらは HTML5 での編集可能な空行としてレンダリングされる必要があります。一方、SFLRNA (サブファイルレコードがアクティブでない) は、入力可能なフィールドがデータを受け入れるかどうかを制御しています。テスターは、ラッパーがこれらのインジケーターを DOM 要素の disabled 属性と input フィールドの存在に正しくマッピングしていることを確認し、SFLROLVAL (スクロール値) インジケーターがユーザーが HTML コンテナをスクロールするときに特定の AID コード (ROLL UP/ROLL DOWN) をトリガーするようにする必要があります。したがって、RPG プログラムが次のデータページを取得するための正しい制御フローを受け取るようになります。
5250 データストリームがブラウザレンダリングのために UTF-8 に変換される際、EBCDIC 特殊グラフィックキャラクター (たとえば、CCSID 37 ボックス描画キャラクターや通貨記号) の転写精度をどのように検証しますか?**
多くのテスターは、標準の文字エンコーディング変換がすべてのケースを処理していると仮定しますが、5250端末は代替文字セットおよびフィールドレベルの COLOR/DSPATR 属性をサポートしており、これらは Unicode 結合文字にマッピングされます。この方法論では、すべての CCSID 037 特殊文字 (セント記号、パイプ記号、16進数の FF フィールドマーカーなど) を含むリファレンススクリーンを作成し、ブラウザ間でレンダリング出力を比較する必要があります (Chrome、Edge、Safari、Firefox)。特に、SO/SI (シフトアウト/シフトイン) キャラクターが DBCS 環境で 中国語、日本語、または 韓国語 の言語サポートのために単一バイト」とダブルバイトの文字セット間で切り替えるように注意を払う必要があります。これにより、FF (フィールドフォーマット) バイトの位置が DBCS 文字列内で保持され、入力フィールドの不均一が原因で RPG プログラムが切り取られたデータを読み取ったり、RNX0101 エラーを投げることを防ぎます。
ブラウザのショートカットキーやオペレーティングシステムのキーバインディングがレガシー 5250 機能キーの期待値と衝突した場合、AID コード処理をどのようにテストしますか?
候補者は、ブラウザが特定のファンクションキー ( F1、F3、F5、F12 ) を独自に使用するため、または macOS が Windows とは異なる扱いをすることを見逃すことがよくあります。体系的なアプローチは、各 5250 AID コード ( F1-F24、CLEAR、HELP、HOME ) をマッピングし、ブラウザの keydown イベントがデフォルト動作を防ぐことを確認して、ブラウザのリフレッシュ ( F5 ) や開発者ツール ( F12 ) をトリガーしないようにし、AID コードが一般的なボタンクリックではなく、明確に区別された POST パラメータまたは WebSocket メッセージとして送信され、CA (コマンドアテンション) と CF (コマンドファンクション) の区別が保持されるように検証します。これにより CA キーが RPG プログラムの INZSR サブルーチンをトリガーする際にフィールドデータを検証しなくなるのに対し、CF キーはフィールドデータを提出します。さらに、Windows、macOS、および Linux クライアント間で異なるキーボードレイアウト ( US、UK、German ) にわたって検証が行われ、 F13-F24 エミュレーションに使用される Alt と Ctrl の組み合わせ (通常 Shift+F1 から Shift+F12 ) が Alt+F4 や Ctrl+Shift+F のようなOSレベルのショートカットをトリガーしないようにする必要があります。