回答選択肢設定のためのビューを作成する(隠しビュー)
アンケートの設問や選択肢は、現在フォームを直接するようになっていますが、メンテナンスをするために以下のような条件が必要になってしまい、必ずしもメンテナンス性が良いとはいえません。
・メンテナンスにDBの設計者権限以上が必要になる
・メンテナンスにDesignerクライアントが必要になる
・メンテナンスにNotesの開発のスキルが必要になる
そこで、Notesクライアントのみ、編集者権限でアンケートの設問や選択肢が設定できるように設計を変更したいと思います。実現方法としては以下の流れで行います。
a. 回答・質問設定用のフォームを作成
b. その文書を表示するビューを作成
c. そのビューから値を取得するロジックをアンケートフォームに設定
1. まずは回答設定のためのフォームを作成します。「回答設定 | Answers」というフォーム名でフォームを作成します。
フィールドの名前 | フィールドの種類 | 用途 | |
SortKey | 数値 | 編集可能 | ビュー上での文書ソート用の値を設定するフィールド |
A01 | テキスト | 編集可能 | 質問1の回答のための選択肢設定フィールド |
A02 | テキスト | 編集可能 | 質問2の回答のための選択肢設定フィールド |
A03 | テキスト | 編集可能 | 質問3の回答のための選択肢設定フィールド |
3. この文書で設定した文書を表示するための、以下のビューを作成します。ここで検索条件の設定をしていますが、これはFormの値がAnswersに合致するもの(Answersフォームで作成された文書)のみ表示ということを設定しています。
・ビュー名を「(Answers)」に設定
・「式の使用」にチェック
・選択式に「SELECT Form = "Ansers"」と入力
列の名前 | 列の値 | ソート設定 | 用途 | |
ソートキー | フィールド | SortKey | 昇順でソート | ビュー上で任意の順番に文書を並べるための列 |
回答1設定 | フィールド | A01 | なし | 質問1の回答を表示する列 |
回答2設定 | フィールド | A02 | なし | 質問2の回答を表示する列 |
回答3設定 | フィールド | A03 | なし | 質問3の回答を表示する列 |
5. ここまでの設計を保存し、NotesクライアントからアンケートDBにアクセスします。すると、作成したはずの「(Answers)」ビューが、ナビゲーター上に表示されません。
これは、「隠しビュー」というNotesの機能で、半角括弧でビュー名をくくった場合、Notesから通常アクセスしただけでは、ビューはナビゲータに表示されません。あえて表示したい場合には、Ctrl+Shiftキーを押しながらDBにアクセスすることで表示されます。
今回は選択肢の設定という通常のユーザーがアクセスしないビューのため、余計な混乱を招かないよう、隠しビューでビューを作成しました。
6. 作成した(Answers)ビューにアクセスし、回答設定文書をいかの画面を参考に5文書作成してください。
7. このままでは1点問題があります。全文書ビューを開くと、(一見わかりませんが)ビュー上に透明の文書が表示されています。これは、先ほど作成した回答設定文書が全文書ビューにも表示されているためです。
8. 全文書ビューはアンケート結果を表示するための設計を行っていたため、こちらでも質問表フォームの文書のみ表示するよう、「ビューの選択」の設定で、「SELECT
Form = "Questions"」と設定します。(ビューの名前も「アンケート結果|Results」と変更しても良いかもしれません。
これで、選択肢設定ビューは完成です。
ただ、実運用を考えた場合、今のままでは作成者権限以上のユーザーは誰でも選択し文書を追加できてしまいます。そこで、[Admin]ロールのユーザーのみ文書が作成できるような設計を追加します。
9. 「回答設定」フォームのプロパティを開き、「メニューに含む」のチェックを外します。これで、Notesクライアントから[作成]メニューを選択した時に回答設定文書が表示されなくなります。
10 . 新規に回答設定文書を作成するためのアクションを追加します。
13. そのときに、「アクションの非表示」タブで、以下の設定を行います。
・「式によりアクションを非表示にする」にチェック
・式の値に「!@IsMember("[Admin]"; @UserRoles )」と入力する
@UserRolesは現在のユーザーのロールをあらわします
@IsMemberでは[Admin]が@UserRoles内に含まれているか確認します
!は否定を表します
つまり、ユーザーのロールに「[Admin]が含まれない場合」、このアクションを非表示にする、ということを設定します。
あとは、質問表を新規作成するアクションと同様に、回答設定文書を作成するロジックを追加します。