Skip to main content link. Accesskey S
  • Help
  • HCL Logo
  • HCL Notes and Domino Application Development wiki
  • THIS WIKI IS READ-ONLY. Individual names altered for privacy purposes.
  • HCL Forums and Blogs
  • Home
  • Product Documentation
  • Community Articles
  • Learning Center
  • API Documentation
Search
Community Articles > 日本語 - Japanese > Notes 開発者のための XPages SSJS 解説
  • Share Show Menu▼
  • Subscribe Show Menu▼

Recent articles by this author

ビデオで見る XPages Social Enabler

ノーツコンソーシアム 2012 年度ノーツソーシャルアプリ開発技術研究会 外部 SNS 連携調査結果報告の一部です。 OAuth Token Store とサンプルデータベースの設定および使用方法。 Dropbox と Twitter 連携についての詳細

ビデオで見る XPages Extension Library のインストール方法

ノーツコンソーシアム 2012 年度ノーツソーシャルアプリ開発技術研究会 外部 SNS 連携調査結果報告の一部です。

XPages Extension Library Mobile Controls - 「Tab Bar Button」

この記事では、XPages Extension Library Mobile Controls から Tab Bar Button コントロールを解説します。

XPages Extension Library Mobile Controls - 「Tab Bar」

この記事では、XPages Extension Library Mobile Controls から Tab Bar コントロールを解説します。

XPages Extension Library Mobile Controls - 「Mobile Switch」

この記事では、XPages Extension Library Mobile Controls から Mobile Switch コントロールを解説します。
Community articleNotes 開発者のための XPages SSJS 解説
Added by ~Judy Desluader | Edited by ~Judy Desluader on June 13, 2011 | Version 8
  • Actions Show Menu▼
expanded Abstract
collapsed Abstract
XPages開発で必要とされる Server Side JavaScript (SSJS) の理解ならびに習得のため、クラシックノーツ開発者向けに LotusScript との類似点や相違点を解説。特に SSJS で使用されるグローバルオブジェクトの理解は LotusScript のクラスと類似点が多く、その基本を理解することで SSJS への違和感、抵抗感がなくなるはずです。
Tags: XPages, SSJS
ShowTable of Contents
HideTable of Contents
  • 1 グローバルオブジェクト
    • 1.1 context
    • 1.2 database
    • 1.3 XSPオブジェクトライブラリ
    • 1.4 Dominoオブジェクトライブラリ
最近では、XPagesで使用されるJavaScriptのサンプルコードも増えてきています。JavaScriptを読んで理解したり、書いたりするうえで、まずグローバルオブジェクト、Dominoオブジェクト、XSP オブジェクトを理解することはとても重要です。
 

グローバルオブジェクト

ヘルプには「グローバルオブジェクトは、サーバーサイドスクリプトへのエントリポイントを提供します。 グローバルオブジェクトの名前を入力すると、そのグローバルオブジェクトがインスタンス化されます。」とあります。
グローバルオブジェクトとは、簡単に言えば、XPage 内でいつでもどこでも使えるオブジェクトです。
スコープ変数を扱う、「applicationScope」、「requestScope」、「sessionScope」、「viewScope」はわかりやすいと思います。
詳細は、Lotus Notes and Domino Application Development wiki のXPages のスコープ変数の有効範囲とタイムアウトexternal linkを参照してください。
その他、実際のアプリケーション開発で使用されるグローバルオブジェクトで使用頻度の高いものを見ると、
  • context
  • currentDocument
  • database
  • dominoDocument1
  • session
があげられます。実際、グローバルオブジェクトから派生するオブジェクトや変数が実際の開発では多く使用されます。

context

ヘルプ">IBM Lotus Domino and Notes Information Centerexternal linkにある context の説明には「データベースサーバー、ユーザーブラウザ、およびその他のオブジェクトにアクセスできるようにする XSPContext オブジェクト。」とあります。

コンテキストを簡単に言うと、ユーザーがどのブラウザを使用しているか、そのバージョンは何か、OSは何かといった Web ページを表示するうえでのユーザー環境を取得したり確認したりするため使用します。Webアプリならではのオブジェクトで、もちろんノーツクライアントアプリの作成には出てこない新しいものです。
どういう使い方があるかというと、たとえば、ブラウザが FireFox か IE かによってページの表示が多少異なる場合があるかもしれません。そんな時には、この context オブジェクトからユーザーが使用するブラウザの種類を検知して、制御できます。

次は context の 3 つの使用例です。

