データベースフィールドに対応しないフォームフィールドを一時的な処理に使用する方法はありますか?
つまり、追加したい:
- 一時フィールドitem1、item2
- データベース フィールドの合計
- sum = item1 + item2を設定するレコードフック付きのボタン
データベースフィールドに対応しないフォームフィールドを一時的な処理に使用する方法はありますか?
つまり、追加したい:
実際には、フォーム フィールドにデータを添付することはできません。これらは基になるデータの表現であり、スクリプトが直接やり取りするものではありません。
基礎となるレコード (エンティティ) 自体に一時データを追加することもありそうにないように思えます。おそらく、perl API を悪用してエンティティ オブジェクトにデータを動的にアタッチすることは可能ですが、個人的には試しません。CQ の気まぐれでデータを失う可能性があります ;-)
ただし、一時データを持つことが不可能というわけではありません。最善の方法は、その目的のために明示的に意図されたセッションオブジェクトを使用することです。
ヘルプファイルから:
IBM Rational ClearQuest は、情報を格納するためのセッション全体の変数の使用をサポートしています。セッション全体の変数を作成したら、Session オブジェクトにアクセスできる関数またはサブルーチン (フックを含む) を使用して、現在の Session オブジェクトを介して変数にアクセスできます。現在のセッションが終了すると、その Session オブジェクトに関連付けられたすべての変数が削除されます。ユーザーがログアウトするか、Session オブジェクトへの最後の参照が存在しなくなると、セッションは終了します。
file:///C:/Program%20Files/Rational/ClearQuest/doc/help/cq_api/c_session_vars.htmに、この件に関する役立つドキュメントがいくつかあります(もちろん、Windows マシンにデフォルトでインストールされていることを前提としています)。
そこにあるコード例を必要と思われるものに変換するには、まず、計算したデータをセッション オブジェクト内に保存します。
$session->SetNameValue("item1", $value1);
$session->SetNameValue("item2", $value2);
次に、計算フックで保存された値を取得し、その合計フィールドの値を次のように設定します。
my $item1 = GetNameValue("item1");
my $item2 = GetNameValue("item2");
my $sum = $item1 + $item2;
$entity->SetFieldValue("some_totals_record", $sum);
もちろんお好みで調整してください;-)
私の知る限り、ClearQuest では不可能です。私も同様のことを試みましたが、IBM コンサルタントから、すべての変数に対して DB フィールドを作成するしか方法がないと言われました。
ClearQuest スキーマの設計者は、多くの場合、レコード タイプに「一時」フィールドを含めます。これを行うのは、フックで操作を実行して別の値を生成するためです。
たとえば、Notes フィールドには、ユーザーが最新のメモを入力する「一時的な」Notes_entry フィールドがあり、レコードが保存されると、値が Notes_Log フィールドに追加されます。次にレコードが編集されると、Notes_entry フィールドがクリアされるため、ユーザーは新しい Notes_entry を入力できます。