Web 関連
Author: takeuchi@fcs21.jp (richiet)
質問 日付属性キーフィールドのレイアウトに DIS(DD)が定義されている場合 reconnect"(再接続)エラーが発生する。 作業時間報告用の画面をダイナミックサーバページで作成しました。 次の処理を実行した場合、再接続エラーが発生します。 1. テーブルのキーに日付属性の項目が割り振られているテーブルを検索します。 日付属性の項目のフィールドレイアウトには DIS(DD)と定義されています。 2. onchange が定義されている任意のフィールドを編集し、Tabキーでカレント フィールドを離れる 結果: Get Stateトリガのreconnect/readcheck を実行した結果、 当月分以外は"reconnect"(再接続)エラーが発生します。 エラー内容: reconnect testent.testmodel failed (Get State) $status = 1 回答 [原因] Uniface DSPは、クライアントとサーバとの同期をとるため、以下の内容が実行されます。 1. ステップ2実行後、クライアントのブラウザからWebサーバにブラウザに 表示されている情報を送信します。 2. WEBサーバ側でUniface DSPが起動され、Get Sate トリガ呼ばれます。 3. ブラウザから受け取った情報を元にキー項目にアサインし、データベースに再接続します。 今回の場合ですと、Unifaceの仕様により、ブラウザ上では、日付属性の項目のフィールド レイアウト DIS(DD)によって、月、年の情報が含まれていなたいめ、サーバ側はブラウザ からは、日付項目の"DIS(DD)" のみ取得します。 ブラウザから送信された日付フィールドには年、月の情報がないため、現在のシステム日付から、 年、月をそれぞれ自動的に割り当て、キーを生成します。 生成されたキーは、本来データベースに 保存されているデータとは異るため、当月分以外は"reconnect"(再接続)エラーが発生します。 [例] システム日付を2010年、1月に設定する データベースに登録されている日付:2011年2月15日 テーブル名 :TSTKIN 日付属性の項目 :SYORIBI この場合、Reconnect実行の際、以下のSQL命令のように、現在のシステム日付から、 年、月が自動的に割り当てられたため、SYORIBIの値が、15022011でなく、15012010 で検索されます。 KHCDSP(_getstate) GTST:11 reconnect/readcheck "%%SOUTER" I/O function: F, mode: 0, on file/table: TSTKIN index: 1 = Where ((NO = '4') And (SYORIBI = 15012010)) Use Index is 1 is (4 2010-01-15) [回避策] 表示用のダミーフィールドを作成し、レイアウトにDIS(DD) と定義します。また、このとき、日付属性の項目のレイアウト内容を 外しておきます。 「Read」トリガで日付属性の項目からダミーフィールドにアサインします。 例 ダミーフィールド:testdateを使用 read testdate=syoribi