var browser = context.getUserAgent().getBrowser(); //ブラウザの種類
var bversion = context.getUserAgent().getBrowserVersion(); //ブラウザのバージョン
var locale = context.getLocale().getDisplayName(); //言語ロケール


 
また context は以下のようにテーマ設計の中にブラウザの種類によって読み込む CSS ファイルを制御する際にも使われます。
 

<resource rendered="#{javascript:context.getUserAgent().isIE(0, 6) == true}">


            <content-type>text/css</content-type>


            <href>blue_ie06.css</href>


      </resource>






      <resource rendered="#{javascript:context.getUserAgent().isIE(7, 8) == true}">


            <content-type>text/css</content-type>


            <href>blue_ie78.css</href>


      </resource>
ヘルプexternal linkにあるとおり、
context = XSPContext 
なので、この context で使用できるメソッドやプロパティは、ヘルプの
「XSP」-「 XSPContext」の中を展開すると確認できます。
XSPContentヘルプ
XSPContext オブジェクトのメソッドやプロパティのヘルプをひとつひとつ見ていくと、
「構文」というところがあります。
構文
filterHTML(html:string) : string

filterHTML関数の後の「:」に string という戻り値の型が指定されているます。string は文字列ですが、他にも boolean、何も返さない void (実行するのみ)などいろんな型があります。
ここで注意するのは、この型指定が大文字で始まっているものは、また違うオブジェクトを参照しているので、その先のオブジェクトを利用して値の取得などを行う点が勘所です。
その他には、
getLocale は「Locale」
getTimeZone は「TimeZone」
getUrl は「XSPUrl」
getUser は「DirectoryUser」
getUserAgent は「XSPUserAgent」

テーマ設計でみた、以下のコードは context オブジェクトから getUserAgent() メソッドを呼び出しますが、ここでは終わりではなく「.」を付け XSPUserAgent オブジェクトのインスタンス参照をし isIE() メソッドでブラウザが IE の 6 以下かどうかをチェックしています。
context.getUserAgent().isIE(0, 6)

database

 まずは、Lotus Domino Designer 8.5 「グローバルオブジェクトおよびグローバル関数」external linkの章を見てください。
ヘルプには、

database
データソースとして現在使用されている Lotus Domino データベースを表す

とあります。
つまり、「database」は今 XPage を開いてるデータベース自体のオブジェクトということになります。LotusScript で言い換えるとこの「database」グローバルオブジェクトは LotusScript の NotesDatabase クラスexternal linkが、コーディング中、初期化することなく  XPage の中で使用できるのと同じです。


Dim session As New NotesSession 
Dim db As NotesDatabase 
Set db = session.CurrentDatabase

上記のコードのように、LotusScript では現在のデータベースオブジェクトを取得するのに、NotesSession を new して CurrentDatabase で取得していましたが、XPages では直接現在のデータベースを database グローバルオブジェクトからコーディングできます。
そういった観点から LotusScript の NotesUIDatabase クラスexternal link がイベントで Source としてすぐ使用できるイメージですが、混同しやすいので、ここでは LotusScript の NotesDatabase と同じようなものだと覚えたほうが得策です。

また、JavaScript でこのオブジェクトを利用する際、
database.<メソッドまたはプロパティ>
の文法になります。メソッドは Domino オブジェクトの下の NotesDatabase オブジェクトexternal linkのメソッド、プロパティが使用できます。

NotesDatabaseオブジェクト

以下はその使用例のコードです。


database.getServer() //サーバー名の取得
database.getTitle() //データベースタイトルの取得
database.getURL() //データベースのURL取得
var ag = database.getAgent("YourAgent") //エージェントの取得

XSPオブジェクトライブラリ

 XPages は LotusScript のクラスと同様、オブジェクトにはフロントエンドの文書/ビューを扱う XSP ライブラリとバックエンドの文書/ビューを扱う Domino ライブラリがあります。

Domino ライブラリを使用して、現在ページ表示しているデータベースとは違う他のデータベースを参照したり、今ページ上で開いている文書以外の文書にアクセスできます。要は、ユーザーインタフェース(ページ)に見えていないものを扱います。
これに対して、フロントエンドの XSP ライブラリはヘルプで「XSP」、「Xsp」というオブジェクトの名前がついています。。XSP や Xsp という言葉を見つけたら、それはフロントエンドのオブジェクトだと思ってください。
LotusScript クラスでフロントエンドというと「UI」にあたるんですが、考え方は同様です。
ブラウザ中にまさに表示されているページで扱えるものです。Domino 文書をデータソースで使用していれば文書を、Domino ビューをページで表示していればそのビューが XSP オブジェクトとして扱えます。

