サブジェクト データ収集の終わったサブジェクトは,不用意に変更されないようにロックします。Clintrialではレコード毎のロックはサポートされていません。このアイデアは,ページを開けるとき,またはページデータを保存するときにページテンプレートイベントプロシージャによって制御することで可能にします。
ロック
シナリオ
サブジェクト(患者)データは,全員のデータが一度に集まるわけではありません。試験実施サイト(病院)の都合や,同意の時期によりサブジェクトデータは,異なる時期に集まります。特に海外との同時開発では,なおさらです。そこで,クリーンになったサブジェクトを個別にロックしたい場合があります。ロックされたサブジェクトにアクセスしようとすると,つぎのようなメッセージが現れ,アクセスできません。

いずれかの臨床ページを開き,そのデータを保存しようとするとき,このパネルに指定されているサブジェクトであるかチェックします。そのサブジェクトが非患者パネルに登録されていると,メッセージが出され,ページデータを保存することができません。ページを閉じるには,保存せずに閉じなければなりません。ですから,このサブジェクトのページデータは,見ることはできますが,データを変更することはできません。こうして特定のサブジェクトがロックされます。また,見ることもできないように設定することもできます。
一方,ロックされていないサブジェクトは,通常の操作ができます。
注:このアイデアは,ClintrialのサンプルプロトコルMEDIKA_CLINICALにあります。
スキーマ
ロックする対象となるサブジェクトを登録する非患者パネル(ここではロック対象サブジェクトパネルと呼びます)を1つ作成します。このパネルは保護パネルとします。そうすることによって,権限のあるユーザだけが管理することができます。
現在,開いているまたは開こうとしているページのサブジェクトがロック対象サブジェクトであるか,ロック対象サブジェクトパネルを検索するイベントプロシージャ(ここではLOCKSUBJECT)を作成します。このプロシージャは,ロック対象サブジェクトパネルに,現在操作しているページのサブジェクトがあれば,メッセージを作成し,処理を続行しないようにオプションを設定します。なければ,メッセージを作成せず,処理を続行するようにオプションを設定します。
このイベントプロシージャを,ページテンプレートイベントの「ページのオープン」または「ページの保存」に指定します。「ページのオープン」に指定すると,ロック対象サブジェクトであれば,表示もできません。「ページの保存」に指定すると,ロック対象サブジェクトは,表示されますがデータを変更しても保存できません。
インプリメント
ロック対象サブジェクトパネル
このパネルは,ロックするサブジェクトを登録するパネルです。パネルタイプを「非患者データ」(タイプ0)で作成します。このとき,保護属性をチェックします。保護属性が付けられたパネルは,そのパネルに対するアクセス権のあるユーザしか,操作することはできません。

パネルにつぎの2つ項目を作成します。
|
項目名 |
SUBJECT_NUMBER |
|
データタイプ |
テキスト |
|
DB形式 |
VARCHAR2(20) |
|
項目名 |
STATUS_CHG_DATE |
|
データタイプ |
日付 |
|
DB形式 |
DATE |
その他は,デフォルトのままでかまいません。
イベントの指定
ロックするページテンプレートに,ページ関連のイベントプロシージャを指定します。すべてのページに対してこの制限をつけるのならば,すべてのページテンプレートに指定します。ページテンプレートメニューからページテンプレートイベントを選択します。
ページのオープンイベントは,そのページが開かれたときに実行されます。この場合,ページの内容を見ることも許さないのであれば,ここにLOCKSUBJECTプロシージャを指定します。見ることはできるが,変更したページデータを保存することを許さないのであれば,ページの保存にLOCKSUBJECTプロシージャを指定します。

すべてのページにこのイベントプロシージャを指定します。または特定のページでもかまいません。イベントプロシージャが付けられたページにこの機能が有効になります。
ロック対象サブジェクトパネルに対するアクセス権の設定
ロック対象サブジェクトパネル「SUBJECT_LOCK」は,保護パネルです。このパネルのページにアクセスするには,アクセス権が必要です。アクセス権をコントロールするには,Adminを使います。
Adminのセキュリティ,パネルアクセスからユーザを選択します。「選択」ダイアログに保護属性のついたパネルのリストが表示されます。ここから,アクセス権を設定するパネルを選択します。

「保護パネルアクセス権−ユーザ」ダイアログが開きます。SUBJECT_LOCKパネルに対しアクセスを許すユーザに,少なくとも「Enter,マージ前」に「フル」アクセス権を設定します。

実行
この機能を果すには,事前に行うステップがあります。ロックするサブジェクトを登録することです。ロックするサブジェクトが登録されていると,そのサブジェクトのページを開いたとき,またはデータを変更し保存しようとしたとき,メッセージが出され,操作を許さないようになります。
ロックするサブジェクトの登録
SUBJECT_LOCKに対するアクセス権を有するユーザが,ロックするサブジェクトを登録します。ブックをSUBJECT_LOCKに代えます。「SQL制限句ビルダ」が開きます。OKまたはキャンセルをクリックします。適切な制限句を指定することも有効です。

ロックサブジェクトに登録されたページを開く,または保存
臨床データブックのナビゲータからページを開きます。そのページのサブジェクトがロック対象サブジェクトであれば,つぎのようなメッセージダイアログが現れます。

使用するイベントプロシージャ
LOCKSUBJECT
PROCEDURE
locksubject
(i_protocol
VARCHAR2,
i_layout_name
VARCHAR2,
i_pane_usage_seq
VARCHAR2,
i_table
VARCHAR2,
i_page_status
VARCHAR2,
i_keys
VARCHAR2,
o_result
OUT INTEGER,
o_message
OUT VARCHAR2)
IS
x
varchar2(20);
sublok
number(2);
BEGIN
ct_string.init_name_value_arrays(i_keys);
x
:= ct_string.get_array_value('PID');
sublok := ct_func.find_n_records(i_protocol, 'SUBJECT_LOCK', 'UD', ('SUBJECT_NUMBER = '||''''||x||''''));
if
(sublok > 0) and (sublok is not NULL)
then
o_message
:= 'このサブジェクトはロックされています。ロックが解除されるまで,データを変更できません。';
o_result := 0;
else
o_result := 1;
end
if;
END
locksubject;
解説
入力パラメータi_keysには,コンテキスト項目のキー項目名とその値が渡されます。その中からサブジェクト項目であるPIDの値を取り出し,変数xに保存します。これは現在開いているページのサブジェクトです。非患者パネルSUBJECT_LOCKのSUBJECT_NUMBER項目にそのサブジェクトがあるかを調べます。find_n_recordsは,条件に当てはまるレコード数を調べるClintrialの組込ファンクションです。もしあれば,o_messageにメッセージを代入し,o_resultを0にします。なければ,o_messageはヌルでo_resultを1にします。
o_resultが0は,処理を中止することであり,1は処理を続行することを意味します。