slack

テクてく Lotus 技術者 Slack に参加しよう!

2009/12/21

XPages Tutorial Part 9: プロフィール文書からの値の取得

Using Values From A Profile {Original Source}

Domino で Web アプリケーションを開発する際にはできるだけ URL、タイトル、ラベルなどハードコーディングは避けるようにしていました。基本的にすべて文書内に格納してアプリケーションのオーナーが自由に編集できるようにするためです。
このチュートリアルでもアプリケーションのタイトルをプロフィール文書に格納してある値を使って表示させたいと思います。
どうしてそんな面倒なことをするのか?とおっしゃるかもしれません。アプリケーションオーナーといえども通常はデータベースに管理者権限を持っているわけではありませんのでデータベースタイトルを変更することができないという理由からです。

XPages のコーディングに取り掛かる前にほんの少しだけノーツクライアントベースの開発をする必要があります。

「prof_AppConfig」という別名をもつフォーム設計を作成してください。
次にそのフォームに「cfg_ApplicationTitle」というフィールドを追加します。
次にアクションメニューから起動できる式言語のエージェントを作成してください。そのコードは
@Command([EditProfileDocument];"prof_AppConfig");
の一行だけです。

ではアクションからこのエージェントを起動して、データベースタイトル名として表示したい名前を入力し保存してください。
これで、プロフィール文書から値を読み込んで XPage に表示させるための準備が出来上がりました。

「layout_TitleBar」を開き、前回作成したデータベースタイトルを表示させている計算結果フィールドを選択します。値のプロパティタブから JavaScript のエディターを立ちあげます。
今回使用するコードは下記のようになります。
var profDoc:NotesDocument = database.getProfileDocument("prof_AppConfig",""); 
return profDoc.getItemValue("cfg_ApplicationName")[0]; 


プロフィール文書から値を取得する方法はほとんどロータススクリプトの方法を同じです。最初の行は NotesDocument クラスから作られた profDoc という新しい変数で database.getprofiledocument メソッドで呼ばれます。2 行目は getItemValue メソッドでそのフィールドの値を取得しています。ここで注意するのは 0 を囲う [] で、ロータススクリプトの中で配列内の一番最初の値を処理するときの方法と似ていますが、(0)とは違います。

この状態でアプリケーションをテストしたとき、アプリケーションのタイトルが 200 ピクセルを超えるような長さはちょっとした問題になりますので気をつけてください。結果はこのようになります。

ご覧のように H2 タグの制限から lotusTitleBar の div で指定された対象が長すぎると次の行へ改行してプレースバーのほうにはみ出して表示してしまいます。
これを解決するためには custom.css を使って OneUI をオーバーライドする必要があります。
custom.css を開いて(最初は何も書かれていません)次のコードを追加してください。
#lotusTitleBar h2, .lotusTitleBar h2 {
width:auto;
}
この css を保存したら、ブラウザに表示されている XPages のページを再読み込みします。
しかしそれでも正しく表示されないでしょう。
理由はもうひとつだけ変更しなければならないことがあるからです。

このアプリケーションの中にはテーマがあり、外部の CSS やアプリケーション内で使用する custom.css が定義されています。custom.css は外部定義されている OneUI css ファイルより順番が前に指定されています。
OneUI をオーバーライドして有効にさせるためには、このcustom.cssは外部の css がロードされた後に記述されなければなりません。一番下に custom.css の記述を持ってきて変更は終了です。
テーマを保存して再度ブラウザでページを再読み込みしてください。こんどはパーフェクトになったと思います。

次回以降はページフッターと実際のデータを利用したサイドバーやメインとなるコンテンツの表示を行っていきます。

0 件のコメント:

コメントを投稿