Lotus Notes JavaScript(SSJS) © 2012 IBM Corporation ®
by user
Comments
Transcript
Lotus Notes JavaScript(SSJS) © 2012 IBM Corporation ®
® Lotus Notes開発者向けXPagesのサーバーサイド JavaScript(SSJS)ガイド © 2012 IBM Corporation IBM Software Group | Lotus software 当ガイドの内容 Lotus Notes/Dominoのアプリケーションを式言語/LotusScript(以下、LS)を用 いて開発してきた開発者向けに、XPagesのサーバーサイドJavascript(以下、 SSJS)の理解を助けることを目的とする – 目的 • • SSJSの概要の紹介 SSJSの開発、またはSSJSのサンプルコードを参照する際の理解の補佐 – 対象 • Lotus Notes/Dominoのアプリケーション開発に熟練し、XPages/Webの開発経験 は少ない開発者 – 記載内容 • • • SSJSのコーディング方法 LS/式言語とSSJSの差異 SSJSでコーディングを行うときの考慮点 2 IBM Software Group | Lotus software 目次 – Notes開発者向けXPagesのサーバーサイドJavaScript(SSJS)解説 • SSJS概説 – “サーバーサイド”とは – SSJSの概要 – SSJSの制約 • SSJSの主要なコンポーネント – グローバルオブジェクト > スコープ変数 – XSPライブラリ – Dominoライブラリ – グローバル関数 – @関数(SSJS) – 参考.SSJSのその他のライブラリ • • • SSJSでJava/JSFのオブジェクトを扱う SSJSのデバッグ エラーハンドリング 3 IBM Software Group | Lotus software “サーバーサイド”とは① SSJS概説 “サーバーサイド”とは – Webサーバー側で処理を行うこと サーバーサイドスクリプトとは – Webサーバー側で動作するプログラミング言語のこと Webのプログラミングでは、サーバー側で動作するプログラムとクライアント側 で動作するプログラムの両方が必要 • 実行環境が異なるため、サーバー/クライアントそれぞれのプログラムで利用され る技術は異なる Webアプリケーション Flash ブラウザ JavaScript (Jquery/proto type.js/Dojo など) サーバー サイドJava ASP. NET PHP Webサーバー Python 4 IBM Software Group | Lotus software “サーバーサイド”とは② SSJS概説 Lotus Notesのネイティブアプリケーションの場合、サーバーサイドとクライアン トサイドで同様の言語でコーディング可能 – クライアントとサーバーで同様の実行環境が用意されているため Notesネイティブアプリケーショ ン Lotus Script 式言語 Lotus Notesクライアント Lotus Script 式言語 Lotus Dominoサーバー XPagesの場合は、他のWebアプリケーションと同様に、サーバーサイドとクラ イアントサイドで異なる技術を用いて開発する必要がある – XPagesでサーバーサイドに使用する言語が”サーバーサイドJavaScript” XPages JavaScript( Dojo含む) ブラウザ サーバーサイド JavaScript (SSJS) Lotus Domino Webサーバー 5 IBM Software Group | Lotus software 参考. XPagesのサーバーサイドとクライアントサイドの違い 使用する言語 クライアントサイド サーバーサイド ・JavaScript サーバーサイドJavaScript ・ブラウザにDLしたJavaScript ライブラリ Dojoなど UIに関する操作 可 不可 使用可能なデータ ・ブラウザにダウンロードした データ ・ブラウザから送信された データ ・Webサービスから動的に取 得するデータ ・サーバーに保持している データ 6 IBM Software Group | Lotus software SSJSの概要 SSJS概説 XPagesのSSJSとは – 前述のとおり、Lotus Domino Webサーバー上で動作するサーバーサイドスクリプト – 主に下記を用いてコーディングする • • • SSJS独自のライブラリ LSのバックエンドクラスと同等のライブラリ @関数(SSJS) • Javaのオブジェクト(後述) – @関数(SSJS)は式言語の@関数とは異なる(後述) > 以後、当資料では式言語の@関数を「@関数(式言語)」、SSJSの@関数を「@関数(SSJS)」と記述す る – 文法/ビルドインオブジェクト(配列など)のみJavaScriptを使用すると考えたほうがわ かりやすい – “サーバーサイドJavaScript”自体はXPages特有のものではない • 他に、node.js/Rhino/Aptana Jaxerなどがある 7 IBM Software Group | Lotus software SSJSの制約 SSJS概説 サーバーサイドで動作するため、 BOM(Browser Object model)※1のオブジェク トは使用できない XPagesではhtml/DOM(Document Object Model)※2はレンダリング時のみ生成 されるため、SSJSでDOMは扱えない 上記の制約のため、既存のJavaScriptライブラリをインポートしても動作しない ことが多い サーバサイドとクライアントサイドで共通のロジックは使用できない – 設計要素のスクリプトライブラリの種類も異なる • • クライアントサイド:JavaScript サーバーサイド:サーバー JavaScript ※クライアントサイドのスクリプトライブラリをSSJSにインポートすることはできない ※1 ブラウザ構成要素のオブジェクト(windowやdocumentなど) ※2 HTML,XMLでマークアップされた文書をJavaScriptのオブジェクトとして扱う仕様 8 IBM Software Group | Lotus software 参考.なぜJavaScriptなのか? SSJS概説 開発経緯 – Lotus Notes/Dominoと同様のRADをJ2EE上で実現するモデルで開発され たテクノロジーを援用 • 「IBM Lotus Workplace Designer(EoS)」/「IBM Lotus Component Designer」の製 品で採用されたテクノロジー 参考.XPages:history http://en.wikipedia.org/wiki/XPages#History サーバサイドJavaScriptのメリット – Javaとの親和性 – JavaScriptのデータ形式であるJSONとの親和性 – 複数言語を使用せずにすむ • 現状、どのようなWebアプリケーションでもクライアントサイドでJavaScriptの使用は 必須 9 IBM Software Group | Lotus software SSJSの主要なコンポーネント SSJSの主要なコンポーネント SSJSは下記の特殊なオブジェクトとライブラリ群/関数で構成される – グローバルオブジェクト • • プログラムのどこからでも参照可能なオブジェクト 各ライブラリへのエントリポイントや、ページを超えて共有する変数を提供 – XSPライブラリ • 現在表示しているXPage※1やブラウザコンテキスト(ブラウザやログインユーザーの情報など)へのアクセ スを提供 – Dominoライブラリ • LSのバックエンドクラスへのアクセスを提供 – グローバル関数 • プログラムのどこからでも呼び出し可能な関数 – @関数(SSJS) • • Lotus Notes/Domino上の@関数(式言語)をエミュレートする SSJS内に直接記述する ※1 XPageはXPagesのページを表す単一の設計要素。XPages(Webアプリ開発技術の総称)とはまったく異なるので注意。 10 IBM Software Group | Lotus software グローバルオブジェクト SSJSの主要なコンポーネント >グローバルオブジェクト グローバルオブジェクトとは – プログラムのどこからでも参照可能なオブジェクト • LSの宣言(Dim/New/Set)にあたる操作を行わなくても、直接メソッドをコールしたり、プロパ ティにアクセスできる SSJSでは、各ライブラリのへエントリポイントとなるグローバルオブジェクトが用意され ている – XSPライブラリのグローバルオブジェクト • context/dominoDocument1(NotesXspDocument) • database/session • facesContextなど • applicationScope/sessionScope/requestScope/viewScope – Dominoライブラリのグローバルオブジェクト – JSFのオブジェクト – スコープ変数(ライブラリではなく変数、後述) 上記のグローバルオブジェクト名はすべて予約語(dominoDocument1を除く、後述) 11 IBM Software Group | Lotus software SSJSの主要なコンポーネント >グローバルオブジェクト LSとSSJSのエントリポイントの比較 LSとSSJSのエントリポイントの違い – LSではエントリポイントになる任意のオブジェクト名を定義し、あらかじめ Newを用いて宣言する必要がある • • Dim session as New NotesSession Dim ws as New NotesUIWorkspace – SSJSではLSの上記Newメソッドにあたるメソッドはなく、直接エントリポイント となるグローバルオブジェクトへアクセスする • • オブジェクト名は予約語 例.現在のユーザーの階層名を取得するロジック LS Dim session As New NotesSession Dim user As String user = session.EffectiveUserName SSJS //session(予約語)がNotesSessionクラスの //グローバルオブジェクト var user = session. getEffectiveUserName(); 12 IBM Software Group | Lotus software スコープ変数① SSJSの主要なコンポーネント >グローバルオブジェクト スコープ変数を使うと、ページ内、またはページを超えて値を保持することが できる スコープ変数の種類 • • applicationScope・・・アプリケーションの範囲。アプリケーションが存在する限り有 効。異なるセッション間でも保存される sessionScope・・・セッションの範囲。1回のセッションを通じて有効。異なるセッショ ン間では保存されない ※sessionScopeはアクセスしているDBに保存されるため、複数DBで共有はできない。 • • requestScope・・・要求の範囲。1回のリクエスト(サーバーへのサブミットとそのレ スポンス)の間のみ有効 viewScope・・・表示の範囲。1つのページ内でのみ有効。ページを遷移すると無効 となる 13 IBM Software Group | Lotus software SSJSの主要なコンポーネント >グローバルオブジェクト スコープ変数② 使用方法 – [使用するスコープ変数] + “.”+“任意の変数名”]という形式で使用する。 ※事前に変数名の定義/宣言などを行う必要はない • 例.値を格納する場合 var userName = "IBM User"; sessionScope.name = userName; • 例.値を呼び出す場合 var userName = sessionScope.name; 14 IBM Software Group | Lotus software XSPライブラリ SSJSの主要なコンポーネント >XSPライブラリ 現在表示しているXPageやブラウザコンテキストにアクセスする6つのクラス – DirectoryUser • ログイン中のユーザ情報を取得する。 – NotesXspDocument • XPageのデータソース(文書)へのアクセスを提供する。 – NotesXspViewEntry • XPage上のビュー/表などの行のデータへのアクセスを提供する。 – XSPContext • 現在のコンテキストを表す。ページ遷移や他のオブジェクトへのアクセスポイント。 – XSPUrl • URL を表す。 – XSPUserAgent • ブラウザの情報へのアクセスを提供する。 15 IBM Software Group | Lotus software XSPライブラリの主なクラスとアクセス方法① SSJSの主要なコンポーネント >XSPライブラリ NotesXspDocument • • データソースで指定した文書へのアクセスを提供 オブジェクト名は、[プロパティ]-[データソース]で指定した名前 – デフォルトではdocument1 – グローバルオブジェクトであるため直接オブジェクト名で呼べる • 使用できるメソッド/プロパティはNotesDocumentクラスに近い – 主なメソッド・・・getItemValue/replaceItemValue/getNoteID/saveなど – 主なプロパティ・・・isNewNote/isResponse/isEditable/hasItemなど • DominoライブラリのNotesDocumentオブジェクトへのアクセスを提供 – getDocumentメソッドで取得する(後述) 16 IBM Software Group | Lotus software XSPライブラリの主なクラスとアクセス方法② SSJSの主要なコンポーネント >XSPライブラリ XSPContext – 現在へのコンテキストへのアクセス – オブジェクト名は”context”(予約語) • グローバルオブジェクトであるため直接オブジェクト名で呼べる – ページを遷移するメソッドや他のXSPライブラリへのアクセスポイントを提供 – 主なメソッドの例 • • • • • redirectToPageメソッド・・・新規XPageを開く reloadPageメソッド・・・ページを再ロードする getUserメソッド・・・現在のユーザーをDirectoryUserオブジェクトとして取得する getUserAgentメソッド・・・XSPUserAgentオブジェクトを取得する getURLメソッド・・・XSPUrlオブジェクトを取得する DirectoryUser – 現在のユーザー情報へのアクセス – 主なメソッドの例 • getRolesメソッド・・・現在のユーザーのロールを取得する ※SSJSで直にロールを取得できるメソッドは上記のみ ※戻り値はJavaのjava.util.vector型(後述) 17 IBM Software Group | Lotus software XSPライブラリの主なクラスとアクセス方法③ SSJSの主要なコンポーネント >XSPライブラリ NotesXSPViewEntry – 現在表示しているXPageのビューコントロール/繰り返しコントロール/データ 表コントロールの行へのアクセスを提供 • データソースが”Dominoビュー”の場合のみ – オブジェクト名はプロパティの”var”に指定した名前(コレクション名) • 指定する箇所は次ページ参照 – 主なメソッド • • getColumnValue・・・列のプログラム名を指定し、ビューエントリ内の列の値を取得 getDocument・・・ビューエントリに関連付けられた文書を取得 – ビュー/繰り返しコントロール/データ表のコンテンツを書き出すために使用 される • サンプルコード 『NotesXSPViewEntry sample JavaScript code for XPages』 http://goo.gl/NMFPP 18 IBM Software Group | Lotus software 参考.NotesXSPViewEntryのオブジェクト名の指定 SSJSの主要なコンポーネント >XSPライブラリ 下記のいずれかから指定する • ビューコントロール/繰り返しコントロール/データ表の場合 – [プロパティ]-[すべてのプロパティ]-[データ]-[var] • 繰り返しコントロール/データ表コントロールの場合 – [繰り返し/データ表]-[オプション]-[コレクション名] 19 IBM Software Group | Lotus software 参考.XSPライブラリを使用したSSJSサンプル SSJSの主要なコンポーネント >XSPライブラリ 現在のユーザー名とブラウザ名を取得し、文書に保存するスクリプト //現在のユーザー名をDirectoryUserオブジェクトから取得する //グローバルオブジェクトであるcontext(XSPContextオブジェクト)は直接オブジェクト名で呼べる var loginUser = context.getUser(); var loginUserName = loginUser.getFullName(); //現在の使用されているブラウザの名前を取得する var browser = context.getUserAgent().getBrowser(); //文書に値をセットする //グローバルオブジェクトであるdocument1(NotesXSPDocument)は直接オブジェクト名で呼べる //”Browser”フィールドへブラウザの共通名をセット document1.replaceItemValue("Browser",browser); //”UserFullName”フィールドへブラウザの共通名をセット document1.replaceItemValue("UserFullName",loginUserName); //現在の文書を保存する document1.save(); //home.xspへリダイレクトする context.redirectToPage("home.xsp"); 20 IBM Software Group | Lotus software SSJSの主要なコンポーネント >Dominoライブラリ Dominoライブラリ LSのバックエンドクラスへのアクセスを提供 – 実際には、SSJSのDominoライブラリはLotus Notes/DominoのJavaのクラス をコールしている • • SSJSのアクセス順序 SSJS Lotus Domino Javaクラス LotusScript Back engine Lotus Domino のオブジェクト 参考.LSのアクセス順序 LS LotusScript Back engine Lotus Domino のオブジェクト – Javaクラスと同様のこと実装可能であるとともに、同様の考慮点がある • Dominoライブラリのオブジェクトはrecycle()メソッドでメモリを解放することを推奨 (詳細は後述) 21 IBM Software Group | Lotus software LSとSSJSのクラスの差異 SSJSの主要なコンポーネント >Dominoライブラリ DominoライブラリとLSのクラスと比較した場合の差異は下記 – LSの77クラス中、SSJSで使用できるクラスは48クラス • SSJSで使用できないクラス – フロントエンドのクラス > NotesUIWorkspace、NotesUIDocument、NotesUIVIew、NotesUIDatabase、NotesUISchedulerの5ク ラス > NotesTimerクラス – DXL(Domino XML Language)に関するクラス > NotesDOMNode、NotesXMLProcessor, NotesDOMParserクラスなど23クラス ※SSJSでは、DominoライブラリにNotesDxlExporter クラス/NotesDxlImporterクラスのみがある ※SSJSのDOMライブラリは使用できない(後述) • SSJS独自のクラス – NotesAgentContextクラス > 実行中のエージェントの環境を表す。 – NotesBaseクラス > recycleメソッドのみ提供 無条件にオブジェクトを破棄し、そのメモリをシステムに返す。 22 IBM Software Group | Lotus software LSとSSJSのメソッド/プロパティの差異① SSJSの主要なコンポーネント >Dominoライブラリ メソッド/プロパティのほとんどが使用可能 • • 例1.LSのNotesDocumentクラスの77のメソッド・プロパティのうち、SSJSでは74が使用可能 例2.LSのNotesDatabaseクラスの109のメソッド・プロパティのうち、SSJSでは101が使用可能 – 使用できないメソッドがあったとしても基本的に代替の手段は用意されている まったく同一ではないため、都度ヘルプを確認する必要あり LSとSSJSの主な差異 • • • Newメソッドがない(後述) NotesDatabaseクラスのUnprocessedDocumentsプロパティがない(対応方法はp33参照) 一部のプロパティ/メソッドの名称が異なる – Javaのネーミングルールに従うため – プロパティは先頭に”Is”が追加される場合がある > 例.LSのNotesDocumentクラスのEncryptedOnSendプロパティはSSJSではIsEncryptedOnSend – プロパティを取得するメソッド名はget + プロパティ名 > 例. NotesDatabaseクラスのACLプロパティを取得する場合 var acl:NotesACL = database.getACL(); 23 IBM Software Group | Lotus software LSとSSJSのメソッド/プロパティとの差異② SSJSの主要なコンポーネント >Dominoライブラリ – プロパティをセットするメソッド名はset + プロパティ名 > 例. .NotesDocumentクラスのEncryptedOnSendプロパティにtrueをセット var doc:NotesDocument = document1.getDocument(); doc.setEncryptOnSend(true); • Javaクラス独自のメソッド/プロパティを追加 – 例.NotesDatabaseクラスにFTDomainSearchメソッドが追加されている • 一部のメソッドを異なるクラス/@関数(SSJS)に付け替え – 例1.LSのNotesDatabaseクラスの下記メソッドは、SSJSでは、 NotesAgentContextクラス に同様のメソッドがある > UnprocessedFTSearchメソッド/UnprocessedFTSearchRangeメソッ ド/UnprocessedSearchメソッド – 例2.LSのNotesDatabaseクラスのIsDB2プロパティは@関数(SSJS)に@IsDB2がある 24 IBM Software Group | Lotus software LSとSSJSのgetItemValueメソッドの違い SSJSの主要なコンポーネント >Dominoライブラリ SSJSではNotesDocumentクラスのgetItemValueメソッドの使用方法が異なる – LSのGetItemValueメソッドの場合 • 戻り値は文字列/数値/日時値の配列 – SSJSのgetItemValueメソッドの場合 • 戻り値は文字列/数値/日時値のjava.util.Vector型 ※javaオブジェクトの扱い方については後述 • SSJSでは戻り値の型を指定したメソッドをよく使用する – getItemValueString・・・文字列値を 1 つだけ持つアイテムの値を返す。 もっとも使用頻度 が高い。 – getItemValueDouble・・・数値を 1 つだけ持つアイテムの値を返す。 – getItemValueInteger・・・数値を 1 つだけ持つアイテムの値を返す。 25 IBM Software Group | Lotus software Dominoライブラリへのアクセス方法① SSJSの主要なコンポーネント >Dominoライブラリ Dominoライブラリのグローバルオブジェクト – グローバルオブジェクトであるため、特に宣言などせずにアクセス可能 • • • session・・・現在のLotus Dominoセッション(NotesSessionクラス)。予約語。 database・・・現在のデータベース(NotesDatabaseクラス)。予約語。 view1・・・XPageのデータソースとして指定しているビュー。オブジェクト名はデータ ソースで指定した名前”view1”がデフォルト(NotesViewクラス) 26 IBM Software Group | Lotus software Dominoライブラリへのアクセス方法② SSJSの主要なコンポーネント >Dominoライブラリ 現在の文書データソースへのアクセス – docment1(NotesXspDocument)のgetDocument()メソッドを使用する(p16参 照) • • 引数 True・・・XPage上の変更を反映する 引数 False・・・XPage上の変更を反映しない その他のDominoライブラリは上記オブジェクトをエントリポイントとし、そのメ ソッドを使用してアクセスする – SSJSではLSのNewメソッドに対応するメソッドがないため、上位のオブジェ クトのcreateメソッドなどを使用する(詳細は次ページ) 27 IBM Software Group | Lotus software LSのNewメソッドとDominoライブラリのメソッドの対応 SSJSの主要なコンポーネント >Dominoライブラリ SSJSで対応するメソッド LSでNewメソッドを持つクラス クラス名 メソッド名 NotesACLEntry クラス NotesACL createACLEntry NotesDatabase クラス NotesSession getDatabase NotesDateTime クラス NotesSession createDateTime NotesDbDirectory クラス NotesSession getDbDirectory NotesDocument クラス NotesDatabase createDocument NotesItem クラス NotesDocument replaceItemValue NotesLog クラス NotesSession createLog NotesName クラス NotesSession createName NotesNewsletter クラス NotesSession createNewsletter NotesRegistration クラス NotesSession createRegistration NotesRichTextItem クラス NotesDocument createRichTextItem NotesSession クラス なし。グローバルオブジェクトであるため最初からアクセス可能。 28 IBM Software Group | Lotus software LSとSSJSの文法の差異 SSJSの主要なコンポーネント >Dominoライブラリ 大文字小文字を区別する – SSJSでは最初の単語を小文字で始め、以後の単語の先頭文字は大文字(Camel記法) 宣言 – JavaScriptで宣言は必須ではないが、SSJSでは下記のように宣言することが多い • Var 変数名:型 文末にセミコロン”;”を記述する オブジェクトを割り当てる場合に”Set”は必要ない メソッドを呼ぶときにCallは必要ない 一部の比較演算子は異なる – LSで等価は”=“、SSJSでは等価は”==“ 引数を必要としない場合もメソッド/プロパティの末尾に”()”を記述する 詳細は「Notes/Domino開発者向けJavaScript入門」p9-p19参照 http://www.ibm.com/developerworks/jp/lotus/ldd_tech/2011apr_nd_js.html 29 IBM Software Group | Lotus software Dominoライブラリを使用する上での考慮点 SSJSの主要なコンポーネント >Dominoライブラリ Dominoライブラリのオブジェクト(Lotus Notesのオブジェクト)を使用した場 合、recycleメソッドで明示的にメモリを解放することを推奨 • 呼び出し方は[オブジェクト名.recycle()] var doc:NotesDocument =document1.getDocument(); //処理 doc.recycle(); 下記のLotus Notes における Java APIの考慮点がSSJSでもあてはまるため – JVM では、ガベージコレクションが不要になったオブジェクトを定期的に解 放する • そのためJavaのオブジェクトのメモリ管理について意識する必要はない – Lotus Notes/DominoのオブジェクトはJVMのガベージコレクションの対象外 でメモリが解放されない • • Lotus Notes/Domino のメモリ管理下に置かれるオブジェクトが生成されるため メモリを解放するためにはrecycle() メソッドの実行が必要 – 詳細は『Lotus Notes/Domino における Java 実行環境とその問題判別につ いて 』参照 30 IBM Software Group | Lotus software 参考.Dominoライブラリを使用したSSJSサンプル Dominoディレクトリのユーザー文書 から現在のユーザーの役職名と会 社名を取得し、現在の文書に保存 するサンプル ※赤字が異なる箇所(大文字小文字の違いを除く) SSJS SSJSの主要なコンポーネント >Dominoライブラリ 参考.LS Dim session As New NotesSession Dim ndb As NotesDatabase Dim nvw As NotesView Dim ndoc As NotesDocument Dim loginUsrName As String Dim nam As NotesName Dim key As String Dim ws As New NotesUIWorkspace Dim doc As NotesDocument Dim companyname,jobtitle As Variant var loginUsrName =session. getEffectiveUserName() ; var nam:NotesName = session.createName(loginUsrName); Set db = session.CurrentDatabase var key = nam.getAbbreviated(); loginUsrName = session.EffectiveUserName //databaseは現在のDBをあらわすグローバルオブジェクト Set nam = New NotesName(loginUsrName) var ndb:NotesDatabase = session.getDatabase(database.getServer(),"names.nsf"); key = nam.Abbreviated var nvw:NotesView = ndb.getView("($Vimpeople)"); var ndoc:NotesDocument = nvw.getDocumentByKey(key,true); Set ndb = session.getdatabase(db.Server,"names.nsf") Set nvw = ndb.GetView("($Vimpeople)") var companyName = ndoc.getItemValue("CompanyName"); Set ndoc = nvw.GetDocumentByKey(key,True) var jobTitle = ndoc.getItemValue("JobTitle"); companyname = ndoc.GetItemValue("CompanyName") var doc:NotesDocument = document1.getDocument(true); jobtitle = ndoc.GetItemValue("JobTitle") doc.replaceItemValue("KaisyaMei",companyName); doc.replaceItemValue("YakushokuMei",jobTitle); Set doc = ws.CurrentDocument.Document Call doc.ReplaceItemValue("KaisyaMei",companyname) doc.save(true,true,true); Call doc.ReplaceItemValue("YakushokuMei",jobtitle) //Dominoライブラリのオブジェクトは明示的にメモリを解放 nam.recycle();ndb.recycle();nvw.recycle();ndoc.recycle();doc.recycle(); Call doc.Save(True,True,True) 31 IBM Software Group | Lotus software SSJSの主要なコンポーネント >グローバル関数 グローバル関数 プログラムのどこからでも呼び出し可能な関数 各コントロールへのアクセスする関数などがある – 主な関数 • getComponent – XPage上のコントロールを直接オブジェクトとして取得する – オブジェクトはsetValue/getValueメソッドを持つため、値の取得/セットが可能 > 例.編集ボックス(inputText1)の値を取得する var temp = getComponent("inputText1").getValue(); – 詳細な各オブジェクトのプロパティ/メソッドはXPages Extensiblity APIのJavadoc参照 (8.5.2以降) > ヘルプには記載されていない > “UI”や”XSP”の接頭辞がついているオブジェクトが各コントロールのオブジェクト XPages Extensibility API Documentation http://www-10.lotus.com/ldd/ddwiki.nsf/dx/XPages_Extensibility_API_Documentation 32 IBM Software Group | Lotus software 参考.グローバル関数を使用したサンプル SSJSの主要なコンポーネント >グローバル関数 XPageのビューで選択された文書を取得する例 – LSのエージェントで、NotesDatabaseクラスのUnprocessedDocumentsを使用した場合に該当 ※実行時の対象はデフォルトの”すべての選択文書”の場合 – ビューの選択文書を取得するロジック • • ①getComponentを用いてビューコントロールをオブジェクトとして取得 ②ビューコントロールのメソッドであるgetSelectedIds()を用いて、選択文書のNoteIDを取得 • ③NoteIDをキーに、databaseオブジェクト(NotesDatabaseクラス)から文書を取得する – 参考.Class UIViewPanel (XPages Extensibility API) – http://public.dhe.ibm.com/software/dw/lotus/DominoDesigner/JavaDocs/XPagesExtAPI/8.5.2/com/ibm/xsp/component/UIViewPanel.html#getSelectedIds%28%29 参考.Notes/Domino 8.5.1における XPages 新機能 http://www.ibm.com/developerworks/jp/ysl/library/lotus/y-lot-xpages851newfunction/ 参考. XPages Tutorial Part 48 : チェックボックスをアクションにリンクさせる http://notesdominoliaison.blogspot.com/2010/01/xpages-tutorial-part-48.html var viewPanel=getComponent("viewPanel1"); var docIDs=viewPanel.getSelectedIds(); for(i=0 ; i < docIDs.length ; i++){ var docId = docIDs[i]; var doc:NotesDocument = database.getDocumentByID(docId); // Process selected documents here doc.recycle(); } 33 IBM Software Group | Lotus software @関数(SSJS) SSJSの主要なコンポーネント >@関数(SSJS) SSJSはLotus Notes/Dominoの@関数(式言語)をエミュレートする – 基本的に@関数(式言語)と同様の引数/オプションが使用可能 • 特殊な引数/オプションは使用できない(後述) – @関数(式言語)274個中、@関数(SSJS)で対応する関数は94個 • 主な使用できる関数 – – – – – – ビューの列値取得(@DbColumn) ビューの検索・値取得(@DbLookup) 条件式(@If) 名前取得・処理(@Name/@UserName) 日時取得・処理(@Now/@Today/@Yesterday/@Year/@Monthなど) 文字列処理(@Right/@RightBack/@Left/@LeftBack/@Middle/@MIddleBack/@Trimなど) – SSJS独自の関数も追加されている – @Element/@List/@Null – 使用できない関数一覧 • List of Formula Not Supported In XPages http://www-10.lotus.com/ldd/ddwiki.nsf/dx/List_of_Formula_Not_Supported_In_XPages 34 IBM Software Group | Lotus software SSJSの主要なコンポーネント >@関数(SSJS) 利用可能な@関数(SSJS)一覧 @Abs @Do @IsNull @Name @Sum @Abstract @Element @IsNumber @NewLine @Text @Adjust @Elements @IsResponseDoc @No @TextToNumber @AttachmentLengths @Ends @IsText @Now @TextToTime @AttachmentModifiedTimes @Error @IsTime @Null @Time @AttachmentNames @Explode @IsUnavailable @ProperCase @Today @Attachments @Failure @Left @Random @Tomorrow @Author @False @LeftBack @Repeat @Trim @Begins @GetField @Length @Replace @True @Char @Hour @List @ReplaceSubstring @Unique @ClientType @If @LowerCase @ReplicaID @UpperCase @Contains @Implode @Max @Return @UserName @Count @Integer @Member @Right @Weekday @Created @IsAvailable @Middle @RightBack @Word @Date @IsDocBeingLoaded @MiddleBack @Round @Year @Day @IsDocBeingSaved @Min @Second @Yes @DbColumn @IsError @Minute @Select @Yesterday @DbLookup @IsMember @Modified @SetField @DbName @IsNewDoc @Modulo @Subset @DbTitle @IsNotMember @Month @Success 35 IBM Software Group | Lotus software @関数(式言語)と@関数(SSJS)の差異① SSJSの主要なコンポーネント >@関数(SSJS) SSJSで使用できない主な@関数(式言語) – UIを直接操作するもの • • @Command(@Commandで指定できるパラメータは388個) @PickList/@Prompt/@Dialogboxなど • @MailSend/@DocumentUniqueID • @SetEnvironment/@Environment/@Version/RegqueryValueなど • @GetProfileField/@SetProfileField – UIにある文書にアクセス/操作するもの – Notesクライアント環境にアクセスするもの – プロフィール文書にアクセスするもの – ブラウザのコンテキストにかかわるもの • @URLHistory/@UrlQueryString/@BrowserInfoなど ※補足.ブラウザコンテキストにはSSJSのXSPライブラリを使用する(p15) 算術演算に関するもの • @Tan/@Signなど ※補足.SSJSのStandardライブラリ、Mathクラスで代替可能 厳密な傾向はなく、都度ヘルプの確認が必要 – @UserNameは使えるが、@UserRolesは使えない – @Uniqueは使えるが、@Sortは使えない 36 IBM Software Group | Lotus software @関数(式言語)と@関数(SSJS)の差異② SSJSの主要なコンポーネント >@関数(SSJS) 特殊なオプションを使用するものは使用できない – @Contains • • @関数(式言語)では2つの複数値を引数とし、個々の値をすべて比較して判定する @関数(SSJS)では、2つの引数はストリング。複数値同士の比較はできない。 – @Text • format-string(日時構成要素)の指定はできず、ストリング形式に変換するのみ – 例. @Text(@Now;“D3T1”) の “D3T1”などは指定できない – @DbColumn/@DbLookup • ODBCデータソースは使用できない。 – 引数の数も異なる。@関数(SSJS)では@関数(式言語)の”class:cache”はパラメータにない。 – @Name • 一部のオプション([HIERARCHYONLY]や[PHRASE]など)が指定できない。 ※Lotus Notes/Dominoでよく使用する[CN]/[ABBREVIATE]/[CANONICALIZE]は使用可能 – @Explode • @関数(式言語)では日時範囲の指定が可能だが、@関数(SSJS)では不可 – 例. @関数(式言語)では@Explode([2011/10/01 - 2011/10/03])は、範囲を展開し た”2011/10/01”,”2011/10/02”,2011/10/3”の文字列リストを返す 37 IBM Software Group | Lotus software @関数(式言語)とSSJSの文法の差異 SSJSの主要なコンポーネント >@関数(SSJS) 大文字と小文字を正確に区別する パラメータはセミコロンではなくカンマで区切る フォーム上では直接フィールド名で値にアクセスできるが、SSJSでは NotesXSPDocumentクラスを用いて変数の値を取得する オプションもストリングであるため""で囲って指定する 比較演算子の記述 – 式言語で等価は”=“、SSJSでは等価は”==“など 配列の記述 – 式言語では”:”で区切って記述可能。SSJSではArrayオブジェクトや@List関数を使用 する必要がある 引数を必要としない場合も”()”の記述が必須 – ()を記述しなくてもスクリプトエディタ上エラーにはならないが、戻り値が下記の固定 の文字列になる • “function:IBMJS built-in function” 38 IBM Software Group | Lotus software SSJSの主要なコンポーネント >@関数(SSJS) @関数(SSJS)を使用したSSJSサンプル ユーザー名を略称形式で表示する(計算結果フィールドに記述、以下同様) SSJS @Text(@Name("[Abbreviate]",@UserName())); 参考.式言語 @Text(@Name([Abbreviate];@UserName)) Statusフィールドの値に応じて表示する文字列を変更するサンプル SSJS var Status=document1.getItemValueString("Status"); @If( Status=="0","作成中", Status=="1","承認依頼中", ""); 参考.式言語 @If( Status="0";"作成中"; Status="1";"承認依頼中"; "") Dominoディレクトリの($VIMPeople)ビューの1列目(FullName)を取得する SSJS var svrname = session.getServerName(); var dbpath = new Array(svrname,"names.nsf"); @DbColumn(dbpath,"($VIMPeople)",1); 参考.式言語 dbpath := @ServerName:"names.nsf"; @DbColumn("":"";dbpath;"($VIMPeople)";1) 39 IBM Software Group | Lotus software 参考.SSJSのその他のライブラリ SSJSの主要なコンポーネント >その他のライブラリ Standardライブラリ – クライアントサイドのJavaScriptのビルトインオブジェクトと同様 • Array/Boolean/Date/Math/Number/Object/RegExp/String Runtimeライブラリ – 国際化対応のためのクラス群を提供 • タイムゾーンやロケールの操作など DOMライブラリ – XML Document Object Model 形式の文書を表す – データストアが XML ベースではないため、現時点(Lotus Notes/Domino 8.5.3)では 使用されていない 参考.ヘルプ『サーバーサイドのスクリプト』 40 IBM Software Group | Lotus software SSJSでJava/JSFのオブジェクトを扱う① SSJSでJava/JSFの オブジェクトを扱う SSJSではJava/JSFの標準のオブジェクトを用いてロジックを記述する場合が ある – Java/JSFの標準のオブジェクトはヘルプには記載されていない(詳細は次 項) – 使用するケース • SSJSのXSPライブラリ/Dominoライブラリのメソッドの戻り値が配列の場合 – 戻り値の型はjava.util.Listかjava.util.Vectorになる(扱い方は後述) • SSJSのライブラリで行えない処理を行う場合 – グローバルオブジェクトのfacesContextなどを使用する(後述) Javaのオブジェクトを直接組み込むことも可能 – ヘルプ『JavaScript への Java の組み込み』参照 41 IBM Software Group | Lotus software SSJSでJava/JSFのオブジェクトを扱う② SSJSでJava/JSFの オブジェクトを扱う Lotus Notes/DominoのJava/JSFのJavadocは標準では提供されていない – Is it possible to get JavaDoc files for Domino Designer Java agents? https://www-304.ibm.com/support/docview.wss?uid=swg21258816 Lotus Notes/DominoのJava/JSFのバージョンにあわせ、他から取得・または 生成し、それぞれのJavadocを参照する必要がある • Lotus Notes/Domino における Java 実行環境とその問題判別について http://www-01.ibm.com/support/docview.wss?uid=swg21466201 当資料では、参考としてオラクル社のJavadocへリンクする – サポートされるドキュメントではない 42 IBM Software Group | Lotus software SSJSでjava.util.Listを扱う SSJSでJava/JSFの オブジェクトを扱う java.util.Listとは – Javaの順序つきのリストのインターフェース SSJSでjava.util.Listが戻り値の型であるメソッド • • DirectoryUserクラスのgetRolesメソッド/getGroupsメソッド NotesXspDocumentクラスのgetAttachmentListメソッド – getAttachmentListメソッドの場合、各要素はNotesEmbeddedObject 型 java.util.Listのメソッドの例 – getメソッド・・・リスト内の指定された位置にある要素を返す – indexOfメソッド・・・指定された要素がリスト内で最初に検出された位置のインデック スを返す – containsメソッド・・・リストに指定の要素がある場合に true を返す – sizeメソッド・・・ リスト内にある要素の数を返す – 詳細は下記参照 > http://java.sun.com/javase/ja/6/docs/ja/api/index.html?java/util/List.html 43 IBM Software Group | Lotus software SSJSでjava.util.Listを使用したサンプル SSJSでJava/JSFの オブジェクトを扱う ログインユーザーが、”Admin”または”Manager”ロールを持つか否かを判定 するロジック(コントロールの[可視]/[表示]プロパティの[値の計算]に記述) • ①DirectoryUserクラスのgetRolesメソッドを使用してロールを取得する – 戻り値の型がjava.util.List • ② java.util.Listのcontainsメソッドを使用して、”[Manager]”または”Admin”の文字 列を含むかどうかを判定する – containsメソッド – http://java.sun.com/javase/ja/6/docs/ja/api/java/util/List.html#contains(java.lang.Obje ct) var roleList = context.getUser().getRoles(); roleList.contains("[Manager]") || roleList.contains("[Admin]"); 44 IBM Software Group | Lotus software SSJSでjava.util.Vector型を扱う SSJSでJava/JSFの オブジェクトを扱う java.util.Vectorとは – 可変長の配列を実現する SSJSでjava.util.Vectorが戻り値の型である主なメソッド – NotesXspDocumentクラスのgetItemValueメソッド – NotesDocumentクラスのgetItemValueメソッド – NotesViewクラスのgetColumnValuesメソッド – NotesSessionクラスのevaluateメソッド java.util.Vectorのメソッド – java.util.Listインターフェースを実装しているため、 java.util.Listのメソッド(p42)が使用 可能 – 詳細は下記参照 • http://java.sun.com/javase/ja/6/docs/ja/api/java/util/Vector.html 45 IBM Software Group | Lotus software SSJSでfacesContextを扱う SSJSでJava/JSFの オブジェクトを扱う facesContextとは – JSFのオブジェクトで、JSFの現在の状態を保持する。JSFの状態を取得す るための出発点 • 詳細は下記のJSFのJavaDoc参照 http://docs.oracle.com/cd/E17824_01/dsc_docs/docs/jscreator/apis/jsf/javax/fac es/context/FacesContext.html – SSJSでは、 facesContextはグローバルオブジェクトであ り、”facesContext”は予約語 – SSJSのXSPライブラリやDominoライブラリで行えない処理を行うときなどに 使用する。 • • XPage以外のページにリダイレクトする(次項) JSONを返すWebサービスを実装する(p48) 46 IBM Software Group | Lotus software SSJSでfacesContextを使用したサンプル① SSJSでJava/JSFの オブジェクトを扱う XPage以外のページにリダイレクトするロジック – XSPライブラリの「redirectToPage」メソッドはXPageにリダイレクトする仕様。 XPage以外のページにリダイレクトするにはfacesContextを使用する必要が ある – Xpageから”http://www-10.lotus.com/ldd/ddwiki.nsf“にリダイレクトするロ ジック • • ①グローバルオブジェクトのfacesContextを使用する ②他のコンテキストのラッパーである「ExternalContext」を取得 – http://docs.oracle.com/cd/E17802_01/j2ee/javaee/javaserverfaces/1.2_MR1/docs/api/j avax/faces/context/ExternalContext.html • ③ExternalContextのredirectメソッドを使用する – http://docs.oracle.com/cd/E17802_01/j2ee/javaee/javaserverfaces/1.2_MR1/docs/api/j avax/faces/context/ExternalContext.html#redirect(java.lang.String) var extContext = facesContext.getExternalContext(); extContext.redirect("http://www-10.lotus.com/ldd/ddwiki.nsf"); 47 IBM Software Group | Lotus software 参考. SSJSでfacesContextを使用したサンプル② SSJSでJava/JSFの オブジェクトを扱う JSONでデータを返すWebサービスの作成 – 下記の技術文書参照 • XPagesでDojoウィジェットを利用する http://www.ibm.com/developerworks/jp/ysl/library/lotus/y-lot-dojoonxpages/ 48 IBM Software Group | Lotus software 参考.その他のJSFのグローバルオブジェクト SSJSでJava/JSFの オブジェクトを扱う JSF1.2のオブジェクト。保持する値の詳細はヘルプ『グローバルオブジェクトおよびグ ローバル関数 (JavaScript)』参照 グローバルオブジェクト名 JSFのオブジェクトの型 cookie com.sun.faces.context.RequestCookieMap オブジェクト header com.sun.faces.context.RequestHeaderMap オブジェクト headerValues com.sun.faces.context.RequestHeaderValuesMap オブジェクト initParam com.sun.faces.context.InitParameterMap オブジェクト param com.sun.faces.context.RequestParameterMap オブジェクト paramValues com.sun.faces.context.RequestParameterValuesMap オブジェクト オブジェクトの型については下記参照 – Mojjarra-2.0.1 com.sun.faces.context http://www.docjar.com/docs/api/com/sun/faces/context/package-index.html ※MojjarraはJSFの実装のひとつ ※上記もサポートされるドキュメントではない 49 IBM Software Group | Lotus software SSJSのデバッグ①-エラーページの有効化- SSJSのデバッグ XPagesでは、XPageの出力がエラーで失敗した際に、エラー内容を表示する 機能がある – この機能が無効の場合、単に「エラー500(Internal Server Error)」ページが 表示される(次項参照) XPagesのエラーページの出力を有効にするには – アプリケーションのプロパティ > XPages タブ > デフォルトのエラーページを 表示にチェックを入れる 50 IBM Software Group | Lotus software 参考.XPagesの標準のエラーページの出力画面 SSJSのデバッグ 無効時(デフォルト)の例 有効時の例 51 IBM Software Group | Lotus software SSJSのデバッグ②-変数/オブジェクトの値の確認- SSJSのデバッグ デバッグのために、変数/オブジェクトの値を確認する方法 – 一時的にXPage上に計算結果フィールドを配置する • [プロパティ]-[値]を[JavaScript]とし、確認したい変数の値を記述する print – ストリングをログに書き出す – 書き出し場所はLotus Dominoサーバーのコンソール(log.nsf) • デザイナー上のプレビューで実行した場合、クライアントのlog.nsfに書き出される 52 IBM Software Group | Lotus software SSJSのデバッグ② SSJSのデバッグ _dump – オブジェクトのストリング表現をログファイルに書き出す • ストリング表現・・・オブジェクトの型と入っている値 – _dumpの出力例.匿名ユーザーでログインしているときに、現在のユーザー名を NotesSessionクラスのgetEffectiveUserNameメソッドで書き出す var name = session.getEffectiveUserName(); _dump(name); – 書き出し結果 – 書き出し場所はprintと同様 53 IBM Software Group | Lotus software エラーハンドリング① エラーハンドリング try…catchステートメントやthrow ステートメントを使用する – エラーチェックのサンプル • サーバー・サイド XPages JavaScript での単純なエラー・チェック http://www.ibm.com/developerworks/jp/lotus/library/2011xpages_check/ エラーハンドリングのロジックを記述する上での考慮点 – LSの”Nothing”/”Empty”はSSJSでは”null”にあたる • • • JavaScriptで”null”はオブジェクト LotusScriptで使用するnullに該当するものはSSJSでは存在しない SSJSの”IsEmpty”は、空ストリング(“”)か否かを判定する 54 IBM Software Group | Lotus software エラーハンドリング② エラーハンドリング エラーハンドリングのロジックを記述する上での考慮点(続き) – JavaScriptに”Exit”は存在しない • returnで処理を中断できる – @関数(式言語)ではヌル値と空ストリング(””)は同義 • SSJSでも同様 – @関数(SSJS)で戻り値の有無を判定する場合、SSJSのnullオブジェクトではなく空ストリン グ(“”)と比較を行う – @IsNull()はnull値ではなく、空ストリングと等しいかどうかを判定する 55 IBM Software Group | Lotus software 参考資料 56 IBM Software Group | Lotus software 参考.サーバーサイドJavaScriptの記述箇所 XPagesでは[イベント]タブで、クライアントサイドで記述するのか、サーバーサ イドへ記述するのかを選択する 57 IBM Software Group | Lotus software 参考.SSJSのスクリプトエディタ画面 メソッド/クラスは先読みで表示 – 引数の有無/型/戻り値の型も表示 [参照]タブの[ライブラリ]を切り替えることで現在アクセス可能なグローバルオブジェクト/ グローバル関数/DOM/Domino/XSP/@関数(SSJS)をすべて参照できる 58 IBM Software Group | Lotus software 参考.XPagesのヘルプ Standard版のみ参照可能 Lotus Domino Designer User Guideの一 部とLotus Domino Designer XPageのリ ファレンスに記載 59 IBM Software Group | Lotus software 参考.ヘルプ以外の情報源① Lotus Notes and Domino Application Development wiki – XPagesの情報はwikiに多く掲載されている。 • Notes 開発者のための XPages SSJS 解説 • SSJSサンプルコード(英語) http://goo.gl/QHTZ6 – “クラス名” + “sample JavaScript code for XPages ” というタイトルで各クラスのサンプルコードがある http://goo.gl/qk4Bv ※ページを開いたタイミングでエラーが表示される場合は、各ページをタイトルで検索し なおしてください • 日本語のカテゴリ http://goo.gl/2kg8l • XPages リンク集 – 各コントロールやOneUIの解説などへのリンク集 http://goo.gl/ZD6sp • Domino Designer XPages Extension Library(英語) • http://goo.gl/engyS API Documentation(英語) http://goo.gl/wzqjz • XPages開発のお供に「Demonstration Application for XPages」 http://goo.gl/cMg2k 60 IBM Software Group | Lotus software 参考.ヘルプ以外の情報源② Developer Works Lotus/Notes Domino – 主にアプリケーション開発の項目に多くのXPagesの情報を掲載 http://www.ibm.com/developerworks/jp/lotus/products/lnd/ – Lotus Domino 8.5.1 を使用した Domino Web アプリケーションの構築 http://goo.gl/Am2fa – チュートリアル • XPages入門 http://www.ibm.com/developerworks/jp/lotus/education/xpages/ • 新人SEが学ぶ XPages http://goo.gl/S4uwc • Lotus Domino Designer での XPages 機能の活用 http://www.ibm.com/developerworks/jp/lotus/education/ls-ddxpages/ 61 IBM Software Group | Lotus software 参考.ヘルプ以外の情報源③ XPages技術者コミュニティー – ディスカッションやwiki/ファイルなどを共有 http://goo.gl/ApvMS XPages.Info – サンプルアプリの操作が可能。一部のサンプルはDL可能 http://xpages.info/XPagesHome.nsf/DemosJapan.xsp# OpenNTF – http://www.openntf.org/blogs/openntf.nsf/d6plinks/NHEF-8427T9 62 IBM Software Group | Lotus software 参考.ヘルプ以外の情報源④ テクてく Lotusコミュニティー – テクてくLotus 技術者夜会の資料を公開。デベロッパー編にはXPagesのハ ンズオンなどがある http://goo.gl/XH0mk ICS Business Partner Technical Enablement team Japan Blog – XPagesのTipsや製品の最新情報の提供など http://goo.gl/uCLNw notes/domino liaison – Teamstudio社のテクニカルディレクター、加藤氏のサイト • XPagesのチュートリアル、Tipsなども掲載 http://notesdominoliaison.blogspot.com/ 63 IBM Software Group | Lotus software © IBM Corporation 2012. All Rights Reserved. ワークショップ、セッション、および資料は、IBMまたはセッション発表者によって準備され、それぞれ独自の見解を反映したものです。それらは情報提供の目 的のみで提供されており、いかなる参加者に対しても法律的またはその他の指導や助言を意図したものではなく、またそのような結果を生むものでもありま せん。本プレゼンテーションに含まれている情報については、完全性と正確性を帰するよう努力しましたが、「現状のまま」提供され、明示または暗示にかか わらずいかなる保証も伴わないものとします。本プレゼンテーションまたはその他の資料の使用によって、あるいはその他の関連によって、いかなる損害が 生じた場合も、IBMは責任を負わないものとします。 本プレゼンテーションに含まれている内容は、IBMまたはそのサプライヤーやライセンス交付者からいか なる保証または表明を引きだすことを意図したものでも、IBMソフトウェアの使用を規定する適用ライセンス契約の条項を変更することを意図したものでもな く、またそのような結果を生むものでもありません。 本プレゼンテーションでIBM製品、プログラム、またはサービスに言及していても、IBMが営業活動を行っているすべての国でそれらが使用可能であることを 暗示するものではありません。本プレゼンテーションで言及している製品リリース日付や製品機能は、市場機会またはその他の要因に基づいてIBM独自の 決定権をもっていつでも変更できるものとし、いかなる方法においても将来の製品または機能が使用可能になると確約することを意図したものではありませ ん。本資料に含まれている内容は、参加者が開始する活動によって特定の販売、売上高の向上、またはその他の結果が生じると述べる、または暗示するこ とを意図したものでも、またそのような結果を生むものでもありません。 パフォーマンスは、管理された環境において標準的なIBMベンチマークを使用した測定と予測に基づいています。ユーザーが経験する実際のスループットや パフォーマンスは、ユーザーのジョブ・ストリームにおけるマルチプログラミングの量、入出力構成、ストレージ構成、および処理されるワークロードなどの考 慮事項を含む、数多くの要因に応じて変化します。したがって、個々のユーザーがここで述べられているものと同様の結果を得られると確約するものではあ りません。 記述されているすべてのお客様事例は、それらのお客様がどのようにIBM製品を使用したか、またそれらのお客様が達成した結果の実例として示されたも のです。実際の環境コストおよびパフォーマンス特性は、お客様ごとに異なる場合があります。 IBM、IBM ロゴ、ibm.com、Lotus および Lotus Notes、Lotus Dominoは、世界の多くの国で登録されたInternational Business Machines Corporationの商標で す。 他の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。 現時点での IBM の商標リストについては、www.ibm.com/legal/copytrade.shtmlをご覧ください。 他の会社名、製品名およびサービス名などはそれぞれ各社の商標。 64