(補足: ここで「XSP ライブラリ」と「XSP オブジェクト」という言葉を使用していますが、ライブラリはそれぞれのオブジェクトの集まりと理解してください。)
 
 話をグローバルオブジェクトに戻しますが、
ヘルプでのグローバルオブジェクトおよびグローバル関数external linkに
currentDocument と dominoDocument1 のそれぞれの説明にこうあります。
 
currentDocument: 現行コンテキストで最も近くにある文書を表す NotesXspDocument オブジェクト。
dominoDocument1: Lotus Domino 文書データソースを表す NotesXspDocument オブジェクト。
 
ちなみに dominoDocument1 は仮の名前で、XPage でデータソースの名前を指定しますが、そのデータソース名です。仮りに皆さんの指定したデータソース名を dominoDocument1 として説明しています。

currentDocument も dominoDocument1 も NotesXspDocument を表していることから、使用できるメソッド、プロパティはヘルプの NotesXspDocument のこちらexternal linkの章になります。
メソッド、プロパティの数はそんなに多くないのでヘルプで確認してください。

NotesXspDocument ではページ上の文書アイテムの値を取得する関数が、データ型によって厳密に操作できるようになっています。LotusScript の NotesUIDocument クラスでは「FieldGetText」でテキストとして値の取得のみでしたが。
 
NotesXspDocument 
 
ヘルプにはサンプルのコードが少ないので、当wiki の「NotesXSPDocument sample JavaScript code for XPagesexternal link」が役に立つと思います。

Dominoオブジェクトライブラリ

 Domino オブジェクトライブラリは、LotusScript のバックエンドクラスと同じと考えてよいでしょう。
 
LotusScript でバックエンドプロセスを書き始める際に、 
 
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
 
3 行目で現在のデータベースを取得するには、すでに SSJS では「database」というグローバルオブジェクトが用意されているのでこの「session」からデータベースを取得するコードをわざわざ書く必要はありません。
 
他のデータベースを参照する場合はどうでしょうか? 
LotusScript では NotesSession を new していましたが、これも SSJS の中ではで他のデータベースの取得に「session」というグローバルオブジェクトが用意されていますので、new せず、そのままエントリーポイントになります。 
 
 
var db:NotesDatabase = session.getDatabase("Japan/Acme", "Sales\\sales", false);
var dc:NotesDocumentCollection = db.getAllDocuments();
 
上のコードのように、バックエンドで処理するようなケースがあった場合、現在のデータベースの取得には、LotusScript と SSJS ではエントリーポイントが違う点が混乱しやすいので再確認してください。
特別な処理が必要なければ、データベースオブジェクト取得後には、さほど LotusScript で使用できるクラスと SSJS での Domino ライブラリ内のクラスとの違いがありませんのでコーディングに違和感を覚えることはないと思いますが、一度確認しておくとよいでしょう。


  • Actions Show Menu▼


expanded Attachments (3)
collapsed Attachments (3)
Edit the article to add or modify attachments.
File TypeSizeFile NameCreated OnDelete file
image/x-png 37 KB XSPContentHelp.png 6/6/11, 3:45 AM
image/x-png 43 KB NotesDatabase.png 6/7/11, 1:09 AM
image/x-png 9 KB NotesXspDocument.png 6/7/11, 11:47 PM
expanded Versions (8)
collapsed Versions (8)
Version Comparison     
VersionDateChanged by              Summary of changes
This version (8)Jun 13, 2011, 7:01:58 AM~Judy Desluader  Added Domino Object Library
7Jun 7, 2011, 11:50:59 PM~Rebecca Fezresaster  Added Xsp Object Library explanation
6Jun 7, 2011, 1:10:20 AM~Rebecca Fezresaster  Added database section
5Jun 6, 2011, 4:07:43 AM~Rebecca Fezresaster  
4Jun 6, 2011, 4:02:28 AM~Rebecca Fezresaster  
3Jun 6, 2011, 3:59:12 AM~Rebecca Fezresaster  
2Jun 6, 2011, 3:52:13 AM~Rebecca Fezresaster  
1Jun 6, 2011, 3:50:05 AM~Rebecca Fezresaster  Server Side JavaScript
expanded Comments (0)
collapsed Comments (0)
Copy and paste this wiki markup to link to this article from another article in this wiki.
Go ElsewhereStay ConnectedAbout
  • HCL Software
  • HCL Digital Solutions community
  • HCL Software support
  • BlogsDigital Solutions blog
  • Community LinkHCL Software forums and blogs
  • About HCL
  • Privacy
  • Accessibility