Uploaded by ohkiohki

Customizing and Extending IBM Content Navigator sg248055.en.ja

advertisement
フロントカバー
IBM Content Navigatorのカスタ
マイズと拡張
拡張ポイントとカスタマイズオプションを
理解する
アクション、サービス、機能、およびカスタムステップ
プロセッサを作成する
アプリやモバイル開発などでウィジェ
ットを使用する
ウェイドンチュートーマスバリナ
ブレット・モリス
ライナー・ミューラー・メーヒラー
ロンラスゲーバージャナザールフェルトジャンシンチ
イードゥアンニコールヒューズマルセルコスタル
チャドルー
ibm.com/ レッドブック
張家
国際技術支援機関
IBM Content Navigatorのカスタマイズと拡張
2014年5月
SG24-8055-01
注意: この情報とそれがサポートする製品を使用する前に、xiページの「通知」の情報をお読みください。
第2版​​(2014年5月)
このエディションは、IBM FileNet Content Manager(製品番号5724-R81)、IBM Content Manager(製品番号5724-B19)、および
IBM Content Manager OnDemand(製品番号5724)に含まれるIBM Content Navigatorのバージョン2、リリース0、モディフィケー
ション0に適用されます。 -J33)。
©Copyright International Business Machines Corporation 2012、2014。すべての権利は留保されています。
米国政府のユーザーへの注意事項制限された権利-IBM CorpとのGSA ADPスケジュール契約によって制限された使用、複製、または開
示
目次
お知らせ 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 xi商標。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。xii
序文 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 xiii著者。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。xivこれで、あなたも出版された著者になる
ことができます!。。。。。。。。。。。。。。。。。。。。。。。xviiコメントを歓迎します。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。xvii IBM Redbooksとの接続を維持します。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。xviii
変更の概要。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 xix 2014年5月、第2版。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。xix
パート1.はじめに。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 1
第1章拡張ポイントとカスタマイズオプション 。 。 。 。 。 。 。 。 。 。 。 。 。 。 3
1.1始める前に 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。4
1.1.1 IBM Content Navigatorの用語。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。4
1.2 IBM Content Navigatorを使用した開発オプション。。。。。。。。。。。。。。。。。。。6
1.2.1 IBM Content Navigatorの構成。。。。。。。。。。。。。。。。。。。。。。。。。。6
1.2.2 EDSインターフェースの実装。。。。。。。。。。。。。。。。。。。。。。。。。。。。。7
1.2.3プラグインの実装。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。9
1.2.4カスタムアプリケーションの開発または統合。。。。。。。。。。。。。。。。11
1.2.5モバイルアクセスの提供。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。13
1.2.6一般的な使用例とその開発オプションの概要。。。。。14
1.3 IBM Content Navigator開発アーキテクチャー。。。。。。。。。。。。。。。。。。。18
1.3.1プログラミングインターフェース。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。19
1.3.2通信フロー。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。20
1.4 IBM Content Navigator APIを使用した開発。。。。。。。。。。。。。。。。。。。。。。23
1.4.1 URL API。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。23
1.4.2外部データサービス。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。24
1.4.3プラグインAPI。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。27日
1.4.4 Content Navigator JavaScript API。。。。。。。。。。。。。。。。。。。。。。。。。。。47
1.5 IBM Content Navigatorのサンプル。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。55
1.5.1サンプル外部データサービス。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。55
1.5.2サンプルWebページ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。55
1.5.3サンプルプラグインアプリケーション。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。56
1.5.4サンプルモバイルアプリケーション 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。57
1.5.5サンプルのモバイルプラグイン。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。57
1.6この本のために開発したサンプル。。。。。。。。。。。。。。。。。。。。。。。。。。。。。58
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
iii
1.7結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。60
第2章デスクトップの外観のカスタマイズ 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 61
2.1デスクトップの外観のカスタマイズ。。。。。。。。。。。。。。。。。。。。。。。。。。。。62
2.2ロゴとバナーの色を追加する。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。62
2.3ログインノートの追加。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。65
2.4パスワードルールの追加。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。68
2.4.1パスワード規則のテスト。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。70
2.5結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。72
第3章開発環境のセットアップ 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 73
3.1プラグイン開発の前提条件。。。。。。。。。。。。。。。。。。。。。。。。。。。。74
3.1.1 IBM Rational Application Developer。。。。。。。。。。。。。。。。。。。。。。。。。74
3.1.2 Eclipse開発環境 。。。。。。。。。。。。。。。。。。。。。。。。。75
3.1.3 WebLogicおよびEclipse。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。76
3.2開発環境のセットアップ。。。。。。。。。。。。。。。。。。。。。。。。。。。。76
3.2.1基本Eclipse環境へのEclipseプラグインのインストール。。。。。。。77
3.2.2 Rational Application DeveloperへのEclipseプラグインのインストール。。。。77
3.2.3 Eclipseプラグインのインストールのトラブルシューティング。。。。。。。。。。。。。。。。。。。78
3.2.4 Eclipseプラグインのインストールの確認。。。。。。。。。。。。。。。。。。。。。。。。。78
3.3プラグインの開発。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。81
3.3.1ウィザードを使用した単純なプラグインプロジェクトの作成。。。。。。。。。。。。。。81
3.3.2プラグイン拡張の作成。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。85
3.3.3プラグインのパッケージ化とビルド。。。。。。。。。。。。。。。。。。。。。。。。。。。90
3.3.4プラグインの登録とテスト。。。。。。。。。。。。。。。。。。。。。。。。。。。。94
3.4ウィザードを使用して新しい空のEDSプロジェクトを作成します。。。。。。。。。。。。。。。101
3.5 SamplePluginを使い始める。。。。。。。。。。。。。。。。。。。。。。。。。。106
3.6プラグインJARを手動で構築する。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。109
3.7プラグインのデバッグ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。110
3.7.1リモートデバッグ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。110
3.7.2ローカルデバッグ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。113
3.8結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。113
パート2. Content Navigatorのカスタマイズ 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 115
第4章基本的な拡張ポイントを使用したプラグインの開発。 。 。 。 。 。 。 。 。 117
4.1例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。118
4.2ドシエ作成アクションの開発。。。。。。。。。。。。。。。。。。。。。。。。。。。120
4.2.1新しいプラグインプロジェクトのセットアップ 。。。。。。。。。。。。。。。。。。。。。。。。。。120
4.2.2パッケージ化と展開。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。121
4.2.3アクションの追加。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。122
4.2.4アクションJavaScriptの実装。。。。。。。。。。。。。。。。。。。。。。。。124
iv IBM Content Navigatorのカスタマイズと拡張
4.2.5 ECMシステムの準備と現在のバージョンの展開。。。。。。。。。。127
4.3書類の下部構造を作成するプラグインサービスの開発 。133
4.3.1サーバータイプに依存しないコード:CreateSubStructureService。。。。。136
4.3.2 IBM FileNet P8コード:CreateSubStructureServiceP8。。。。。。。。。。。138
4.3.3 IBM Content Managerコード:CreateSubStructureServiceCM。。。。。140
4.3.4展開と検証。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。145
4.4 Open Dossierアクションの開発。。。。。。。。。。。。。。。。。。。。。。。。。。。。145
4.4.1プラグインへのアクションの追加。。。。。。。。。。。。。。。。。。。。。。。。。。。。146
4.4.2アクションモデルの拡張 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。147
4.4.3のパッキング、デプロイ、設定。。。。。。。。。。。。。。。。。。。。。。。。152
4.4.4関係書類を開くための関係書類作成アクションの拡張。。。156
4.5独自の機能で一式文書ビューを開きます。。。。。。。。。。。。。。。。。。。。。。。。。。。。156
4.5.1機能の追加。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。157
4.5.2機能のデプロイと構成。。。。。。。。。。。。。。。。。。。。。。158
4.5.3参照機能を使用して一式文書機能を開発する。。。。。。。159
4.6構成の追加。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。161
4.6.1構成パネルの追加。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。161
4.6.2構成値を使用するようにコードを調整する。。。。。。。。。。。。。。。。。。。167
4.7実社会における一式文書管理。。。。。。。。。。。。。。。。。。。。。。。。。。170
4.8結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。170
第5章カスタム・リポジトリー検索サービスの構築 。 。 。 。 。 。 。 。 。 。 。 。 173
5.1例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。174
5.2 ContentListウィジェットで結果を表示する。。。。。。。。。。。。。。。。。。。。。。。。。。。174
5.3サンプルプラグインのカスタムリポジトリ検索サービス。。。。。。。。。。。。。。。。180
5.3.1カスタムリポジトリ検索サービスのサンプルコード。。。。。。。。。。。。。181
5.4リポジトリに対する検索のクエリ文字列。。。。。。。。。。。。。。。。。。。。。。183
5.4.1 IBM Content Managerクエリ文字列。。。。。。。。。。。。。。。。。。。。。。。。。183
5.4.2 IBM FileNet Content Managerクエリ文字列。。。。。。。。。。。。。。。。。。。185
5.5カスタムリポジトリ検索サービスを使用して新しいプラグインを作成する。。。。。。。。187
5.5.1新しいプラグインプロジェクトの作成。。。。。。。。。。。。。。。。。。。。。。。。。。。。187
5.5.2サンプルプラグインからの検索サービスのインポート。。。。。。。。。。。。。。。。188
5.5.3サンプルプラグインからの機能ペインのインポート。。。。。。。。。。。。。。。。。。194
5.5.4新しいプラグインのビルドとデプロイ。。。。。。。。。。。。。。。。。。。。。。197
5.6既存の検索サービスに新しい機能を追加する。。。。。。。。。。。。。。。199
5.6.1ページング機能の追加。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。199
5.6.2管理設定からの結果プロパティ設定の取得。。。。207
5.6.3カスタム検索プラグインのメインファイル。。。。。。。。。。。。。。。。。。。。。。。。。210
5.7結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。210
第6章検索サービスとウィジェットを使用したフィーチャーの作成。 。 。 。 。 。 211
6.1例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。212
6.2フィーチャーのレイアウトの調整。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。213
目次 v
6.3カスタムツリーを表示するツリーウィジェットを作成する。。。。。。。。。。。。。。。。。。。。。218
6.4クラスノードに結果を検索して表示する関数を追加します。。。。。。。。223
6.5 ContentListウィジェットに追加のモジュールを構成する。。。。。。。。。。。。。。。225
6.6結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。231
第7章要求および応答フィルターと外部の実装
データサービス 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 233
7.1要求および応答フィルターの概要。。。。。。。。。。。。。。。。。。。。。。。。。。。234
7.1.1リクエストとレスポンスのフィルターを実装するタイミング。。。。。。。。。。。。。。234
7.2外部データサービス(EDS)の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。235
7.2.1 EDSを使用する場合 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。235
7.2.2 IBM Content Navigatorで提供されるサンプルEDSサービス。。。。。。239
7.3例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。240
7.4サンプルEDSプロジェクトのセットアップ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。242
7.5選択リスト。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。246
7.5.1単純な選択リスト。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。246
7.5.2依存選択リスト。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。255
7.6プロパティフィールドの検証。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。256
7.7フィールドプロパティの設定。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。257
7.7.1フィールドステータスの設定。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。257
7.7.2フィールドの最小値と最大値の設定。。。。。。。。。。。。。。。。。。259
7.8追加ダイアログのプロパティの順序付け。。。。。。。。。。。。。。。。。。。。。。。。。。。260
7.9大きな選択リストのフィルター。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。266
7.10展開と構成。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。274
7.11結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。276
第8章カスタムステッププロセッサの作成 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 277
8.1ワークフローステッププロセッサの概要 。。。。。。。。。。。。。。。。。。。。。。。。。。。278
8.2 IBM Content Navigatorのステッププロセッサー。。。。。。。。。。。。。。。。。。。。。。。。。278
8.3カスタムステッププロセッサ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。281
8.4例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。281
8.5カスタムステッププロセッサの作成。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。282
8.5.1 StepProcessorRedbkLayout.html。。。。。。。。。。。。。。。。。。。。。。。。。。282
8.5.2 StepProcessorRedbkLayout.js。。。。。。。。。。。。。。。。。。。。。。。。。。。。283
8.5.3 StepProcessorRedbkLayout.jsp。。。。。。。。。。。。。。。。。。。。。。。。。。。285
8.6カスタムステッププロセッサのデプロイ。。。。。。。。。。。。。。。。。。。。。。。。。。。287
8.7カスタムステッププロセッサの登録。。。。。。。。。。。。。。。。。。。。。。。。。。287
8.8アプリケーションスペースと受信トレイの設定。。。。。。。。。。。。。。。。。。。。。288
8.9埋め込みビューアを使用するアクションを追加します。。。。。。。。。。。。。。。。。。。。289
8.9.1 StepProcessorAction.javaの更新。。。。。。。。。。。。。。。。。。。。。。。。290
8.9.2 StepProcessorActionPlugin.jsの更新 。。。。。。。。。。。。。。。。。。。。290
8.9.3アクションプラグインのビルドとデプロイ。。。。。。。。。。。。。。。。。。。。291
8.10カスタムステッププロセッサの使用とテスト。。。。。。。。。。。。。。。。。。。。292
vi
IBM Content Navigatorのカスタマイズと拡張
8.10.1カスタムステッププロセッサを使用したワークフローの作成。。。。。。。。。。。。292
8.10.2サブスクリプションを追加してワークフローを開始します。。。。。。。。。。。。。。。。。。。。293
8.11外部データサービスの追加。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。293
8.11.1ワークフローとカスタムステッププロセッサのテスト。。。。。。。。。。。。。294
8.12結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。296
第9章他のアプリケーションでのContent Navigatorウィジェットの使用。 。 。 。 297
9.1他のアプリケーションへの統合の概要。。。。。。。。。。。。。。。。。。。。。。298
9.2例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。298
9.3 IBM Content Navigatorウィジェットの外部化。。。。。。。。。。。。。。。。。。。。。299
9.3.1 IBM Content Navigator外部化のアプローチ。。。。。。。。。。299
9.3.2 IBM Content Navigator統合のシミュレーションパート1。。。。。。。。。303
9.4 Content NavigatorとURL APIの統合。。。。。。。。。。。。。。。。。。。。。。308
9.5 Content Navigatorと特定の機能の統合。。。。。。。。。。。。。。。310
9.6 Content Navigatorを特定のレイアウトと統合する。。。。。。。。。。。。。。。。313
9.6.1新しいプラグインプロジェクトのセットアップ 。。。。。。。。。。。。。。。。。。。。。。。。。。313
9.6.2レイアウトの追加。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。314
9.6.3 ContentListウィジェットをレイアウトに追加する。。。。。。。。。。。。。。。。。。320
9.7 Content Navigatorの特定のウィジェットを統合する。。。。。。。。。。。。。。。。。。324
9.7.1 Content Navigatorの初期化フェーズ。。。。。。。。。。。。。。。。。。。。。325
9.7.2ステップ1:DojoおよびContent Navigatorライブラリーを初期化します。。。。。。。。。。328
9.7.3手順2:適切なビジュアルウィジェットを選択します。。。。。。。。。。。。。。。。。。331
9.7.4手順3:必要なモデルクラスを選択して初期化します。。。。。。。337
9.7.5ステップ4:イベント登録を介してウィジェットをワイヤリングします。。。。。342
9.8外部化されたウィジェットの統合(ステップ5)。。。。。。。。。。。。。。。。。。。。。344
9.8.1外部化されたウィジェットのデプロイ(非バインド統合)。。。。。。。。346
9.8.2コンテナでの外部ウィジェットの設定(バインドされた統合)。。347
9.8.3 HTTPサーバーでのリバースプロキシの定義 。。。。。。。。。。。。。。。。347
9.8.4バインドされた統合の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。349
9.9 Microsoft SharePointページへのスタンドアロンウィジェットの統合。。。。。。356
9.9.1例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。356
9.9.2 Microsoft SharePoint統合の実装。。。。。。。。。。。。356
9.10スタンドアロンウィジェットをWebSphere Portalのポートレットとして統合する。。。。359
9.11結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。364
第10章組み込みのビューアのカスタマイズと統合
サードパーティの閲覧者 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 365
10.1組み込みビューアの概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。366
10.2例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。370
10.3 FileNet Viewerのカスタマイズ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。370
10.3.1ブランディングと機密保持の要件のためにドキュメントにヘッダーとフッターを追加する。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。371
10.3.2アノテーションを匿名にする。。。。。。。。。。。。。。。。。。。。。。。。。。373
目次 vii
10.3.3ドキュメントのストリーミングを無効にする。。。。。。。。。。。。。。。。。。。。。。。。。。。375
10.4ビューアの拡張性の調査。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。376
10.4.1ビューアのアーキテクチャ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。376
10.4.2拡張ポイント。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。377
10.5サード・パーティーのビューアーをIBM Content Navigatorに統合する。。。。。。。。。。387
10.5.1 Snowbound VirtualViewer。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。387
10.5.2有益なグラフィックスBrava!エンタープライズビューア。。。。。。。。。。。。。。407
10.6結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。412
第11章ソリューションをモバイルプラットフォームに拡張する。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 413
11.1 IBM Content Navigatorモバイルソリューション。。。。。。。。。。。。。。。。。。。。。。。。414
11.1.1モバイル開発オプション。。。。。。。。。。。。。。。。。。。。。。。。。。。。。414
11.2例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。417
11.3 IBM Worklightサンプルのカスタマイズ。。。。。。。。。。。。。。。。。。。。。。。。。。。。419
11.3.1例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。420
11.3.2環境の準備。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。422
11.3.3モデルレイヤーの更新 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。425
11.3.4ビューの作成。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。426
11.3.5 WorkViewのコントローラーの追加。。。。。。。。。。。。。。。。。。。。。。。。。。。427
11.3.6サンプルへの統合。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。430
11.3.7パッケージ化と展開。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。432
11.4結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。435
第12章Microsoft Lync Serverのプロファイルプラグインの拡張。 。 。 。 。 。 437
12.1 IBM Content Navigator 2.0.2で利用できる機能。。。。。。。。。。。。。。。。。438
12.2 Microsoft Lync ServerおよびUCWA。。。。。。。。。。。。。。。。。。。。。。。。。。。。。440
12.2.1 UCMA。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。440
12.2.2 UCWA。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。440
12.3例の概要。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。441
12.4高レベルの設計。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。442
12.4.1新しいプラグインの目標。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。442
12.4.2連絡先カードまたは名刺機能。。。。。。。。。。。。。。。。。。。。。443
12.4.3 Microsoft Lync連絡先カードおよびステータスサービス。。。。。。。。。。。。。443
12.5 Lyncプラグインの実装。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。444
12.5.1 Lyncプラグインの設定。。。。。。。。。。。。。。。。。。。。。。。。。。。。。444
12.5.2 Microsoft Lyncサービスのユーザーインターフェイス。。。。。。。。。。。。。。。。。。。。。。445
12.5.3エラー処理。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。446
12.5.4 Microsoft Lyncサービスにログインします。。。。。。。。。。。。。。。。。。。。。。。。。。447
12.5.5 Microsoft Lync Serverから連絡先情報を取得する。。。。。。。。448
12.5.6ユーザー名フィールドへの応答フィルターの追加。。。。。。。。。。。。。。。。。450
12.6 JavaおよびJavaScriptのオブジェクト指向設計。。。。。。。。。。。。。。。。。。452
12.6.1 LyncプラグインのJavaオブジェクト。。。。。。。。。。。。。。。。。。。。。。。。。。452
12.6.2既存のJavaクラスの拡張。。。。。。。。。。。。。。。。。。。。。。。452
viii
IBM Content Navigatorのカスタマイズと拡張
12.6.3 JavaScriptクラスの拡張 。。。。。。。。。。。。。。。。。。。。。。。。。。。455
12.6.4設定ペインの拡張。。。。。。。。。。。。。。。。。。。。。。。。。456
12.6.5 Microsoft Lync UCWAサービスを使用したプログラミングに関する注意事項。。。。。456
12.6.6名刺の表示。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。457
12.7セットアップ、インストール、および拡張。。。。。。。。。。。。。。。。。。。。。。。。。459
12.7.1開発環境に関する考慮事項。。。。。。。。。。。。。。。。459
12.7.2パフォーマンス。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。459
12.7.3プラグインアプリケーションのデバッグ。。。。。。。。。。。。。。。。。。。。。。。。。459
12.7.4 Lyncプラグインのインストールと設定。。。。。。。。。。。。。。。。。。。460
12.7.5将来の機能拡張。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。461
12.8結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。462
パート3。展開、デバッグ、トラブルシューティング。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 463
第13章コンポーネントのデプロイメント。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 465
13.1運用環境を管理するための戦略。。。。。。。。。。。。。。。。466
13.2アプリケーションのコンポーネントの特定。。。。。。。。。。。。。。。。。。。467
13.2.1コンポーネント階層。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。467
13.2.2永続性の特性。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。469
13.2.3データベース層。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。469
13.3 IBM Content Navigatorソリューションの手動デプロイメント。。。。。。。。。。470
13.3.1リポジトリの依存関係。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。470
13.3.2 IBM Content Navigatorデスクトップ。。。。。。。。。。。。。。。。。。。。。。。。。。471
13.4環境に一定レベルの予測可能性を注入する。。。。。。。。。。。。。。478
13.5エクスポートとインポートを使用してContent Navigatorソリューションをデプロイする。。。。。481
13.5.1管理デスクトップ内のエクスポート機能の使用。。。。482
13.5.2管理デスクトップ内のインポート機能の使用。。。。488
13.5.3サマリーとレポートをインポートします。。。。。。。。。。。。。。。。。。。。。。。。。。。。。492
13.6結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。493
第14章デバッグおよびトラブルシューティング。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 495
14.1クライアントのデバッグ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。496
14.1.1 Firefox。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。496
14.1.2クロム。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。497
14.1.3フィドラー。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。497
14.2クライアントのロギング。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。498
14.2.1ロギングレベルとブラウザタイプ。。。。。。。。。。。。。。。。。。。。。。。。。498
14.2.2 JavaScriptファイルでのロギングの有効化。。。。。。。。。。。。。。。。。。。。。。。。499
14.3サーバー側のロギング。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。500
14.4ログファイルとトレースファイル。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。504
14.4.1 IBM Content Navigatorのログファイル。。。。。。。。。。。。。。。。。。。。。。。。。。。504
14.4.2アプリケーションサーバーのログファイル。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。505
14.5トラブルシューティング。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。505
14.5.1 IBM Content Navigatorトラブルシューティングツール。。。。。。。。。。。。。。。。506
目次
ix
14.6結論。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。510
パート4.付録 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 511
付録A.アクション権限。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 513
付録B.ドキュメントクラスの定義 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 515 IBM FileNet Content Managerにサンプル
クラスを追加します。。。。。。。。。。。。。。。。516 IBM Content Managerにサンプルクラスを追加します。。。。。。。。。。。
。。。。。。。。。。。517
付録C.カスタム検索プラグインプロジェクトのコアコード。 。 。 。 。 。 。 。 519 VirtualFolderBrowsePane.js。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。520 SamplePluginSearchServiceP8.javaコードが拡張されました。
。。。。。。。。。。。。。。。。。528
付録D.追加資料 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 535ウェブ素材の検索。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。535ウェブ素材の使用。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。536
ウェブ素材をダウンロードするためのシステム要件。。。。。。。。。。。。。536 Web素材のダウンロー
ドと解凍。。。。。。。。。。。。。。。。。。。。。536
関連出版物 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 537 IBM Redbooks。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。537オンラインリソース。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。537 IBMからのヘルプ。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。538
バツ IBM Content Navigatorのカスタマイズと拡張
お知らせ
この情報は、米国で提供される製品およびサービスのために作成されました
IBMは、本書で説明されている製品、サービス、または機能を他の国では提供しない場合があります。お住まいの地域で現在利用可能な製品とサービ
スについては、最寄りのIBM担当者にお問い合わせください。IBM製品、プログラム、またはサービスへの言及は、そのIBM製品、プログラム、または
サービスのみが使用される可能性があることを明示または暗示することを意図したものではありません。代わりに、IBMの知的所有権を侵害しない、
機能的に同等の製品、プログラム、またはサービスを使用できます。ただし、IBM以外の製品、プログラム、またはサービスの操作を評価および検証
するのはユーザーの責任です。
IBMは、この文書に記載されている主題を対象とする特許または特許申請中の可能性があります。このドキュメントの提供により、これらの特許のライセンスが
付与されることはありません。ライセンスに関するお問い合わせは、書面で以下にお送りいただけます。
IBMライセンシングディレクター、IBM Corporation、ノースキャッスルドライブ、アーモンク、NY 10504-1785 USA
次の段落は、そのような規定が現地の法律と矛盾する英国またはその他の国には適用されません。 INTERNATIONAL BUSINESS MACHINES CORPOR
ATIONは、この資料を「現状有姿」で提供し、明示的または黙示的を問わず、非侵害、商品性、または特定の目的への適合性の黙示の保証を含め、いか
なる保証も行いません。一部の州では、特定の取引で明示的または黙示的な保証の免責を認めていないため、この声明はお客様に適用されない場合があ
ります。この情報には、技術的な誤りや誤植が含まれる場合があります。本書の情報は定期的に変更されます。これらの変更は、発行物の新しい版に組
み込まれます。IBMは予告なしに、随時、この文書に記載されている製品またはプログラムに対して、改良または変更を行うことがあります。
この情報でのIBM以外のWebサイトへの参照は、便宜のためにのみ提供されており、これらのWebサイトを保証するものではありません。それらのWe
bサイトの資料は、このIBM製品の資料の一部ではなく、それらのWebサイトの使用はお客様の責任で行ってください。
IBMは、ユーザーに義務を負わせることなく、ユーザーが適切と考える方法で提供する情報を使用または配布することがあります。
ここに記載されているパフォーマンスデータは、管理された環境で決定されたものです。そのため、他の動作環境で得られた結果は大幅に異なる場合がありま
す。一部の測定は開発レベルのシステムで行われた可能性があり、これらの測定値が一般に利用可能なシステムで同じになる保証はありません。さらに、一部
の測定値は外挿によって推定された可能性があります。実際の結果は異なる場合があります。このドキュメントのユーザーは、特定の環境に該当するデータを
確認する必要があります。IBM以外の製品に関する情報は、それらの製品のサプライヤー、それらの公開された発表、またはその他の公に利用可能なソースか
ら取得されました。IBMはこれらの製品をテストしておらず、IBM以外の製品に関連するパフォーマンス、互換性、またはその他の主張の正確さを確認できま
せん。IBM以外の製品の機能に関する質問は、それらの製品のサプライヤーにご連絡ください。この情報には、日常の業務で使用されるデータとレポートの例
が含まれています。それらをできるだけ完全に説明するために、例には個人、会社、ブランド、製品の名前が含まれています。これらの名前はすべて架空のも
のであり、実際の企業で使用されている名前や住所との類似性は完全に偶然です。著作権使用許諾:これらの名前はすべて架空のものであり、実際の企業で使
用されている名前や住所との類似性は完全に偶然です。著作権使用許諾:これらの名前はすべて架空のものであり、実際の企業で使用されている名前や住所と
の類似性は完全に偶然です。著作権使用許諾:
この情報には、さまざまなオペレーティングプラットフォームでのプログラミング手法を示す、サンプル言語のソース言語のアプリケーションプログラムが含まれてい
ます。お客様は、サンプルプログラムが記述されているオペレーティングプラットフォームのアプリケーションプログラミングインターフェイスに準拠したアプリケー
ションプログラムを開発、使用、マーケティング、または配布する目的で、IBMへの支払いなしに、これらのサンプルプログラムを任意の形式でコピー、変更、および
配布することができます。これらの例は、すべての条件下で十分にテストされていません。したがって、IBMは、これらのプログラムの信頼性、保守性、または機能を
保証または示唆することはできません。お客様は、IBMのアプリケーションプログラミングインターフェースに準拠したアプリケーションプログラムを開発、使用、マ
ーケティング、または配布する目的で、IBMに支払うことなく、これらのサンプルプログラムを任意の形式でコピー、変更、および配布することができます。
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
xi
商標
IBM、IBMロゴ、およびibm.comは、International Business Machines Corporationの米国およびその他の国における商標または登録商標
です。これらおよびその他のIBM商標用語は、この情報の最初の出現時に適切な記号(®または™)でマークされ、この情報の公開時に
IBMが所有する米国の登録商標または慣習法の商標を示します。このような商標は、他の国でも登録商標または慣習法上の商標である
可能性があります。IBMの商標の最新リストは、次のWebサイトで入手できます。 http://www.ibm.com/legal/copytrade.shtml
以下の用語は、International Business Machines Corporationの米国およびその他の国における商標です。
AIX®DB2®Domino®FileNet®IBM®
ImagePlus®Lotus®Rational®Redbooks®Redbooks(ロゴ)
Sametime®WebSphere®Worklight®
®
以下の用語は、他社の商標です。
Adobe、Adobeロゴ、およびPostScriptロゴは、Adobe Systems Incorporatedの米国およびその他の国における登録商標または商標で
す。Worklightは、IBM企業であるWorklightの商標または登録商標です。Linuxは、Linus Torvaldsの米国およびその他の国における商
標です。Microsoft、Windows、およびWindowsロゴは、Microsoft Corporationの米国およびその他の国における商標です。
Java、およびすべてのJavaベースの商標およびロゴは、Oracleおよび/またはその関連会社の商標または登録商標です。
UNIXは、The Open Groupの米国およびその他の国における登録商標です。その他の会社、製品、またはサービスの名
前は、他社の商標またはサービスマークである場合があります。
xii
IBM Content Navigatorのカスタマイズと拡張
序文
IBM®Content Navigatorは、エンタープライズコンテンツ管理(ECM)ソリューションに統合されたユーザーインターフェイ
スを提供します。また、堅牢な開発プラットフォームを提供するため、カスタマイズされたユーザーインターフェイスとアプ
リケーションを構築して、価値とインテリジェントなビジネス中心のエクスペリエンスを提供できます。
このIBMRedbooks®資料は、Content Navigatorプラットフォーム、そのアーキテクチャー、および使用可能なプログ
ラミングインターフェースについて説明しています。提供されている管理ツールを使用してユーザーインターフェイ
スを構成およびカスタマイズする方法と、サンプルコードで利用可能な開発オプションを使用してContent Navigato
rをカスタマイズおよび拡張する方法について説明します。具体的には、この本は、開発環境をセットアップする方法
、およびアクション、サービス、および機能をユーザー・インターフェースに追加するプラグインを開発する方法を
示しています。カスタマイズのトピックには、要求および応答フィルターの実装、外部データサービス(EDS)、カ
スタムステッププロセッサの作成、他のアプリケーションでのコンテンツナビゲーターウィジェットの使用も含まれ
ます。さらに、この本では、モバイル開発、ビューアのカスタマイズ、コンポーネントの配備、デバッグとトラブル
シューティングについて説明しています。
この本は、IBM Content NavigatorおよびIBM ECM製品を使用するITアーキテクト、アプリケーション設計者、
および開発者を対象としています。IBM Content Navigatorを拡張およびカスタマイズする方法の概要と、サン
プルコードを使用して実装する方法の技術的な詳細の両方を提供します。
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
xiii
著者
この本は、シアトルとワシントン州カークランドにあるIBMソフトウェア開発研究所で働いている世界中の専門
家チームによって作成されました。
Wei-Dong Zhu( Jackie)は、International Technical Support Organization(ITSO)のEnterprise Content Man
agement(ECM)プロジェクトリーダーです。ジャッキーは1996年にIBMに入社し、会計、画像ワークフロー
処理、およびデジタルメディア配信において10年以上のソフトウェア開発の経験があります。彼女はIBM Cont
ent Managerの認定ソリューションデザイナーであり、多くのエンタープライズコンテンツ管理レッドブックの
出版物を管理してきました。ジャッキーは、南カリフォルニア大学でコンピューターサイエンスの修士号を取得
しています。
トマス・バリナ チェコ共和国のIBMソフトウェアグループのECMコンサルタントです。コンテンツ管理の分野で
10年以上の経験があります。過去8年間、彼の焦点は主にIBMFileNet®ソリューションの設計と提供にありました
。彼の専門分野には、ソリューション設計、ECM、およびモバイル開発が含まれます。Tomasはチェコ工科大学
でコンピュータサイエンスおよび人工知能の修士号を取得しています。
イドゥアン 中国のIBM Software GroupのECM Advisory Software Engineerです。彼はソフトウェアエンジニアリ
ング分野で11年以上の経験があります。Yiは、IBM Content Navigator Quality Assuranceチームに参加し、
2011年。特にEDSにおいて、IBM Content Navigatorに関する豊富な経験があります。チームに参加する前、Yiは
IBM Document Managerチームと6年間働きました。Yiは北京郵電大学でコンピューターサイエンスの修士号を取
得しています。
ニコール・ヒューズ は、北米ECMチャネルセールスチームの認定ITスペシャリストです。Nicoleは、エンタープ
ライズ検索とIBM Content Classificationを備えたIBM Content Analyticsを専門としており、IBM Content Manage
r、IBM FileNet、およびIBMLotus®Domino®ソリューションにも精通しています。Nicoleは2003年にGreen Past
ure Softwareの買収を通じてIBMに入社し、ECM業界で17年の経験があります。システム設計における彼女の専
門知識は、製造やユーティリティを含むさまざまな業界での設備管理、エンジニアリング図面管理、手順/ポリシ
ー管理などのECMソリューションの実装の成功につながりました。ニコールは、ワシントン州立大学で学士号を
取得しています。
マルセル・コスタル スロバキアのIBM Software GroupのECMソリューションコンサルタントです。彼は、Java P
latform、Enterprise Editionソリューションの設計、開発、提供において12年以上の経験があります。マルセルは
過去5年間、主に銀行セクターのECMソリューションに注力してきました。彼の地域
xiv IBM Content Navigatorのカスタマイズと拡張
専門知識には、ソリューションアーキテクチャ、アプリケーション設計、実装、統合、およびIBM FileNet P
8製品スイートを使用した技術的な有効化が含まれます。
チャドルー IBM Software Groupのシニアソフトウェアエンジニアです。彼は、ECM領域でのソリューションの設
計と実装に幅広く取り組んでいます。チャドはさまざまなプラットフォームに取り組んできました。最前線にW
eb 2.0テクノロジー、中間層にJava、そしてバックエンドにデータベースがあります。IBMに入社する前は、20
世紀フォックスでテクニカルリードとして働いていました。
ブレット・モリス エンタープライズコンテンツ管理クライアント開発の主任アーキテクトであり、IBM Content
Navigatorのアーキテクチャーと設計を担当する主要な人物の1人です。彼はIBMに15年近く勤務しており、エン
タープライズコンテンツ管理で10年以上の経験があります。ブレットはいくつかの技術記事を書き、多くの技術
会議でセッションを行っています。
ライナー・ミューラー・メーヒラー スイスのチューリッヒにあるIBM Software GroupのシニアITスペシャリスト
です。彼は、コンサルティング、設計、開発、インストール、統合など、ECM分野でソフトウェアエンジニアリ
ングの10年の経験を持っています。彼はIBMに3年間勤務しています。以前は、いくつかのIBM FileNetビジネス
パートナーで7年間働いていました。Rainerは、ECMシステムのクライアント開発における強力なバックグラウ
ンドを持ち、5年間、主要なECMクライアント製品の1つに貢献してきました。Rainerは、ウルム大学でコンピュ
ーターサイエンスの修士号を取得しています。
ロン・ラスゲーバー は、米国のIBM Software Groupと共にIBM Enterprise Records製品に取り組んでいるECM
ソフトウェアアーキテクトです。以前は、IBM FileNet CaptureおよびFileNet WorkForce Desktop製品に従事し
ていました。ロンは、イメージングおよびコンテンツ管理の分野で20年以上の経験があり、ソフトウェア開発
グループで働いています。Ronは、カリフォルニア大学アーバイン校で情報およびコンピュータサイエンスの
理学士号を取得しています。
ヤナザールフェルト ドイツのIBM Software Group Servicesの認定ITスペシャリストです。JanaはECM分野で8年
の経験があり、IBMに9年間勤務しています。彼女はシュトゥットガルトの協同州立大学で応用コンピュータ科学
の学士号を取得しています。彼女の専門分野には、ソリューションとアプリケーションの設計、実装、統合、E
CM製品スイート内での技術的有効化が含まれます。
ジャン・シン・チャン 中国のIBM Software Groupと共にIBM Content Navigatorのソフトウェア開発者です。Jian
は2004年にIBMに入社し、10年以上のソフトウェア開発の経験があります。IBM Content ManagerおよびIBM Fi
leNet製品での9年以上の開発経験があります。Jianは北京工科大学でコンピューターサイエンスの修士号を取得し
ています。
序文 xv
張家 中国開発研究所のIBM Content Navigatorのソフトウェア開発者です。Jieは2005年にIBMに入社し、10年
以上のソフトウェア開発の経験があります。彼は、品質保証と開発を含むIBM Content ManagerとIBM FileNe
t製品で6年以上の経験があります。Jieは、清華大学でコンピューターサイエンスの修士号を取得しています。
IBM Content Navigator管理チームと主任アーキテクトに特に感謝します。彼らのサポートとリーダーシップが
なければ、この本を完成させることはできませんでした。
IBM Content Navigator製品管理チーム:Ian Story Scott Mills
IBM Content Navigator開発およびテスト管理チーム:Dana Morris Mary Booher Song Guan Ha
nsen Lee Kristin Wallio
IBM Content Navigatorリードアーキテクト:Brian
Owings
このプロジェクトに貢献してくれた以下の人々に感謝します。Julia Bamford Yoav Ben-Yair M
att Bogusz Michael Davidovich Jon Elslip James Iuliano Bob LaTurner Oren Paikowsky
Robert Rusch Eitan Schreiber
IBM Software Group、米国、中国、イスラエル
アレンドラニコフジョージファーナム
有益なグラフィックスとSnowboundソフトウェア
2012年10月に発行されたこの本の最初の版の著者に感謝します。
Wei-Dong Zhu(Jackie)、Ya Zhou Luo、Johnny Meissler、Ron Rathgeber、Harry Richards、Jana Saalfeld
、Sebastian Schmid、Kosta Tachtevrenidis。
xvi
IBM Content Navigatorのカスタマイズと拡張
これであなたも出版された著者になることができます!
あなたのスキルにスポットを当て、キャリアを伸ばし、同時に出版された著者になるチャンスです。ITSOレジデ
ンシープロジェクトに参加し、最先端のテクノロジーを使用して経験を磨きながら、専門分野の本を書くのを手
伝ってください。技術的な連絡先と関係のネットワークを拡大するにつれて、あなたの努力は製品の受け入れと
顧客満足度を高めるのに役立ちます。居住期間は2週間から6週間で、直接参加することも、自宅で働くリモート
居住者として参加することもできます。
レジデンシープログラムの詳細を確認し、レジデンシーインデックスを閲覧して、次のサイトからオンラインで申請してください。
ibm.com/ redbooks / residencies.html
コメント歓迎
あなたのコメントは私たちにとって重要です!
私たちは、本ができるだけ役立つようにしたいと考えています。この本または他のIBM Redbooksの出版物につい
てのコメントを、次のいずれかの方法で送信してください。
オンラインで使う お問い合わせ 次の場所にあるRedbooksフォームを確認してください。
ibm.com/ レッドブック
メールでコメントを送信してください。
redbooks@us.ibm.com
コメントをメールで送ってください:
IBM Corporation、International Technical Support Organization Dept. HYTD Mail Statio
n P099 2455 South Road Poughkeepsie、NY 12601-5400
序文 xvii
IBM Redbooksとの接続を維持
Facebookで私たちを見つけてください:
http://www.facebook.com/IBMRedbooks
Twitterでフォローします:
http://twitter.com/ibmredbooks
LinkedInで私たちを探してください:
http://www.linkedin.com/groups?home=&gid=2130806
IBM Redbooksウィークリーニュースレターで、新しいRedbooksの出版物、レジデンシー、ワークショップを
ご覧ください。
https://www.redbooks.ibm.com/Redbooks.nsf/subscribe?OpenForm
RSSフィードを使用して、最近のRedbooksの最新情報を入手します。
http://www.redbooks.ibm.com/rss.html
xviii
IBM Content Navigatorのカスタマイズと拡張
変更の概要
このセクションでは、本のこの版と以前の版で行われた技術的な変更について説明します。このエディションに
は、特定されていないマイナーな修正や編集上の変更が含まれる場合もあります。
SG24-8055-01の変更の概要
2015年4月13日に作成または更新されたIBM Content Navigatorのカスタマイ
ズおよび拡張。
2014年5月、第2版
この第2版は、IBM Content Navigatorソフトウェアの変更と、本の前の版から受け取ったフィードバックのために
、大幅な改訂が行われています。可能であれば、Content Navigatorのカスタマイズと拡張を行う理由、場所、方
法について、さらに説明します。一般的なリクエストに基づいて、多くの新しいサンプルを作成して文書化しま
した。
具体的には、この版には、ここで説明する情報の追加、変更、または削除が反映されています。前版は、こ
の第2版の本でダウンロードできます。
新情報
次の章が本に追加されているか、この第2版の主要な変更が行われています。
3ページの第1章「拡張ポイントとカスタマイズオプション」(主な変更点)
主要な改訂には、Content Navigatorアーキテクチャ、拡張ポイント、およびカスタマイズオプションのより
良い説明が含まれています。カスタマイズの準備をよりよくするために、2つの新しいセクションを追加しま
した。
–
4ページの1.1、「始める前に」
–
1.6ページの「この本のために開発したサンプル」
73ページの第3章、「開発環境のセットアップ」(主な変更点)
主な改訂には、開発環境をセットアップするための新しい手順の追加が含まれます。この章では、新
しい
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
xix
Eclipseウィザードを使用したプラグインプロジェクト。アプリケーションをテストおよびデバッグするためのリファレンスが含
まれています。
117ページの第4章、「基本的な拡張ポイントを使用したプラグインの開発」(新しい章)
173ページの第5章「カスタムリポジトリ検索サービスの構築」(新しい章)
211ページの第6章「検索サービスとウィジェットを使用した機能の作成」(新しい章)
277ページの第8章「カスタムステッププロセッサの作成」(新しい章)297ページの第9章「他のアプリ
ケーションでのコンテンツナビゲータウィジェットの使用」(主な変更点)
章の内容の大幅な修正には、より良い説明、アプローチ、ロジック、フローが含まれ、サンプルコード
が含まれています。413ページの第11章「ソリューションをモバイルプラットフォームに拡張する
」(主な変更点)
新しいモバイルアプリケーションのサンプルに基づいて、章が大幅に変更されました。
437ページの第12章「Microsoft Lync Serverのプロファイルプラグインの拡張」(新しい章)
変更された情報
以下の章は、コンテンツナビゲーターの最新の機能と機能で更新され、追加情報をカバーするために新しいセ
クションが追加されました。
63ページの第2章、「デスクトップの外観のカスタマイズ」これは、本の前版のセクション3.6
の要約です。233ページの第7章「要求および応答フィルターと外部データサービスの実装」
外部データサービス(EDS)をいつ使用するか、および要求と応答のフィルターをいつ実装するかの説明の
改善。
365ページの第10章「組み込みビューアのカスタマイズとサードパーティビューアの統合」
有益なグラフィックスブラバの統合に関するセクションを追加しました。オリジナルのSnowbound Vir
tualViewerセクションに加えて、Enterprise Viewer。
xx IBM Content Navigatorのカスタマイズと拡張
465ページの第13章「コンポーネントのデプロイメント」
ソリューションの展開に新しいエクスポートおよびインポートツールを使用する方法に関するセクションを追加しました。
495ページの第14章「デバッグとトラブルシューティング」デバッグとトラブルシューティングに使用できる
ツールに関するセクションを追加しました。
削除された情報
本の前版以降、以下の章は削除されました。その理由は、IBMナレッジセンターにある一般的な概要と概念をカ
バーせずに、コンテンツナビゲーターのカスタマイズと拡張に焦点を当てたいからです。
第1章「IBM Content Navigatorの紹介」第2章「機能、機能、および
概念」第3章「構成とカスタマイズ」
この章のセクション3.6は、一般の需要のために保持されています。しかし、この本の第2版では、第2章とし
て番号が付け直されています。第6章「アクションを追加するためのプラグインの開発」この章は、新しい章
である第4章「IBM Content Navigatorの基本的な拡張ポイントを使用したプラグインの開発」に置き換わりま
す。複数のアクション、サービス、機能。
前の版はダウンロード可能です
この本の前の版は、この本の第2版の追加資料として引き続きダウンロードできます。詳細については、535ペー
ジの付録D「その他の資料」を参照してください。
変更の概要 xxi
xxii
IBM Content Navigatorのカスタマイズと拡張
パート1
部
1
前書き
このパートでは、IBM Content Navigatorを操作するための拡張ポイントとカスタマイズオプション、およ
びカスタマイズ用の開発環境をセットアップする方法を紹介します。さらに、コーディングなしでデスク
トップの外観をカスタマイズする方法を示します。このパートには、次の章が含まれています。
3ページの第1章「拡張ポイントとカスタマイズオプション」61ページの第2章「デスクトップ
の外観のカスタマイズ」73ページの第3章「開発環境のセットアップ」
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
1
2 IBM Content Navigatorのカスタマイズと拡張
1
第1章。
拡張ポイントと
カスタマイズオプション
IBM Content Navigatorは、エンタープライズコンテンツ管理ソリューションに統合されたユーザーインターフェースを
提供します。また、カスタマイズされたユーザーインターフェイスとアプリケーションを構築して、価値とインテリジ
ェントなビジネス中心のエクスペリエンスを提供するために使用できる堅牢な開発プラットフォームも提供します。こ
の章では、このプラットフォーム、アプリケーションのアーキテクチャ、および利用可能なプログラミングインターフ
ェイスについて、利用可能な開発オプションを理解するのに役立ちます。
この章では、次のトピックについて説明します。
あなたが始める前に
IBM Content Navigatorを使用した開発オプションIBM Content Navig
ator開発アーキテクチャーIBM Content Navigator APIを使用した開発
IBM Content Navigatorサンプルこの本のために開発したサンプル
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
3
1.1始める前に
この本を理解するには、まず用語を理解する必要があります。ソリューションのユーザーインターフェイスを開
発する方法を理解するには、使用可能なオプションを知る必要があります。このセクションでは、この本で使用
されるいくつかの重要な用語を定義します。7ページの1.2、 『IBM Content Navigatorを使用した開発オプション
』は、ビジネス要件を満たすために使用できるオプションについて説明しています。
1.1.1 IBM Content Navigatorの用語
この本で使用されるいくつかの用語は、IBM Content Navigatorに固有のものであるか、IBM Content Navigatorの
管理および開発のコンテキスト内で特別な意味を持っています。
リポジトリ:A リポジトリ この本のは、IBM Content Navigatorが接続できる文書管理システムを表していま
す。これには、IBM FileNet Content Manager、IBM Content Manager、IBM Content Manager OnDemand、
またはContent Management Interoperability Standard(CMIS)を実装するサードパーティのドキュメント管
理システムの1つ以上を含めることができます。
コンテンツアイテム:用語 コンテンツアイテム IBM Content Navigatorが接続できるさまざまなリポジトリ
ーに保管されている文書、フォルダー、カスタム・オブジェクト、および個々のアイテムをアドレス指定す
るために使用されます。デスクトップ:IBM Content Navigator デスクトップ は、IBM Content Navigatorが
提供できる使用可能なリポジトリーおよび機能の調整されたビューを表します。デスクトップは、Content
Navigatorデプロイメント内のIBM Content Navigatorアプリケーションの1つのインスタンスであり、ユーザ
ーエクスペリエンス内で使用可能および表示されるさまざまな外観、使用可能な機能、およびリポジトリー
を構成できます。一般的な現実のシナリオでは、1つのデスクトップが1つのビジネスロールまたは部門専用
です。プラグイン:IBM Content Navigator プラグイン IBM Content Navigatorの機能を拡張および変更して
、ソフトウェア自体のコードを変更せずにアプリケーションの特定のビジネス要件を満たすことができる強
力なメカニズムです。IBM Content Navigatorプラグインは、開発者がカスタムプラグインを実装するために
拡張する必要があるJavaクラスです。ほとんどの場合、これは、定義済みの中間層(midtier)拡張ポイント
を実装するJavaクラスと、ブラウザーUIを拡張するためのWebリソースを含むJavaアーカイブ(JAR)ファ
イルを指します。
4 IBM Content Navigatorのカスタマイズと拡張
拡張ポイント:用語 拡張ポイント このマニュアルでは、プラグインに実装できる利用可能なオプションの
1つを取り上げ、新しい機能を追加したり、既存の機能を変更したりするために使用されます。これは主に、
プラグインクラスによって参照されるJavaクラスとして表されます。機能:IBM Content Navigator 特徴 ブラ
ウズ、検索、お気に入りなど、IBM Content Navigatorの基本機能を提供するトップレベルのメニュー項目を
指します。また、利用可能なのいずれかを指します 拡張ポイント プラグイン開発で。レイアウト:用語 レイアウト
この本では、2つの方法で使用されます。それは、
拡張ポイント、 これにより、IBM Content Navigatorの全体的なルックアンドフィールを変更できます。 dijitレイ
アウト。( 用語を見る ディジット 以下)Content Navigator API:A コンテンツナビゲーターAPI は、プラグ
インの開発や、IBM Content Navigator機能を利用した独自のアプリケーションの実装に使用できるJavaおよびJa
vaScriptクラスのセットです。外部データサービス: 外部データサービス( EDS)は、新しいRESTインターフ
ェースを導入してプロパティーの動作を変更できるIBM Content Navigatorプラグインです。EDSは、プラグイン
を実装する必要なしに、カスタマイズをすばやく簡単に開始できるように設計されています。ウィジェット:A ウィジェット
ユーザーインターフェイスの構築に使用できる特定の機能を提供するユーザーインターフェイスコンポーネントで
す。ウィジェットは通常、関連するコンポーネントのライブラリにパッケージ化されています。デザイナーは、連
携して機能する複数のウィジェットからWebページを作成し、ユーザーに統一された視覚的エクスペリエンスを
提供できます。ウィジェットは、ツリービューなどのユーザーに表示されるインターフェースの一部を担当するビ
ジュアルウィジェット、またはフォーム検証などのユーザーインターフェースにサポート機能を提供する非ビジュ
アルウィジェットにすることができます。道場:A 道場 は、Webアプリケーションのクライアント側コードの開発
の速度と容易さを向上させるように設計されたJavaScriptライブラリです。Dojoは、Webアプリケーション用のク
ライアント・ベースのユーザー・インターフェースを簡単に構築するために使用できるウィジェットのライブラリ
ーを提供します。Dojoウィジェットは、構成可能で拡張可能になるように設計されています。ディジット:言葉
ディジット Dojoウィジェットの略語です。ディジットレイアウト:A dijitレイアウト 子ウィジェットを含むdijitで
す。これは、dijit / _Containerクラスまたはそのサブクラスを拡張するJavaScriptクラスです。ステッププロセッサ
ー:A ステッププロセッサー IBM Content Navigatorでは、ワークフロー内のヒューマンタスクを表示するウィジ
ェットです。ecm / widget / process / ProcessorLayout dijitを拡張します。
第1章拡張ポイントとカスタマイズオプション 5
1.2 IBM Content Navigatorを使用した開発オプション
IBM Content Navigatorは、アプリケーションのユーザーエクスペリエンスをカスタマイズまたは開発するための
いくつかのオプションを提供します。各オプションには、目標を達成するための異なる開発スキルセット、労力
、時間を必要とします。したがって、各オプションの設計目的と、各オプションがプロジェクトとアプリケーシ
ョンの要件にどのように適合するかを理解することが重要です。
オプションは次のとおりです。
IBM Content Navigatorの構成EDSインターフェー
スの実装プラグインの実装
カスタムアプリケーションの開発または統合モバイルアクセスの
提供
次のセクションでは、各オプション、これらのオプションを開発または実装するために必要なスキル、およびこ
れらのトピックの詳細を学習するのに役立つリンクについて説明します。14ページの1.2.6「一般的な使用例とそ
の開発オプションの概要」では、一般的な使用例のリストを提供し、カスタマイズと拡張を探す場所をまとめて
います。
1.2.1 IBM Content Navigatorの構成
IBM Content Navigatorデスクトップの外観を変更する最も簡単な方法は、構成を使用することです。ほとんど
の場合、これは多くの場合、企業のネーミングと組織の視覚的な標準に準拠するために使用される最も一般的
なオプションです。IBM Content Navigatorには、デスクトップのいくつかの視覚的側面を構成するために使用
できる管理デスクトップが含まれています。
デスクトップの名前を指定します。
ログインページとデスクトップのバナーの両方に会社のロゴを追加します。デスクトップバナーで使用
する色を変更します。
さらに、グローバルレベル(すべてのデスクトップ)で、次の視覚的側面を構成できます。
特定のMIMEタイプのアイコンを変更します。デスクトップで使用
されているラベルを変更します。
6 IBM Content Navigatorのカスタマイズと拡張
IBM Content Navigatorの構成オプションは、ソリューション全体のいくつかのセキュリティーおよびビジネ
ス要件もカバーできます。デスクトップ構成は、次の要件をカバーできます。
「パスワードを忘れた」情報などの便利なメモをログインページに追加します。デスクトップの機能を
追加または削除します。ツールバーとコンテキストメニューの両方のメニュー項目を変更します。構成
可能な表示プロパティを指定します。
–
ユーザーに表示されるシステムプロパティ。
–
ユーザーが参照しているときにコンテンツリストのドキュメントとフォルダーに表示されるプロパティ
。
–
検索操作で使用可能なプロパティと、特定のデータタイプで使用可能な演算子。
必要なスキル
IBM Content Navigator内の構成タスクはすべて、管理デスクトップを介して管理タスクとして実行でき、開発や
コーディングを完了する必要はありません。IBM Content Navigatorデスクトップの構成の詳細については、61ペ
ージの第2章「デスクトップの外観のカスタマイズ」を参照してください。
便利なリンク
Content Navigatorの構成について詳しくは、IBM Knowledge Centerでデスクトップの定義に関する情報を参照
してください。
http://pic.dhe.ibm.com/infocenter/cmgmt/v8r4m0/index.jsp?topic=%2Fcom.i
bm.installingeuc.doc%2Feucco023.htm
1.2.2 EDSインターフェースの実装
ソリューションの基盤となるリポジトリには、ドキュメントモデルおよびシステム分類法でプロパティを定義す
る方法に関する特定のオプションがあります。少なくとも、データ型を指定できます。システムでは、必須ステ
ータスや読み取り専用ステータスなどのデータ検証を指定することもできます。ただし、実行時にそれらを変更
することはできません。これは、ワークフローやさまざまなドキュメントやフォルダーの状態などの複雑なソリ
ューションでは一般的な要件です。別の一般的な要件は、プロパティが保持できる値を事前定義する機能です。
現状では、外部システムとの関係や接続がなければ、リポジトリ内で静的な選択リストを定義できるだけです。
EDSインターフェースは、Javaを理解したり、IBM Content Navigatorプラグインを実装したりする必要なく、こ
れらの問題に軽量な方法で対処するために導入されました。
第1章拡張ポイントとカスタマイズオプション 7
IBM Content NavigatorまたはIBM Content Navigator for Microsoft Officeでのコンテンツアイテムの追加と編集、
検索の作成と使用、ステッププロセッサプロパティの編集などのアクションのために、外部データサービスが呼
び出されます。EDS RESTインターフェースを実装することで、以下のユースケースをカバーできます。
プロパティに値を事前入力します。
プロパティまたは依存プロパティの選択リストの値を検索します。プロパティの最小値と最大
値を設定します。
プロパティのステータスまたはコントロール(読み取り専用、必須、非表示など)を設定します。プロパティの
検証とエラーチェックを実装します。
EDS RESTインターフェースの実装は、ユーザーのセッションと資格情報を伝搬せずに、IBM Content Navigator
(EDSプラグイン)によって呼び出されます。EDSプラグインは、JavaScript Object Notation(JSON)リクエスト
のClientContextノードでユーザーIDのみを送信します。したがって、この資格情報が外部システムに接続するため
に必要な場合、たとえば、ログインしたユーザーによって結果(選択リストの値)をフィルター処理するために、
EDSは実装に適していません。
ヒント: ユースケースまたはRESTインターフェースがニーズをカバーしていない場合は、リクエストおよび
レスポンスフィルター用の独自のプラグインを実装できます。外部データサービスは、IBM Content Navigato
rプラグインの要求および応答フィルターの1つのケースとして実装されます。
必要なスキル
外部データサービスRESTインターフェースを実装するには、次のスキルが必要です。
Webアプリケーション開発(GETおよびPOSTリクエスト)JSONの読み取りと書
き込み
24ページの1.4.2、「外部データサービス」を参照してください。 IBM Content Navigator(またはIBM Content N
avigator for Microsoft Office)のどのプロパティーとアクションを理解するために、外部データサービスを介して
カスタマイズし、通信プロトコルがどのように見えるかを理解できます。
便利なリンク
必要なスキルを習得するのに役立つ次のソースを参照してください。
表記法を説明するJSONチュートリアル:
http://www.w3schools.com/json/
IBM Content NavigatorにバンドルされたJSON Java API
http://pic.dhe.ibm.com/infocenter/p8docs/v5r2m0/topic/com.ibm.javaeu
c.doc / com / ibm / json / java / package-summary.html
8 IBM Content Navigatorのカスタマイズと拡張
IBM Knowledge Center for FileNet P8の外部データサービス:
http://pic.dhe.ibm.com/infocenter/p8docs/v5r2m0/topic/com.ibm.develo pingeuc.doc / eucap001.htm
1.2.3プラグインの実装
IBM Content Navigatorプラグインは強力なメカニズムであり、ソリューション内のユーザーエクスペリエンスを
カスタマイズするための最も柔軟なオプションです。開発者は、新しい機能を追加したり、アプリケーションの
既存の動作や外観を変更したり、完全に新しいアプリケーションを作成したりできます。プラグインは、ビジネ
ス要件を満たすために1つ以上の拡張ポイントを実装できます。
次の拡張ポイントを使用できます。
アクション:新しいコンテキストメニュー項目またはツールバーメニュー項目を追加するために使用されます。多
くの場合、アクションのビジネスロジックを実装するサービス拡張ポイントが付属しています。たとえば、選択し
たフォルダとその内容をZIPファイルにエクスポートするアクションを追加できます。
開くアクション:コンテンツアイテムを開くときの動作を変更するために使用されます。たとえば、ドキュ
メントプロパティの値に応じて、Openアクションを実装して、さまざまなビューアを開くか、新しい機能で
特定のフォルダ表示を開くことができます。
機能:独自のインターフェースペインを持つ新しい機能を追加するか、既存のインターフェースペインをいくつ
か変更して使用します。また、実装する必要があります dijitレイアウト これにより、機能のコンテンツがレン
ダリングされ、既存のウィジェットまたはカスタマイズされたウィジェットを使用できます。たとえば、カスタ
ム検索フォームと既存のコンテンツリストウィジェットを表示する機能を実装できます。メニュー:ウィジェッ
トにハードコーディングする代わりに、構成可能なメニュー項目をウィジェットに追加するために使用されます
。これにより、管理デスクトップからさまざまなデスクトップまたはロールにさまざまなアクションを設定でき
ます。たとえば、顧客を表示するために新しく作成されたウィジェットに構成済みのアクションを表示するメニ
ューを実装できます。
レイアウト:IBM Content Navigatorフレームワークの上に完全に新しいルックアンドフィールを作成したり
、デスクトップの既存の機能を変更したりするために使用されます。たとえば、画面サイズに適応するモバ
イルブラウザーのカスタムレイアウトを構築できます。
ビューア:特定のMIMEタイプの既存のビューアを変更するために使用されます。たとえば、PDFドキ
ュメントの表示に使用できるビューアを実装し、ユーザーが開いているドキュメントに電子署名できる
ようにすることができます。
第1章拡張ポイントとカスタマイズオプション 9
要求フィルター:ブラウザーからサービスに送信されるパラメーター(JSON要求)を変更するため、または独自の
JSON応答を送信することによって呼び出されたサービスを置き換えるために使用されます。たとえば、ユーザーが
入力したコメントの制限された単語を非難したり、外部システムで追加のセキュリティチェックを実行してコンテン
ツアイテムへのアクセスを制限したりできます。
応答フィルター:呼び出されたサービスのJSON応答を変更して、IBM Content Navigatorの動作と外観を変
更するために使用されます。たとえば、参照ビューのコンテンツリストに表示される列を決定したり、ドキ
ュメント追加フォームのプロパティの順序を変更したりできます。サービス:アクション、ウィジェット、
その他のフロントエンドコンポーネントにサーバー側の機能を提供するために使用されます。リポジトリ固
有のAPI、構成API、または独自のライブラリを使用して、必要な操作を呼び出すことができます。たとえば
、リポジトリ内にいくつかのサブフォルダーを持つフォルダーを作成するサービスを実装できます。
Javaクラスで表されない特別なタイプの拡張ポイントは、
ウィジェット。 プラグインで使用して、機能をレンダリングしたり、いくつかのダイアログでアクションをサポートしたり、カスタマイズさ
れたステッププロセッサを作成したりできます。
特定のユースケースは、 OnDemand認証サービス シングルサインオン(SSO)ソリューションの認証トーク
ンをIBM Content NavigatorからIBM Content Manager OnDemandリポジトリーに転送できるようにする拡張ポイ
ント。
重要: 要求および応答フィルターは、Microsoft Content Navigator for Microsoft OfficeなどのIBM Content Na
vigatorサービスを使用して、すべてのクライアントの動作と外観を変更します。
クライアントとサーバー間で交換されるJSONメッセージの形式は、予告なしに変更される場合がありま
す。新しいバージョンのIBM Content Navigatorがリリースされた場合は、要求および応答フィルターの
コードを更新する必要がある場合があります。
必要なスキル
開発の観点からは、2つのタイプの拡張ポイントがあり、それぞれ異なるスキルの前提条件があります。
サーバー側の拡張機能:Javaプログラミング言語とJSONを理解する必要があります。これらの拡張ポ
イントは次のとおりです。
–サービス
–
リクエストフィルター
–
応答フィルター
–
OnDemand AuthenticationService
10 IBM Content Navigatorのカスタマイズと拡張
クライアント側の拡張:Javaプログラミング言語とJSONに加えて、JavaScriptプログラミング言語を理解す
る必要があります。これらの拡張ポイントは次のとおりです。
–アクション
–
オープンアクション
–メニュー
–機能
- レイアウト
–ビューア
プラグインの一部であるウィジェットを開発するには、以下のテクノロジーの使用方法を知っている必要があります
。
Dojo 1.8.4(このバージョンはIBM Content Navigatorにパッケージされています)HyperText
Markup Languageバージョン5(HTML 5)
IBM Content Navigatorは、プラグインクラスを実装するためのJava APIおよびクライアント拡張ポイントを開発する
ためのJavaScript APIを提供します。詳細については、27ページの1.4.3「プラグインAPI」および47ページの1.4.4
「Content Navigator JavaScript API」を参照してください。
便利なリンク
必要なスキルを習得するための詳細については、次のソースを参照してください。
初心者向けのDojoチュートリアル:
http://dojotoolkit.org/documentation/tutorials/1.9/modern_dojo/
経験豊富なJavaScript開発者の最小要件は、Dojoモジュールを理解することです。次のWebページ
のように、関数を宣言、定義、および要求する方法:
http://dojotoolkit.org/documentation/tutorials/1.8/modules/
表記法を説明するJSONチュートリアル:
http://www.w3schools.com/json/
1.2.4カスタムアプリケーションの開発または統合
新しいエンタープライズコンテンツ管理ソリューションを実装するには、組織内の既存のアプリケーションを
検討する必要があります。統合する必要のあるフロントエンドアプリケーションがいくつかある場合や、アプ
リケーションへのアクセスに使用されるIBMWebSphere®PortalやMicrosoft SharePointなどの統合フロントエン
ドプラットフォームがある場合があります。
第1章拡張ポイントとカスタマイズオプション 11
IBM Content Navigatorは、カスタムアプリケーションを統合するための2つのアプローチを提供します。
アンバインド:IBM Content Navigator URL APIを使用した軽量の統合で、特定のデスクトップ、機能、フォルダー
、ドキュメント、または検索テンプレートをアプリケーションのiFrameまたは新しいウィンドウにレンダリングしま
す。このアプローチでは、アプリケーションとの対話のオプションが制限されますが、クロスサイトスクリプティン
グの問題とDojoバージョンの競合が回避されます。
バインド:すべてのJavaScriptコードがアプリケーション内で直接実行されるヘビーウェイト統合。この
オプションを使用すると、JavaScriptイベントワイヤリングを使用したアプリケーションとの対話をより
適切に制御できます。この統合を実現するには、IBM Content Navigatorサーバーへの接続を初期化し、ク
ロスサイトスクリプティングの問題を解決する必要があります。
カスタムアプリケーションを開発するには、IBM Content Navigator GUIを利用してデスクトップ用の独自のレイ
アウトプラグインを開発するか、IBM Content Navigator JavaScript APIを使用して完全に新しいアプリケーショ
ンを作成できます。
必要なスキル
非バインド統合の場合、23ページの1.4.1「URL API」で説明されているように、IBM Content Navigator URL APIを
理解する必要があります。
IBM Content Navigatorでカスタムレイアウトを開発するには、上記のプラグイン開発を理解する必要があります
。
完全に新しいアプリケーションまたはバインドされた統合を開発するには、次のテクノロジーとAPIを理
解する必要があります。
JavaScript
JSON
IBM Content Navigator JavaScript API
Dojo 1.8.4(このバージョンはIBM Content Navigatorにパッケージされています)HyperText
Markup Languageバージョン5(HTML 5)
詳細については、47ページの1.4.4、「Content Navigator JavaScript API」を参照してください。
12 IBM Content Navigatorのカスタマイズと拡張
便利なリンク
必要なスキルを習得するための詳細については、次のソースを参照してください。
初心者向けのDojoチュートリアル:
http://dojotoolkit.org/documentation/tutorials/1.9/modern_dojo/
JavaScriptに精通した開発者の最小要件は、dojoモジュールを理解することです。関数の宣言、定義
、および要求の使用方法:
http://dojotoolkit.org/documentation/tutorials/1.8/modules/
表記法を説明するJSONチュートリアル:
http://www.w3schools.com/json/
FileNet P8のIBM Knowledge CenterにあるIBM Content Navigator JavaScript APIリファレンス:
http://pic.dhe.ibm.com/infocenter/p8docs/v5r2m0/topic/com.ibm.develo pingeuc.doc / doc / JavaScriptdoc /
index.html
1.2.5モバイルアクセスの提供
モバイルデバイスからリポジトリへのアクセスを提供することを計画している場合、最初の考慮事項の1つは、ユーザ
ーがダウンロードできるモバイルアプリケーションを作成するか、電話のブラウザからアクセスできるモバイルWebサ
イトを作成するかです。IBM Content Navigatorフレームワークは、両方のオプションをサポートできます。
モバイル・アプリケーション開発:ニーズに拡張できるIBMWorklight®プロジェクトによってサポートされています。
AndroidやiOSなどのいくつかのプラットフォームにデプロイできるハイブリッドアプリケーションを構築します。W
ebアプリケーション開発:IBM Content Navigator JavaScriptモデルライブラリでサポートされています。これは、独
自のアプリケーションで使用することも、レイアウトプラグインでより簡単に使用することもできます。
注意: IBM Content Navigatorは、Apple App StoreからダウンロードできるiOSデバイス用のモバイルアプリ
ケーションを提供します。機能のWebページ(URL)を指定することにより、デスクトップ構成を通じてこ
のアプリケーションに新しい機能を追加できます。
第1章拡張ポイントとカスタマイズオプション 13
必要なスキル
モバイルアプリケーション開発とWebアプリケーション開発の両方で、次のテクノロジを理解する必要があり
ます。
JavaScript
HTML5 CSS3
Dojoモバイル
さらに、モバイルアプリケーション開発では、次の領域についても理解する必要があります。
IBM WorkLight Studio Apache Cordova APIを使用したアプリケーション
開発
詳細については、413ページの第11章「ソリューションをモバイルプラットフォームに拡張する」を参照してください。
便利なリンク
必要なスキルを習得するための詳細については、次のソースを参照してください。
IBM Worklightによるビジネスのモバイルデバイスへの拡張:
http://www.redbooks.ibm.com/abstracts/sg248117.html?Open
IBM Worklightバージョン6.0.0:
http://pic.dhe.ibm.com/infocenter/wrklight/v6r0m0/index.jsp
Apache Cordova:
http://cordova.apache.org/
Dojo Mobileのチュートリアル:
http://dojotoolkit.org/documentation/tutorials/1.8/mobile/tweetview/getting_started/
1.2.6一般的な使用例とその開発オプションのまとめ
IBM Content Navigatorのカスタマイズと拡張を支援するために、このセクションでは、この章で言及されている
一般的な使用例を要約します。ここでは、カスタマイズまたは拡張を行うために注意すべき点、作業に必要なス
キル、および代替方法について説明します。
14 IBM Content Navigatorのカスタマイズと拡張
使用例は次のカテゴリに分類されます。
新しい機能の追加(表1-1)既存の動作の変更(表1-2)既存の機能の変更(16ページ
の表1-3)外観の変更(16ページの表1-4)外部アプリケーションとの統合(表1-5 1
7ページ)
表1-1新しい機能を追加するための使用例
使用事例
探す
必要なスキル
新しいコンテキストメニュー項目またはツー
プラグイン-アクションとサービス
Java、JavaScript
オルタナティブ
ルバーメニュー項目を追加する
新しい機能ページを追加
プラグイン-機能とウィジ
Java、ウィジェットライブ
ェット
ラリ、Dojo、(モデルライ
ブラリ)
特定のMIMEタイプの新しいドキュメン
プラグイン-ビューア
トビューアを追加する
Java、ウィジェットライ
プラグインOpenAction
ブラリ、Dojo、モデルラ
イブラリ
カスタムステッププロセッサを実装す
プラグイン-ウィジェット
る
JSP、PE API、Dojo、ウィジェ
ットライブラリ、モデルライブラ
リ
構成デスクトップ
既存のiOSアプリケーションに機能を
HTML
モバイルワークライト
追加する
表1-2既存の動作を変更するための使用例
使用事例
探す
必要なスキル代替
コンテンツアイテムの作成、検索、また EDS
Webアプリケーション、JSO
プラグイン要求フィル
はタスクの操作時にプロパティに値を事
N
ター
Webアプリケーション、JSO
プラグイン要求フィル
N
ター
Webアプリケーション、JSO
プラグイン要求フィル
N
ター
Webアプリケーション、JSO
プラグイン要求フィル
N
ター
前入力します
プロパティを選択リストまたは依存選択
EDS
リストに変更します
EDS
コンテンツアイテムの編集時またはタス
クの操作時にプロパティを非表示にする
オブジェクトの編集時またはタスクの
操作時にプロパティを編集不可にする
EDS
第1章拡張ポイントとカスタマイズオプション 15
使用事例
探す
必要なスキル代替
検索結果のカスタムソートメカニ
プラグイン応答フィル
ジャワ
ズムを実装する
ター
コンテンツアイテムへのアクセスを制限する、
プラグイン-リクエストフィルタージャワ
またはサービスを実行する
表1-3既存の機能を変更するための使用例
使用事例
探す
コンテンツアイテムの編集時またはタスク
EDS
の操作時に、プロパティのフロントエンド
必要なスキル
オルタナティブ
Webアプリケーション
プラグイン応答
、JSON
フィルター
検証を追加します
既存の機能を変更する
プラグイン-レイアウトとウィジェット Java、ウィジェットライ
ブラリ、Dojo
コンテンツアイテムの既存のオープンア
プラグイン-OpenAction Java、
能
プラグインビューア
JavaScript
クションを変更する
ユーザーが入力したコメント
プラグイン機
プラグイン-リクエストフィルター
ジャワ
プラグイン-OnDemand認証
ジャワ
を非難する
CMODのSSOソリューションを実装する
サービス
表1-4外観を変更する使用例
使用事例
探す
必要なスキル
オルタナティブ
ロゴとバナーの色を変更する
構成デスクトップ
なし
プラグイン-レイアウト
一般的な閲覧時にコンテンツリスト 構成リポジトリとデ なし
プラグイン-応答フィルターまた
の列を変更する
は機能とウィジェット
スクトップ
特定のフォルダーまたは特定の条件で プラグイン応答
コンテンツリストの列を変更または追 フィルター
加する
16 IBM Content Navigatorのカスタマイズと拡張
ジャワ
使用事例
探す
必要なスキル
コンテンツリストのセルのプロパティ
プラグイン応答
Java、JavaScr
フォーマッターを変更する
フィルター
ipt
検索またはシステムプロパティウィ
構成リポジトリとデ なし
プラグイン-機能とウィジ
ジェットでユーザーが使用できるプ
スクトップ
ェット
オルタナティブ
ロパティを変更する
デスクトップ全体(モバイルブラウ
プラグインのレイアウトとウィジェット
Java、ウィジェットライ
ザーなど)の外観を変更する
カスタムアプリ
ブラリ、Dojo、CSS
プロパティの追加/編集/表示ウィジェッ プラグイン応答
ジャワ
トのプロパティの順序を変更する
フィルター
プロパティの追加/編集/表示ウィジェットでプ
プラグイン応答
Java、JavaScr
ロパティのプロパティフォーマッターまたは
フィルター
ipt
エントリーテンプレート
プロパティエディターを変更する
表1-5外部アプリケーションと統合するための使用例
使用事例
探す
必要なスキル
オルタナティブ
機能、検索テンプレート、またはフォルダ
URL API
なし
カスタムアプリ
リストを独自のアプリケーションに統合
独自のアプリケーションでICNウィジェットを
カスタムアプリ
表示する
モバイルアプリケーションを提供する
モバイルワークライト
Dojo、ウィジェットライ
独自のレイアウトまたは独自
ブラリ、モデルライブラ
の機能を備えたデスクトップ
リ
を指すiFrame
Worklightスタジオ
Dojo、モデルライブラリ
、Cordova API
モバイルからアクセス可能なWebアプ
リケーションを提供
プラグイン-レイアウトとウィジェット
Java、ウィジェットライ
カスタムアプリ
ブラリ、Dojoモバイル
第1章拡張ポイントとカスタマイズオプション 17
1.3 IBM Content Navigator開発アーキテクチャー
IBM Content Navigatorアーキテクチャーは、モジュール性と、プレゼンテーション層、データアクセス層、お
よび中間層サービスの明確な分離に基づいています。モジュール性により、プラグインメカニズムを通じて既
存の機能に影響を与えることなく、新しい機能を追加できます。レイヤーに分離すると、アプリケーション全
体を作り直すことなく、特定のレイヤーを置き換えるオプションが提供されます。
図1-1は、IBM Content Navigatorの仮想レイヤーを示し、コンポーネントの依存関係を示しています。
IBM Content Navigator Webクライアント
カスタムWebクライアント
ハイブリッドモバイルアプリケーション(WorkLight)
p l ug-in
IBM Content Navigatorビジュアルウィジェットライブラリ
コンテンツビューア
コンテンツビューア
フォルダツリー
フォルダツリー
ワークフロー
ワークフロー
コンテンツリスト
コンテンツリスト
ウィジェット
ウィジェット
プレゼンテーション
層
クライアント側
検索フォーム
検索フォーム
カスタムプラグイン
カスタムプラグイン
IBM Content Navigator JavaScriptモデル
データアクセス
リクエスト
探す
デスクトップ
作品リスト
項目
リポジトリ
チームスペース
JavaScript
層
IBM Content Navigator中間層サービス
コネクター
IBM
Content
Manager
サービス層
プラグイン
OD
OD Java
Java
API
API
P8 Java
Java
P8
IBM
IBM
Content
FileNet
Manager
Content
OnDemand
Manager
API
API
Apache
Apache
Chemistry API
Chemistry
API
構成
構成
API
API
EDSプラグイン
EDSプラグイン
カスタムプラグインサービスとフィルターカスタムプラグイン
外部データサー
ビス
CMIS-準拠
構成
r リポジトリ
サーバ側
CM8
CM8 Java
Java
API
API
カスタムサーバーまたはデータストア
バックエンドシステム
RESTインターフェース
データベース
図1-1 IBM Content Navigator開発アーキテクチャー
最上位レベルのプレゼンテーション層には、2つの主な責任があります。それは、ユーザーに出力をレンダリングし、ユー
ザーとの対話を処理します。データアクセス層を使用して、アプリケーションのデータモデルを格納、取得、更新します。
プレゼンテーション層の主なコンポーネントは IBM Content Navigatorビジュアルウィジェットライブラリ、 ビジネ
スロジックから抽出されたビジュアルウィジェットのセットが含まれています。Dojo 1.8.4およびIBM Dojo Extension for O
neUI(IDX)1.3.0.4に基づいて構築され、Dojo、Dojoウィジェット、およびIDXライブラリーを拡張します。コンテンツ・
リスト、フォルダー・ツリー、ダイアログ、検索フォームなどのビジュアル・ウィジェットは、IBM Content Navigator W
ebアプリケーションのユーザー・インターフェースを構築しますが、カスタムWebクライアントでも使用できます。
18 IBM Content Navigatorのカスタマイズと拡張
データアクセス層は、アプリケーションデータを保持し、サーバーで実行されているリポジトリとサービスへの
透過的なアクセスを提供する役割を果たします。また、データモデルの変更に対してイベントリスナーをアタッ
チすることもできます。メインコンポーネントであるIBM Content Navigator JavaScriptモデルは、リポジトリー
固有の機能を共通インターフェースに抽象化し、基礎となるリポジトリーのコンテンツを取得、作成、削除、ま
たは変更するための統合(リポジトリーに依存しない)アプローチを提供します。データモデルは、キャッシン
グメカニズムとスマートリクエストを介して中間層アクセスを最適化します。JavaScriptライブラリとして実装さ
れており、簡単にインクルードして独自のアプリケーションで使用できます。
サービスレイヤーは、エンタープライズコンテンツ管理ソリューションにサービスの完全なセットを提供する責
任があります。これは、フロントエンドアプリケーションとバックエンドシステム間の統合レイヤーとして設計
されています。IBM Content Navigator Midtierサービスは、Javaで実装されたサーバーコンポーネントであり、サ
ポートされるすべてのリポジトリーおよびIBM Content Navigator構成データベースにサービスとインターフェー
スを提供します。これには、各レイヤーで機能を拡張または変更できるプラグインメカニズムが含まれています
。IBM Content Navigatorの一部である外部データサービスプラグインは、外部システムをIBM Content Navigato
rに統合するために使用できるRESTインターフェースを公開します。これは、プラグインを実装する必要なく、
特定のユースケースに対応します。
1.3.1プログラミングインターフェース
IBM Content Navigatorアーキテクチャーの各レイヤーは、カスタム・ユーザー・エクスペリエンスを提供するため
に使用するプログラミング・インターフェースを提供します。変更するレイヤーに応じて、次のインターフェースを
使用できます。
URL API:IBM Content NavigatorをカスタムWebアプリケーションに統合するためにプレゼンテーション層で使用さ
れます。
外部データサービス(EDS):プレゼンテーションレイヤーを変更できるRESTインターフェースを定義しま
す。これは、ドキュメント、検索テンプレート、フォルダー、およびステッププロセッサのプロパティを編集
するときの動作です。Java API:
–
プラグインAPI:IBM Content Navigatorアーキテクチャーの各レイヤーを拡張または変更できるJavaインター
フェースを定義します。独自のプラグインを構築するための抽象クラスとユーティリティクラスのセットが含
まれています。
–
構成API:中間層サービス層がIBM Content Navigatorの構成およびユーザー構成にアクセスまたは
更新するために使用します。
第1章拡張ポイントとカスタマイズオプション 19
JavaScript API:
–
モデリング:サーバーからデータにアクセスするためにプレゼンテーション層で使用されます。これには、カスタムWe
bアプリケーションまたはWorklightアプリケーションが中間層サービスへの接続に使用できる一連のJavaScriptクラスが
含まれています。
–
ウィジェット:プレゼンテーション層で使用され、IBM Content Navigatorの新規または既存のウィジェッ
トカタログを作成します。
IBM Knowledge Centerで以下の参照情報を参照してください。
完全なJava APIリファレンス:
http://pic.dhe.ibm.com/infocenter/p8docs/v5r2m0/topic/com.ibm.javaeu
c.doc / overview-summary.html
完全なJavaScript APIリファレンス:
http://pic.dhe.ibm.com/infocenter/p8docs/v5r2m0/topic/com.ibm.develo pingeuc.doc / doc / JavaScriptdoc /
index.html
1.3.2通信フロー
IBM Content Navigatorアーキテクチャーを理解するには、レイヤー間で交換される情報の流れを理解する必要が
あります。IBM Content Navigatorアーキテクチャーには、2つの主要な通信フローがあります。
ウィジェットライブラリとJavaScriptモデル間の通信JavaScriptモデルから中間層サー
ビスへの通信
コミュニケーションをモデル化するウィジェット
ウィジェットライブラリとJavaScriptモデル間の通信は双方向ですが、JavaScriptライブラリにはウィジェットラ
イブラリへの依存関係はありません。双方向通信は、イベント駆動型のアプローチによって実現されます。モデ
ルライブラリは、オブジェクトの状態の変化を定義するいくつかのイベントを発行します。たとえば、デスクト
ップが読み込まれたり、ドキュメントのプロパティが変更されたりする場合があります。ビジュアルウィジェッ
トはリスナーをイベントにサブスクライブできます(Dojo用語では、これは「イベントに関数を接続する」です
)。このリスナーまたは関数は、イベントが発生すると自動的に呼び出されます。2つのウィジェットを一緒に接
続する必要がある場合、ウィジェット間の通信でも同じアプローチが使用されます。
20 IBM Content Navigatorのカスタマイズと拡張
図1-2は、デスクトップ初期化中の通信フローを示しています。ウィジェット初期化のpostCreateフェーズ中に、
LoginPaneはonDesktopLoadedイベントに登録し、NavigatorMainLayoutはonLoginイベントに登録します。
Content Navigator JavaScriptモデル
デスクトップ
機能
イベント
loadDesktop()logon()
onDesktopLoaded()onLogin()
1
2
loadDesktop()を呼び出す
IBM Content Navigatorを
ントをリッスンして、
初期化する
ユーザーが送信したときにlogon()
ログインフォーム
onLoginイベントをリッスン
して、
を呼び出します
特徴
ログインフォーム
LoginPane
デスクトップペイン
4
3
onDesktopLoadedイベ
NavigatorMainLayout
IBM Content NavigatorビジュアルウィジェットライブラリIBM
図1-2ウィジェットライブラリとJavaScriptモデル間の通信フロー
モデルからミッドティアサービスへの通信
JavaScriptモデル・ライブラリーからIBM Content Navigator中間層サービスへのすべての通信は、ecm.model.Requ
est JavaScriptクラスを介して行われます。セッション、タイムアウト、エラーを処理する一般的な方法を提供しま
す。生成されたサービス呼び出しは、JSON形式でエンコードされたパラメーターを含むHTTP POST要求を送信し
ます。
サーバー側は、コントローラーを使用して着信サービス呼び出しを処理します。コントローラは、サービスコー
ルを特定のクラスに分配します。
struts-config.xml ファイル。IBM Content Navigatorのプラグインメカニズムを使用すると、元のフローをインター
セプトする要求フィルターと応答フィルターを実装できます。要求フィルターを使用すると、要求されたアクシ
ョンが呼び出される前に着信JSONメッセージを変更できます。また、独自の応答を返し、追加の処理をスキップ
することもできます。応答フィルターは、要求されたサービスが呼び出された後に実行されます。サービスから
返されるJSON応答を変更できます。
第1章拡張ポイントとカスタマイズオプション 21
図1-3に通信フローを示します。
ECM JavaScriptモデリングライブラリ
リポジトリ
検索テンプレート
プレート
ResultSet
項目
WorkListリポジトリ
WorkList
デスクトップ検索テン
デスクトップ
リクエスト
HTTP(JSON応答
HTTP(JSONリクエスト)
)
コントローラーサーブレット
リクエスト
リクエストフィルター
リクエストフィルターリクエストフィルター
応答
応答
応答フィルター
応答フィルター応答
フィルター
サービス
p8サービス
cmサービス
構成サービス
odサービスcmisサービス
プラグインサービス
カスタムサービス
カスタムサービスカスタムサービス
IBM Content Navigator中間層サービス
図1-3モデルライブラリから中間層サービスへの通信フロー
22 IBM Content Navigatorのカスタマイズと拡張
1.4 IBM Content Navigator APIを使用した開発
IBM Content Navigator APIは、URL API、外部データサービス、プラグインAPI、およびContent Navigator JavaScript
APIで構成されています。
1.4.1 URL API
ドキュメント管理ソリューションをアプリケーションに統合する最も簡単な方法は、URLリンクを使用することです
。IBM Content Navigatorを使用すると、作成されたURLリンクをアプリケーションに埋め込むことにより、デスクト
ップ、機能、ドキュメント、検索テンプレート、およびフォルダーに直接アクセスできます。次のURLタイプを使用
できます。
デスクトップURL:完全なIBM Content Navigatorクライアントで指定されたデスクトップを開きます。
機能URL:デスクトップのデフォルトの機能設定を無視して、指定された機能が事前に選択された
状態でデスクトップを開きます。
フォルダURL:指定したフォルダのサブツリーとコンテンツを表示するビューを開きます。
ドキュメントURL:ドキュメントのMIMEタイプ用に事前設定されたビューアでドキュメントを開きます。
ドキュメントがStoredSearchの場合、検索フォームが開きます。
iFrameを介した統合では、デスクトップ全体のコンテキストなしで特定の機能またはデスクトップをレンダリン
グすることもできます。ウィンドウ上部のバナーを非表示にしたり、機能サイドバーを非表示にしたりするには
、 サイドクローム
URLへのパラメータ。
URL APIの拡張機能として、アプリケーションまたはポータルに表示するウィジェットをレンダリングするカ
スタムレイアウトプラグインまたはカスタム機能を実装することもできます。統合シナリオでは、レイアウト
と機能の両方を組み合わせるのが良い方法です。統合するすべてのカスタム機能を含む、カスタムレイアウト
の「統合」デスクトップを作成します。
URLを介してアプリケーションを統合する際の重要な考慮事項は、アプリケーションとIBM Content Navigatorの間のシン
グルサインオンソリューションです。そのため、アプリケーションからリダイレクトされた場合、またはIBM Content N
avigatorの一部が存在する場合、ユーザーはIBM Content Navigatorにログインする必要はありません。アプリケーション
内でレンダリングされます。
第1章拡張ポイントとカスタマイズオプション 23
URLの構成と使用可能なパラメーターの詳細は、次の場所にあります。
IBM FileNet P8:
http://pic.dhe.ibm.com/infocenter/p8docs/v5r2m0/topic/com.ibm.develo pingeuc.doc / eucbd001.htm
IBM Content Manager:
http://pic.dhe.ibm.com/infocenter/cmgmt/v8r4m0/topic/com.ibm.develop ingeuc.doc / eucbd001.htm
IBM Content Manager OnDemand:
http://pic.dhe.ibm.com/infocenter/cmod/v9r0m0/topic/com.ibm.developi ngeuc.doc / eucbd001.htm
1.4.2外部データサービス
外部データサービス(EDS)は、IBM Content Navigatorが外部データソースからデータにアクセスするために提供
するインターフェースです。EDSを使用して、フィールド検証基準の定義、フィールド値の事前入力、またはドキ
ュメントやフォルダーの配信中または変更中に既存のリポジトリメタデータのその他のカスタムプロパティを使用で
きます。
EDSには、ドキュメントクラスに基づいてドキュメントまたはフォルダーを追加または変更するときのプロパ
ティの動作を変更するための次のオプションがあります。IBM Content ManagerとIBM FileNet Content Manag
erでドキュメントクラスが同じ名前である場合、次の定義済みルールが両方のドキュメントクラスに有効です
。
データソースのルックアップに基づいて属性の選択リストを作成します。属性にデフォルト値
を事前入力します。
選択リストの依存関係を作成します。たとえば、ユーザーが州と市の名前を入力する必要がある場合、EDS
は2つの選択リストを提供できます。1つは州を含み、もう1つは市を含みます。ユーザーが州を選択すると、
その州にある都市のみが2番目の選択リストに表示されます。したがって、2番目の選択リストは、状態リス
トの最初の選択に応じて、EDSによって動的にロードされます。
プロパティの最大長と最小長を定義します。プロパティを非表示、必須、または
読み取り専用に設定します。ユーザー入力を検証するための正規表現を定義しま
す。
24 IBM Content Navigatorのカスタマイズと拡張
EDSを使用すると、新しいアイテムの配信中の入力ミスを回避できるため、高レベルの有効なメタデータが保証
されます。EDSを使用すると、検索結果も向上します。EDSでプロパティーの検証または選択リストを使用可能
にすると、定義された文書クラスとそのプロパティーを使用して、定義されたルールがすべてのIBM Content Na
vigatorフォームに適用されます。
選択リストは、IBM Content Navigatorがアクセスできる既存のデータソースまたはリポジトリから作成できます
。選択リストの値は、単純なテキストファイルから、または複雑なデータベーステーブルから取得できます。JS
ONファイルの使用も可能です。
技術的には、EDSはIBM Content Navigatorによって提供されるプラグインです。お客様固有のEDSの実装と、
さまざまなリポジトリまたは検証ファイルへの接続は、実装および展開が必要なWebアプリケーションで行わ
れます。次に、カスタムEDS実装へのURLをEDSプラグイン構成で構成する必要があります。
26ページの図1-4は、EDSの一般的なワークフローを示しています。このプロセスは、ユーザーのフロントエンド
であるIBM Content Navigatorクライアント、EDSプラグイン自体を保持するIBM Content Navigatorサーバー、お
よびEDS Webアプリケーションへの構成で構成されます。IBM Content NavigatorとEDSサービス間の通信は、R
ESTプロトコルに基づいています。
Webアプリケーションは、JSONファイル、外部データベース、単純なCSVファイルなどの外部データソース
にアクセスします。
第1章拡張ポイントとカスタマイズオプション 25
図1-4外部データサービスの情報の流れ
ユーザーがEDSによって提供および有効化されるプロパティーの選択リストを選択すると、IBM Content Naviga
torサーバーEDSプラグインが呼び出され、構成されたEDS Webアプリケーションに要求をPOST要求として転送
します。
26日 IBM Content Navigatorのカスタマイズと拡張
requestModeは、フロントエンドで実行されたアクションに応じて、一連の値を提供します。
initialNewObject:新しいオブジェクトが作成されている場合に配信されます。initialExistingObject:既存のオブジ
ェクトを変更する必要がある場合に配信されます。inProgressChanges:既存のオブジェクトを変更する必要があ
り、プロパティに依存選択リストが定義されている場合に配信されます。
finalNewObject:チェックインや最終追加など、新しいオブジェクトがデータストアに永続化される前に配信さ
れます。
finalExistingObject:保存アクションを選択するなどして、既存のオブジェクトが永続化される前に
配信されます。
POST要求を実装するサーブレットは、検証ルールを含むデータソースにアクセスし、IBM Content Navigatorサ
ーバーのEDSプラグインに応答を配信します。次に、プラグインは外部データソースからのルールをリポジトリ
固有のルールとマージし、結果をフロントエンドに表示します。
新しいEDSの実装は、次の手順で要約できます。
1. doGet()およびdoPost()リクエストの実装を含むWebアプリケーションを作成し、Webアプリケーシ
ョンをデプロイします。
2. IBM Content Navigatorに付属のEDSプラグインをデプロイし、ステップ1で作成およびデプロイされたWe
bアプリケーションURLを使用するようにプラグインを構成します。
1.4.3プラグインAPI
IBM Content Navigatorプラグインは、特定のビジネスニーズを満たすために製品を拡張するための広範な機能を
提供する強力なメカニズムです。プラグインを使用すると、IBM Content Navigatorユーザー・インターフェース
に機能を直接追加したり、ビジネス・ニーズに合わせてユーザー・インターフェースを完全にカスタマイズした
りできます。
プラグインを実装するには、プラグインによって提供される機能、およびその機能を基本製品と統合する方法
に関する情報をIBM Content Navigatorに提供する一連の抽象Javaクラスを実装する必要があります。さらに、
プラグインに含まれる拡張ポイントのタイプによっては、JavaScriptクラスの実装が必要になる場合があります
。
第1章拡張ポイントとカスタマイズオプション 27日
図1-5および図1-6は、プラグイン拡張ポイントクラスとそれらの間の依存関係を示しています。図の青いリン
クは、実際のオブジェクト参照ではなく、オブジェクトの識別子またはファイル名で指定された間接的な依存
関係を表しています。
図1-5 IBM Content Navigatorプラグイン拡張ポイント(1/2)
28 IBM Content Navigatorのカスタマイズと拡張
図1-6 IBM Content Navigatorプラグイン拡張ポイント(パート2/2)
プラグインクラス
プラグインは、抽象Pluginクラスの実装を提供する必要があります。これには、プラグインの名前、ID、バージ
ョン、およびこのプラグイン内に実装されている拡張ポイントに関するIBM Content Navigatorプラグインコンテ
ナーの基本情報が含まれています。Pluginクラスのオーバーライドメソッドは、プラグインによって使用される
追加のリソースを指定できます。これらのリソースは次のとおりです。
dijitクラスの構成
スクリプトファイルとスクリプトファイルのデバッグバージョン
カスケードスタイルシート(CSS)ファイルとCSSファイルのデバッグバージョン
第1章拡張ポイントとカスタマイズオプション 29日
注意: プラグインが使用するすべてのリソースは、 Webコンテンツ プラグインクラスのJavaパッケージフォル
ダに作成されたサブフォルダ。83ページの図3-5を参照してください。
の Webコンテンツ folderは、リソースおよびDojoパッケージのルートフォルダーを表します。リソースファ
イルまたはウィジェットへの参照は、 Webコンテンツ フォルダ。
重要: getDojoModule()メソッドを実装して、相対パス名でdojo.requireを使用できるようにする必要が
あります。 Webコンテンツ フォルダ。
図1-7は、プラグインクラスによって直接定義されたプラグインとそのリソースを示しています。
図1-7カスタムプラグインクラスのクラス図
構成dijitクラスは、プラグインがコーディングを行わずに管理デスクトップからプラグインを構成する機能を必要
とする場合に指定されます(たとえば、特定の環境のプラグインサービスで使用される外部システムのサーバー
ホスト名を構成するため) )。指定されたdijitクラスは拡張する必要があります
ecm / widget / admin / PluginConfigurationPane ユーザーを定義できるdijit
30 IBM Content Navigatorのカスタマイズと拡張
構成パラメーターのインターフェース。configurationString属性を指定してdijitでonSaveNeeded(true)メソッド
を呼び出すと、フレームワークが保存プロセスを自動的に管理します。保存された構成値でユーザーインターフ
ェイスを初期化するには、 負荷 メソッドとconfigurationStringから構成値を抽出するコードを提供します。構成パ
ラメーターの複雑なセットの場合は、configurationStringのパラメーターと値をJSON形式にエンコードできます
。
プラグインで使用されるカスタムウィジェットをインスタンス化するなど、IBM Content Navigatorの初期化中にプラグ
インがJavaScriptコードを実行する必要がある場合は、スクリプトファイルまたはデバッグスクリプトファイルが必要
です。このスクリプトは、OpenActionsプラグインで使用されるグローバル関数の定義にも必要です。スクリプトは、
アプリケーションの初期化中に実行されます。 Desktop.loadDesktop 呼び出し前にonDesktopLoadedイベントが呼び出
されます。デバッグスクリプトファイルが指定されていない場合、IBM Content Navigatorは、デバッグモードで実行す
るときにスクリプトファイルを使用します。
カスケードスタイルシート(CSS)ファイルは、HTML要素をレンダリングするためのルールを定義します。ウ
ィジェットで使用されるカスタムルールを定義できます。IBM Content Navigatorの既存のルールをオーバーライ
ドすることもできますが、Content NavigatorルールはAPIとして公開されておらず、リリースごとに変更される可
能性があるため、お勧めしません。ただし、HTML要素のスタイルが計算されるときに、最後に定義されたプラグ
インのCSSファイルが最も優先されます。
注意: CSSは非同期で読み込まれ、Dojoがレイアウトの初期化とサイズ変更を行った後に読み込まれる場合があります
。つまり、提供されたCSSは、レイアウトに影響を与える可能性のあるルール(幅、高さ、可視性など)を追加しない
でください。これらのルールは初期レイアウトでは考慮されない場合があるためです。
新しいプラグインの実装は、次の手順で要約できます。
1. com.ibm.ecm.extension.Pluginクラスを拡張する新しいJavaクラスを作成します。
2.オプションで、プラグインの構成オプションを追加します。
a。少なくとも次のdijitを拡張する新しいdijitを作成します。
ecm.widget.admin.PluginConfigurationPane
b。PlugConfiguration JavaクラスにgetConfigurationDijitClass()メソッドを実装して、構成dijitの名前
を返します。
c。プラグインJavaクラスにgetDojoModule()メソッドを実装して、数字のパッケージを返します。
第1章拡張ポイントとカスタマイズオプション 31
3.オプション:カスタムウィジェットとJavaScriptを追加します。
a。必要なすべての要素(テンプレートファイルやJavaScriptファイルなど)を含む新しいウィジェットを作成します。
b。プラグインで新しいウィジェットをインスタンス化するJavaScriptファイルを作成します。
c。プラグインJavaクラスにgetScript()メソッドを実装して、前のステップのJavaScriptファイルの名
前を返します。
d。Plugin JavaクラスにgetDojoModule()メソッドを実装して、ウィジェットのパッケージを返します。
4.オプション:カスタムCSSファイルを追加します。
a。新しいCSSファイルを作成します。
b。CSSファイルの名前を返すには、プラグインJavaクラスにgetCSSFileName()メソッドを実装し
ます。
アクション
メニュー・アクションは、新しいコンテキスト・メニュー項目またはツールバー・メニュー項目を挿入するメカニ
ズムを提供することにより、現在のIBM Content Navigator機能を拡張します。アクションは、既存のメニューに追
加することも、新しいメニューに追加することもできます。アクションを実装すると、新しいアクションによって
提供される機能も実装されます。これは通常、新しいサービスを追加することによって行われます。アクションの
例は、ドキュメントまたはフォルダーの非表示属性を更新することです。ContentListメニューなどの既存のIBM C
ontent Navigatorメニューのいずれかを介してユーザーが新しいアクションを使用できる場合、このメニューをコピ
ーして、IBM Content Navigator管理コンソールの新しいアクションで更新する必要があります。
アクションを定義するときは、以下の特性を含む、アクションに関するいくつかの特性を定義します。
アクションがツールバーまたはメニューで使用可能かどうかアクションがグローバルであるかどうか(バナ
ーのすぐ下に表示されます)このアクションを呼び出すためにユーザーが持つ必要のあるアイテムの権限複
数のアイテムが選択されている場合にアクションを呼び出すことができるかどうかアクションが適用される
リポジトリのタイプアクションを呼び出すことができるコンテンツリスト内のクラスまたはアイテム
アクションは、アクションパラメータを定義するJavaクラスと、アクションを実装するJavaScriptモデルク
ラスで構成されます。
32 IBM Content Navigatorのカスタマイズと拡張
図1-8は、アクションに関与する必要があるコンポーネントの概要を示しています。
図1-8アクションのクラス図
JavaクラスはPluginActionクラスを拡張し、新しいアクションの名前や特権などの基本的なパラメーターを提供
します。JavaScriptモデルクラスは、Javaクラスを補足し、アクションの動作を実装します。モデルクラスのisE
nabled関数をオーバーライドして、カスタム条件を満たす特定のクラスまたはアイテムのアクションを非表示に
することができます。
新しいアクションの実装は、次の手順で要約できます。
1.新しいJavaクラスを作成して、 com.ibm.ecm.extension.PluginAction
クラス、および新しいアクションの詳細を提供します。
2.を拡張する新しいDojoクラスを作成します ecm.model.Action クラスと
performAction関数をオーバーライドします。
3. Action JavaクラスにgetActionModelClass()メソッドを実装して、前のステップで作成したDojoクラスの名前
を返します。または、で定義されたグローバル関数の名前を返すgetActionFunction()を実装できます。 plugin.js
ファイルですが、getActionModelClassをお勧めします。
4. PlugAction JavaクラスにgetActions()およびgetDojoModule()メソッドを実装します。
第1章拡張ポイントとカスタマイズオプション 33
注意: getActionFunction()がnullを返さないことを確認してください。ActionModel JavaScriptクラスのperformAc
tionをオーバーライドする場合は、少なくとも空の文字列を返す必要があります。そうしないと、プラグインは正し
くロードされますが、アクションをメニューに追加することはできません(コンテンツナビゲーターは、使用可能な
アクションのリストにアクションを表示しません)。
OpenAction
OpenActionは、たとえばツリーまたはコンテンツリストのアイテムをダブルクリックして、ドキュメントまたは
フォルダーを開くための組み込みアクションです。PluginOpenAction抽象クラスを拡張することにより、既存の
OpenActionの動作を変更できます。特定のMIMEタイプに定義されたビューアを開く代わりに、たとえば、最初
にこのコンテンツにアクセスするための契約条件に同意するように求めるダイアログを開き、次にビューアを開
くことができます。
OpenActionを定義するときは、指定した関数が呼び出されるMIMEタイプとサーバータイプを定義する必要があ
ります。
図1-9は、OpenActionが関与する必要があるコンポーネントの概要を示しています。
図1-9 OpenActionのクラス図
NewOpenActionはPluginOpenActionクラスを拡張し、サポートされているMIMEタイプとサーバータイプに関す
る情報を提供します。getOpenActionFunctionメソッドで指定されたJavaScript関数はグローバルに定義する必
要があるため、プラグインのJavaScriptファイルに実装する必要があります。
34 IBM Content Navigatorのカスタマイズと拡張
新しいOpenActionの実装は、次の手順で要約できます。
1.を拡張する新しいJavaクラスを作成します
com.ibm.ecm.extension.PluginOpenAction クラス、および新しいアクションの詳細を提供します。
2.プラグインのスクリプトファイルでOpenActionの独自のロジックを使用してグローバルJavaScript関数を定義およ
び実装します。
3. PlugOpen JavaクラスにgetOpenActions()メソッドを実装します。
注意: 指定されたコンテンツタイプのビューア定義は、OpenActionよりも優先されます。したがって、O
penActionを機能させるには、指定したコンテンツタイプをデスクトップのビューアーマップ定義から削
除する必要があります。
メニューとMenuType
IBM Content Navigatorには、ユーザー・インターフェースのさまざまなウィジェットに関連付けられたメニューがあります
。管理者は、管理デスクトップを使用してメニューを変更し、アクションを追加したり、これらのメニューからアクション
を削除したりできます。このタスクを実行するには、特定のメニュータイプのデフォルトメニューをコピーし、コピーした
メニューを変更して、変更したメニューを、そのメニュータイプを使用するユーザーインターフェイスのウィジェットに関
連付けます。
プラグインでは、これらのメニュータイプ用に作成されたメニューに関連付けることができる新しいメニュータ
イプと新しいアクションを定義することにより、この概念をさらに進めることができます。これらの新しいメニ
ュータイプは、カスタムウィジェットで使用して、必要な機能を提供できます。ウィジェットにMenuTypeを実
装する必要はありませんが、それを実装すると、管理者はメニューをカスタマイズできます。メニュータイプに
関連付けられた複数のメニューを作成し、現在のユーザーまたはウィジェットに現在関連付けられているオブジ
ェクトのタイプに基づいて、特定のメニューをウィジェットに割り当てることができます。
新しいメニューを定義するときは、アイテムとメニューについて決定します。
メニューにはどのアイテム(アクション)を含める必要がありますか?メニューはコ
ンテキストメニューですか、それともツールバーですか?
メニューは通常、メニューのプロパティ、含めるアクション、およびメニューのタイプを定義するJavaクラスで
構成されます。メニューのメニュー項目は、32ページの「アクション」で説明されているように定義されている
アクションです。メニューは、以下を使用してカスタムウィジェットで使用できます。 ecm.widget.ActionMenu
ウィジェット。使用 desktop.loadMenuActions メニューのアクションをロードする関数。
第1章拡張ポイントとカスタマイズオプション 35
図1-10は、メニューとメニュータイプに含まれるコンポーネントの概要を示しています。
図1-10メニューとメニュータイプのクラス図
メニューは、いくつかのクラスで定義する必要があるさまざまなプロパティで構成されています。1つ目は、メニ
ューがコンテキストメニューかツールバーメニューかを定義するためにPluginMenuTypeクラスを拡張するクラス
です。MenuType IDによって参照されるメニューのタイプは、PluginMenuクラスを拡張する新しいMenuクラス
に割り当てられます。新しいMenuクラスには、メニューにリストされているメニュー項目のリストを含めること
もできます。メニュー項目は通常、メニューに表示されるアクションです。PluginMenuItemクラスは、拡張する
必要なく、直接インスタンス化できます。PluginMenuItemクラスのインスタンスを作成するときに、アクション
のIDを指定する必要があります。
36 IBM Content Navigatorのカスタマイズと拡張
新しいメニューの実装は、次の手順で要約できます。
1.を拡張する新しいJavaクラスを作成します
com.ibm.ecm.extension.PluginMenuType クラス、およびメニュータイプの詳細を提供します(たとえば、ツール
バーメニューまたはコンテキストメニューの場合)。
2.新しいJavaクラスを作成して、 com.ibm.ecm.extension.PluginMenu
クラス。クラスについて、メニューの詳細を提供し(例えば、ステップ1で作成されたメニュータイプを参
照)、新しいメニューのメニュー項目を定義します(例えば、以前に作成されたアクションのIDまたはIBM
Content Navigatorの既存のアクション) 。
3. PlugMenu JavaクラスにgetMenus()およびgetMenuTypes()メソッドを実装します。
特徴
IBM Content Navigatorには、デスクトップで使用可能な機能を表示する機能ペインがあります。たとえば、基本
機能ペインには、お気に入り、参照、検索、作業、およびチームスペースが含まれます。管理者デスクトップに
管理者機能が追加され、ユーザーが機能のどの部分を使用できるようにするかを決定できます。「機能」ペイン
から機能を選択すると、関連するビューがクライアントに表示されます。
プラグインを作成して、カスタム機能をクライアントに追加できます。この機能により、特定のビジネスプロセ
スに使用できるメニューとアクションが関連付けられたカスタムビューを提供できます。たとえば、ポリシーア
プリケーションの現在の状態に関する情報を表示するダッシュボード機能を作成できます。この機能は、受信、
処理、および承認されたアプリケーションの数を表示するカスタムウィジェットを表示します。また、スナップ
ショットの作成や特定のユーザーへの送信などのカスタムアクションを提供する場合もあります。新しい機能コ
ンポーネントは、IBM Content Navigatorの管理デスクトップを介して特定のデスクトップに割り当てることがで
きます。
新しい機能コンポーネントの場合、アイコンとウィジェットについて決定できます。
機能を表すアイコンはどれですか?新しい機能を選択した場合、どのウィジェットを表
示する必要がありますか?
第1章拡張ポイントとカスタマイズオプション 37
図1-11は、機能のコンポーネントを示しています。
図1-11機能のクラス図
新しい機能を作成するには、PluginFeatureクラスを拡張し、機能ペインに表示されるアイコンを定義します。ま
た、機能が選択されたときに表示されるウィジェットを指定するコンテンツクラスを定義します。これらのメソ
ッドの1つだけが実装されている場合、新しい機能は表示されません。アイコンは32 x 32ピクセルの画像である
必要があります。getContentClass()メソッドで返される必要があるウィジェットは、_LaunchBarPane桁レイ
アウトを拡張する必要があります。
「機能」ペインで新しい機能を表すアイコンを定義するには、getIconURL()メソッドがプラグインのCSSファイルで
定義されたCSSクラス名を返す必要があります。詳細については、32ページのステップ4を参照してください。
新しい機能の実装は、次の手順で要約できます。
1. Webクライアントの機能を表す新しいアイコンを作成します。アイコンを指すbackground-imageルールを使
用して、CSSファイルに新しいCSSクラスを定義します。
2.拡張する新しいウィジェットを作成する ecm.widget.layout._LaunchBarPane クラス
機能のコンテンツペインを提供します。
38 IBM Content Navigatorのカスタマイズと拡張
3.アブストラクトを拡張して、新しい機能Javaクラスを作成します。
com.ibm.ecm.extension.PluginFeature 次に、getIconURLメソッドでアイコンCSSクラス名を定義し、前の手
順で作成したgetContentClassメソッドでコンテンツクラスウィジェットの名前を定義します。
4. CSSプラグインファイルを拡張して、アイコンファイルへのパスを定義します。
5.プラグインJavaクラスにgetDojoModule()メソッドとgetFeatures()メソッドを実装します。
プラグインサービス
一部のプラグインは、特定のタスクのみを実行するためにカスタマイズされたユーザーインターフェイスを提供します。
ただし、ほとんどのプラグインは、IBM Content Navigatorの機能を拡張する新しい機能を追加し、サーバーで実行する必
要があります。IBM Content Navigatorは、プラグインアーキテクチャ内に新しいサービスを実装する機能を提供します。
これらの新しいサービスは、カスタムアクションまたはウィジェットから呼び出すことができます。
JavaScriptコードからサービスを呼び出すには、次の関数を使用できます。
ecm.model.Request.invokePluginService()
プラグインのIDとサービスのIDを指定する必要があります。オプションで、サービスのリクエストパラメータと
、リクエストが完了または失敗したときのコールバック関数を提供できます。特殊なケースでは、URLでサービ
スにアクセスする必要がある場合があります。例1-1に示すようにURLを作成できますが、次を呼び出してセキュ
リティトークンを追加する必要があります。
Request.appendSecurityToken(url) 方法。
例1-1プラグインサービスにアクセスするためのURLパターン
http:// < server>:<port> / <context_root> / plugin.do?plugin= < plugin_id>& 動作= < service_id>&<custom_service_parameters>
サービスはデフォルトで保護されており、認証されていないユーザーが呼び出すことはできません。たとえば、ユーザーのセッ
ションの有効期限が切れた場合や、ユーザーがログインする前にプラグインのJavaScriptファイルで呼び出す場合などです。isS
ecureServiceメソッドをオーバーライドしてfalseを返すことにより、ユーザーがログインする前にサービスの実行を許可できま
す。
第1章拡張ポイントとカスタマイズオプション 39
図1-12は、通常使用されるサービスのコンポーネントを示しています。
図1-12サービスのクラス図
NewServiceクラスは、抽象PluginServiceクラスを拡張し、新しいサービスの基本的なメソッドと動作を実装しま
す。executeメソッドには、サービスのビジネスロジックが含まれています。このメソッドは、HTTPリクエスト
およびレスポンスオブジェクトとともにメソッドのパラメーターに含まれるPluginServiceCallbackクラスによっ
てサポートされます。PluginServiceCallbackは、基になるリポジトリへの接続、構成データベースへのアクセス
、およびさまざまなリポジトリからアイテムを取得するための一連のメソッドを提供します。
注意: getOverridenService()メソッドは使用されなくなりました。既存のサービスを上書きするには、
クライアントに応答を返すRequestFilterを使用します。
新しいプラグインサービスの実装は、次の手順で要約できます。
1. PluginServiceクラスを拡張する新しいクラスを作成し、execute()メソッドを実装してサービスの動作を定
義します。
2. Plugin JavaクラスにgetServices()メソッドを実装します。
3.オプション:サービスがカスタムアクションを介してアクティブ化されている場合は、新しいアクション
を作成し、 Request.invokePluginService() JavaScript ActionModelクラスのperformAction関数内。
40 IBM Content Navigatorのカスタマイズと拡張
閲覧者
IBM Content Navigatorは、新しいビューアーを定義するためのインターフェースを提供します。これは、特定のドキュメントタイプ(ド
キュメントのMIMEタイプによって異なります)およびリポジトリーに対して有効にすることができます。このインターフェースは、よく
知られているビューアーを使用してIBM Content Navigatorをカスタマイズする簡単な方法を提供します。
ビューアを定義するときは、以下の特性を含む、ビューアに関するいくつかの特性を定義します。
デフォルトのビューアウィジェットを使用するか、カスタムビューアウィジェットを使用するか。ビ
ューアを別のウィンドウで開くかどうか。サポートされるリポジトリは何ですか。サポートされてい
るコンテンツタイプは何ですか。
デフォルトのビューアウィジェットの選択( ecm.widget.viewer.IframeDocViewer)
では、getLaunchURLPattern()メソッドを実装して、iFrameのURLを指定する必要があります。返されるURL
は、標準のIframeDocViewerウィジェットのiFrameに埋め込まれたHTMLドキュメントのアドレスを指定します。
URLは、iFrameのコンテンツを取得するために外部システムを指すことも、ユーザーにレンダリングするコンテ
ンツを返すプラグインのサービスを指すこともできます。
より柔軟なアプローチは、カスタムビューアーウィジェットを実装してオーバーライドすることです
getViewerClass() 方法。指定されたビューアウィジェットクラスは、
DocViewer クラスとオーバーライド showItem() 関数。通常、ビューアウィジェットはカスタムサービスを使用
して、ユーザーに表示するドキュメントのコンテンツまたはその他のドキュメント関連情報を取得します。
42ページの図1-13は、新しいビューアを定義するために通常実装されるコンポーネントを示しています。
第1章拡張ポイントとカスタマイズオプション 41
図1-13ビューアのクラス図
新しいビューアを含むプラグインは、PluginViewerDefを拡張してビューアのID、名前、サポートされるコンテン
ツとサーバータイプを定義するクラスで構成されます。さらに、カスタムビューアーウィジェット実装のgetVie
werClass()メソッドをオーバーライドするか、デフォルトのIframeDocViewerを使用する場合はgetLaunchUrlP
attern()メソッドを実装する必要があります。getLaunchUrlPattern()から返された文字列は、実行時にJava
Script式として評価され、式で次の変数を使用できます。
servicesUrl:IBM Content NavigatorへのURL docId:文書のID
docName:ドキュメントの名前。名前はユーザーインターフェースに表示できます
mimeType:ドキュメントのMIMEコンテンツタイプserverType:コンテンツリポ
ジトリタイプ(cm、od、p8、cmis)docUrl:ドキュメントコンテンツをロードす
るURL privs:ドキュメントに対する権限の文字列
42 IBM Content Navigatorのカスタマイズと拡張
FileNetリポジトリーでは、以下の変数も使用できます。
vsId:IBM FileNet P8ドキュメントの場合replicationGroup:IBM FileN
et P8ドキュメントの場合objectStoreName:IBM FileNet P8ドキュメン
トの場合
または、ドキュメントのContentItemクラスのインスタンスであるオブジェクト「item」全体を使用できますが
、次のリリースで変更される可能性があります。
例1-2は、このメソッドの戻り値を示しています。
例1-2 getLaunchURLメソッドのサンプル実装
"'http:// localhost / convertDocument?documentId =' + docId + '&docUrl ='を返す
+ encodeURIComponent(docUrl)+ '&contentType =' + mimeType + '&targetContentTyp e = application / pdf' +
privs " ; または
「servicesUrl + '/ plugin.do?plugin=NewPlugin&action=NewService&docu mentId =' + docId + '&docUrl =' + enc
odeURIComponent(docUrl)+ '&contentType =' + mi meType + '&targetContentType = application / pdf' + priv
s "を返す ;
新しいビューアの実装は、次の手順で要約できます。
1. PluginViewerDefクラスを拡張する新しいクラスを作成し、getLauchURLPattern()メソッドまたはgetView
erClass()を実装します。
2.カスタムビューアウィジェットが使用されている場合は、次の手順を実行します。
a。拡張する新しいウィジェットを作成する ecm.widget.viewer.DocViewer クラスに
ドキュメントのコンテンツをレンダリングします。
b。PlugView JavaクラスにgetViewers()およびgetDojoModule()メソッドを実装します。
3.デフォルトのIframeDocViewerウィジェットが使用されている場合は、次の手順を実行します。
a。PlugView JavaクラスにgetViewers()メソッドを実装します。
b。提供されたURLがクライアントからアクセス可能であることを確認してください。
4. IBM Content NavigatorのPluginクラスを拡張する新しいPluginクラスを作成し、ステップ1で作成された新しい
ViewerDefクラスと、ステップ2で作成された新しいPluginServiceをインスタンス化します。ビューアでは、
Pluginクラスで新しいアクションも定義します。
第1章拡張ポイントとカスタマイズオプション 43
レイアウト
ウィジェットは個別のユーザー・インターフェース・コンポーネントを提供しますが、カスタム・ウィジェットがIBM Con
tent Navigatorデスクトップで完全なユーザー・インターフェースを提供する場合は、レイアウトを作成します。レイアウト
を作成するときに、メインのユーザー・インターフェースを提供するウィジェットを指定します。ここで、IBM Content Na
vigatorの機能およびその他のユーザー・インターフェース・コンポーネントを異なる配置で表示できます。また、ウィジェ
ットを指し、新しいレイアウトの名前を定義するPluginLayoutクラスを提供します。図1-14は、レイアウトのコンポーネント
を示しています。
図1-14レイアウトのクラス図
新しいレイアウトのコアコンポーネントはJavaScriptファイルで、新しいレイアウトのユーザーインターフェイスを定義し
ます。それは拡張する必要があります ecm.widget.layout.BaseLayout
クラスまたはそのサブクラスの1つ ecm.widget.layout.MainLayout または
ecm.widget.layout.NavigatorMainLayout。 BaseLayoutクラスは、サブクラスに次の機能を提供します。
デモモードとデバッグモードを有効にする機能処理とエラーダ
イアログのセットアップログインとログアウトの処理セッショ
ンタイムアウトの処理
44 IBM Content Navigatorのカスタマイズと拡張
MainLayoutクラスは、バナー、メッセージバー、グローバルツールバー、および左側の機能リストと機能のコン
テンツのLaunchBarContentAreaを含むLaunchBarContainerを含むビジュアルパーツを追加します。
NavigatorMainLayoutクラスは、IBM Content Navigatorに固有の追加の対話を提供し、参照機能と検索機能の間で
リポジトリー同期を実行します。
新しいレイアウトの実装は、次の手順で要約できます。
1. ecm.widget.layout.BaseLayoutまたはそのサブクラスの1つを拡張する新しいウィジェットを作成します。
2. PluginLayoutクラスを拡張するJavaクラスを作成し、getLayoutClass()メソッドを実装して、手順1で作成
したウィジェットクラスの名前を返します。
3.プラグインJavaクラスにgetLayouts()メソッドとgetDojoModule()メソッドを実装します。
応答フィルターと要求フィルター
サービス呼び出しを実行すると、要求がサービスに送信され、応答がサービスからクライアント層に送り返され
ます。これらの応答と要求はJSON形式です。一般に、IBM Content Navigatorフレームワークは、サービス呼び
出しとフレームワークによって定義される標準のJSON形式で要求と応答を作成します。
場合によっては、要求と応答を変更して、サービスに送信またはサービスから返されるデータを変更することが
できます。たとえば、リクエストに含まれているドキュメントを確認し、外部情報に基づいて追加レベルのセキ
ュリティチェックを実行することができます。応答については、サービスが特定の要求を実行できない場合に、
追加のエラー処理コードを実装することができます。特別なDojoクラスを使用してJSON出力を変更することによ
り、結果セットの専用列に特別なフォーマットを定義することもできます。要求または応答フィルターは、クラ
イアントとサービスの間にあり、必要に応じて応答と要求を変更します。フィルターは常に、IBM Content Navi
gator内の1つのサービスまたはサービスのリストに割り当てられます。
提供されるサービスは、 struts-config.xml 次のディレクトリにあるファイル:
< WAS_InstallPath> / プロファイル/ < nameOfProfile> / installedApps / < nameOfCell> / n avigator.ear /
navigator.war / WEB-INF
第1章拡張ポイントとカスタマイズオプション 45
の<action-mappings>セクション struts-config.xml ファイルでは、フィルタリング可能なアクションのリストが定
義されています。getFilteredServices()メソッドによって返される必要があるアクションの名前は、<action p
ath>タグです。
図1-15は、要求フィルタープラグインと応答フィルタープラグインを作成するために必要なコンポーネントを示しています
。
図1-15 RequestFilterとResponseFilterのクラス図
PluginRequestFilterクラスを拡張し、以下のメソッドを実装することにより、新しい要求フィルターが作成さ
れます。
フィルターをいつ適用するかを定義するgetFilteredServices()メソッドフィルターの動作を定義するfilter
()メソッド
応答フィルターは、要求フィルター定義に似ています。違いは、PluginRequestFilterクラスを拡張する代わり
に、PluginResponseFilterクラスを拡張し、Pluginクラス内でインスタンス化する必要があることです。
重要: クライアントとサーバー間で交換されるJSONメッセージの形式は、リリースごとに変更される可能性
があります。新しいバージョンのIBM Content Navigatorがリリースされた場合は、要求および応答フィルタ
ーのコードを更新する必要がある場合があります。
46 IBM Content Navigatorのカスタマイズと拡張
新しい要求と応答フィルターの実装は、次の手順で要約できます。
1. PluginRequestFilterまたはPluginResponseFilterクラスを拡張して要求および応答フィルターを定義し、getFil
teredServices()およびfilter()メソッドを実装します。
2. PlugRein JavaクラスにgetResponseFilter()またはgetRequestFilter()メソッドを実装します。
1.4.4 Content Navigator JavaScript API
Content Navigator JavaScript APIは、JavaScriptモデリングライブラリとJavaScriptウィジェットライブラ
リで提供されます。
JavaScriptモデリングライブラリ
モデリング・ライブラリーのクラスは、IBM Content Navigatorのビジネス・ロジックとデータを提供します。こ
れらのクラスは、コンテンツ・サーバーおよびIBM Content Navigator構成内のデータにアクセスして表すために
ウィジェットによって使用されます。48ページの図1-16は、モデリングライブラリのプライマリクラスの階層を
示しています。
第1章拡張ポイントとカスタマイズオプション 47
図1-16 JavaScriptモデル図
この図に示すように、Desktopクラスのインスタンスは、モデル内の他のオブジェクトを包含しています。デ
スクトップオブジェクトは、一連のユーザーがアクセスできるリポジトリ、機能、アクション、およびビュー
アを指定します。
Repositoryクラスのインスタンスは、特定のリポジトリを表します。リポジトリーは、IBM Content Manager、IBM
Content Manager OnDemandサーバー、IBM FileNet Content Engineオブジェクト・ストア、またはCMISリポジト
リーにすることができます。
リポジトリオブジェクトを使用すると、ユーザーはリポジトリオブジェクトにアクセスしてアクションを実行できます。これらの
オブジェクトは、モデリングライブラリのクラスによっても表されます。
48 IBM Content Navigatorのカスタマイズと拡張
SearchTemplateクラス
このクラスは、リポジトリーに保管されている検索を表します。IBM Content ManagerまたはIBM FileNet P8リポ
ジトリーでは、SearchTemplateオブジェクトは保存された検索を表します。IBM Content Manager OnDemandリ
ポジトリーでは、SearchTemplateオブジェクトはフォルダーを表します。SearchTemplateオブジェクトを使用す
ると、ユーザーは検索の実行に使用される基準を入力または変更できます。基準は、モデルライブラリでSearch
Criterionクラスによって表されます。
EntryTemplateクラス
このクラスは、IBM FileNet P8リポジトリーに保管されているエントリー・テンプレートを表します。EntryTemplateオブジェクト
を使用すると、ユーザーはドキュメント、フォルダー、またはカスタムオブジェクトを作成できます。EntryTemplateオブジェク
トは、宛先フォルダー、プロパティー、およびセキュリティーのデフォルト値も提供します。
ContentClassクラス
このクラスは、IBM FileNet P8リポジトリ内のドキュメントまたはフォルダークラス、またはIBM Content Mana
gerリポジトリ内のアイテムタイプを表します。ContentClassオブジェクトを使用すると、ユーザーはアイテムに
アクセスして、アイテムのプロパティと属性を編集できます。各プロパティまたは属性は、タイプや許可された
値など、プロパティまたは属性に関する情報を含むAttributeDefinitionクラスのインスタンスによって表されます
。
WorklistFolderクラス
この抽象クラスは、受信トレイまたは受信トレイと呼ばれることもある作業リストのコレクションを表します。
WorklistFolderクラスのサブクラスは、作業リストと受信トレイのタイプのコレクションを表します。たとえば、
ProcessApplicationSpaceクラスは、IBM FileNet P8プロセスアプリケーションにアクセスできるユーザーを決定
するプロセスロールのコレクションを表します。ProcessRoleクラスは、IBM FileNet P8サーバーで定義されてい
るロールを表します。このクラスのインスタンスは、アプリケーションスペースで定義されている受信トレイへ
のアクセス権を持つユーザーを決定します。
ワークリストクラス
このクラスは、単一の作業リストを表します。Worklistオブジェクトを使用すると、ユーザーは自分に割り当てられてい
る作業項目を処理できます。モデルには、IBM FileNet P8リポジトリーのProcessInBasketサブクラスが含まれています。
チームスペースクラス
このクラスはチームスペースを表します。Teamspaceオブジェクトは、チームがタスクを完了するために必要な
コンテンツを整理および共有する機能をユーザーに提供します。チームスペースに属する個々のユーザーとグル
ープは、モデルではUserクラスとUserGroupクラスによって表されます。
第1章拡張ポイントとカスタマイズオプション 49
TeamspaceTemplateクラス
このクラスはチームスペーステンプレートを表します。TeamspaceTemplateオブジェクトを使用すると、チームスペースを作成す
るための事前定義オプションを設定できます。
ResultSetクラス
このクラスは、検索によって返されるアイテムのセット、またはフォルダーやワークリストのコンテンツを表します。ResultSe
tオブジェクトを使用すると、ユーザーはドキュメント、フォルダ、または作業項目を見つけて選択できます。
ResultSetオブジェクトの個々のアイテムは、モデルではItemクラスまたはそのサブクラスの1つによって表され
ます。
ContentItemクラスは、リポジトリ内のドキュメント、フォルダ、またはその他のコンテンツアイテムを表します。
WorkItemクラスはワークフローアイテムを表します。
他のクラス
モデリングライブラリの他のクラスは、図に示されているクラスをサポートします(48ページの図1-16)。たと
えば、モデルには次のクラスが含まれています。
SearchTemplateFolderクラスとTeamspaceFolderクラスは、検索テンプレートとチームスペースのコレクシ
ョンを表します。これらの抽象クラスは、ユーザーインターフェースのナビゲーションツリーに表示される
最近のフォルダーやすべてのフォルダーなどのアイテムのコレクションを提供します。
IBM Content Manager OnDemandリポジトリーの場合、SearchTemplateFolderオブジェクトはキャビネットを表
します。
Requestクラスは、IBM Content Navigatorサービスに対して行われる要求を表します。
PropertyFormatterクラスは、プロパティが表示されるときにプロパティに適用されるフォーマットを表しま
す。このクラスを拡張またはオーバーライドして、特定のタイプのプロパティのカスタム書式を提供できま
す。_ModelStoreクラスとTreeModelのサフィックスが付いたクラスは、Dojoデータストアとツリーを表しま
す。これらのクラスをDojo dijitクラスと共に使用して、ウィジェットにデータを取り込むことができます。
50 IBM Content Navigatorのカスタマイズと拡張
JavaScriptウィジェットライブラリ
ウィジェットライブラリで定義されたクラスは、JavaScriptモデルから取得したデータをレンダリングするためのビジュ
アルコンポーネントを提供します。これらのクラスは、Dojo 1.8.4ライブラリーで定義されたdijit / _Widgetクラスを拡張
し、IBM Content Navigatorのユーザー・インターフェースを完全に構築します。
IBM Content Navigatorデスクトップをレンダリングする「ルート」ウィジェットは、DesktopPaneウィジェット
です。ただし、ページ上のウィジェットのレイアウトはNavigatorMainLayoutクラスによって定義され、利用可
能なすべての機能へのアクセスも提供します。52ページの図1-17は、ウィジェットライブラリの標準機能を定義
する主要コンポーネントの階層を示しています。
第1章拡張ポイントとカスタマイズオプション 51
図1-17 JavaScriptウィジェットライブラリの機能の階層図
52 IBM Content Navigatorのカスタマイズと拡張
NavigatorMainLayoutは、IBM Content Navigatorの最上位のレイアウトを定義します。バナー、メッセージボック
ス、グローバルツールバーに加えて、使用可能なすべての機能がレンダリングされるメインの作業領域(Launc
hBarContainer)も定義します。図1-18は、NavigatorMainLayoutクラスで定義された主要ウィジェットのレイア
ウトを示しています。
図1-18 NavigatorMainLayoutクラスのレイアウト
便宜上、このセクションには関連するウィジェット(インフォメーションセンターに基づく)の概要を示し
ます。ウィジェットは機能ごとにグループ分けされています。
ウィジェットパッケージ(ecm.widget)
パッケージ内のクラスは、ドキュメント、フォルダー、作業項目などのリポジトリオブジェクトの作成と編集に使
用するウィジェットを定義します。このパッケージには、ボタン、メニュー、タブなどの一般的なユーザーインタ
ーフェイスコンポーネントを定義するクラスも含まれています。
第1章拡張ポイントとカスタマイズオプション 53
管理ウィジェットパッケージ(ecm.widget.admin)
パッケージ内のクラスは、IBM Content Navigator管理ツールを構成するウィジェットを定義します。これら
のウィジェットを使用して、管理ユーザーインターフェイスをカスタマイズできます。
コンテンツリストウィジェットパッケージ(ecm.widget.listView)
パッケージ内のクラスは、IBM Content Navigatorに表示されるコンテンツリストの作成に使用されるウィジェット、モジュ
ール、およびデコレーターを定義します。コンテンツリストは、リポジトリアイテム、お気に入り、作業アイテムなどのリ
ストを提供するために使用されます。ダイアログボックスウィジェットパッケージ(ecm.widget.dialog)
パッケージには、IBM Content Navigator Webクライアントで使用されるダイアログボックスを定義するクラスが含
まれています。レイアウトウィジェットパッケージ(ecm.widget.layout)
パッケージには、Webクライアントレイアウトのコンポーネントを定義するクラスが含まれています。
プロセスウィジェットパッケージ(ecm.widget.process)パッケージには、IBM FileNet P8ワークフ
ローのカスタム起動プロセッサとステッププロセッサを構築するために使用されるクラスが含まれて
います。検索ウィジェットパッケージ(ecm.widget.search)
パッケージ内のクラスは、ドキュメント、フォルダー、作業項目などのリポジトリオブジェクトの検索に使用するウ
ィジェットを定義します。チームスペースビルダーウィジェットパッケージ(ecm.widget.teamspaceBuilder)パッケ
ージには、チームスペースとチームスペーステンプレートを作成および編集するウィジェットが含まれています。IB
M Content Navigatorでは、これらのウィジェットはチームスペースビルダーに使用されます。
ビューアウィジェットパッケージ(ecm.widget.viewer)
パッケージには、ドキュメントのコンテンツを表示するために使用されるクラスが含まれています。
新しいカスタムビジュアルウィジェットをビジュアルレイヤーに作成できます。ウィジェットの作成は、IBM Con
tent Navigatorビジュアルウィジェットライブラリから既存のウィジェットを継承または上書きするか、まったく新
しいウィジェットを作成することによって実行できます。ウィジェットはコンテンツ(たとえば、ドキュメントと
統計のリスト)の視覚的表現にすぎないため、基礎となるモデリング層を使用すると、データにアクセスしてビジ
ネスロジックを実装するのに役立ちます。
54 IBM Content Navigatorのカスタマイズと拡張
1.5 IBM Content Navigatorのサンプル
IBM Content Navigatorソフトウェアパッケージには、カスタム開発の主な使用例をカバーするいくつかのサン
プルが含まれています。これらのサンプルは、カスタムアプリケーションを作成するためのベースとして使用
できます。
1.5.1サンプル外部データサービス
サンプルの外部データサービス(EDS)は、EDS RESTインターフェースを、アプリケーションサーバーにデプ
ロイ可能なJava Platform、Enterprise Editionアプリケーションとして実装します。ファイルシステムを外部ソー
スとして使用し、クラスまたはワークフローステップのファイルを作成できます。ここで、EDSインターフェイ
スから返されたJSON応答の「プロパティ」部分を指定できます。
サンプルEDSは、EDS JSON形式を次の機能で拡張します。
dependentOn属性とdependentValue属性を指定することによる、プロパティの依存選択リスト値
の定義
次の2種類のカスタム検証を指定できるvalidateAs属性:
–
NoThrees:ユーザーが入力した値に「3」文字が出現するかどうかの検証。
–
必須:ユーザーが入力した値に空の値がないか確認してください。ユーザーに通知することなく
、現在時刻が属性値として保存されることを指定するタイムスタンプ属性。
サンプルWebページは、次のディレクトリにあります。
ECMClient_installdir \ samples \ sampleEDSService
1.5.2サンプルWebページ
サンプルWebアプリケーションは、IBM Content Navigator Toolkitの使用法を示しています。これらのページは、IBM
Content Navigatorツールキットのさまざまな側面を示しています。サンプルは3つの部分に分かれており、それぞれが
カスタムユーザーインターフェイスを開発するための個別のアプローチを説明しています。
JavaScriptモデルクラスの操作方法。アプリケーションでスタンドアロンウィジェッ
トを使用する方法。ツールキットを使用して完全な新しいアプリケーションを構築す
る方法。
サンプルWebページは、次のディレクトリにあります。
ECMClient_installdir \ samples \ samplePages
第1章拡張ポイントとカスタマイズオプション 55
インクルードされたWARファイルをIBM Content Navigatorでアプリケーションサーバーにデプロイして、ファイル
を機能させます。
1.5.3サンプルプラグインアプリケーション
サンプルプラグインは、プラグイン作成者が利用できるいくつかの拡張機能を示すプラグインを実装しています
。このサンプル・アプリケーションのファイルは、IBM Content Navigatorプラグイン開発でさまざまな拡張ポイ
ントを実装する方法を示しています。これらのサンプルは、次のタスクを示しています。
カスタムファイルのアップロードにアクション処理を使用する方法。サンプルのこの機能には、クライアントからの
単一ファイルのアップロード制御、プラグインアクションでのアップロードされたドキュメントへのサーバーアクセ
ス、およびファイル操作用のサンプルサービスが含まれます。次のファイルを探します。
SamplePluginFileUploadAction.java
プロパティフォーマッタとプロパティエディタを変更する方法。これには、createdBy属性とmodifiedBy属性を電子メ
ールリンクとしてItemPropertiesDisplayPaneにレンダリングするサンプルフォーマッターが含まれています。また、
DocumentTitleテキストフィールドの横にボタンを追加し、DocumentTitle属性を読み取り専用にするサンプルプロパテ
ィエディターも含まれています。次のファイルを探します。
SamplePluginOpenClassResponseFilter.java
コンテンツリストウィジェットのプロパティデコレータを変更する方法。を探す
SamplePluginResponseFilter.java ファイル。カスタムビューアを作成する方法の
2つの選択肢:
–
–
URLパターンを使用する。を探す SamplePluginViewerDef.java ファイル。
カスタムビューアウィジェットを実装する。探す
SamplePluginImageViewerDef.java
プロパティエディターで使用されるアイテムプロパティペインを拡張して、カスタムセクションを追加する方法
。探す SampleItemPropertiesPaneExtension.js ファイル。カスタム検索の機能とサービスを作成する方法。これ
には、IBM FileNet P8およびIBM Content Managerリポジトリー用のカスタム検索照会およびサービスを入力す
るためのウィジェットが含まれています。を探す
SamplePluginFeature.java ファイル。
サンプルプラグインのファイルは、次のディレクトリにあります。
ECMClient_installdir \ samples \ samplePlugin
56 IBM Content Navigatorのカスタマイズと拡張
の SamplePlugin.jar IBM Content Navigator管理ツールを使用してデプロイできるファイルは、以下のデ
ィレクトリーにあります。
ECMClient_installdir \ ナビゲーター
1.5.4サンプルモバイルアプリケーション
このサンプルは、コンテンツ管理機能を必要とするスタンドアロンのモバイルアプリケーションを作成する方法
を示しています。これらのサンプルはIBM Worklight Studioを使用して開発され、サンプルのモバイルアプリケー
ションプロジェクトがその形式で提供されています。提供されている原則とコードは他の開発環境に適合させる
ことができ、適切に構成されたIBM Content Navigatorサーバーを除き、サーバー側の前提条件を必要としません
。サンプルモバイルアプリケーションは、次の機能をカバーしています。
リポジトリを参照します。探す。
お気に入りを操作します。
IBM Datacap Taskmaster Captureを使用します。ドキュメントをプレビ
ューします。
他のアプリケーションでドキュメントを開きます。ドキュメントをチェ
ックしてください。
「開く」機能を使用して、他のアプリケーションからドキュメントをチェックインします。ドキュメントのメタデータを編集し
ます。アプリケーションデータを保持します。
サンプルのWorklightプロジェクトは、 SampleMobileApp.zip 次のディレクトリにあるファイル:
ECMClient_installdir \ サンプル\
1.5.5モバイルプラグインのサンプル
IBM Content NavigatorのモバイルWebレイアウトを提供するこのサンプルにより、ユーザーはモバイルデバイスのW
ebブラウザーを使用してサーバーにアクセスできます。このサンプルは、モバイル・アプリケーションをインストー
ルせずに、IBM Content Navigatorサーバーへのモバイル・アクセスをサポートする方法を示しています。の
sampleMobilePlugin.jar ファイルは、IBM Content Navigatorにデプロイされ、デスクトップに適用される標準のI
BM Content Navigatorプラグインです。
サンプルレイアウトには次の機能が含まれています。
リポジトリを参照検索お気に
入りの操作ドキュメントのプ
レビュー
第1章拡張ポイントとカスタマイズオプション 57
他のアプリケーションでドキュメントを開く(開く)ドキュメントをチェックアウ
トするドキュメントのメタデータを編集するアプリケーションデータを保持する
サンプルプラグインJARファイルSampleMobilePlugin.jarは、次のディレクトリにあります。
ECMClient_installdir \ サンプル
IBM Content Navigatorで提供されるサンプルのリストについては、55ページの1.5、「IBM Content Navigatorサンプル」を参照してく
ださい。サンプルのリストについては、58ページの1.6、「この本のために開発したサンプル」を参照してください。
1.6この本のために開発したサンプル
この本ではいくつかの例が説明されており、IBM Content Navigatorが提供するさまざまな開発オプションと拡張
ポイントを使用しています。各章では、サンプルコードをいつどのように使用できるかについて説明します。次
のリストは、サンプルで使用されている拡張ポイントをまとめたものです。
123ページの第4章「基本的な拡張ポイントを使用したプラグインの開発」:
–
プラグイン/アクション:既存のAddContentItemDialogを拡張する新しい「フォルダーの作成」ダイアログを開き
、フォルダーの作成後にカスタムサービスを呼び出します。
–
プラグイン/サービス:テンプレート構成に基づいて、指定されたフォルダーのサブフォルダーを作成し
ます。
–
プラグイン/アクション:機能を開き、フォルダを事前選択します。
–
プラグイン/機能:標準のブラウズ機能を拡張します。173ページの第5章「カスタムリポジト
リ検索サービスの構築」:
–
プラグイン/機能:検索ボックスと標準のContentListウィジェットを表示し、SQLのようなクエリで
カスタムリポジトリ検索を可能にします。
–
–
プラグイン/サービス:リポジトリでクエリのようなSQLを実行します。
Plugin / RequestFilter:「/ p8 / continueQuery」リクエストを変更して、カスタム検索ContentListウィ
ジェットにページング機能を提供します。211ページの第6章、「検索サービスとウィジェットを使用した
機能の作成」:
–
プラグイン/機能:ツリーの数字とContentListウィジェットを使用して仮想フォルダー構造を表示します。
58 IBM Content Navigatorのカスタマイズと拡張
233ページの第7章「要求および応答フィルターと外部データサービスの実装」:
–
EDS:フォーマット、検証、choicelist値などのプロパティ構成をデータベースから読み取ります。
–
Plugin / ResponseFilter:「* / openContentClass」リクエストを変更して、IBM Content Navigat
orに表示される指定されたクラスのプロパティを並べ替えます。
–
Plugin / ResponseFilter:「* / openContentClass」リクエストで指定されたプロパティのカーディナリティ
を変更して、カスタムプロパティエディタに検索ダイアログを提供します。
–
プラグイン/ウィジェット:大きな選択リストでの検索を可能にするカスタムプロパティエディター。
277ページの第8章「カスタムステッププロセッサの作成」:
–
ステッププロセッサ:ドキュメントビューアーをワークフローステップのユーザーインターフェイスに埋め込みます。
–
プラグイン/アクション:ページで利用可能な場合、ドキュメントを「埋め込み」ビューアで開きます。
365ページの第10章「組み込みビューアのカスタマイズとサードパーティビューアの統合」:
–
Plugin / ViewerDef:プラグインサービスを使用してビューアを開きます。
–
プラグイン/サービス:プラグイン構成を保管およびロードし、ブラウザーをリダイレクトしてSnow
bound VirtualViewerを開きます。309ページの第9章「他のアプリケーションでのコンテンツナビゲータ
ーウィジェットの使用」:
–
–
プラグイン/レイアウト:ContentListウィジェットのみを表示します。
統合:IBM Content Navigatorをスタンドアロンアプリケーション、Microsoft SharePoint
、およびIBM WebSphere Portalに統合する方法を示します。
413ページの第11章「ソリューションをモバイルプラットフォームに拡張する」:
–
モバイル開発:ワークリスト機能をモバイルアプリケーションに追加する方法を示します。
437ページの第12章「Microsoft Lync Serverのプロファイルプラグインの拡張」:
–
Plugin / ResponseFilter: '* / search'および '* / openFolder'リクエストを変更して、特定の列にカスタム
デコレーターを提供します。
–
プラグイン/サービス:Microsoft Lync Serverへのリクエストのプロキシとして機能します。
第1章拡張ポイントとカスタマイズオプション 59
1.7まとめ
この章では、IBM Content Navigatorのアーキテクチャーと使用可能なプログラミングインターフェースにつ
いて説明します。また、IBM Content Navigatorが提供するすべての使用可能な構成および開発オプションの
概要も示します。
次の章では、58ページの1.6、「この本のために開発したサンプル」にまとめられているサンプルコードを使用
して、これらのオプションについて詳しく説明します。
60 IBM Content Navigatorのカスタマイズと拡張
2
第2章。
デスクトップのカスタマイズ
外観
IBM Content Navigator管理デスクトップは、ユーザー・インターフェースをカスタマイズする簡単な方法を提供
します。この章では、デスクトップの外観を変更することにより、IBM Content Navigatorユーザー・インターフ
ェースを構成する方法について説明します。ロゴ、色、アイコンを変更して、デスクトップを企業の標準に合わ
せる方法を示します。
この章では、次のトピックについて説明します。
デスクトップの外観のカスタマイズロゴとバナーの色
の追加ログインノートの追加パスワードルールの追加
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
61
2.1デスクトップの外観のカスタマイズ
IBM Content Navigatorの視覚的特性は、カスタマイズされたテーマを使用して表示されます。テーマは、フォン
トや色などの全体的な外観を決定します。テーマの変更は可能ですが、現時点ではIBM Content Navigatorでサポ
ートされているオプションではありません。テーマを変更せずにデスクトップに変更を加えることができます。
たとえば、次の変更を行うことができます。
ログインページとデスクトップのバナーの両方に会社のロゴを追加します。ログインページに便利なメモを追加しま
す。デスクトップバナーの色を変更します。デスクトップの機能を追加または削除します。ツールバーメニューとコ
ンテキストメニューの両方のメニューオプションを変更します。アイコンを変更します。
検索と参照に使用できるプロパティのリストを変更します。デスクトップで使用されている
ラベルを変更します。
次のセクションでは、ロゴの追加、バナーの変更、ログインノートとパスワードルールの追加により、デス
クトップの外観を変更する方法について説明します。
2.2ロゴとバナーの色を追加する
新しいロゴはURLで参照する必要があります。新しいWebアプリケーションを作成し、ロゴをWeb Contentフォルダーに追加
します。プラグイン用に別のWebアプリケーションをすでに作成している場合は、それを外部コンテンツに再利用します。
アプリケーションをデプロイし、IBM Content Navigatorがインストールされているすべてのサーバーで使用できることを確
認します。
IBM Content Navigatorで使用されるIBMバナーのロゴは、43 x 16(幅x高さ)ピクセルです。背景色やその他の
要素に応じて、バナーの幅はより大きな画像に対応できます。ロゴは200 x 150ピクセル以下にする必要があり、
透明な背景を使用することをお勧めします。
ログインロゴは、バナーロゴよりも大きくすることができます。このセクションで後ほど使用するログインロゴの例は、150
x 112ピクセルです。
ロゴやHTMLページなどの外部コンテンツを参照するためにURLを使用する場合、コンテンツがIBM Content Na
vigatorと同じWebサーバーにあるWebアプリケーションにある場合、相対パスを使用できます。この章の例は/を
参照しています customConfig。 高可用性構成でデプロイした場合は、IBM Content Navigatorのすべてのインスタ
ンスで使用できる完全修飾パスを使用してください。
62 IBM Content Navigatorのカスタマイズと拡張
たとえば、次のURLを使用します。
http:// < server_name> / customConfig
この例では、 ecmclient DNS解決可能な名前です。
http:// ecmclient / customConfig
以前に保存したデスクトップを編集するには、管理デスクトップまたはデスクトップの管理機能を使用します
。この例では、Data Managementという名前のデスクトップを編集します。
新しいログと外部コンテンツにアクセスするようにデスクトップを構成するには、以下の手順を実行します。
1.選択 デスクトップ。
2.利用可能なデスクトップのリストからデスクトップを選択します。ここでは、 データ
管理
3.クリック 編集する を選択します 外観 タブ。
デスクトップバナーで会社のロゴを使用するには、ロゴにアクセスするためのURLを入力します。
第2章デスクトップの外観のカスタマイズ 63
図2-1は、Data Managementデスクトップの設定例を示しています。
図2-1デスクトップの外観の構成
次の情報を入力します。
–
バナーロゴのURL。この例では、次のように入力します:/ customConfig /
tango1.png
–
ログインページのロゴのURL。この例では、次のように入力します:/ customConfig
/ tango3.png
–
バナーの背景色のカラーコード。この例では、次のように入力
します。 FF6600
4.デスクトップを保存します。
64 IBM Content Navigatorのカスタマイズと拡張
図2-2は、新しいデスクトップの外観の結果を示しています。
カラーコード: 色は、3文字または6文字の16進数コードで表す必要があります。
図2-2デスクトップの外観のテスト
2.3ログインメモの追加
ログインページにコンテンツを追加すると、ユーザーがIBM Content Navigatorにアクセスしたときに、最新の情
報やニュースをユーザーに伝達する方法が提供されます。この情報には、システムの使用に関するガイダンス、
稼働時間、およびヘルプデスクの連絡手順を含めることができます。さらに、ログインページでシステムメンテ
ナンスの計画的なダウンタイムをユーザーに通知できます。
ログインページのコンテンツを追加するには、ユーザーに表示する情報を含む新しいHTMLファイルを準備します。
IBM Content Navigatorがインストールされているすべてのシステムで使用可能なWebアプリケーションにファイルを
追加します。
ログインページにコンテンツを追加するには、管理デスクトップを使用して次の手順に従います。
1.選択 デスクトップ。
2.変更するデスクトップを選択します。この例では、 データ管理。
3.クリック 編集する を選択します 外観 タブ。
第2章デスクトップの外観のカスタマイズ 65
4.ログインコンテンツを含むHTMLページのURLを入力します。この例では、次のように入力
します:/ custom / Config / loginNotes.html
図2-3は、ログインページの設定を示しています。
図2-3ログインページコンテンツの設定
注意: ログインコンテンツに画像を使用する場合は、 src
<img>タグの属性は、次の例に示すように、画像ファイルの場所への完全修飾パスを使用します。
<img border = "0"
src = "http:// ecmclient:9080 / customConfig / tango3.png" width = "150" height = "112">。
5.構成を保存します。
66 IBM Content Navigatorのカスタマイズと拡張
図2-4は、追加のログインノートを含む、変更されたログインページの例を示しています。
図2-4ログインページでの追加コンテンツの表示
IBM Content Navigatorの外観の変更に関する追加情報については、IBM Content NavigatorのIBM Knowl
edge Centerを参照してください。
第2章デスクトップの外観のカスタマイズ 67
例2-1は、 loginNotes.html 変更したファイル。
例2-1変更したlloginNotes.htmlファイル
<!DOCTYPE HTML PUBLIC "-// W3C // DTD HTML 4.01 Transitional // EN"> <html> <head>
<title> loginNotes </ title>
<meta http-equiv = "Content-Type" content = "text / html; charset = ISO-8859-1">
</ head> <body>
<p> <div> <img border = "0"
src = "http:// localhost:9080 / customConfig / tango3.png" width = "150" height = "112"> <span> <h1>利用規約
</ h1> </ span> </ div> Tangoシステムは、保険会社の従業員が保険契約者に関連するデータを処理するために使
用されます。システムへのアクセスは、サードパーティの誰にも許可されていません。このようなアクセスはす
べて追跡および監査されます。
<p>このシステムは、ポリシーデータの保存、取得、処理に適しています。個人データは保存されません。
</ p> <p>システムは、月曜日から金曜日の07:30から19:00まで利用できます。</ p>
<p>通常の営業時間外にアクセスする必要がある場合は、ヘルプデスクに連絡してください。</ p> </ body>
</ html>
2.4パスワードルールの追加
IBM Content Navigatorを使用すると、ユーザーはパスワードを変更できます。各企業には、その時点で有効な独
自のパスワードルールがあります。ルール情報をユーザーに伝達するために、ユーザーが情報リンクをクリック
してパスワードのルールを読むことができるように、ユーザーインターフェースにパスワードルール情報ページ
を追加できます。
注意: IBM FileNet Content Managerなど、認証にLDAPを使用するように構成されているシステムでは、IBM
Content Navigatorを使用してパスワードを変更することはできません。
68 IBM Content Navigatorのカスタマイズと拡張
デスクトップからパスワードルール情報を含めるには、まず、パスワードルールを説明する情報を含むHTML
ファイルを作成します。次に、ファイルをWebアプリケーションに追加します。このセクションの例では、
passwordRules.html ファイル。
管理デスクトップから、次のようにパスワードルール情報をデスクトップに追加します。
1.選択 デスクトップ。
2.リストから適切なデスクトップを選択します。この例では、 データ管
理。
3.クリック 編集する を選択します 外観 タブ。
4. [パスワードルール]フィールドに外部コンテンツのURLを入力します。この例では、次のように入力します:
/ custom / Config / passwordRules.html。 図2-5を参照してください。
図2-5デスクトップパスワードルールの構成
5.構成を保存します。
第2章デスクトップの外観のカスタマイズ 69
例2-2は、 passwordRules.html ファイル。
例2-2 passwordRules.htmlファイルの内容
<!DOCTYPE HTML PUBLIC "-// W3C // DTD HTML 4.01 Transitional // EN"> <html> <head>
<title> passwordRules </ title>
<meta http-equiv = "Content-Type" content = "text / html; charset = ISO-8859-1">
</ head> <body> <p>
<div> <img border = "0"
src = "http:// ecmclient:9080 / customConfig / tango3.png" width = "150" height = "112"> <span> <h1>
パスワードルール</ h1> </ span> </ div>パスワードTangoシステムは次の規則に準拠している必要があ
ります:<p>最小長8文字</ p>
<p> 1桁以上の英大文字1文字以上を使用</ p> <p>パスワードは90日ごとに変更し、パスワードを再利用す
ることはできません。</ p> <p>サポートが必要な場合は、ヘルプデスク。</ p> </ body> </ html>
2.4.1パスワードルールのテスト
パスワードルールをテストするには、次の手順を実行します。
1.デスクトップ名のあるURLを使用して、IBM Content Navigatorを起動します。
http:// < server_name>:<port> / navigator /?desktop = DataManagement
この例では、次のURLを入力します。
http:// ecmclient:9080 / navigator /?desktop = DataManagement
2.ユーザー名の横にある下矢印をクリックしてアクセスするユーザーコマンドツールを使用し、 パスワード
を変更する。 71ページの図2-6を参照してください。
70 IBM Content Navigatorのカスタマイズと拡張
図2-6ユーザーコマンドツールの使用
[パスワードの変更]ダイアログが開きます(図2-7)。
図2-7パスワードの変更ダイアログ
3.を選択します パスワードルール ページを表示するためのリンク。
第2章デスクトップの外観のカスタマイズ 71
ページは図2-8の例のようになります。
図2-8パスワードルールの表示例
IBM Content Navigatorの外観の変更に関する追加情報については、IBM Knowledge Center for Content
Navigatorを参照してください。
2.5結論
この章では、コーディングなしで管理ツールを使用してデスクトップ構成を変更することにより、デスク
トップの外観を変更する方法を示します。
他のタイプの変更またはカスタマイズを行う場合は、3ページの第1章「拡張ポイントとカスタマイズオプショ
ン」で、利用可能なカスタマイズおよび拡張オプションを確認してください。次に、73ページの第3章「開発環
境の設定」に従って環境を設定し、変更を加える例については、本の他の章を参照してください。
72 IBM Content Navigatorのカスタマイズと拡張
3
第3章。
開発のセットアップ
環境
この章では、IBM Content Navigatorをカスタマイズおよび拡張するために、IBM Content Navigatorの開発環境を
セットアップする方法について説明します。Eclipseウィザードを使用して新しいプラグインプロジェクトを作成
する方法を示し、アプリケーションをテストおよびデバッグするためのリファレンスも含まれています。この章
の終わりには、すぐに使用できる統合開発環境(IDE)と、IBM Content Navigatorプラグインを作成してデプロ
イする方法についての基本的な知識が必要です。
この章では、次のトピックについて説明します。
プラグイン開発の前提条件開発環境のセットアッププ
ラグイン開発
ウィザードを使用した新しい空のEDSプロジェクトの作成SamplePlugin
の概要プラグインJARの手動構築プラグインのデバッグ
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
73
3.1プラグイン開発の前提条件
プラグインによるIBM Content Navigatorの拡張とカスタマイズは、Eclipseベースの開発環境で実行できます。こ
の章では、開発環境に関する推奨事項と、以下の開発環境の追加の拡張機能について概説します。
IBMRational®Application Developerバージョン9 Eclipseソフトウェ
ア開発キット
両方の開発環境から選択できます。Rational Application DeveloperはEclipseに基づいているため、必要な機能は
両方の開発ツールに含まれています。Rational Application Developerは、DojoおよびWeb開発のためのより多く
の機能を提供します。
注意: この章では、開発環境のインストール方法については説明しません。IBM Content Navigatorの拡
張機能の開発に役立つ追加パッケージのみを示しています。EclipseまたはRational Application Develop
erの基本的な開発経験が役立つ場合があります。
3.1.1 IBM Rational Application Developer
IBM Rational Application Developerは、Javaプラットフォーム、Enterprise Edition、およびプラグインプロジェクトを
開発するための強力で柔軟なプラットフォームです。Java、Javaプラットフォーム、Enterprise Edition、およびWeb
開発を簡素化するウィザードとプラグインを提供します。Rational Application Developer内では、 できる セットアップ
または
複数のアプリケーションサーバーを統合し、ワークスペースプロジェクトをこれらのサーバーに直接デプロイします。これ
は、複数のアプリケーションサーバーでWebアプリケーションをテストおよびデバッグするのに便利な機能です。さらに
、Rational Application Developerは、Dojo Toolkitを使用してWebアプリケーションを開発するための強力なツールを提供し
ます。これを使用すると、既存のウィジェットをページエディターにドラッグして、HTMLページとDojoウィジェットHT
MLテンプレートを作成できます。Rational Application Developerプロジェクトをセットアップして、Dojo Toolkitとビジュ
アルエディターにアクセスして、何を見るか、何を得るか(WYSIWYG)のプレビューを表示できます。
次のリンクにあるオンラインマニュアルには、Rational Application Developerバージョン9でのインストー
ルと開発に関する役立つ情報があります。
http://pic.dhe.ibm.com/infocenter/radhelp/v9/index.jsp
最新のRational Application Developerバージョンを使用してください。それが不可能な場合は、少なくともRational Applicati
on Developerバージョン8.5を使用してください。
74 IBM Content Navigatorのカスタマイズと拡張
Rational Application Developerのインストールプロセス中に、インストールするさまざまなパッケージを選択
できます。インストール時に次のパッケージを選択します。
Java EEおよびWebサービス開発ツール
ターゲットのWebSphere Application Serverのバージョンに応じて、次のようにします。
–
WebSphere Application ServerバージョンXX開発ツール
–
ローカルサーバーをインストールせずにアプリケーションを開発するためのツールAjax、Dojo T
oolkit、およびHTML開発ツールJSPおよびサーブレット開発ツールJSF開発ツールXML開発ツール
IBM Worklightパッケージ(モバイルアプリケーションを作成する場合:)
注意: モバイル開発用のIBM Worklight Developer Editionは、Rational Application Developerダウンロードペ
ージから選択でき、WebからダウンロードしてEclipseプラグインとしてインストールすることもできます。
Worklightのインストールと使用法の詳細については、次のアドレスにアクセスしてください。
http://pic.dhe.ibm.com/infocenter/wrklight/v6r0m0/index.jsp
3.1.2 Eclipse開発環境
Eclipseソフトウェア開発キット(Eclipse SDK)は、オープンソースのソフトウェア開発プラットフォームです
。Eclipse組織は、IBMおよびその他の主要なツールプロバイダーで構成されるソフトウェア開発ツールプロバイ
ダーのコンソーシアムによって作成されています。Eclipse SDKは無料で使用でき、実行する開発のタイプに応じ
てさまざまなパッケージがあります。
この本に示されているコードを開発するには、Java EE開発者向けEclipse IDEパッケージを使用してください。基本
的なJavaプラットフォーム、Enterprise Editionコンポーネント、JavaScript、HTML、CSSエディターが含まれてい
ます。
インストールパッケージは次の場所にあります。
http://www.eclipse.org/downloads/moreinfo/jee.php
Eclipseバージョン4.3.1に基づく最新のEclipse Keplerパッケージを使用しました。モバイル開発にIBM Worklig
ht Eclipseプラグインを使用する場合は、IndigoまたはHelios Eclipseパッケージを使用する必要があります。
Java EE開発者向けのEclipse IDEを使用する場合、新しいJavaプロジェクトを作成してContent Navigator用
の新しいプラグインを簡単に作成できます。
第3章開発環境のセットアップ
75
Java Platform、Enterprise Editionコンポーネントを使用して、外部データサービスアプリケーションを構築します。
Dojoコンポーネントの開発には、Maqettaなどのツールを使用できます。
http://maqetta.org/
Worklightのインストール、使用、およびダウンロードの詳細については、Worklightインフォメーションセンターを参照してください。
3.1.3 WebLogicとEclipse
WebSphere Application Serverに加えて、IBM Content Navigatorは、アプリケーションサーバーとしてWebL
ogic Serverもサポートしています。次のOracle Webページには、Eclipse環境とWebLogicサーバー環境を提供
するインストーラーがリストされています。これにより、開発者はWebアプリケーションを構築し、開発環境
内のアプリケーションサーバーに直接デプロイしてテストできます。
http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-mai n-097127.html
このWebページで、「Oracle WebLogic Server、Oracle Coherence、およびOracle Enterprise Pack for Eclipseのイ
ンストーラー」トピックを参照してください。
私たちが使用するEclipseパッケージは、Kepler Eclipseリリースに基づいており、WebLogicサーバーで開発およびデプ
ロイするための特別な機能が含まれています。このパッケージは、必要なJavaプラットフォーム、Enterprise Editionコ
ンポーネントも提供します。
3.2開発環境のセットアップ
このセクションでは、新しいIBM Content Navigatorプラグインおよび外部データサービス(EDS)プロジェ
クトを簡単に作成するための開発環境を準備するために必要な手順について説明します。
開発環境に統合できるIBM Content Navigator用のEclipseプラグインがあります。Eclipseプラグインは、新しい
Content Navigatorプラグインプロジェクトおよび外部データサービスプロジェクトの作成を容易にします。
Eclipseプラグインは、この本に関連付けられている追加の資料リンクからダウンロードできます。プラグイン
には、2つのJava Archive(JAR)ファイルが含まれています。
com.ibm.ecm.plugin.202.jar
com.ibm.ecm.icn.facet.EDSPlugin.202.jar
76 IBM Content Navigatorのカスタマイズと拡張
これら2つのJARファイルにはEclipseの拡張機能が含まれており、IBM Content Navigatorプラグイン開発用の新しいプロジ
ェクトと、EDS Webプロジェクトを構築するための新しいEclipse Webプロジェクトファセットの両方を有効にします。
3.2.1ベースEclipse環境へのEclipseプラグインのインストール
次の手順に従って、Eclipseプラグインをインストールします。
1.この本の追加資料からJARファイルをダウンロードします(535ページの付録D「追加資料」を参照)
。
2. JARファイルをEclipseにコピーします ドロップイン ディレクトリ。
この例のように、dropinsディレクトリはEclipseインストールパスの下にあります。
C:/ eclipse / dropins
Eclipse for WebLogicを実行している場合、インストールディレクトリは次のようなディレクトリにある可能
性があります。
C:/ Oracle /ミドルウェア/ Oracle_Home / oepe / eclipse / plugins
3. Eclipseを再起動します。
次の例のように、変更をアクティブにするために、コマンドラインから-cleanパラメーターを指定してEcli
pseを呼び出す必要がある場合があります。
C:/eclipse/eclipse.exe -clean
3.2.2 Rational Application DeveloperへのEclipseプラグインのインストール
以下のステップに従って、Rational Application DeveloperにEclipseプラグインをインストールします。
1.この本の追加資料からJARファイルをダウンロードします(535ページの付録D「追加資料」を参照)
。
2.次の例のように、JARファイルをRational Application開発者のプラグインディレクトリにコピーします。
C:/ Program Files / IBM / SDP / plugins
3. Rational Application Developerを再起動します。
第3章開発環境のセットアップ
77
3.2.3 Eclipseプラグインのインストールのトラブルシューティング
Eclipseを再起動しても、IBM Content Navigatorプラグインプロジェクトを作成するオプションが表示されない場
合は、おそらくすべての依存関係がインストールされていません。Eclipseログでエラーを確認してください。E
clipseログはメニューの下にあります 窓 → ビューを表示 → エラーログ。 ログの次のエラーは典型的です:
com.ibm.ecm.icn.plugin.202からバンドルorg.eclipse.wst.jsdt.core [1.1.202,2.0.0)への依存関係を満たすことがで
きません。
これを解決するには、Eclipseマーケットプレイスに移動して、不足している依存関係をダウンロードします。
注意: Rational Application Developer 8.5以降、または最新のJava Platform、Enterprise EditionバージョンのEc
lipseをインストールしている場合は、すべてのIBM Content Navigator Eclipseプラグインの依存関係がすでにイ
ンストールされているはずです。
3.2.4 Eclipseプラグインのインストールの確認
77ページの3.2.1、「基本Eclipse環境へのEclipseプラグインのインストール」および77ページの3.2.2、「Ration
al Application DeveloperへのEclipseプラグインのインストール」では、Eclipseプラグインのインストール方法に
ついて説明します。 Content Navigatorプラグイン開発用のinsおよび開発環境での外部データサービス(EDS)E
clipse拡張機能のインストール。このセクションでは、開発環境で新しいメニューが表示されることを確認して、
インストールが成功したことを確認します。
Content Navigatorプラグインプロジェクト用のEclipseプラグインのインストールを確認するには、次の手順に従
います。
1. EclipseやRational Application Developerなどの開発環境を開きます。
2.に行く ファイル → 新しい計画 そして、あなたがIBMコンテンツを見ることができることを確認してください
ナビゲーターフォルダー。このフォルダには、図3-1(79ページ)に示すように、コンテンツナビゲータプラグインが表示さ
れます。エントリがダイアログにリストされている場合、コンテンツナビゲータプラグインのインストール用のEclipseプラ
グインは成功しています。
78 IBM Content Navigatorのカスタマイズと拡張
図3-1新しいContent Navigatorプラグインダイアログ
3.クリック キャンセル ダイアログを閉じます。ダイアログを開くことができれば十分です
インストールが成功したことを確認します。
EDS Eclipseプラグインも正常にインストールされていることを確認するには、次の手順に従います。
1.まだ開いていない場合は、Eclipseなどの開発環境を開きます。
2.に行く ファイル → 新しい計画 → 動的Webプロジェクト。 ウィザードで、
あなたが選択できること IBM外部データサービスWebプロジェクト の中に
構成 このエントリがダイアログにリストされている場合、外部データサービスのプラグインは正常にイ
ンストールされています。
第3章開発環境のセットアップ
79
図3-2外部データサービス用の新しい動的Webプロジェクト
Content NavigatorプラグインおよびEDS Webアプリケーション用のEclipseプラグインをインストールする方法を示しま
す。これで、最初のContent Navigatorプラグインプロジェクトと外部データサービスWebプロジェクトを作成する準備が
できました。
80 IBM Content Navigatorのカスタマイズと拡張
あなたが始める前に: 3ページの第1章「拡張ポイントとカスタマイズオプション」に目を通し、プラグイン
開発に必要なスキルセットを確認します。このタイプの開発に不慣れな場合は、コンテンツナビゲータープ
ラグイン開発用の環境の設定を開始する前に、その章のさまざまなセクションにある役立つリンクに目を通
して、必要な知識を取得してください。
3.3プラグイン開発
このセクションでは、Content Navigatorプラグインプロジェクトの作成、パッケージ化、および配備に関する詳
細情報を提供します。プラグインプロジェクトの構造について説明し、コンテンツナビゲータープラグインをデ
プロイしてテストする方法についても説明します。
このセクションの前提条件は、76ページの3.2、「開発環境のセットアップ」で説明されているようにContent N
avigator Eclipseプラグインが正常にインストールされていることです。
3.3.1ウィザードを使用した単純なプラグインプロジェクトの作成
このセクションでは、IBM Content Navigatorをカスタマイズまたは拡張するために、開発環境で新しい
プロジェクトを作成する方法について説明します。
新しいContent Navigatorプロジェクトを作成する前に、 navigatorAPI.jar ファイル。ファイルは、 lib 次の例のよう
に、Content Navigatorインストールディレクトリのフォルダー:
C:\ Program Files(x86)\ IBM \ ECMClient \ lib
私たちのケースでは、 navigatorAPI.jar に C:\ ICNLibs、 ローカルディレクトリ。の
navigatorAPI.jar ファイルは後でプラグインプロジェクトで参照されます。
Eclipse開発環境で拡張機能が有効になったので、最初のIBM Content Navigatorプラグインプロジェクトを作成し
ます。次の手順を実行します。
1.選択 ファイル → 新着 → その他の そして、あなたが見つけるまでスクロールします IBMコンテンツ
ナビゲーター フォルダ。フォルダを展開してクリック Content Navigatorプラグイン。
2.クリック Content Navigatorプラグインプロジェクト 次にクリックします 次。 ウィザード
82ページの図3-3に示すように、Content Navigatorプラグインの作成プロセスをガイドします。
第3章開発環境のセットアップ
81
図3-3新しいIBM Content Navigatorプラグインプロジェクトウィザード
3.たとえば、プロジェクトの名前を入力します SimpleICNPlugin。 保つ
プロジェクトの場所のデフォルト設定をクリックして、 次。
4.次のウィンドウで、表3-1にリストされている値を定義します。83ページの図3-4は、SimplePluginプロジェクト
に提供される値を示しています。必要なパラメータをすべて設定したら、クリックします 終わり。
表3-1新しいプラグインダイアログのプラグイン情報
プラグイン情報説明
説明的な名前
説明的な名前は、IBM Content Navigator管理プラグイン・インターフェー
スでプラグインを識別するストリングです。
Javaパッケージ
クラス名
Javaパッケージは、プラグインのソースコードの名前空間です。
クラス名は、プライマリプラグインクラスの名前です。プライマリプラグ
インクラスは、プラグインが提供する拡張機能と実行時にロードするクラ
スについてIBM Content Navigatorサーバーに指示を提供します。
バージョン
プラグインのバージョン番号は、クラス名の下にあるクラスに設定されま
す。
場所navigatorAPI.jar
navigatorAPI.jarファイルには、拡張機能を構築するために必要な、IBM Content Navig
atorによって提供されるプラグインインターフェースとクラスが含まれています。nav
igatorAPI JARファイルは、IBM Content Navigatorとともにインストールされます。 lib
ディレクトリ(例: C:\ Program Files \ IBM \ E
CMClient \ lib)。
82 IBM Content Navigatorのカスタマイズと拡張
図3-4は、Eclipse開発環境でのこの情報を示しています。
図3-4新しいプラグインダイアログのプラグイン情報
ウィザードは、動作するContent Navigatorプラグインプロジェクトを生成します。プラグインのデプロイ可能なJARファイル
を生成するために使用できるANTビルドスクリプトを含むプライマリプラグインクラスが表示されます。図3-5は、新しく作成
されたプラグインプロジェクトがEclipseパッケージエクスプローラーでどのように表示されるかを示しています。
図3-5 SimpleICNPluginのプロジェクト構造
第3章開発環境のセットアップ
83
SimpleICNPluginのパッケージ化と展開を続ける前に、作成されたプロジェクト構造を調べます。
83ページの図3-5に示すように、プロジェクトは src フォルダ、 lib フォルダ、および META-INF フォルダ。それも示し
ています build.xml、 ANTビルドスクリプトファイル。
プライマリプラグインクラスに加えて、ウィザードはプロジェクト内に他のいくつかのクラスとパッケージを生
成することに注意してください。プラグインプロジェクト作成ウィザードで指定したプライマリパッケージ名の
下に、 Webコンテンツ
ディレクトリ。このディレクトリーは、プラグインがIBM Content Navigatorのクライアント側に提供する拡張機能の
ルートとして使用されます。この場合、クライアント側の拡張機能は、実際にはユーザーインターフェイスを拡張ま
たは変更しません。これらは、カスタマイズを構築するために使用できるシェルです。たとえば、スタイルの変更や
オーバーライドを追加したい場合は、それを下に生成されたCSSファイルに追加できます。
Webコンテンツ ディレクトリ。また、カスタム構成のためにプラグインをデプロイする管理者にプロンプ​​トを表
示する場合は、ウィザードで生成されたConfigurationPane JavaScriptおよびHTMLテンプレートを変更します。
ウィザードは、カスタムDojoウィジェットのDojoパッケージ名を生成します。これは、IBM Content Nav
igatorがDojoウィジェット用に登録する名前空間です。たとえば、カスタムダイアログMyTestDialogを作
成する場合は、このプロジェクトのsimplePluginDojoパッケージに追加して、次のように参照します。
simplePluginDojo.MyTestDialog。
の lib フォルダには j2ee.jar デフォルトでファイル。の大きな変更を避けるために build.xml、 プラグインが後で必
要とするすべてのJARを
lib フォルダ。
の META-INF フォルダには MANIFEST.MF プラグインプロジェクトのメインプラグインクラスを定義するファイ
ル。このプロジェクトでは、MANIFESTファイルパラメータPlugin-Classが指す com.ibm.ecm.simpleplugin.SimplePlugin
また、プロジェクト作成ウィザードで自動的に設定されています。Plugin-Classパラメータは、プラグイン仕様を
定義するために、管理デスクトップのContent Navigatorプラグイン登録によって使用されます。プロジェクトを
手動でビルドする場合、Plugin-Classが正しいプラグインJavaクラスを指すことが重要です。
の build.xml 既存のプロジェクトコードからJARファイルをコンパイルして生成するANTスクリプトです。の build.xml
プロジェクトのファイルを実行する準備ができました。拡張する場合は注意してください SimpleICNPlugin プロジ
ェクト(アクション、機能、サービスなどを追加するなど)によって、必要なすべてのライブラリ(リポジトリ
固有のJARなど)がビルドスクリプトのパスセクションで参照されるようにします。そうしないと、ビルドエラ
ーが発生します。加えて build.xml また、出力プラグインJARファイルの名前が 瓶 セクション。ANTスクリプトと
プラグインのパッケージ化の詳細については、90ページの3.3.3、「プラグインのパッケージ化とビルド」を参照
してください。
84 IBM Content Navigatorのカスタマイズと拡張
ここで作成したSimpleICNProjectは空のプラグインプロジェクトです。次のセクションでは、Content Navigatorプラ
グインプロジェクトに拡張機能を追加する方法を示します。
注意: プラグイン登録中のJavaバージョンエラーを回避するために、プラグインプロジェクトでJavaコンパイラレベル1.6を使
用していることを確認してください。
3.3.2プラグイン拡張の作成
EclipseのContent Navigatorプラグインメニューを使用すると、アクション、機能、レイアウト、メニュー、ビ
ューア、リクエストやレスポンスフィルターなどのサーバー拡張などのプラグインコンポーネントをプラグイン
に追加できます。
プラグインプロジェクトを作成してIBM Content Navigatorにデプロイしたので、プラグインの拡張を作成します。
プラグインプロジェクトのJavaパッケージを右クリックします。IBM Content Navigatorという名前の新しいメニ
ューが表示されます。このメニュータイプは、Content Navigatorプラグイン拡張を作成するための新しいウィザー
ドを公開します。いくつかの拡張機能はServer Extensionsという名前のサブメニューにグループ化されていますが
、他の拡張機能はメインメニューにあります。 サーバー拡張
Content Navigatorのサーバー側にのみ適用されるプラグイン拡張です。他の拡張機能には、クライアント側の機
能強化も含まれます。86ページの図3-6は、 IBM Content Navigator メニュー。
第3章開発環境のセットアップ
85
図3-6 Eclipseプラグインのコンテキストメニュー
次のセクションでは、新しい拡張機能をプラグインプロジェクトに追加する方法を示します。
サーバー側の拡張機能
IBM Content Navigatorは、応答ファイラー、要求フィルター、サービスなど、いくつかのサーバー側拡張機能を
提供します。応答フィルターを追加する場合は、 com.ibm.ecm.simpleplugin Javaパッケージ、右クリックして選
択 IBM Content Navigator → サーバー拡張 → 新しい応答フィルター。 応答
86 IBM Content Navigatorのカスタマイズと拡張
フィルター は、既存のIBM Content Navigatorサービスの拡張機能であり、サーバーサイドサービスから返される標
準のJavaScript Object Notation(JSON)ペイロードを操作できます。この機能を使用して、カスタムフォーマッタ
ウィジェットをリストおよびプロパティ情報のユーザーインターフェイスウィジェットに挿入したり、JSON内の値
を変更したり、JSONリターンにまったく新しいエントリを挿入したりできます。図3-7は、入力されたバージョン
のNew Response Filterウィザードを示しています。
図3-7新しい応答フィルターウィザード
この例では、openFolderアクションの処理を担当するサービスを検索し、適切なチェックボックスを選択してク
リックすることにより、検索条件に一致する各サービスを応答フィルターに追加しました。 選択を追加します。
この応答フィルターによって拡張されたサービスのリストに各openFolderサービスを追加することにより、IBM
Content Navigatorに、IBM Content Manager、IBM FileNet Content Manager、またはContent Management Inte
roperability Servicesに対するopenFolderサービス要求に対してこの応答フィルターを呼び出すように指示してい
ますリポジトリソース。クリック OK。
次に、ウィザードは新しい応答フィルターJavaクラスを生成し、プライマリプラグインJavaクラスを更新します。
このプラグインに応答フィルターが含まれていることをIBM Content Navigatorサーバーに指示するには、プラグイ
ンJavaクラスの更新が必要です。もし
第3章開発環境のセットアップ
87
以前に指定した値を入力すると、例3-1に示すように、プラグインクラスが更新されます。
例3-1応答フィルタのプラグインクラスの拡張
/ **
*
リクエスト後に実行されるフィルターのリストを提供します
*
サービス。このフィルターのリストを使用して、
*
返される応答。
*
*
@returnの配列
*
<code> {@ link com.ibm.ecm.extension.PluginResponseFilter
PluginResponseFilter} </ code>
*
オブジェクト。
*/
public com.ibm.ecm.extension.PluginResponseFilter [] getResponseFilters(){
新しいcom.ibm.ecm.extension.PluginResponseFilter [] {new com.ibm.ecm.simpleplugin.Simple
ResponseFilter()}を返す;
}
応答フィルターに加えて、要求フィルターとサービスを作成することもできます。要求フィルターは本質的に応
答フィルターに似ていますが、IBM Content Navigatorサービスが完了した後で適用するのではなく、サービスが
実行される前に要求フィルターが適用されます。これにより、プラグインは、サービスによってアクションが実
行される前に、サービスに適用された要求パラメーターを操作できます。
プラグインサービスは、まったく新しいサーバー側のプロシージャをIBM Content Navigatorに追加する必要があ
る場合に使用されます。これは、特定のサービスを提供するカスタムサーブレットを構築することと同じです。
たとえば、このメソッドを使用して、ECMリポジトリから、すぐに使用できるようになっていない追加機能を公
開できます。
クライアント側の拡張
サーバー側の拡張機能が作成されたので、クライアント側の拡張機能を作成します。IBM Content Navigatorメニ
ューを再び開くには、Javaパッケージを右クリックして、 新しいアクション リンク。IBM Content Navigatorアク
ションを作成するためのウィザードが開きます。
あ アクション プラグインが新しいユーザーインターフェイスアクションを定義できるようにする拡張機能です。通常、
アクションはツールバーのボタンまたはコンテキストメニューのメニュー項目として公開されます。ただし、IBM Cont
ent Navigator内の他のユーザー操作中に暗黙的に実行されるアクションであることもあります。89ページの図3-8は、完
了したNew Actionウィザードウィンドウを示しています。
88 IBM Content Navigatorのカスタマイズと拡張
図3-8新しいアクションウィザード
クリックした後 OK、 ウィザードは、アクションの新しいJavaクラスを生成し、プライマリプラグインJavaクラ
スを更新し、メインプラグインJavaScriptを更新します。このプラグインにカスタムアクションが含まれている
ことをIBM Content Navigatorサーバーに指示するには、プラグインJavaクラスへの変更が必要です。上記の図3
-8で指定した値を入力すると、例3-2に示すように、プライマリプラグインクラスの更新が表示されます。
例3-2アクションのプラグインクラスの拡張
/ **
*
このプラグインがメインに追加するアクションのリストを提供します
*
Webクライアントのツールバー。
*
*
*
*
*
*
@returnの配列
<code> {@ link com.ibm.ecm.extension.PluginAction
PluginAction} </ code>
オブジェクト。プラグインは同じセットを返す必要があります
すべての呼び出しのオブジェクト。
*/
public com.ibm.ecm.extension.PluginAction [] getActions(){
return new com.ibm.ecm.extension.PluginAction [] {new
com.ibm.ecm.simpleplugin.SimpleAction()};
}
この変更により、ユーザーインターフェイス内のどこからでもアクションを呼び出すことができます。
第3章開発環境のセットアップ
89
注意: アクションメソッドはグローバルに定義されるため、ユーザーインターフェイスで定義されている他の
関数との競合を引き起こす可能性が低い関数名を使用します。たとえば、すべてのJavaScript関数名にプラグ
インIDを追加することを選択できます。この場合、SimplePlugin.simpleActionになります。」
プラグインアクションに加えて、ビューア、メニュー、メニュータイプ、開くアクション、機能、レイアウトを作成するためのウィ
ザードが表示されます。表3-2は、各プラグインタイプを簡単に説明しています。
表3-2プラグインのタイプ
プラグインタイプ
説明文
閲覧者
プラグインビューアは、カスタムドキュメントビューアを追加するためのメカニズムを提供します。
メニュー
メニューを使用すると、プラグインで既存のメニュータイプの新しいメニューを定義できます。例えば、
IBM Content Navigatorがコンテンツのリストの上に表示する標準ツールバーのカスタムバージョンを提供
できます。
メニュータイプ
メニュー・タイプは、標準のIBM Content Navigatorウィジェットでは公開されていない、まったく新しいメニューです
。プラグインはこの機能を使用して、レイアウトに追加されたカスタムウィジェットのカスタムメニューとツールバー
を定義できます。
オープンアクション オープンアクションプラグインは、ドキュメントを開くときにのみ適用される特別なタイプのアクションで
す。
特徴
フィーチャーは、IBM Content Navigatorの標準レイアウトウィジェットで公開されるユーザーイ
ンターフェースパネルです。たとえば、IBM Content Navigatorの標準の検索パネルと参照パネル
は機能です。プラグイン開発者は、まったく新しい機能をIBM Content Navigatorに追加したり、
既存の機能を拡張したりするカスタム機能を追加できます。
レイアウト
レイアウトは、標準のIBM Content Navigatorレイアウトを使用したくないが、完全にカスタム
のユーザーエクスペリエンスを提供したい場合に使用されます。
3.3.3プラグインのパッケージ化とビルド
81ページの3.3.1、「ウィザードを使用した単純なプラグインプロジェクトの作成」では、単純なプラグインプロジェクトの作
成方法について説明しました。Content Navigatorにプラグインをデプロイするには、プロジェクトコードからJavaアーカイブ
(JAR)ファイルを作成する必要があります。このセクションでは、後でIBM Content NavigatorにインストールできるJARフ
ァイルを構築する方法について説明します。JARファイルの作成を開始する前に、単純なプラグインプロジェクトにコンパイ
ルエラーがないことを確認してください。
90 IBM Content Navigatorのカスタマイズと拡張
プラグインプロジェクトからJARファイルをビルドするには、2つの方法があります。
EclipseおよびRational Application Developerのデフォルトのエクスポート機能を使用してプロジェクトをエクスポート
します(117ページの3.6、 『プラグインJARの手動ビルド』を参照)。
ANTスクリプトを使用してJARをビルドします。
SimpleICNPluginプロジェクトには、すでに機能するものが含まれています。 build.xml JARファイルの作成に使用でき
るファイル。このANTスクリプトについて詳しく説明します。
私たちは2つの主要なセクションに焦点を当てています build.xml:
最初のセクションには、クラスパスタグが含まれます。これには、プラグインプロジェクトをコンパイルするために必要な
すべてのライブラリを含める必要があります。2番目のセクション(JARセクション)には、プロジェクトのメインプラグイ
ンクラスが含まれています。
クラスパスセクションの説明
クラスパスセクションには、プラグインプロジェクトをコンパイルするために必要なすべてのライブラリが含まれ
ています。私たちのケースでは、 navigatorAPI.jar そしてその
j2ee.jar プロジェクトをコンパイルします。Content Navigatorプラグインウィザードは、 build.xml 提供された場
所から navigatorAPI.jar
(83ページの図3-4を参照)および j2ee.jar 自動的に。の 臨時
フォルダーには、ANTスクリプトで作成されたコンパイル済みクラスファイルが含まれ、自動的に作成されます
。
プラグインコードに特別なライブラリが必要でない限り、パスを変更する必要はありません。この場合、クラ
スパスセクションにパス要素を追加します。例3-3は、 build.xml 自動的に生成されたファイル。
例3-3 SimpleICNPluginのbuild.xmlのクラスパスセクション
<path id = "class path">
<pathelement location = "C:/ICNLibs/navigatorAPI.jar" /> <pathelement location =
"./ lib / j2ee.jar" /> <pathelement location = "./ temp" /> </ path>
JARセクションの説明
のJARセクション build.xml プラグインのマニフェストファイルを作成します。属性Plugin-Classのパラメーター
が、拡張するJavaクラス名と一致することが重要です。 com.ibm.ecm.extension.Plugin クラス。また、生成する
JARファイルの名前をこのセクションで設定できます。
第3章開発環境のセットアップ
91
例3-4 SimpleICNPluginのbuild.xmlのjarセクション
<jar jarfile = "SimpleICNPlugin.jar">
<fileset dir = "./ temp" contains = "** / *" /> <マニフェスト>
<属性名= "プラグインクラス"
value = "com.ibm.ecm.simpleplugin.SimplePlugin" />
<section name = "build">
<attribute name = "Built-By" value = "$ {user.name}" /> <attribute name =
"Build" value = "$ {TODAY}" /> </ section> </ manifest> </ jar>
ビルドを実行する
プラグインJARファイルをビルドするには、以下の手順を実行します。
1.を開きます build.xml 開発環境内のファイル。
2. Eclipse内で、ANTスクリプトの特別な実行構成を見つけます。右クリック build.xml ファイルと選択 として実
行 → Antビルド。 93ページの図3-9を参照してください。
92 IBM Content Navigatorのカスタマイズと拡張
図3-9 ANTスクリプトの実行
3. Eclipseコンソールビューにビルドの実行が表示されます。ビルドはビルド成功ステートメントで終了します
。表示されない場合は、エラーメッセージを調べて、必要な変更を行ってください。
4.プロジェクトを更新します。プロジェクト内では、 SimpleICNPlugin.jar
ファイル。
注意: JARを手動で構築する場合は、109ページの3.6、「プラグインJARの手動での構築」を参照してください
。
第3章開発環境のセットアップ
93
3.3.4プラグインの登録とテスト
このセクションでは、プラグインJARファイルをIBM Content Navigatorに登録する方法について説明します。
IBM Content Navigatorは、プラグインをロードするための2つのメカニズムを提供します。
最初のメカニズムでは、プラグインをJARファイルとしてビルドし、JARファイルへのパスを指定する必要があります。こ
のパスは、ローカルファイルシステムパスまたはURLパスにすることができます。プロダクションデプロイメントの場合、
プラグインをJARファイルとしてビルドし、URLパスを介してロードします。
開発作業を簡略化するために、2番目のオプションでは、プラグインプロジェクトの「bin」ディレクトリへ
のファイルシステムパスと、プライマリプラグインクラスの完全なクラス名を指定できます。このメカニズ
ムを使用すると、最初にプラグインJARファイルを再ビルドして再ロードしなくても、プラグインのソース
コードを変更してIBM Content Navigator内ですぐにテストできます。これにより、新しいプラグインの開発
とテストに必要な手順が削減されます。
次のセクションでは、プラグインをクラスファイルのパスと名前として登録する方法について説明します。
開発ライフサイクル内でプラグインをテストする
IBM Content Navigator 2.0.2を使用すると、開発ライフサイクル内でプラグインをテストでき、開発プロセス中
にJARファイルをパッケージ化する必要はありません。このセクションでは、この機能を使用するために必要な
ものについて説明し、サンプルプロジェクトでの使用を示します。
まず、作成したプロジェクトにContent Navigatorサーバーからアクセスできる必要があります。プラグインの登
録はサーバー側のファイルシステムのみを処理できるため、開発環境がローカルワークステーションにあると想
定すると、Content Navigatorサーバーのファイルシステムにワークスペースが必要です。したがって、ローカル
ワークステーションからContent Navigatorサーバーにネットワークドライブをマップできます。別のオプション
は、プロジェクトをContent Navigatorサーバーにコピーすることです。Content Navigatorサーバーで直接開発す
る場合、つまり開発環境がContent Navigatorサーバーにインストールされている場合、ネットワークドライブや
接続を処理する必要はありません。
プロジェクトに直接アクセスできるように、ローカルワークステーション開発環境をContent Navigatorサー
バーのワークスペースに接続することにしました。ワークスペースは次の場所にあります C:\ workspace C
ontent Navigatorサーバー上。
94 IBM Content Navigatorのカスタマイズと拡張
パッケージ化を行わずにプラグインを登録するには、次の手順を使用します。
1.管理デスクトップを開き、プラグインタブに移動します。このタブには、環境にすでにインストールされているすべてのプ
ラグインが一覧表示されます。図3-10を参照してください。
図3-10 IBM Content Navigatorにインストールされたプラグイン
2.クリック 新しいプラグイン プラグインへのパスを指定します。
3.を選択します クラスファイルのパス ラジオボタンをクリックして、 置き場 フォルダ
ワークスペース内のプロジェクト内。の中に クラス名 フィールドに、Javaパッケージ全体を含むプラグイン
クラスファイルの名前を入力します。私たちの場合のクラスファイルのパスは C:\ workspace \
SimpleICNPlugin \ bin クラスファイルの名前は com.ibm.ecm.simpleplugin.SimplePlugin。
4.クリック 負荷。 96ページの図3-11に示すように、プラグインがロードされます。
第3章開発環境のセットアップ
95
図3-11クラスファイルによるプラグイン登録
5.クリック セーブ そして 閉じる。
プラグインJARファイルを登録する
JARファイルの登録には、 SimpleICNPlugin.jar 90ページの3.3.3、「プラグインのパッケージ化とビルド」で
作成されたファイル。
プラグインJARファイルは、IBM Content Navigatorアプリケーションがアクセスできる場所にある必要がありま
す。このアクセスは、高可用性シナリオでは特に重要です。プラグインJARファイルが定義された場所で使用で
きないか、誤っている場合、正しく登録または実行できません。プラグインの登録時に、JARファイルへのファ
イルパスを提供するか、JARへのURLパスを使用するかを選択できます。
96 IBM Content Navigatorのカスタマイズと拡張
手順に従って、前のセクションで作成したプラグインをデプロイします。
1.管理デスクトップを開き、 プラグイン すべてを一覧表示するタブ
環境にすでにインストールされているプラ​​グイン(図3-12)。
図3-12 IBM Content Navigatorにインストールされたプラグイン
2.クリック 新しいプラグイン プラグインへのパスを指定します。を選択 JARファイル
道 ラジオボタン(図3-13)をクリックし、プラグインJARファイルへのフルパスを指定します。この場合、ファイ
ルの場所は次のとおりです。
C:\ ICNPlugins \ SimpleICNPlugin.jar
図3-13管理デスクトップ内での新しいプラグインの公開
3.クリック 負荷。
プラグインが正しくビルドされている場合、バージョン番号、名前、使用可能なアクション、ビューア、機
能、レイアウトなど、プラグインに関する情報が表示されます。この例では、機能のない単純なプラグイン
しかありません。
4.クリック セーブ そして 閉じる プラグインを保存して閉じます。
これで、プラグインがプラグインビューに表示されます。
第3章開発環境のセットアップ
97
実稼働環境でのプラグインのデプロイメントに関する考慮事項
すべての開発サイクルの終わりに、プラグインをさまざまな段階でデプロイします。テスト環境で始まり、ユー
ザー受け入れテスト環境に行き、本番環境で終わります。ほとんどの企業では、これらのすべての段階で新しい
ソフトウェアを配信および展開する方法について、明確に定義された展開プロセスがあります。Content Naviga
torの観点からは、多くの場合、複数の単一プラグインJARファイルがデプロイされます。つまり、さまざまな人
々または部門によって開発された複数のコンポーネントです。管理者デスクトップのURLを介して埋め込んでア
ドレス指定できる会社固有のリソースも見つかります。一貫した展開プロセスを提供するには、すべての拡張機
能、プラグイン、ロゴ、ログオンサイトなどをパッケージ化することをお勧めします。
99ページの図3-14は、開発、システム統合、ユーザー承認、本番環境の4つの段階を示しています。最初の段階
では、開発者は通常、新しいContent Navigatorプラグインを作成し、開発者が所有する環境で拡張機能をテスト
します。開発とテストが完了すると、作成されたプラグインとロゴなどの他のカスタムコンポーネントが1つの
Webアプリケーションにパッケージ化され、システム統合から本番環境までのすべての段階で展開できます。ロ
ゴなど、Webアプリケーションに含まれる追加リソースは、デスクトップのカスタマイズに使用できます。
98 IBM Content Navigatorのカスタマイズと拡張
図3-14さまざまな段階で拡張機能を展開する
このセクションでは、カスタマイズ用の新しいWebアプリケーションを作成する方法、このWebアプリケーションに新し
いプラグインを追加する方法、およびプラグインをIBM Content Navigatorにデプロイする方法について説明します。この
目的で既存のWebアプリケーションを再利用することもできます。ただし、メンテナンス作業を容易にするために、専用
のWebアプリケーションを使用することをお勧めします。
第3章開発環境のセットアップ
99
開発環境で新しいWebアプリケーションを作成するには、次の手順を実行します。
1.使用 1 Webの展開方法に応じて、次の手順の
あなたの環境でのプロジェクト:
- 選択する ファイル → 新着 → 動的Webプロジェクト。
- 選択する ファイル → 新着 → 静的Webプロジェクト。
静的Webプロジェクトを選択した場合、デプロイメント中にアプリケーションコンテキストを定義し、この静的
Webプロジェクトを既存のEARファイルに追加できます。このタスクには動的Webプロジェクトを選択します。
2.プロジェクトの名前(customConfigなど)を入力します。ランタイム環境を定義し、 EARにプロジェクトを追
加 ボックスに入力し、EARファイルの名前を指定します。このプロジェクトを既存のEARに追加する場合は
、ドロップダウンリストからEARプロジェクトの名前を選択します。選択したランタイム環境は、Webアプ
リケーションをデプロイするサーバーと一致する必要があります。クリック 終わり。 WebLogicサーバーにW
ebアプリケーションをインストールする場合は、適切なターゲットランタイムと構成を選択します。
3. customConfigプロジェクトを開き、 SimpleICNPlugin.jar( あれは
90ページの3.3.3、「プラグインのパッケージ化とビルド」で作成した)
Webコンテンツ フォルダ。
4.これで、たとえばWebSphereの管理コンソールを使用して、アプリケーションをアプリケーションサーバーに
デプロイできます。次の手順を実行します。
a。customConfigEARプロジェクトをEARファイルとしてユーザー定義の場所にエクスポートします。プロ
ジェクトを右クリックして、 書き出す → EARファイル、 エクスポート先などの必要なパラメータを提
供します。
b。EARをアプリケーションサーバーインスタンスにデプロイします。詳細については、適切なアプリケーションサーバーのド
キュメントを参照してください。
5. URLを通じてWebアプリケーションとJARファイルにアクセスできることを確認します。URLは、Webアプリ
ケーションをデプロイしたサーバーと、提供したコンテキストによって異なります。この例に従うと、コン
テキストはcustomConfigです。Webアプリケーションがローカルサーバー(localhost)とデフォルトのWeb
Sphere Application Serverインスタンスにデプロイされているとすると、URLは次の例のようになります。
http:// localhost:9080 / customConfig / SimpleICNPlugin.jar
JARファイルを保存するかどうかを指定するウィンドウが開きます。
6.プラグインを登録するには、以下の手順を実行します。
a。管理デスクトップを開き、 プラグイン すべてのリストを表示するタブ
環境にすでにインストールされているプラ​​グイン。
b。クリック 新しいプラグイン プラグインへのパスを指定します。そのURLを入力してください
あなたへの参照 SimpleICNPlugin.jar。 私たちの例は次のとおりです。
100 IBM Content Navigatorのカスタマイズと拡張
http:// localhost:9080 / customConfig / SimpleICNPlugin.jar
c。JARファイルへのURLパスを指定した後、 負荷。
プラグインが正しくビルドされている場合、プラグインのバージョン番号、使用可能なアクション、ビ
ューア、機能、レイアウトなど、プラグインに関する情報が表示されます。
d。クリック セーブ そして 閉じる。 これで、プラグインがプラグインビューに表示されます。
3.4ウィザードを使用して新しい空のEDSプロジェクトを作成する
IBM Content Navigatorプラグインを作成するためのEclipseツールに加えて、外部データサービスの作成を支援す
るために利用できる新しいWebファセットも見つかります。外部データサービスは、IBM Content Navigator外部
データサービスプラグインによって呼び出されるREST APIであり、ファイルやデータベース内のデータなどの外
部ソースからのデータを使用して、フィールドプロパティをカスタマイズし、プロパティの動作を管理します。
Eclipseツールは、外部データサービスAPIをJavaサーブレットとして生成します。ただし、.NETサービスなどの
他のプログラミング言語で、またはJAX-RS APIとしてサービスを実装できます。
次のステップでは、開発環境で空のEDS Webアプリケーションを作成し、アプリケーションをデプロイして、E
DSプラグインを登録および構成します。
Eclipseツールを使用してプロジェクトを作成するには、Java EEパースペクティブに切り替えて、次の手順に従います
。
1.クリック ファイル → 新着 → 事業 → ウェブ → 動的Webプロジェクト。
2. Eclipseが標準の動的Webプロジェクトウィザードを開きます(102ページの図3-15)。ウィザードの最
初のパネルで、 構成
ドロップダウンしてIを選択します BM外部データサービス。
第3章開発環境のセットアップ
101
図3-15新しいEDSアプリケーションウィザード
3.プロジェクトの名前を入力して、 次。
4.次のウィンドウには、Webプロジェクトのソースフォルダーにフォルダーを追加するためのオプションのダイア
ログがあります。フォルダを追加した後、もしあれば、 次 次のパネルに移動します。このパネル(103ページ
の図3-16)では、Webプロジェクトのコンテキストルートとコンテンツディレクトリを変更できます。オプシ
ョンで、Webデプロイメント記述子を生成することもできます。
102 IBM Content Navigatorのカスタマイズと拡張
図3-16 EDS実装のコンテキストルート
5.クリック 次。
6.次のウィンドウ(104ページの図3-17)では、デフォルトの外部データサービスサーブレットクラスのJavaパッ
ケージ名と、 navigatorAPI.jar ファイル。前のセクションで述べたように、 navigatorAPI.jar Content Navigato
rサーバーからという名前のローカルディレクトリに C:\ ICNLibs。 このサンプルでは、​​パッケージ名を
com.ibm.ecm.edsimpl。
第3章開発環境のセットアップ
103
図3-17 EDS実装のJavaパッケージ宣言
7.クリック 終わり。
新しいプロジェクトを作成しています。2つのサーブレットが作成されたことがわかります。
最初のGetObjectTypesServletは、この外部データサービスプロジェクトが拡張するオブジェクトタイプを決
定するためにIBM Content Navigator外部データサービスプラグインによって呼び出されるAPIです。例3-5は
戻り値を示しています。
例3-5戻り値の例
[{"symbolicName": "ドキュメント"}]
104 IBM Content Navigatorのカスタマイズと拡張
この例では、EDSサービスがIBM Content NavigatorのEDSプラグインに、ユーザーがDocumentクラスにア
クセスするたびに呼び出されるように指示しました。
2番目のサーブレットであるUpdateObjectTypeServletは、ユーザーがGetObjectTypesServletで指定さ
れたオブジェクトタイプにアクセスしたときにEDSプラグインが呼び出すAPIです。例えば、このサ
ービスは、Documentクラスのプロパティーを読み取り専用に設定するようにIBM Content Navigator
に指示するJSONペイロードを返す場合があります。プロパティの非表示、プロパティの事前設定、
選択リストと選択リストの依存関係の作成なども行われます。
233ページの第7章「要求および応答フィルターと外部データサービスの実装」では、外部データサービスの
実装について説明します。
要件に従って2つのサーブレットを実装した後、Webアプリケーションをアプリケーションサーバー(WebSph
ere Application Serverなど)にデプロイする必要があります。製品に付属しているEDSプラグインは、EDSア
プリケーションを指すように登録および構成する必要があります。次の手順を実行します:
1.プロジェクトをEARファイルとしてエクスポートします。
a。SimpleEDSEARアプリケーションを右クリックして、 書き出す → EARファイル。
b。エクスポートダイアログで、EARファイルをエクスポートする場所を定義します。次に例を示しま
す。 C:\ SimpleEDSEAR.ear。
c。クリック 終わり。
2. EARファイルをWebSphere Application Serverにデプロイします。
a。WebSphere Application Server管理コンソールを開いてログインします。
b。選択する 用途 → 新しいアプリ → 新しい企業
応用。
c。手順1でエクスポートしたEARファイルへのインストールパスを選択し、 次 すべての手順を実行します。
クリック 仕上げ、 次にクリックします
セーブ マスター構成を保存します。
d。アプリケーションがまだ開始されていない場合は、開始します。
e。次のURLを入力して、アプリケーションをテストします。コンテキストSimpleEDSは、プロジェクト内ま
たはアプリケーションのデプロイメント中に設定できます。サンプルのURLは次のとおりです。
http:// localhost:9080 / SimpleEDS / types
このURLの出力にはエラーは含まれず、空のページのみが含まれます。
第3章開発環境のセットアップ
105
3. EDSプラグインを登録し、EDSを構成します。
a。Content Navigator管理デスクトップを開きます。
b。に行く プラグイン そして選択 新しいプラグイン。
c。を選択 JARファイルのパス ラジオボタンとURLを
edsPlugin.jar 次の例のように、Content Navigatorのインストールパスにあるファイル:
C:\ Program Files(x86)\ IBM \ ECMClient \ plugins \ edsPlugin.jar
下部の構成フィールドに、ステップ2でデプロイしたアプリケーションのURLを入力します。
d。クリック セーブ そして 閉じる。
3.5 SamplePluginの使用開始
IBM Content Navigatorは、アクションの使用、フィルター、機能、ビューアー、メニュー、およびサービスなど
の基本的な機能のサンプルを含むサンプルプラグインを提供します。SamplePluginソースコードは、IBM Conte
nt Navigatorのインストールディレクトリにあります。
< CONTENT_NAVIGATOR_PATH> \ samples \ samplePlugin
以下を選択して、サンプルプラグインを開発環境にインポートできます。 ファイル → インポート → ワークス
ペースへの既存のプロジェクト。 Content NavigatorのインストールからsamplePluginを選択すると、プロジ
ェクトがインポートされます。
インポートしたプロジェクトには、再ビルドおよび再デプロイする場合に解決する必要のあるクラスパスエラーが
いくつかあります。したがって、プロジェクトのクラスパスと
build.xml ファイルが必要です。
106 IBM Content Navigatorのカスタマイズと拡張
表3-3に、SamplePluginのコンパイルに必要なJARファイルとその場所を示します。
表3-3 SamplePluginプロジェクトに必要なJARファイル
JARファイルの名前
JARファイルの場所
navigatorAPI.jar
< ICN_INSTALL_PATH> \ ECMClient \ lib
j2ee.jar
< WAS_INSTALL_PATH> \ AppServer \ lib
struts-1.1.jar
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ lib
commons-lang-2.3.jar
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ lib
commons-codec-1.4.jar
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ lib
Web-INFクラスフォルダー
このフォルダーは、クラスSamplePluginGetAnnotationsServiceをコンパ
イルする場合にのみ必要です。次のパスを含める必要があります。
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ classes
IBM FileNet P8ライブラリ
Jace.jar
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ lib
IBM Content Manager OnDemandライブラリ
ODApi.jar
ODWEK:
< ODWEK_INSTALL_PATH> \ api
IBM Content Managerライブラリ
cmbicmsdk81.jar
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ lib
CMISライブラリ
chemistry-opencmis-clie
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ lib
nt-api-0.8.0.jar
chemistry-opencmis-clie
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ lib
nt-bindings-0.8.0.jar
chemistry-opencmis-clie
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ lib
nt-impl-0.8.0.jar
chemistry-opencmis-clie
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ lib
nt-commons-api-0.8.0.ja r
chemistry-opencmis-clie
< CN_DEPLOYED_PATH> \ navigator.war \ WEB-INF \ lib
nt-commons-impl-0.8.0.j ar
第3章開発環境のセットアップ
107
プロジェクトのビルドパスに加えて、 build.xml samplePluginの。の build.xml 正しく実行およびコンパイルするに
は、ファイルにJARファイルの場所が含まれている必要があります。したがって、クラスパスのプラグインセク
ションが build.xml 上記のすべてのファイルが含まれています。これを行うには、プロパティ値を変更します。 J
2EE_HOME、NAVIGATOR_HOME、ODWEK_HOME、CM_HOME、 そして P8_HOME、 例3-6に示すように。
CM_HOMEおよびP8_HOMEの場所は、WebSphere Application ServerでContent Navigatorがインストールされた
ディレクトリーを指します。そこで、リポジトリに必要なすべてのJARを見つけることができます。開発ワークス
テーションにリポジトリAPIをインストールした場合は、それらのライブラリフォルダーを指定することもできま
す。の ODApi.jar はナビゲーター・デプロイメントに含まれていないため、Content Manager onDemandサンプル
もコンパイルするには、ODWEKをインストールして直接参照する必要があります。
例3-6サンプルプラグインのbuild.xmlの変更
<property name = "NAVIGATOR_HOME" value = "C:/ Program Files(x86)/ IBM / WebSphere / AppServer /
profiles / AppSrv01 / installedApps / icntraini ngNode01Cell / navigator.ear / navigator.war" />
<property name = "J2EE_HOME" value = "C:/ Program Files(x86)/ IBM /
WebSphere / AppServer / lib" />
<property name = "P8_HOME" value = "$ {NAVIGATOR_HOME}" />
<property name = "ODWEK_HOME" value = "C:/ Program Files / IBM / OnDemand Web Enablement Kit /
api" />
<property name = "CM_HOME" value = "$ {NAVIGATOR_HOME}" />
変更後 build.xml したがって、92ページの「ビルドの実行」の説明に従ってJARファイルをビルドできます。 SamplePlugin.jar
が生成され、Content Navigator環境にデプロイできるようになりました。詳細については、「プラグインJARフ
ァイルを登録する」(96ページ)を参照してください。 SamplePlugin.jar ファイル。Content Navigatorインストー
ルパッケージ内で提供されるJARを使用することもできます。
C:\ Program Files(x86)\ IBM \ ECMClient \ plugins \ SamplePlugin.jar
108 IBM Content Navigatorのカスタマイズと拡張
3.6プラグインJARを手動で構築する
必要なすべてのJARをプロジェクトのビルドパスに直接含め、変更したくない場合は、プラグインJARファイ
ルを手動でビルドすると便利です。 build.xml これらのJARを含むファイル。
EclipseまたはRational Application Developerを使用してJARファイルを手動で生成するには、以下の手順を実行
します。
1. Javaプラグインクラスを指定するマニフェストファイルを作成します。例3-7は、JARファイル生成用のマニフ
ェストファイルを示しています。マニフェストファイルに関する重要な側面は、属性の値です プラグインク
ラス。 この値は、IBM Content Navigatorプラグインクラスを拡張するメインのJavaプラグインクラスに対応
している必要があります。
例3-7 JARファイル生成用のマニフェストファイル
Manifest-Version:1.0 Ant-Version:Apache Ant 1.7
.1作成者:2.4(IBM Corporation)
プラグインクラス:com.ibm.ecm.simpleplugin.SimplePlugin名前:ビルド組み込
み:icnPlginビルド:$ {TODAY}
2. JARファイルをエクスポートします。
a。プロジェクトを右クリックして選択します 書き出す → Java / JARファイル。 Java
プロジェクトファイル選択ウィンドウが開きます。
b。選択を解除します lib フォルダ、および場所とファイル名を指定します
プラグインJARファイル。の lib 含まれているJARファイルはプロジェクトのコンパイルにのみ必要であり、
コンテンツナビゲーターアプリケーションに含まれているため、ターゲットJARファイルにフォルダーを
含める必要はありません。
c。クリック 次。
3.「Javaパッケージ化オプション」ウィンドウが開きます。デフォルトのオプションをそのまま使用して、 次。
4.「JARマニフェスト仕様」ウィンドウが開きます。選択する 既存のマニフェストを使用
ワークスペースから 前に作成したマニフェストファイルへのパスを指定します。クリック 終わり。
EclipseまたはRational Application Developerを使用して、プラグインプロジェクトがJARファイルとしてエクスポートされるようになりまし
た
第3章開発環境のセットアップ
109
3.7プラグインのデバッグ
このセクションでは、開発環境でプラグインのJava部分のデバッグを有効にする方法の概要を説明します。トラ
ブルシューティングとデバッグの詳細については、495ページの第14章「デバッグとトラブルシューティング
」を参照してください。
プラグインのデバッグは、プラグインのJava部分に関する特定の問題の原因を特定するのに役立ちます。リモー
トデバッグを有効にするか、アプリケーションをローカルでデバッグできます。
3.7.1リモートデバッグ
アプリケーションをリモートでデバッグするには、管理コンソールでWebSphere Application Serverのデバッグ
をオンにし、開発環境が専用アプリケーションサーバーにアクセスできるようにします。
次の手順では、WebSphere Application ServerおよびRational Application Developerのリモートデバッ
グを有効にするプロセスについて説明します。
1. Content NavigatorがインストールされているWebSphere Application Serverでデバッグを有効にします。
a。管理コンソールを開き、ログインします。
http:// < ホスト名>:<ポート> / ibm / console
例えば:
http:// localhost:9060 / ibm / console
b。に行く アプリケーションサーバー → < name_of_your_appServer> →
追加のプロパティ → デバッグサービス。
c。を選択 サーバーの起動時にサービスを有効にする チェックボックス。
d。111ページの図3-18に示すポート番号を覚えておいてください。このポート番号は、後でRational Applic
ation Developer環境を構成するために必要です。このポートが他のアプリケーションで使用されていな
いことを確認してください。
e。クリック 申し込む そして セーブ 行った変更を保存して終了するには
管理コンソール。
f。WebSphere Application Serverを再起動します。サーバーが起動するまでに、デバッ
グポートが使用可能になります。
110 IBM Content Navigatorのカスタマイズと拡張
図3-18 WebSphere管理コンソールでデバッグを有効にする
2. Rational Application Developerで新しいランタイム構成を追加します。
a。に行く 走る → デバッグ構成。
b。選択する リモートJavaアプリケーション リストからクリックして 新着
構成 左上隅。
c。たとえば、構成の新しい名前を入力します。 DebugSamplePlugin。
d。デバッグするプロジェクトの名前を入力するか、プロジェクトから選択します
ブラウズ 木。この例では、SamplePluginプロジェクトを選択します。
e。WebSphere Application Serverのホスト名を入力し、110ページのステップ1bのポート番号を入力します
。ホスト名が使用可能であり、開発環境からアクセスできるかどうかを確認します。
f。クリック 申し込む そして 閉じる 構成を保存します。構成の例を、112ページの図3-19に示します
。
第3章開発環境のセットアップ
111
図3-19新しいデバッグ構成の作成:接続情報の設定
3.ソースコードにブレークポイントを追加します。
4.選択してデバッグを開始します デバッグ → デバッグ構成 →
DebugSamplePlugin → デバッグ。
5. WebブラウザーでContent Navigatorを起動します。Webアプリケーションがブレークポイントに到達する
と、開発環境に表示されます。
112 IBM Content Navigatorのカスタマイズと拡張
3.7.2ローカルデバッグ
Content Navigatorと開発環境を同じ物理マシンで実行する場合は、次の手順に従ってサーバーのデバッグを有効
にします。
1. Javaコードにブレークポイントを設定します。
2.サーバーを開く クリックしてRational Application Developerで表示
窓 → ビューを開く → サーバ。
3. Content Navigatorがインストールされているサーバーを選択し、 サーバ、
そして選択 デバッグで再起動 モード。
4. WebブラウザーでContent Navigatorを起動します。Webアプリケーションがブレークポイントに到達すると
、開発環境に表示されます。
アプリケーションのデバッグについて詳しくは、WebSphereとRational Application Developerの両方のIB
M Knowledge Centerを参照してください。
3.8結論
この章では、IBM Content Navigatorの開発環境をセットアップする方法について説明します。新しいプラグイン
をデプロイするための提案と推奨事項を提供します。本書の残りの章では、サンプル・コードを使用してIBM C
ontent Navigatorをカスタマイズおよび拡張する具体的な使用例を示します。
第3章開発環境のセットアップ
113
114 IBM Content Navigatorのカスタマイズと拡張
パート2
部
2
Content
Navigatorのカスタマイズ
このパートでは、複数のコードサンプルを使用してContent Navigatorをカスタマイズおよび拡張する方法を示します。コード
サンプルには、アクション、サービス、機能、リクエストフィルター、EDS、カスタムステップ、モバイルアプリケーション
の開発方法が含まれています。また、組み込みのビューアを使用する方法、サードパーティのビューアを統合する方法なども
示します。このパートには、次の章が含まれています。
117ページの第4章「基本的な拡張ポイントを使用したプラグインの開発」173ページの第5章「カスタムリポ
ジトリ検索サービスの構築」211ページの第6章「検索サービスとウィジェットを使用した機能の作成」第7
章233ページの「要求および応答フィルターと外部データサービスの実装」
299ページの第8章「カスタムステッププロセッサの作成」297ページの第9章「他のアプリケーシ
ョンでのコンテンツナビゲーターウィジェットの使用」
365ページの第10章「組み込みビューアのカスタマイズとサードパーティビューアの統合」
413ページの第11章「モバイルプラットフォームへのソリューションの拡張」437ページの第12章「Microso
ft Lync Serverのプロファイルプラグインの拡張」
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
115
116 IBM Content Navigatorのカスタマイズと拡張
4
第4章
プラグインの開発
基本的な拡張ポイント
この章では、IBM Content Navigatorプラグインを作成して、その基本機能をカスタマイズおよび拡張する方法に
ついて説明します。この章では、最初に実装する例についての情報を提供し、次にIBM Content Navigatorプラグ
インを実装する方法について説明します。
この章では、次のトピックについて説明します。
例の概要
ドシエ作成アクションの開発
関係書類の下部構造を作成するプラグインサービスを開発する関係書類を開くアクションを作成
する独自の機能で関係書類ビューを開く構成を追加する
現実世界での書類管理
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
117
4.1例の概要
次のセクションでは、3ページの第1章「拡張ポイントとカスタマイズオプション」で紹介したさまざまな拡
張ポイントでIBM Content Navigatorを拡張する方法の例を紹介します。
例をよりわかりやすくするために、IBM Content Navigatorをカスタマイズしてワーカーのニーズを満たすことを
望むRedbooks Fictional Company Aの要件を紹介します。この架空の会社Aは、紙を使用したときに物理的なバ
インダーとファイルを使用して作成した方法に類似した方法で、顧客の電子ドキュメントを整理したいと考えて
います。
1人の顧客のすべてのドキュメントに対して1つの物理バインダーがあり、ドキュメントはドキュメントタイプご
とに異なるスロットに構造化されています。あ 書類 物理的なバインダーと同等の電子です。技術的には、これは
トップレベルのフォルダー(関係書類番号などの関係書類プロパティを保持する特定のフォルダークラスを持つ
)であり、関係書類のドキュメントを含むサブフォルダーです。ある意味で、最上位のフォルダは一式文書全体
を表しています。
架空の会社Aは、図4-1のように、顧客関係書類のデータモデルとユーザーインターフェイスの外観を定義します
。
図4-1顧客関係書類のユーザーインターフェイス
118 IBM Content Navigatorのカスタマイズと拡張
Fictional Companyの労働者は、主に顧客の関係書類を使用して以下の活動を行います。
新しい顧客のための新しい一式文書を作成します。
たとえば、顧客番号を検索条件として顧客を検索し、顧客の書類を開き、顧客のドキュメントで作業します
。
–
顧客のドキュメントを閲覧します。
–
いくつかのドキュメントを表示します。
–
メタデータを編集します。
–
関係書類をお気に入りに追加します。
次の拡張機能を提供する必要があります。
新しい顧客関係書類を作成するためのアクション
作成アクションには、関係書類の下部構造を作成するための中間層サービスが含まれています。
顧客の一式文書を開き、一式文書ビューを表示するアクション(118ページの図4-1を参照)一式文書
ビューの機能
ユーザーが次の項目を定義できるようにする構成ペイン:
–
関係書類のフォルダクラス(関係書類の最上位フォルダ)
–
すべての関係書類が提出されているフォルダー
–
すべてのドシエのフォルダ下部構造のテンプレートを保持するフォルダ
この章では、プラグインは反復プロセスで開発されます(すべてを実装してソリューションをパックしてデプロ
イすることはありません)。ステップバイステップの手順が提供されており、ソリューションをさまざまなタイ
ミングでパックして展開し、進捗状況をすぐに確認できます。このアプローチでは、エラーが発生した場合のト
ラブルシューティングがはるかに簡単になります。これは、すべてがうまく機能していたときにいつでも最後の
反復に簡単に戻ることができるためです。最後に行った変更のみを分析する必要があります。
IBM Rational Application DeveloperとIBM Content Navigator開発用のEclipseプラグイン拡張を統合開発環境
(IDE)として使用します。Eclipseのメニューとステップは、IBM Rational Application Developerについて説明
されているものと同様です。絶対に必要というわけではありませんが、この章では、IBM Content Navigator開
発用のEclipseプラグイン拡張を使用することをお勧めします。生成されたコードはすべて手動で作成すること
もできますが、Eclipseプラグインを使用すると、この章を簡単に理解できるようになります。
この章のソースコードをダウンロードするには、535ページの付録D「その他の資料」を参照してください
。
第4章基本的な拡張ポイントを使用したプラグインの開発
119
4.2ドシエ作成アクションの開発
このセクションでは、IBM Content Navigatorプラグインを作成して、新規顧客の関係書類を作成するプロセ
スについて説明します。
プラグインを介してドシエ作成アクションを追加する手順は、次のように要約されます。
1.新しいプラグインプロジェクトをセットアップします。
2.パッケージ化して展開します。
3.アクションを追加します。
4.アクションJavaScriptを実装します。
5. ECMシステムを準備し、現在のバージョンを展開します。
4.2.1新しいプラグインプロジェクトの設定
73ページの第3章「開発環境のセットアップ」では、プラグインを作成するプロセスと、ここで使用するIBM R
ational Application Developerプロジェクトの構造について説明します。
関係書類の例に新しいプラグインプロジェクトを設定するには、次の手順に従います。
1.表4-1の値を使用して、新しいIBM Content Navigatorプラグインプロジェクトを作成します。
表4-1 IBM Content Navigatorプラグインプロジェクトのパラメーター
パラメータ
値
説明的な名前
書類プラグイン
Javaパッケージ
com.ibm.ecm.extension
クラス名
DossierPlugin
2.バックエンドシステムに必要なライブラリをプロジェクトに追加します。
3.変更 build.xml 手順2の新しいJARファイルを追加し、さらに
必要に応じて変更します。
これらのステップについては、81ページの3.3、「プラグイン開発」ですでに説明されているため、ここでは詳細
を説明しません。
120 IBM Content Navigatorのカスタマイズと拡張
プロジェクトは図4-2のようになります。
図4-2最上位パッケージを含むプラグインプロジェクト
ウィザードは、プラグインクラスDossierPluginを com.ibm.ecm.extension
プラグインの基本クラスであるパッケージ。このクラスでは、この章で実装するすべての拡張ポイントを登録
します。
この時点では、プラグインは機能を提供しません。これは、IBM Content Navigatorの拡張ポイントを定義するす
べてのメソッドに「ダミー」の実装しかないためです。この章では、これらのメソッドのいくつかを実装して、
プラグインに機能を徐々に追加しています。
4.2.2パッケージ化とデプロイ
この反復的な段階的なアプローチの間に、プラグインを今すぐパックしてデプロイします。このようにして、プ
ロジェクトが正しく設定され、さらに機能強化するための良い出発点であることを確認できます。
プラグインをパッケージ化してIBM Content navigatorにデプロイする方法の説明は、83ページの3.3、「プラグ
インの開発」にあります。手順に従うと、図4-3のようなプラグインの管理ビューが表示されます。 122。
第4章基本的な拡張ポイントを使用したプラグインの開発
121
図4-3 DossierPluginのパッキングとデプロイ:反復1
ご覧のとおり、いいえ 拡張ポイント のIBM Content Navigatorが定義されています。ウィンドウが図4-3に示すウィン
ドウと同じであることを確認してください。
ウィンドウが似ていない場合: (Nameプラグインの行で始まる)下部が表示されない場合、プラグインはロ
ードされていません。これはおそらくいくつかのエラーが原因です。続行する前に、問題の原因を特定する必
要があります。1つの問題は、 Manifest.mf プラグインJARのファイルがプラグインクラスを正しく定義してい
ません。これは、たとえば、Javaパッケージの名前を変更し、マニフェストファイルを更新しなかった場合
に発生します。
495ページの第14章「デバッグとトラブルシューティング」で、IBM Content Navigatorのデバッグとトラブルシューティ
ングの方法を参照してください。
4.2.3アクションの追加
次に、IBM Content Navigatorアクション拡張ポイントを実装します。プラグインにアクションを追加するには、以
下の手順を実行します。
1.特定の com.ibm.ecm.extension.PluginAction Javaクラスと
そのメソッドを実装して、必要な機能を追加します。
2. getActions()メソッドをオーバーライドしてPluginActionクラスを追加することにより、ベースPluginクラスにフックしま
す。
122 IBM Content Navigatorのカスタマイズと拡張
ステップ1は、84ページの3.3.2、「プラグイン拡張の作成」に示すように、IBM Content Navigator開発用のEcli
pseプラグインの新規アクションウィザードで実行できます。クラス名としてCreateDossierActionを使用します
。これにより、各抽象メソッドの基本的な実装を持つクラスのスケルトンが作成されます。例4-1は、Create D
ossierサンプルに必要な主なメソッドを示しています。
getName():Create Dossier Actionというアクションの名前を返します。getPrivilege():Dossierの作成
アクションでは、リポジトリに新しいフォルダを追加できる必要があるため、privAddItem特権を指定します
。使用可能な特権の完全なリストについては、511ページの付録A「アクション特権」を参照してください。
isMultiDoc():このアクションのこのパラメーターについては関係ありません。これは、ドシエ作成アクシ
ョンをグローバルに定義するためです。つまり、ドキュメントやフォルダを選択せず​​にアクションを呼び出
すことができます。のデフォルト値 偽 許容範囲です。isGlobal():値を 本当 グローバルツールバーにCrea
te Dossierを表示したいからです。
getActionFunction():このメソッドは、アクションを実装するJavaScriptメソッドの名前を返す必要があ
ります(124ページの4.2.4、「アクションJavaScriptの実装」で説明しています)。この方法でJavaScript関
数を実装すると、JavaScript関数がグローバルネームスペースに配置されます。これは、「モダン」なDojo
の世界では避ける必要があります。これを実現する方法は、144ページの4.4、「Open Dossierアクションの
開発」で提供する別のアクションで示されています。しかし、現在のAPIがまだこのように行うように指示
しているため、この方法でも示します。
getServerTypes():IBM FileNet P8およびIBM Content Managerのサポートを提供するため、値を p8 そして
CM。
getActionModelClass():このメソッドを使用すると、アクションモデル( ecm.model.Action)。 このアク
ションにはデフォルトの実装を使用しますが、Open Dossierアクションにはカスタムアクションモデルを提
供します。147ページの4.4.2「アクションモデルの拡張」を参照してください。
例4-1 CreateDossierActionクラスの実装
パブリッククラスCreateDossierAction extends PluginAction {
public String getName(Locale locale){
「ドシエアクションの作成」を返します。
。。。
public String getPrivilege(){
「privAddItem」を返します。
} public boolean isMultiDoc(){
falseを返します。}
第4章基本的な拡張ポイントを使用したプラグインの開発
123
public boolean isGlobal(){
trueを返します。
} public String getActionFunction(){
「createDossierAction」を返します。
} public String getServerTypes(){
"p8、cm"を返します。
} public String getActionModelClass(){
""を返す; }}
ステップ2は、新しいアクションウィザードによって既に完了しています。例4-2のDossierPlug
inクラスのgetActions()メソッドの実装を参照してください。
例4-2プラグインクラスへのActionPluginの追加
public com.ibm.ecm.extension.PluginAction [] getActions(){
新しいcom.ibm.ecm.extension.PluginAction []を返す{
new com.ibm.ecm.extension.CreateDossierAction()}; }
4.2.4アクションJavaScriptの実装
このセクションで提供されるcreateDossierAction JavaScriptメソッドは、ユーザーが新しいアクションを実行す
ると呼び出されます。実装に必要なメソッドには、次のパラメーターが含まれます。
リポジトリ:現在のリポジトリへのリンクを提供します。items:これは配列です ecm /モデル/アイテム このアク
ションが適用されるオブジェクト。この例では、グローバルツールバーのアクションを使用しているため、この
パラメーターは未定義です。代替のアプローチは、フォルダーのコンテキストメニューでアクションを定義し、
ユーザーが親フォルダーを選択している間のみ、関係書類の作成アクションを呼び出せるようにすることです。
その場合、items配列は選択されたフォルダー項目で埋められます。
コールバック:アクションメソッドが完了した後に呼び出されるJavaScript関数を提供できます。
124 IBM Content Navigatorのカスタマイズと拡張
createDossierActionメソッドのタスクは、2つのサブタスクに分割できます。
1.新しいドシエの最上位フォルダとなる新しいフォルダを作成します。
2.テンプレート構造で定義されたサブフォルダー構造である最上位フォルダーのサブ構造を作成します。
このセクションでは、最初のタスクを示します。2番目のタスクは、133ページの4.3、「一式文書のサブ構造を作成する
ためのプラグインサービスの開発」で説明されています。
新しいフォルダを作成するために、汎用ウィジェットを再利用できます。
ecm / widget / dialog / AddContentItemDialog、 これは、すべてのタイプのアイテムをリポジトリーに追加するため
にIBM Content Navigatorによって提供されます。
代替アプローチ: 拡張して独自のダイアログを構築する
ecm.widget.dialog.BaseDialog。 プロセスを単純に保つために、IBM Content Navigatorのどの既存の
ウィジェットが要件に最も近くなるかを検討し、そのコンポーネントをニーズに合わせてみてくだ
さい。これが不可能な場合は、独自の実装を使用してください。
次の設定でこのダイアログを準備します。
新しい書類の親フォルダを設定します。この親フォルダーは、すべてのドシエフォルダーの親フォルダーになります。だから
私たちはそれを呼びます dossierRootFolder それをハードコーディングされたフォルダーに設定します。これは後のセクショ
ンで構成可能になります。
–
FileNet P8の場合、dossierRootFolderはフォルダーパスで指定されます。
–
Content Managerの場合、dossierRootFolderはアイテムの永続的な識別子(PID)で指定されます。正し
いPIDを取得する1つの方法は、IBM Content Navigatorの「参照」ペインで項目にナビゲートし、そのプ
ロパティー・ペインを開くことです。[システムのプロパティ]領域で、次の例のようにID値を確認できま
す。
96 3 ICM15 cm-richmondvm129 ClbFolder59 26 A1001001A13E14B45839G3889018
A13E14B45839G388901 14 1009
第4章基本的な拡張ポイントを使用したプラグインの開発
125
IBM FileNet P8およびIBM Content Managerのソースコード:
この章は、IBM FileNet P8とIBM Content Managerの両方に実装されています。ここのコードは最初にF
ileNet P8に実装されたため、ソースコードのある時点での用語はFileNet P8に固有のものである可能性
があります。
実装の詳細がIBM Content Managerに固有である場合、それらはソースコードのコメントに記載されてい
ます。したがって、プラットフォームがIBM Content Managerの場合、ソースコードをスキャンして、次
のテキストで始まるコメントを探します。
// CMコード:...。
フォルダークラスを一式文書のフォルダークラスに設定します。これは、ハードコードされたバージ
ョンではCustomerDossierです。
Content Managerの場合、一式文書の項目タイプの名前を設定します。ダイアログのタイトル
を 新しい一式文書を作成します。
ダイアログの紹介テキストをわかりやすい説明に変更します。
ダイアログを作成する前に、関係書類の親フォルダーを取得します。さまざまなアイテムを取得するために使用
できます ecm.model.Repository、 これはメソッドretrieveItem()を提供します。最初のパラメーターは新しいフ
ォルダーのパスです。2番目のパラメーターは、retrieveItem()メソッドが返されたときに呼び出されるコール
バック関数です。retrieveItem()メソッドは、パスによって指定されたアイテムを取得し、 ecm.model.Content
Item、 これは、callback()関数にパラメーターとして渡されます。例4-3を参照してください。
注意: retrieveItem()メソッドは非同期で実行されます。これは、中間層のサービス層に行くすべてのメソ
ッドの通常の方法です。このメソッドを呼び出すスレッドは、次のコード行にすぐに進みますが、取得プロセ
スはまだ進行中です。したがって、このメソッドの後のコードでは、要求されたアイテムがすでに取得されて
いると想定できません。取得したアイテムに依存する必要があるすべてのコードは、コールバック関数に入る
必要があります。
例4-3 DossierPlugin.jsでのcreateDossierActionの実装:反復1
require(["dojo / _base / declare"、 "dojo / _base / lang"、
"ecm / widget / dialog / AddContentItemDialog"]、function(declare、
lang、AddContentItemDialog){
lang.setObject( "createDossierAction"、function(repository、items){
var dossierRootFolder = "/ CustomerDossiers"; // CM code:folder-PID var dossierFolderClass =
"CustomerDossier"; // CMコード:アイテムタイプvar templateDossierStructure = "/
TemplateDossierStructure";
126 IBM Content Navigatorのカスタマイズと拡張
// CMコード:テンプレートフォルダー構造のアイテムのフォルダーPID
var _ createFolderSubStructure = 関数(dossierFolder){
console.log( "作成されたドシエフォルダ:" + dossierFolder.name); };
repository.retrieveItem(dossierRootFolder、function( dossierRootFolderItem){
var addContentItemDialog = new AddContentItemDialog();
addContentItemDialog.setDefaultContentClass(dossierFolderClass);
addContentItemDialog.show(repository、 dossierRootFolderItem、
false、false、_ createFolderSubStructure、 null、false、null);
addContentItemDialog.set( "title"、 "Create new Dossier"); addContentItemDialog.setIntroText
( "このフォルダは、関係書類の最上位フォルダになります。");
});
}); });
このサンプルでは、​​retrieveItemメソッドのコールバック関数は匿名で、1つのパラメーターdossierRootFolderIte
mがあり、取得したアイテムに設定されます。この関数の主な目的は、ダイアログを開いて新しい関係書類を作
成することです。次に、コールバック関数は_として宣言されます createFolderSubStructure
関数。 [OK]ボタンをクリックしてダイアログが閉じたときに呼び出され、新しいフォルダが作成されます。最初のパ
ラメーターであるdossierFolderには、新しく作成されたフォルダーが入力されます。
関係書類の下部構造の作成は、関係書類の新しく作成された最上位フォルダに依存します。そのため、その
コードは
_createFolderSubStructure コールバック関数。この反復では、メッセージのみをコンソールに出力します。
4.2.5 ECMシステムの準備と現在のバージョンの展開
新しいアクションでプラグインを再デプロイする前に、ECMバックエンドシステムを準備する必要があります。まず
、IBM FileNet P8システムを準備します。次に、IBM Content Managerシステムを準備します。次に、現在のプラグイ
ンバージョンをデプロイします。
IBM FileNet P8システムの準備
選択したFileNet ObjectStoreを準備します。次のいずれかの方法を使用できます。
のエクスポートマニフェストファイルをインポートします。 exportP8.zip ObjectStoreへのアーカイブ(付録
D、535ページの「追加資料」で提供)
第4章基本的な拡張ポイントを使用したプラグインの開発
127
次のアイテムを手動で準備します。
a。CustomerDossierという名前のP8フォルダークラスを作成し、CustomerNumber、Company、Phone Nu
mberなどのStringTypeプロパティを追加します。
b。名前でルートフォルダーの直下にP8フォルダーを作成します。
CustomerDossiers( このフォルダへのパスは/です CustomerDossiers)。 すべての顧客ドシエはこのフォル
ダにファイルされます。
c。名前でルートフォルダーの直下にP8フォルダーを作成します。
TemplateDossierStructure( このフォルダへのパスは
/ TemplateDossierStructure)。 これは、テンプレートのフォルダ構造であり、すべての書類で共有され
ます。
d。/の下にサブフォルダを作成します TemplateDossierStructure 名前を使う
といった 契約、クレーム、注文、 またはその他。レベル2のフォルダーを作成することもできます。
このフォルダ構造は、133ページの4.3「ドシエのサブ構造を作成するプラグインサービスの開発」で実
装するサービスによって、すべてのドシエにコピーされます。
IBM Content Navigatorユーザーに適切なアクセス権があることを確認してください。
顧客関係書類のルートフォルダ:少なくとも フォルダに追加 アクセスレベル。
テンプレートフォルダー(およびサブフォルダー)の場合:少なくとも プロパティを表示 アクセスレベル。フォルダークラスCus
tomerDossierおよびFolderの場合:少なくとも インスタンスを作成する
権利。
IBM Content Managerシステムの準備
次の手順でContent Managerリポジトリを準備します。
1. CustomerDossierという名前のアイテムタイプを作成します。この項目タイプを使用して、関係書類の最上位
フォルダとして機能するフォルダ項目を作成します。CustomerName、CustomerNumber、Company、Pho
ne Numberなどの属性を追加します。
2.という名前のフォルダアイテムを作成します CustomerDossiers。 すべてのお客様
ドシエはこのフォルダの子になります。
新しい一式文書を作成するときにこのアイテムタイプを事前選択しておく場合は、 CustomerDossier 顧客ド
シエのアイテムタイプ。その理由は、Content Managerの場合、AddContentItemDialogが、選択された親フ
ォルダーからの項目タイプで項目タイプを事前選択するためです。
128 IBM Content Navigatorのカスタマイズと拡張
3.名前でフォルダアイテムを作成します TemplateDossierStructure。 このフォルダ
itemはテンプレートのフォルダ構造であり、すべての書類で共有されます。
4.の子フォルダーとしてサブフォルダーアイテムを作成します。 TemplateDossierStructure、
といった 契約、クレーム、注文、 その他。レベル2のフォルダーアイテムを作成することもできます。
このフォルダ構造は、133ページの4.3「ドシエのサブ構造を作成するプラグインサービスの開発」で実装す
るサービスによって、すべてのドシエにコピーされます。
IBM Content Navigatorユーザーに適切な権限があることを確認してください。
顧客関係書類のルートアイテムフォルダーの場合:少なくともこのフォルダーアイテムに追加する権限。
テンプレートフォルダーアイテム(およびサブフォルダーアイテム)の場合:少なくともアイテムとその属性を
表示する権限。
ユーザーがアイテムタイプのフォルダーとしてアイテムを作成するための権限:
–
CustomerDossier(関係書類の最上位フォルダを作成するため)
–
テンプレート構造のフォルダーアイテムの<アイテムタイプ>(関係書類のサブフォルダー構造を作成
するため)。
アクションを使用してプラグインをデプロイする
この時点で、プラグインを再度デプロイします(121ページの4.2.2、「パッケージ化とデプロイ」のように)。プラグ
インペインの[アクション]セクションに、CreateDossierActionが表示されます(図4-4)。
図4-4 DossierプラグインとCreateDossierAction
第4章基本的な拡張ポイントを使用したプラグインの開発
129
次のステップは、ドシエ作成アクションを構成して、IBM Content Navigatorのグローバル・ツールバーに表示される
ようにすることです。新しいアクションをツールバー(またはメニュー)に追加するには、IBM Content Navigatorの
「管理」ビューで以下のステップを実行します。
1.選択 メニュー 左側のリストから。定義されているメニューのリストは
表示されます。この例では、 デフォルトのグローバルツールバー リストから。
2.デフォルトのメニューは読み取り専用であるため、ツールバーのコピーを作成して変更します。これを行うには、デフ
ォルトグローバルツールバーのコンテキストメニューを開き、 コピー。 [新しいメニュー]ダイアログボックスが開きま
す(図4-5)。
3. [新しいメニュー]ダイアログボックスで、次のように入力します。 ドシエグローバルツールバー の名前として
新しいメニュー。
4.左側のパネルの[利用可能なアクション]リストから、 CreateDossierAction
選択したアクションの右側のパネルに移動します。オプション:新しいアクションの前にセパレーターを
追加したり、グローバルツールバーに表示したくないアクションを削除したりできます。
図4-5 CreateDossierActionを含むグローバルツールバー
130 IBM Content Navigatorのカスタマイズと拡張
メニューが作成されたら、それを表示できるようにデスクトップに追加する必要があります。選択したデスクト
ップに新しいメニューを追加できます。DossierDesktopという名前の新しいデスクトップを作成します 以下の仕
様で:
管理ビューで、 デスクトップ → 新しいデスクトップ。
「一般」タブで、次の情報を入力します。
–
名前とID:DossierDesktop
–
認証:前のセッションで準備したObjectStoreを選択します。
「リポジトリー」タブで、前のサブセクションで準備したリポジトリーを割り当てます。
外観タブから; 次の設定を使用します。
–
アプリケーション名:Simple Dossier Management。
–
表示される機能:[お気に入り]、[参照]、[検索]を選択します。
–
デフォルトのリポジトリ:デスクトップに割り当てたリポジトリを選択します。
–
グローバルツールバーを表示(下部):有効にします。
デスクトップにグローバルツールバーを追加するには、次の手順を実行します。
1.を選択します メニュー 新しいメニューを割り当てるためのタブ。
2.グローバルツールバーを見つけ、関連するドロップダウンリストで、 書類
グローバルツールバー。 ツールバーはデフォルトのコンテンツリストツールバーのコピーであるため、ドロップダウンリ
ストに表示されます。図4-6を参照してください。
3.クリック セーブ デスクトップ構成への変更を送信します。
図4-6グローバルツールバーとしてのドシエグローバルツールバーの設定
第4章基本的な拡張ポイントを使用したプラグインの開発
131
これで、グローバルツールバーに新しいアクションを表示する準備ができました。
1.ブラウザーからキャッシュを空にします(FirefoxおよびInternet Explorerの場合はCtrl + Shift + Delのショートカットを使
用します)。
2.次の例のようなURLを入力します。
http:// < ウェブサーバー>:<ポート> / navigator /?desktop = DossierDesktop
3.適切な権限を持つユーザーとしてログインします。グローバルツールバーにCreate Dossierアクション
が表示されます。
トラブルシューティング: グローバルツールバーが表示されない場合は、[外観]タブの下部にあるデスクトッ
プの構成でチェックボックスをオンにしてください。
グローバルツールバーは表示されているが、ドシエの作成アクションが表示されていない場合は、ログインしたデスクトップに
、ドシエの作成アクションが選択されたグローバルツールバーが割り当てられていることを確認してください。
クリック 書類を作成 ボタンをクリックして、「関係書類の作成」ダイアログを開きます。133ページの図4-7を参
照してください。フォルダクラスと親フォルダは事前に選択されています。Content Managerリポジトリーの場合
、事前選択されたクラスは、128ページの「IBM Content Managerシステムの準備」で定義された指定のアイテム
タイプではなく、親フォルダーアイテムのアイテムタイプです。
ドシエのプロパティに意味のある値を入力してクリック OK。 新しいフォルダは親フォルダの子として作成され
ます(/ CustomerDossiers)。 結果を確認するには、参照機能に切り替えて、新しいフォルダーに移動します。
132 IBM Content Navigatorのカスタマイズと拡張
図4-7 [新しい一式文書の作成]ダイアログ
4.3書類の下部構造を作成するためのプラグインサービスの開発
プラグインがバックエンド機能を提供する必要がある場合は、サービスを実装する必要があります。多くの場合、ユーザーは
IBM Content Navigatorのユーザー・インターフェースでサービスを直接呼び出すことができないため、サービスはアクション
に統合されています。したがって、ユーザーはサービスを呼び出すアクションを呼び出す必要があります。
この例は、関係書類の下部構造を作成するサービスを開発する方法を示しています。
プラグインにサービスを追加するには、以下の手順を実行します。
1.特定のcom.ibm.ecm.extension.PluginService Javaクラスを作成し、そのメソッドを実装して、必要な機
能を追加します。
第4章基本的な拡張ポイントを使用したプラグインの開発
133
2. getServices()メソッドをオーバーライドするPluginServiceクラスを追加して、一般的なPluginクラス
にフックします。
85ページの3.3.2、「プラグイン拡張の作成」に示すように、どちらのタスクもIBM Content Navigator開発用の
Eclipseプラグインで実行できます。クラス名としてCreateSubStructureServiceを使用します。これにより、各抽
象メソッドのスケルトン実装と基本実装を持つクラスが作成されます。例4-4を参照してください。
例4-4 PluginServiceのスケルトン
パブリッククラスCreateSubStructureServiceはPluginService {
public String getId(){
「CreateSubStructureService」を返します。
} public String getOverriddenService(){
nullを返します。
} public void execute(PluginServiceCallbacks callbacks、HttpServletRequest request、HttpServle
tResponse response)が例外をスローします{
}}
例3-6は、ウィザードがDossierPluginクラスに新しいサービスを登録する方法を示しています。
例4-5 DossierPluginクラスのgetService()
public com.ibm.ecm.extension.PluginService [] getServices(){
新しいcom.ibm.ecm.extension.PluginService [] {を返します
new com.ibm.ecm.extension.CreateSubStructureService()}; }
サーバータイプ固有のコードを実装する前に、CreateSubStructureServiceサービスをCreate Dossierアクション
に統合します。DossierPlugin.jsのCreate Dossierアクションでは、すでに
_createFolderSubStructure 関数。135ページの例4-6は、新しい実装を示しています。
serviceSubramsオブジェクトでCreateSubStructureServiceサービスのパラメーターを準備し、プラグインによっ
て提供される任意の中間層サービスに使用するためにIBM Content Navigatorによって提供されるinvokePluginSe
rvice関数を使用します。最初のパラメーターはプラグインを指定します。2番目のパラメーターは、サービスのI
Dを指定します。
134 IBM Content Navigatorのカスタマイズと拡張
必要な追加のDojoモジュールを定義することを忘れないでください: ecm.model.Request。
例4-6 DossierPlugin.jsでのcreateDossierActionの実装
require(["dojo / _base / declare"、 "dojo / _base / lang"、
"ecm / widget / dialog / AddContentItemDialog"、 " ecm /モデル/リク
エスト "]、
function(declare、lang、AddContentItemDialog、 リクエスト) {
。。。
var _createFolderSubStructure = function(dossierFolder){
var serviceParams = {
icnRepository:repository.id、serverType:repo
sitory.type、dossierId:dossierFolder.id、
templateFolderStructure:templateDossierStructure};
Request.invokePluginService( "DossierPlugin"、 "CreateSubStructure
Service"、
{requestParams:serviceParams}
};
);
この時点で、一式文書の最上位フォルダーが作成された後にサービスが呼び出されます。すべての準備が
整ったので、実際のサービスを実装できます。
サービスに実装する必要がある主なメソッドは 実行します。 この例では、サービスは新しいドシエの最上位フォ
ルダの下にフォルダ構造を作成します。
サービスの実装は、次の2つの部分で構成されています。
サーバーの種類に依存しない部分:パラメーターの抽出、バックエンドに固有のサービス呼び出しの準備と
呼び出し
選択したサーバーの種類に依存する部分:バックエンドサービスの実際の実装
したがって、コードを異なるファイルに分けます。1つはサーバーに依存せず、サポートされているサーバーの種
類ごとに1つの実装ファイルがあります。次のサブセクションで各ファイルについて説明します。この本の焦点は
IBM Content Navigator開発であり、バックエンド実装ではないため、サーバー・タイプ固有のコードは詳細には
説明されていません。また、特定のサーバータイプで動作するコードを開発する必要がある場合は、そのサーバ
ータイプでの開発に精通している必要があります。
第4章基本的な拡張ポイントを使用したプラグインの開発
135
4.3.1サーバータイプに依存しないコード:CreateSubStructureService
execute()メソッドは、渡されたパラメータを抽出することから始まります。例4-7を参照してください。必要なJavaインポー
トステートメントを追加することを忘れないでください(ショートカットとして、Ctrl + Shift + Oを使用できます)
例4-7 CreateSubStructureServiceの実装
public void execute(PluginServiceCallbacks callbacks、HttpServletRequest request、HttpServletResp
onse response)が例外をスローします{
callbacks.getLogger()。logEntry(this、 "execute"、request); 文字列icnRepositoryId = request.
getParameter( "icnRepository"); String serverType = request.getParameter( "serverType"); 文字
列dossierId = request.getParameter( "dossierId"); 文字列templateFolderStructurePath = request.ge
tParameter( "templateFolderStructure");
JSONResponse jsonResults = new JSONResponse(); {を試す
if( "p8" .equals(serverType)){
CreateSubStructureServiceP8。 execute(callbacks、jsonResults、
dossierId、templateFolderStructurePath、icnRepositoryId);
} else if(serverType.equals( "cm")){
オブジェクトsynchObject =
callbacks.getSynchObject(icnRepositoryId、serverType);
if(synchObject!= null){
同期(synchObject){
CreateSubStructureServiceCM。 execute(callbacks、
jsonResults、dossierId、templateFolderStructurePath、icnRepositoryId);
}}
そうしないと {
CreateSubStructureServiceCM。 execute(callbacks、
jsonResults、dossierId、templateFolderStructurePath、icnRepositoryId);
}}
そうしないと {
JSONMessage jsonMessage = new JSONMessage(0、 "サーバータイプ
サポートされていません: "+ serverType、" "、" "、"まだ実装されていません。 "、" ");
jsonResults.addErrorMessage(jsonMessage); }
}キャッチ(例外e){
callbacks.getLogger()。logError(this、 "execute"、request、e); JSONMessage jsonMessage
= new JSONMessage(0、 "書類のサブ構造の作成に失敗しました。"、e.getMessage()、 ""、 "IBM Co
ntent Navigatorのログで詳細を確認してください。"、 "");
136 IBM Content Navigatorのカスタマイズと拡張
jsonResults.addErrorMessage(jsonMessage);
} jsonResults.serialize(response.getOutputStream()); callbacks.getLogger()。log
Exit(this、 "execute"、request); }
アクションとサービスを実装するときは、機能を実装するために必要なパラメーターを決定する必要があ
ります。この例では、次のパラメーターが要求オブジェクトでサービスに渡されます。
icnRepositoryId:新しい一式文書が保管されるリポジトリーを識別します。
serverType:ターゲットのバックエンドサーバータイプを識別します。サービスタイプの場合、有効な値は p8 そして
CM。
dossierId:これは、新しく作成された最上位フォルダーのアイテムIDです。templateFolderStructurePath:
関係書類のテンプレートとして機能するサブフォルダー構造を持つバックエンドリポジトリ内のフォルダー
を指定します。各ドシエの最上位フォルダの下に、これらのフォルダ構造が作成されるため、最後に、すべ
てのドシエは同じサブ構造になります。
注意: dossierIdパラメーターは、IBM Content NavigatorのID(ID)です。基になるECMサーバータイプの識
別子と混同しないでください。サーバータイプごとに構文が異なるため、サーバータイプ固有のコードで処理
されます。
IBM FileNet P8の場合、構文は次のとおりです。
< classId>、<objectStoreId>、<objectId>
IBM Content Managerの場合、構文は永続ID(PID)と同じです。
パラメータを取得した後、サーバーのタイプに応じて、適切なサービス実装が呼び出されます。バックエンド固
有のコードは、
CreateSubStructureServiceP8.java そして CreateSubStructureServiceCM.java。 これらのサーバータイプの1つだ
けをサポートする場合は、コードでサポートされていないサーバータイプの呼び出しをコメント化します。そう
でない場合、コードは両方の実装クラスを探すため、エラーが発生します。
サービスはJSON応答を返します。IBM Content Navigatorは、
com.ibm.ecm.json 便宜上、いくつかのヘルパークラスを含むJavaパッケージ。
第4章基本的な拡張ポイントを使用したプラグインの開発
137
この例では、JSONResponseを使用します。これを使用して、フロントエンドに3種類のメッセージを提供
できます。
addInfoMessage:このメッセージは、IBM Content Navigatorのステータスバーに表示されます。
addWarningMessage:この警告はポップアップウィンドウとして表示されます。addErrorMessag:このエラー
メッセージはポップアップウィンドウとして表示されます。
サービスがデータをフロントエンドに返す必要がある場合は、任意のプロパティを応答オブジェクトに追加でき
ます。私たちのサービスは部分構造のみを作成し、何も返さないため、情報メッセージのみを追加します。
最後に、JSONResponのserializeメソッド se オブジェクトをJSONテキストのストリームに変換し、HTTP応答オ
ブジェクトの出力ストリームに書き込みます。
4.3.2 IBM FileNet P8コード:CreateSubStructureServiceP8
IBM FileNet P8のサーバータイプ固有のコードはJavaクラスで処理されます
CreateSubStructureServiceP8.java。 したがって、開発環境で、新しいJavaクラスを com.ibm.ecm.extension パ
ッケージに次の名前を付けます。 CreateSubStructureServiceP8。
クラスには、名前の静的メソッドがあります 実行、 これはメインのエントリポイントであり、139ページの例
4-8に示すように、次の手順を実行します。
1. IBM FileNet Content Platform Engineに対して認証します。
2. ObjectStoreをフェッチします。
3. IBM Content Navigator識別子を解析します。
4. ObjectStoreから新しく作成されたフォルダー(関係書類の最上位フォルダー)をフェッチします。これは
、サブストラクチャーの親フォルダーになります。
5.作成するフォルダー構造を保持するテンプレートフォルダーを取得します。
6.サブフォルダー構造を再帰的に作成する作業実行者createDossierSubstructureP8を呼び出します。
7.応答を返します。
例を読みやすくするために、このコードには限られたエラーと例外処理のみが含まれています。プロダ
クション品質のコードでは、エラー処理を追加する必要があります。たとえば、サンプルコードでは、
templateFolderStructurePathが、構成されたObjectStoreに存在するフォルダーへの有効なパス名である
と想定しています。フォルダパスでエラーチェックは行われません。
138 IBM Content Navigatorのカスタマイズと拡張
例4-8の実装 実行パッケージcom.ibm.ecm.extensionを含むCreateSubStructureServiceP8; import java.uti
l.Iterator; import java.util.StringTokenizer;
import javax.security.auth.Subject; import
com.filenet.api.collection.FolderSet; import
com.filenet.api.constants.RefreshMode; import
com.filenet.api.core.Factory; import com.filenet.api.core.Folder; import
com.filenet.api.core.ObjectStore; import
com.filenet.api.util.UserContext; import
com.ibm.ecm.json.JSONMessage; import
com.ibm.ecm.json.JSONResponse;
パブリッククラスCreateSubStructureServiceP8 {
public static void execute(PluginServiceCallbacks callbacks、JSONResponse jsonResults、Str
ing dossierId、
String templateFolderStructurePath、String icnRepositoryId){Subject subject = callbacks.getP8
Subject(icnRepositoryId); UserContext.get()。pushSubject(subject); {を試す
ObjectStore objectStore =
callbacks.getP8ObjectStore(icnRepositoryId);
StringTokenizer dossierIdTok = new StringTokenizer(dossierId、 "、");
String classID
=(dossierIdTok.hasMoreTokens()?dossierIdTok.nextToken():null);
String objectStoreID
=(dossierIdTok.hasMoreTokens()?dossierIdTok.nextToken():null);
文字列dossierObjectId =(dossierIdTok.hasMoreTokens()?dossierIdTok.nextToken()
:null);
フォルダdossierFolder =
Factory.Folder.fetchInstance(objectStore、dossierObjectId、null);
フォルダーtemplateRootFolder =
Factory.Folder.fetchInstance(objectStore、templateFolderStructurePath、null); createDossierSubstructureP8(
dossierFolder、templateRootFolder、objectStore);
JSONMessage infoMessage = new JSONMessage(1000、 "Successfully created dossier substru
cture"、 ""、
「ドッサーのドシエサブストラクチャーが正常に作成されました」
+ dossierFolder.get_Name()、 ""、 "");
jsonResults.addInfoMessage(infoMessage); } 最後に {
第4章基本的な拡張ポイントを使用したプラグインの開発
139
UserContext.get()。popSubject(); }}}
createDossierSubstructureP8 メソッドを例4-9に示します。
例4-9 createDossierSubstructureP8メソッドの実装
private static void createDossierSubstructureP8(Folder dossierFolder、Folder templateRootFolder、ObjectSt
ore os){
FolderSet subFolders = templateRootFolder.get_SubFolders(); イテレータit =
subFolders.iterator(); while(it.hasNext()){
フォルダーtemplateFolder =(フォルダー)it.next(); 文字列subFolderName = templ
ateFolder.get_FolderName(); フォルダsubFolder =
dossierFolder.createSubFolder(subFolderName);
subFolder.save(RefreshMode.REFRESH); //再帰的に呼
び出します
createDossierSubstructureP8(subFolder、templateFolder、os); }}
の子フォルダを取得します templateRootFolder フォルダを作成し、それぞれに対応する子フォルダを作成しま
す dossierFolder、 これは、関係書類の最上位フォルダです。作成された子フォルダーごとに、このメソッドは
再帰的に呼び出されるため、新しく作成された子フォルダーは、次のレベルの再帰の親フォルダーになります
。
より洗練された実装では、テンプレートからのフォルダ名だけでなく、フォルダクラスも変更し、テンプレート
がフォルダ構造にファイルされている場合はドキュメントをコピーします。1つの使用例は、クライアントへの一
貫した通信に使用されるオフィス文書のテンプレートです。
4.3.3 IBM Content Managerコード:CreateSubStructureServiceCM
IBM Content Managerのサーバータイプ固有のコードはJavaクラスで処理されます CreateSubStructureServiceC
M.java。 開発環境で、新しいJavaクラスを com.ibm.ecm.extension パッケージに次の名前を付けます。 CreateS
ubStructureServiceCM。
140 IBM Content Navigatorのカスタマイズと拡張
クラスには、名前の静的メソッドがあります 実行、 これは、例4-10に示すように、メインエントリポイント
であり、次の手順を実行します。
1.コールバックからデータストアを取得します。
2.親フォルダーアイテムとテンプレート構造を保持するアイテムのDDOを作成します。
3.サブフォルダー構造を再帰的に作成する作業実行者createDossierSubstructureCM8を呼び出します
。
4. JSON応答オブジェクトに情報メッセージを追加します。
例を読みやすくするために、このコードには限られたエラーと例外処理のみが含まれています。プ
ロダクション品質のコードでは、エラー処理を追加する必要があります。たとえば、サンプルコー
ドでは、
templateFolderStructurePath セマンティックタイプがフォルダのアイテムの有効なPIDがあります。サンプルコ
ードでは、ここではエラー処理は行われていません。
例4-10実行によるCreateSubStructureServiceCMの実装
パッケージcom.ibm.ecm.extension;
import java.util.ArrayList; import
java.util.Iterator; import java.util.List;
import com.ibm.ecm.json.JSONMessage; import
com.ibm.ecm.json.JSONResponse; import
com.ibm.mm.sdk.common.DKAttrDefICM; import
com.ibm.mm.sdk.common.DKConstant; import
com.ibm.mm.sdk.common.DKConstantICM; import
com.ibm.mm.sdk.common.DKDDO; import
com.ibm.mm.sdk.common.DKDatastoreDefICM; import
com.ibm.mm.sdk.common.DKException; import
com.ibm.mm.sdk.common.DKFolder; import
com.ibm.mm.sdk.common.DKItemTypeDefICM; import
com.ibm.mm.sdk.common.DKRetrieveOptionsICM; import
com.ibm.mm.sdk.common.DKSequentialCollection; import
com.ibm.mm.sdk.common.DKUsageError; import
com.ibm.mm.sdk.common.dkIterator; import
com.ibm.mm.sdk.server.DKDatastoreICM;
パブリッククラスCreateSubStructureServiceCM {
public static void execute(PluginServiceCallbacks callbacks、JSONResponse jsonResults、String doss
ierId、
String templateFolderStructurePath、String icnRepositoryId)はDKUsageError、DKException、Exc
eption {をスローします
DKDatastoreICM datastore = callbacks.getCMDatastore(icnRepositoryId);
第4章基本的な拡張ポイントを使用したプラグインの開発
141
DKDDO ddoDossier = datastore.createDDOFromPID(dossierId); 文字列dossierName = getRepresen
tsItemAttribute(ddoDossier、datastore); DKDDO ddoTemplate =
datastore.createDDOFromPID(templateFolderStructurePath);
createDossierSubstructureCM8(ddoDossier、ddoTemplate、datastore);
JSONMessage infoMessage = new JSONMessage(1000、 "Successfully created dossier substructur
e"、 ""、
"ドッサーのドシエサブストラクチャが正常に作成されました" +
dossierName、 ""、 "");
jsonResults.addInfoMessage(infoMessage);
} private static String getRepresentsItemAttribute(DKDDO item、DKDatastoreICM datastore)throws Exce
ption {
String objectType = item.getPidObject()。getObjectType(); DKDatastoreDef
ICM dataStoreDef =(DKDatastoreDefICM)datastore.datastoreDef();
DKItemTypeDefICM itemType
=(DKItemTypeDefICM)dataStoreDef.retrieveEntity(objectType);
DKSequentialCollection attrCol
=(DKSequentialCollection)itemType.listAllAttributes();
dkIterator iter = attrCol.createIterator();
while(iter.more()){
DKAttrDefICM attr =(DKAttrDefICM)iter.next();
if(attr.isRepresentative()){
attr.getName();を返す }
} //名前が見つかりません
return item.getPidObject()。getPrimaryId()。toString(); }}
例4-11は、createDossierSubstructureCM8メソッドの実装を示しています。
のサブフォルダDDOのリストを取得します templateRootFolder DDOを作成し、それぞれに対応する子アイテムを
dossierFolder DDO、 これは、関係書類の最上位のフォルダアイテムです。作成された子フォルダーアイテムご
とに、このメソッドは再帰的に呼び出されるため、新しく作成された子フォルダーアイテムは、次のレベルの再
帰の親フォルダーアイテムになります。
例4-11 createDossierSubstructureCM8メソッドの実装
プライベート静的void createDossierSubstructureCM8(DKDDO dossierFolder、DKDDO templateRootFolder、DK
DatastoreICMデータストア)
例外をスローします{
142 IBM Content Navigatorのカスタマイズと拡張
List <DKDDO> subFolders = getSubfolder(templateRootFolder、datastore); System.out.println
( "got number subFolders:" + subFolders.size()); Iterator <DKDDO> it =
subFolders.iterator(); while(it.hasNext()){
DKDDO templateFolder = it.next();
DKRetrieveOptionsICM retrieveOptions =
DKRetrieveOptionsICM.createInstance(datastore);
retrieveOptions.baseAttributes(true); templateFolder.retrieve(retrieveOptions.dkNVPair()
); String attributeName = getRepresentsItemAttribute(templateFolder、datastore);
System.out.println( "got attributeName:" + attributeName); 文字列subFolderName =(Str
ing)getAttributeValue(attributeName、templateFolder);
System.out.println( "create Subfolder ...:" + subFolderName); String itemType =
templateFolder.getObjectType();
DKDDO subFolder = createChildFolder(datastore、dossierFolder、subFolderName、at
tributeName、itemType);
//再帰的に呼び出します
createDossierSubstructureCM8(subFolder、templateFolder、datastore); }
} private static List <DKDDO> getSubfolder(DKDDO folder、DKDatastoreICM datastore)throws
Exception {
DKRetrieveOptionsICM dkRetrieveOptions =
DKRetrieveOptionsICM.createInstance(datastore);
dkRetrieveOptions.baseAttributes(true);
dkRetrieveOptions.linksOutbound(true);
dkRetrieveOptions.linksTypeFilter(
DKConstantICM.DK_ICM_LINKTYPENAME_DKFOLDER); folder.retrieve(dkRetrieveOptio
ns.dkNVPair()); short dataid = folder.dataId(DKConstant.DK_CM_NAMESPACE_ATTR、DKCon
stant.DK_CM_DKFOLDER);
if(dataid == 0){
throw new Exception( "DKFolder属性が見つかりません!DDOがフォルダーではないか、フォルダ
ーの内容が明示的に取得されていません。");
} DKFolder dkFolder =(DKFolder)folder.getData(dataid);
dkIterator iter = dkFolder.createIterator(); ArrayList <DKDDO>
subFolders = new ArrayList <DKDDO>(); while(iter.more()){
DKDDO ddo =(DKDDO)iter.next();
subFolders.add(ddo);
} return subFolders; }
第4章基本的な拡張ポイントを使用したプラグインの開発
143
プライベート静的DKDDO createChildFolder(DKDatastoreICMデータストア、DKDDO parentFolder、文字
列subFolderName、文字列attributeName、
文字列itemType)は例外をスローします{DKDDO newDDOFolder = datast
ore.createDDO(itemType、DKConstant.DK_CM_FOLDER);
short dataId = newDDOFolder.dataId(DKConstant.DK_CM_NAMESPACE_ATTR、attributeName);
newDDOFolder.setData(dataId、subFolderName);
newDDOFolder.addProperty(DKConstantICM.DK_ICM_PROPERTY_PARENT_FOLDER、parentFolder);
newDDOFolder.add();
System.out.println( "追加されたsubFolder:" + subFolderName); newDDOFolderを返し
ます。}
プライベート静的オブジェクトgetAttributeValue(String attributeName、DKDDO item){
オブジェクト値= null; {を試す
//ユーザー定義の属性
short dataId = item.dataId(DKConstant.DK_CM_NAMESPACE_ATTR、attributeName);
if(dataId == 0){
//システム属性
dataId = item.propertyId(attributeName); if(dataId ==
0){
System.out.println( "属性が見つかりません:" +
attributeName + "オブジェクト用" + item.getPidObject()。getIdString());
「値が見つかりません」を返します。} そうし
ないと {
値= item.getProperty(dataId); } } そうしないと
{
値= item.getData(dataId); }
}キャッチ(DKUsageError e){
System.out.println( "属性が見つかりません:" + attributeName + "for object" + item.getPidObje
ct()。getIdString()+ "error:"
+ e.getMessage());
「値が見つかりません」を返します。
}戻り値; }
より洗練された実装では、テンプレートフォルダーアイテムとアイテムタイプの名前属性を適合させ、テンプ
レートフォルダー構造にファイルされている場合はドキュメントをコピーします。1つの使用例は、クライア
ントへの一貫した通信に使用されるオフィス文書のテンプレートです。
144 IBM Content Navigatorのカスタマイズと拡張
4.3.4デプロイと検証
プラグインをパッケージ化して再度デプロイします(121ページの4.2.2、「パッケージ化とデプロイ」で説明)
。残念ながら、プラグインの管理ペインには、新しいサービス拡張が表示されません。したがって、新しい機能
を試す必要があります。
1.ブラウザのキャッシュを空にして、ページを再読み込みします。
2.適切なユーザーでDossierDesktopにログインします。
3.ドシエ作成アクションを確認します。
クリックすると 書類を作成 グローバルツールバーで、最上位フォルダーの作成に続いて、このセクションで実装
される一式文書の下部構造が作成されます。下部にあるIBM Content Navigatorのステータスバーをご覧ください
。下部構造が作成されたというメッセージが表示されます。
トラブルシューティング: IBM Content Navigatorでアクションの実行中にエラーを受け取った場合は、中間層サービ
スが呼び出されているかどうかを判別します(この例では、新しいフォルダーの追加は対応する中間層サービスで終
了しています)。ある場合は、アプリケーションサーバーのシステムアウトログでエラー情報を確認してください。
WebSphereの場合、これは次のとおりです。
< WebSphereプロファイルへのパス> / ログ/ < serverName> / SystemOut.log
結果を確認するには、IBM Content Navigatorの参照機能に切り替えて、新しい関係書類の下部構造に移動す
る必要があります。次のセクションでは、閲覧機能で一式文書を直接開くアクションを開発します。
4.4 Open Dossierアクションの開発
サンプルシナリオにおける一式文書管理の主な要件の1つは、特定の一式文書に包括的なビューを提供することで
す。最も簡単な方法は、IBM Content Navigatorに含まれている参照機能ペインを使用し、そのルートフォルダー
を、表示する必要がある書類の最上位フォルダーに設定することです。
このセクションでは、選択した一式文書を参照ペインで開くアクションを開発します。検索機能の結果リストな
ど、別の機能で実行された場合、アクションには参照機能への切り替えが含まれます。
第4章基本的な拡張ポイントを使用したプラグインの開発
145
プラグインを介してOpen Dossierアクションを追加する手順は、次のように要約されます。
1.プラグインにアクションを追加します。
2.アクションモデルを拡張します。
3.パック、展開、および構成します。
4.関係書類を開くために、関係書類を作成するアクションを強化します。
4.4.1プラグインへのアクションの追加
122ページの4.2.3「アクションの追加」と同様に、一式文書プラグインの新しいアクションを作成するために、コ
ンテンツナビゲーター開発用のEclipseプラグインを使用します。OpenDossierActionという名前を付けます 例4-12
に示すように、そのメソッドを実装します。
getIdおよびgetName:ウィザードによって設定されます。
getPrivilege:ユーザーが一式文書の最上位のフォルダーを表示する権限を持っている場合、そのユーザーは
一式文書を開くことも許可されるため、アクションには特権を指定しません。isMultiDoc:に設定 偽 ユーザー
が一度に開くことができる関係書類は1つだけだからです。isGlobal:に設定 偽 書類の最上位フォルダを選択
してアクションを実行する必要があるためです。このアクションをフォルダのコンテキストメニューで使用
できるようにします。
getActionFunction:アクションモデルクラスのperformActionメソッドでアクションの実装を提供するため、
空の文字列に設定します。
getActionModelClass:Open Dossierアクションのアクションモデルクラスを定義するDojoモジュールを指定しま
す。に設定しました dossierPluginDojo / OpenDossierAction、 これは、IBM Content Navigatorがロードすることを
示しています OpenDossierAction.js ディレクトリまたはパッケージ内
dossierPluginDojo。 OpenDossierActionモデルは、147ページの4.4.2、「アクションモデルの拡張
」で開発しました。
例4-12 openアクションPluginActionの実装
パブリッククラスOpenDossierActionはPluginAction {
public String getId(){
「OpenDossierAction」を返します。
} public String getName(Locale locale){
「Open Dossier」を返します。}
146 IBM Content Navigatorのカスタマイズと拡張
public String getPrivilege(){
""を返す;
} public boolean isMultiDoc(){
falseを返します。
} public boolean isGlobal(){
falseを返します。
} public String getActionFunction(){
""を返す;
} public String getServerTypes(){
"p8、cm"を返します。
} public String getActionModelClass(){
「dossierPluginDojo / OpenDossierAction」を返します。}}
ウィザードは、DossierPluginのgetActionsメソッドで定義されたPluginActionsにOpenDossierActionクラスも追加
します。例4-13を参照してください。
例4-13 DossierPlugin.javaのgetActionsメソッド
public com.ibm.ecm.extension.PluginAction [] getActions(){
新しいcom.ibm.ecm.extension.PluginAction [] {を返します
new com.ibm.ecm.extension.CreateDossierAction()、new com.ibm.ecm.ex
tension.OpenDossierAction()};
}
4.4.2アクションモデルの拡張
IBM Content Navigatorで実行される各アクションには、対応するモデルがあります。 ecm /モデル/アクション。
モデルはアクションの動作を定義します。アクションモデルの主な方法は次のとおりです。
isEnabled:ボタン(またはメニュー)がアクティブになるタイミングを決定します。デフォルトの実装があり、た
とえば、選択したアイテムのタイプがこのアクションでサポートされているかどうかをチェックします。
isVisible:ボタン(またはメニュー)がツールバー(またはコンテキストメニュー)に表示されるかどうかを決定し
ます。デフォルトの実装があり、たとえば、ユーザーがアクションを実行するための十分な権限を持っていること、
および現在のリポジトリがそのアクションをサポートしていることを確認します。
第4章基本的な拡張ポイントを使用したプラグインの開発
147
performAction:デフォルトの実装は、アクションのアクションハンドラを見つけようとします。このコードは、ユー
ザーがそのアクションを実行すると最終的に実行されます。
ほとんどのデフォルトアクションは、最初の2つのメソッドのデフォルト実装を使用し、実際のアクションを実
行するために次のクラスの対応するメソッドを呼び出します。
ecm / widget / layout / CommonActionsHandler
たとえば、checkInアクションのCommonActionsHandlerには、ドキュメントのチェックインを実装す
るactionCheckInメソッドがあります。
このセクションでは、Open DossierアクションをperformActionメソッドに直接実装します。
グローバル空間での行動の宣言: ドシエ作成アクション(133ページの4.3、「ドシエのサブ構造を作成する
ためのプラグインサービスの開発」から)では、アクションをグローバルJavaScriptオブジェクトとして定義
しました。
DossierPlugin.js ファイル:
lang.setObject(“ createDossierAction”、function(repository、...){...});
この関数は、IBM Content Navigatorが認識しているアクションハンドラーに登録されます。ユーザーがアク
ションを実行すると、performActionのデフォルト実装がこのアクションを見つけて呼び出すことができます
。
グローバルスペースを「汚染」したくないので、これは良い習慣ではありません。したがって、Open D
ossierアクションを定義する、よりオブジェクト指向の方法を提供します。それが属するクラスで定義し
ます。これは、専用のアクションモデルクラスです。このアプローチは、オブジェクト指向プログラミン
グの主要な概念の1つであるカプセル化の原則に従います。
の中に com.ibm.ecm.extension.WebContent.dossierPluginDojo パッケージ、新しいを作成します OpenDossierAction.js
提出し、私たちの専門を宣言 アクション
モデルクラス。スケルトンを示す149ページの例4-14を参照してください。
定義: 新しいモジュールをAMDローダーに登録し、依存するモジュール( dojo / _base / declare、ecm
/ model / Action)、 実装に必要です。
宣言: 次のように識別されるアクションモデルクラスを指定します
dossierPluginDojo.OpenDossierAction。
上記の3つのメソッドのデフォルト実装。今度は、スーパークラスのメソッドのみを呼び出します。
148 IBM Content Navigatorのカスタマイズと拡張
例4-14 OpenDossierAction.jsの実装
define(["dojo / _base / declare"、 "ecm / model / Action"]、
function(declare、Action){
return declare( "dossierPluginDojo.OpenDossierAction"、[Action]、{
isEnabled:function(repository、listType、items、teamspace、resultSet){
this.inherited(arguments);を返します。}、
isVisible:function(repository、listType){
this.inherited(arguments);を返します。}、
performAction:function(repository、itemList、callback、teamspace、resultSet、param
eterMap){
this.inherited(arguments);を返します。}}); });
isEnabledメソッドの開発
まず、このメソッドのデフォルトの実装を使用して呼び出します
this.inherited(arguments)。 次に、独自の実装を追加します。
選択したアイテムがフォルダーであり、それが一式文書の最上位フォルダーである場合にのみ、一式文書を開くアクション
を有効にします。また、これらのすべてのドシエフォルダーは特定のフォルダークラス(この例ではCustomerDossier)か
らのものであるため、選択したアイテムがこのクラスのオブジェクトであるかどうかを確認できます。例4-15は、isEnab
ledメソッドの実装を示しています。
例4-15 OpenDossierAction.jsのisEnabledメソッドの実装
isEnabled:function(repository、listType、items、teamspace、resultSet)
{var enabled = this.inherited(arguments);
if(items && items [0] .isFolder && items [0] .getContentClass){
var sameClass =
items [0] .getContentClass()。name == "CustomerDossier";
有効になっている&& items [0] .isFolder()&& sameClass;
} return false; }、
第4章基本的な拡張ポイントを使用したプラグインの開発
149
performActionメソッドの開発
この方法には2つのタスクがあります
参照機能で、FolderTreeのルートフォルダーを、選択した一式文書の最上位フォルダーに設定します。
[機能の参照]ペインに切り替えます。
例4-16に、OpenDossierActionクラスの追加関数として提供するルートフォルダーを設定するコードを
示します。
例4-16 OpenDossierAction.jsでのsetBrowseRootFolderの実装
setBrowseRootFolder:function(newRootFolder、browseFeature){
browseFeature.folderTree.setFolder(newRootFolder); //オプションでコンテン
ツリストを最初の子に設定します。}
機能を切り替えるには、コンポーネントとこれを担当するメカニズムを理解する必要があります。
IBM Content Navigatorのデスクトップのレイアウト( ecm.model.Desktop) 表示されるウィジェットとその配置
方法を決定します。デフォルトの基本実装は ecm.widget.layout.MainLayout。 MainLayoutの2つの側面に関心があ
ります。
getAvailableFeatures(): デスクトップで利用可能な機能を提供します。ここでは、ブラウズ機能の定義と
、切り替えに必要なその識別子であるbrowsePaneを見つけます。
launchBarContainer:を通じて定義されるプロパティです
data-dojo-attach-point の中に MainLayout.html テンプレート。タイプです
ecm.widget.layout.LaunchBarContainer 表示される特定の機能の初期化と選択を処理する実際のコンポー
ネントです。
必要な背景情報を入手したので、参照機能に切り替えるコードを示す151ページの例4-17を参照してください。
機能に切り替える(LaunchBarContainerの)Mainメソッドは次のとおりです。
selectContentPane(ボタン、UUID、パラメーター)
したがって、3つのパラメーターを指定する必要があります。
ボタン: getButtonByIDメソッドでボタンを取得します。
UUID: この識別子は、getAvailableFeaturesメソッドからわかります。
パラメータ: リポジトリを指定する必要があります。これは、[機能の参照]ウィンドウで必要です。
150 IBM Content Navigatorのカスタマイズと拡張
getContentPaneByIDメソッドは、初期化された参照機能を返します。最後に、setBrowseRootFolderメソッ
ドを呼び出します。
例4-17 browsePaneへの切り替えの実装
performAction:function(repository、itemList、callback、teamspace、resultSet、parameterMap){
this.logEntry( "performAction"、 "items =" + itemList); var newDossier = itemList
[0]; var layout = ecm.model.desktop.getLayout(); var featureIdToSwitch = "brow
sePane"; 変数ボタン=
layout.launchBarContainer.getButtonByID(featureIdToSwitch);
var params = {};
params.repository = repository;
layout.launchBarContainer.selectContentPane(button、featureIdToSwitch、param
s);
var browseFeature =
layout.launchBarContainer.getContentPaneByID(featureIdToSwitch);
this.setBrowseRootFolder(newDossier、browseFeature); this.logExit( "perfor
mAction"); }、
ロギング: IBM Content Navigatorは、便利なロギング機能を提供します ecm / LoggerMixin モジュール。一般
的なログ機能の一部は次のとおりです。
たとえば、各デバッグレベルのログメソッド logDebug(...)、logInfo(...)、 その他:
log <DebugLevel>( functionName、message、extra)
操作の開始と終了をマークするには:
logEntry / logExit( functionName、message)
の LoggerMixin すべてのモデルの基本モジュールにすでに混合されています( ecm / model /
_ModelObject) したがって、カスタムモジュールで使用する準備ができています(ここでは、 OpenDossierAction
モデル)。
開発中のロギングの代替方法は、コンソールオブジェクトに書き込むことです。次のように、デバッグレ
ベルごとにいくつかのメソッドがあります。
console.debug()、 console.info()、 もっと。ただし、これはFirebug API呼び出しなので、一部のブラウザー
、特に古いバージョンのブラウザーでは、このコードがブラウザーをクラッシュさせる可能性があるため(コン
ソールオブジェクトが未定義であるため)、このコードを本番環境では使用しません。
第4章基本的な拡張ポイントを使用したプラグインの開発
151
4.4.3パック、デプロイ、および構成
これで、プラグインを再度デプロイできます(121ページの4.2.2、「パッケージ化とデプロイ」で行ったように)。
プラグインペインの[アクション]セクションには、CreateDossierActionに加えて、OpenDossierActionアクションがあ
ります。
次に、IBM Content Navigatorのフォルダーのコンテキストメニューに新しいアクションが表示されるように構成し、選択した
書類フォルダーを開くことができるようにします。
新しいアクションをメニューに追加するには、IBM Content Navigatorの管理ビュー機能で以下のス
テップを実行します。
1.選択 メニュー 左側のリストから。されているメニューのリスト
定義済みが表示されます。この例では、 デフォルトのフォルダコンテキストメニュー リストから。
2.デフォルトのメニューは読み取り専用なので、メニューのコピーを作成して変更します。デフォルトのフォルダのコ
ンテキストメニューのコンテキストメニューを開き、 コピー。
[新しいメニュー]ダイアログボックスが開きます。
3. [新しいメニュー]ダイアログボックスで、次のように入力します。 書類フォルダのコンテキストメニュー として
新しいメニューの名前。
4.左側のパネルの[利用可能なアクション]リストから、 オープンドシエ アクション
選択したアクションの右側のパネルに移動します。153ページの図4-8を参照してください。
オプション:新しいアクションの前にセパレータを追加して、エントリをリスト内の適切な位置に移動でき
ます。アクションをオープンアクションのすぐ上の位置に移動することをお勧めします。
5.クリック セーブ。
152 IBM Content Navigatorのカスタマイズと拡張
図4-8関係書類を開くアクションでのフォルダコンテキストメニューの定義
お気に入りの機能で一式文書を使用する: ドシエをお気に入りの機能でも使用したい場合は、標準でドシエ
をお気に入りに追加できます お気に入りに追加 アクション。
お気に入り機能で一式文書を開くには、独自のお気に入りフォルダコンテキストメニューを提供します Open D
ossierアクションを追加します。これらの手順は、152ページの手順1〜5と似ているため、ここには示していま
せん。
カスタムコンテキストメニューを作成したら、デスクトップに割り当てる必要があります。
1. [管理]ビューが開いている間に、 デスクトップ 左から
ペイン。デスクトップは右側のパネルに表示されます。
2.リストから、 DossierDesktop または別のデスクトップをクリックして、 編集する に
デスクトップの編集ウィンドウを表示します。
3.を選択します メニュー 新しいメニューを割り当てるためのタブ。
第4章基本的な拡張ポイントを使用したプラグインの開発
153
4. [Folder]コンテキストメニュー(図4-9)で、新しい 書類フォルダ
コンテキストメニュー 作成しました。メニューはデフォルトのフォルダコンテキストメニューのコピーであるため
、ドロップダウンリストに表示されます。
5.クリック セーブ 変更をデスクトップ構成に保存します。
図4-9 Dossier Folderコンテキストメニューをデスクトップに適用
これで、フォルダーのコンテキストメニューに新しいアクションを表示する準備ができました。
1.ブラウザからキャッシュを空にします(FirefoxおよびInternet Explorerの場合はショートカットCtrl + Shift + Delを使用
します)。
2. IBM Content Navigatorページを更新します(ショートカットはF5を押すことです)。
3.適切な権限を持つユーザーとしてログインします。
参照機能のルートフォルダーを一式文書フォルダーに設定するため、リポジトリ全体をナビゲートできなくなり
ます。ドシエにアクセスするには、検索機能でドシエを検索する新しい検索を定義します。結果リストで、一式
文書を選択し、右クリックして、 オープンドシエ アクション。155ページの図4-10を参照してください。
+をクリックして新しい検索を作成します 新しい検索 次に、検索条件を設定します。
フォルダ内を検索: CustomerDossiers すべてのドシエのルートフォルダです。検索オプション:フォルダー
のみを検索します。クラス:に設定 CustomerDossier。
名前を付けて検索を保存 顧客ドシエ。
154 IBM Content Navigatorのカスタマイズと拡張
図4-10保存された顧客関係書類の検索
この例では、Johnの関係書類を検索します。結果リストから、
オープンドシエ アクション; 図4-11に示すように、ブラウザ機能が表示されます。フォルダツリーは、John Sm
ithの最上位(ルート)フォルダから始まります。
図4-11参照機能の関係書類ビュー
第4章基本的な拡張ポイントを使用したプラグインの開発
155
4.4.4一式文書を開くための一式文書作成アクションの強化
簡単な機能強化で、書類作成アクションメソッドを改善できます。ドシエの作成後、参照ペインに切り替えて、
新しく作成されたドシエを開きます。の中に DossierPlugin.js、 CreateSubStructureServiceの呼び出しにコールバ
ック関数を追加します。例4-18を参照してください。
例4-18 DossierPlugin.jsのCreate Dossierアクションの拡張。
require(["dojo / _base / declare"、 "dojo / _base / lang"、
"ecm / widget / dialog / AddContentItemDialog"、 "ecm / model / Request"、 " dossierPluginD
ojo / OpenDossierAction "]、
function(declare、lang、AddContentItemDialog、Request、
OpenDossierAction){
。。。
Request.invokePluginService( "DossierPlugin"、 "CreateSubStructure
Service"、
{requestParams:serviceParams、
requestCompleteCallback: function(response){
var newFolders = new Array();
newFolders.push(dossierFolder); var openDossier = new OpenDossierAction();
openDossier.performAction(repository、newFolders、null); }});
追加することを忘れないでください dossierPluginDojo / OpenDossierAction moduleを必要なモジュールのリストに追加します
。
ここでプラグインを再デプロイし、「一式文書の作成」アクションが新しい一式文書を作成直後に開くこと、
または後でそれを行うことを確認できます。
この機能強化により、OpenDossierActionのオブジェクト指向の特性が明らかになります:アクションオブジェクトをインス
タンス化し、そのメソッドを呼び出してアクションを実行します。
4.5ドシエビューを独自の機能で開く
私たちのソリューションの珍しい側面の1つは、リポジトリ全体を参照するための標準の参照機能を使用できなく
なったことです。このセクションでは、特定の書類を表示するための独自の機能を指定する簡単な方法を示しま
す。
156 IBM Content Navigatorのカスタマイズと拡張
4.5.1機能の追加
新しい機能を作成するには、IBM Content Navigator開発用のEclipseプラグインのウィザードを使用します。
ウィザードを開始する前に、機能を表すアイコンが必要です。このサンプルでは、 Files32.png、 これは、IB
M Content Navigatorの以下のディレクトリーに含まれています。
ECMClient \ configure \ explodedformat \ navigator \ ecm \ widget \ resources \ images
このイメージを次のディレクトリにコピーします。
src \ com \ ibm \ ecm \ extension \ WebContent \ images \
ファイルの名前を DossierFeature32.png。 次に、表4-2に示す値を使用して、新機能ウィザードを起動します
。
表4-2ウィザードを使用して新しい機能を作成するときに入力する値
パラメータ
値
Javaパッケージ
com.ibm.ecm.extension
クラス名
DossierViewFeature
アイコンスタイルクラス
dossierViewIcon
フィーチャー画像
\ src \ com \ ibm \ ecm \ extension \ WebContent \ images \ DossierFeature
32.png
フィーチャー画像を選択するには、選択する必要があります 新しいフィーチャー画像を使用し、 これにより、
特徴画像を選択 ボタン。そのボタンをクリックして、
DossierFeature32.png ファイルを選択します。エラーが存在しない場合、アイコンはフィーチャーイメージラベルの横に表
示されます。
ウィザードは次のファイルを生成します。
DossierViewFeature.java: 機能を定義するJavaクラス。
DossierViewFeature.js: 機能ウィジェットを実装するDojoモジュール。これは、getContentClass
()メソッドによって参照されます。
DossierViewFeature.java。DossierViewFeature.html: Dojoのテンプレートメカニズムを使用してフィーチャ
ーのレイアウトを定義するテンプレートファイル。ウィザードは空を提供します
DIV 鬼ごっこ。これがフィーチャーのレイアウトを設計するための開始点です。
DossierViewFeature.css: 新しい機能のCSSを定義します。現在は、ウィザードで提供した機能のアイコ
ンのスタイルのみを設定します。
ファイルの詳細については、221ページの第6章「検索サービスとウィジェットを使用した機能の作成」を参照
してください。
第4章基本的な拡張ポイントを使用したプラグインの開発
157
4.5.2機能のデプロイと構成
121ページの4.2.2、「パッケージ化と展開」で説明されているように、プラグインを展開します。 特徴 プラグイ
ン管理ペインのセクションで、DossierViewFeatureが見つかります。
次のステップは、新しい機能をデスクトップに割り当てることです。管理ビュー機能で次の手順を実行します。
1.を選択します DossierDesktop 左側のリストからアイテムを選択して開きます。
2. DossierViewFeatureを選択した機能のリストに移動して、デスクトップに割り当てます。図4-12を参照してください。D
ossierViewFeatureが左側のボックスにない場合は、ページをリロードしてログインし、もう一度試してください。
図4-12書類機能をデスクトップに追加する
158 IBM Content Navigatorのカスタマイズと拡張
構成したデスクトップにIBM Content Navigatorにログインします。新機能のアイコンは左側にあります。アイコ
ンをクリックすると、空のペインが開きます。図4-13を参照してください。
図4-13空の新機能
4.5.3ブラウズ機能を使用した関係書類機能の開発
新しい機能ウィザードは、新しい機能を最初から作成するための適切なスケルトンを生成します。たとえば、_
から継承します LaunchBarPane、 そのため、MainlayoutのLaunchBarContainerが新しい機能に切り替えることが
できる機能がすでにあります。
ただし、今回は、ゼロから開始するのではなく、参照機能を使用してすべての機能を継承します。これを行うに
は、 DossierViewFeature.js 空で、BrowsePaneから継承します。例4-19を参照してください。
例4-19 BrowsePaneを継承するDossierViewFeature
define(["dojo / _base / declare"、 "ecm / widget / layout / BrowsePane"]、function(declare、Br
owsePane){
戻りdeclare( "dossierPluginDojo.DossierViewFeature"、
[BrowsePane]、{}); })
;
ここでプラグインをパックして展開すると、機能をクリックすると通常の参照機能が表示されます。
第4章基本的な拡張ポイントを使用したプラグインの開発
159
次のステップとして、「一式文書を開く」アクションを、デフォルトの「参照」機能ではなく、「一式文書」機能
に切り替わるように調整します。例4-20を参照してください。
例4-20 OpenDossierAction.jsをOpen Dossier機能に変更
performAction:function(repository、itemList、callback、teamspace、resultSet、parameterMap){
。。。
var featureIdToSwitch = " DossierViewFeature ";
。。。
}
この時点で、プラグインをパックしてデプロイできます。検索ペインに切り替え、一式文書の検索を開き、一
式文書を検索します。右クリックして選択します ドシエを開きます。 IBM Content Navigatorは一式文書機能に
切り替え、一式文書を開きます。図4-14を参照してください。
図4-14 Open Dossierを使用したDossier機能
160 IBM Content Navigatorのカスタマイズと拡張
4.6構成の追加
これまでに、いくつかの主要なパラメーターをハードコーディングしましたが、これにより、定義した一式文書の使用例
が不必要に制限されます。このセクションでは、これらのパラメーターを構成可能にします。
4.6.1構成パネルの追加
サンプルコードで次の主要なパラメーターを構成できる構成パネルを追加します。
dossierFolderClass:一式文書の最上位フォルダーのクラスの名前。この例では、 CustomerDossier。( Co
ntent Managerの場合、これはアイテムタイプの名前です)。
dossierRoot:すべてのドシエの親フォルダへのパス(たとえば、ドシエの最上位フォルダのパス)。この例
では/ CustomerDossiers。( Content Managerの場合、これはルートフォルダーアイテムのPIDです。)temp
lateFolderStructure:関係書類構造のテンプレートであるフォルダーへのパス。そのサブフォルダー構造は、
すべての新しい一式文書にコピーされます。この例では/ TemplateDossierStructure。( Content Managerの場
合、これはテンプレート構造のフォルダー項目のPIDです。)
おそらく、私たちは従業員のために一式文書構造を使用したいと思います。これらのパラメーターには、以下の
名前が適切な場合があります。
dossierFolderClass:EmployeeNumber、社会保障番号(SSN)、BirthDate、EntryDate、Managerなどのプ
ロパティを持つEmployeeDossier。dossierRoot:/ 従業員書類
templateFolderStructure:/ EmployeeDossierStructure
IBM Content Navigatorは、構成パネルをプラグインと統合するためのメカニズムを提供します。このパネルは、
管理ビューのプラグインウィンドウに表示され、特定のプラグイン情報を管理者が指定できるようにします。
IBM Content Navigator開発用のEclipseプラグインを使用して新しいプラグインを作成すると、プラグインの構成
を処理するためのConfigurationPaneが自動的に作成されます( ConfigurationPane.js に dossierPuginDojo フォル
ダ)。
ConfigurationPaneは次のクラスを継承します。
ecm.widget.admin.PluginConfigurationPane
第4章基本的な拡張ポイントを使用したプラグインの開発
161
次の機能を提供します。
configurationString: IBM Content Navigatorによって管理されるストリング。これは、IBM Content Navigato
rのデータベースに保持されます。プラグインの構成に必要なものはすべて保管できます。
負荷: IBM Content Navigatorは、データベースからconfigurationStringをロードします。その関数をオー
バーロードして、 configurationString。onSaveNeeded: このメソッドを使用して、 configurationString
変更されており、データベースに書き込む必要があります。このメソッドを呼び出すと、
セーブ そしてその 保存して閉じます プラグインの管理ペインのボタンが有効になります。
save:このメソッドは、プラグイン管理ペインの「保存」ボタンをクリックすると、IBM Content Navigato
rによって自動的に呼び出されます。の
configurationString データベースに書き込まれます。
例4-21は、プラグイン構成ペインウィジェットのコードを示しています。
例4-21 ConfigurationPane.jsの実装
define(["dojo / _base / declare"、 "dijit / _TemplatedMixin"、
"dijit / _WidgetsInTemplateMixin"、 "ecm / widget / ValidationTextBox"、 "ecm / widget / adm
in / PluginConfigurationPane"、 "dojo / text!./ templates / ConfigurationPane.html"]、
function(declare、_TemplatedMixin、_WidgetsInTemplateMixin、ValidationTextBox、PluginConfigurationPan
e、template){
declare( "dossierPluginDojo.ConfigurationPane"、[PluginConfigurationPane、_TemplatedMixin、_
WidgetsInTemplateMixin]、{templateString:template、widgetsInTemplate:true、
ロード:関数(コールバック){
if(this.configurationString){
var jsonConfig = JSON.parse(this.configurationString); this.dossierFolderClassField.set( 'v
alue'、jsonConfig.configuration [0] .value); this.dossierRootField.set( 'value'、jsonConfig.configuration [1]
.value); this.templateFolderStructureField.set( 'value'、
jsonConfig.configuration [2] .value);
}}、
_onParamChange:function(){
var configArray = new Array(); var
configString = {
名前: "dossierFolderClass"、
値:this.dossierFolderClassField.get( 'value')};
configArray.push(configString);
162 IBM Content Navigatorのカスタマイズと拡張
configString = {
名前: "dossierRoot"、
値:this.dossierRootField.get( 'value')};
configArray.push(configString);
configString = {
名前: "templateFolderStructure"、
値:this.templateFolderStructureField.get( 'value')};
configArray.push(configString); var
configJson = {
"構成":configArray};
this.configurationString = JSON.stringify(configJson); this.onSaveNeeded
(true); }、
検証:function(){
if(!this.dossierFolderClassField.isValid()
|| !this.dossierRootField.isValid()|| !this.templateFolderStructureFiel
d.isValid())はfalseを返します。trueを返します。}}); });
Dojoテンプレートメカニズムを使用して、構成ペインのレイアウトを定義します。これは、_ TemplateMixin、 こ
れは、templateStringを提供します。レイアウトは./で定義されています templates / ConfigurationPane.html とロードされます
道場/テキスト! DojoプラグインをtemplateStringに追加します。レイアウトには別のウィジェット(ValidationT
extBox)が含まれているため、_も必要です。 WidgetsInTemplateMixin、
これは、widgetsInTemplateプロパティを定義します。
load()メソッドはconfigurationStringを解析して値を取得します。
次の方法は_ onParamChange()。 このメソッドは、構成ペインの項目のいずれかが変更されたときに呼び出
されます。呼び出されると、変更された構成値に基づいて新しいJSON文字列を生成します。次に、
onSaveNeeded(true) 構成値が変更されたことをフレームワークに通知するメソッド。その後、フレームワー
クは[保存]ボタンを有効にし、保存プロセスを自動的に管理しますが、必要に応じて、saveメソッドを実装する
ことでオーバーライドできます。
validate()メソッドでは、ValidationTextBoxの検証メカニズムを使用します。
第4章基本的な拡張ポイントを使用したプラグインの開発
163
構成ペインに関連付けられたテンプレートHTMLファイルは、3行のテーブルを定義します。各行には、ラベル
と入力ボックスが含まれています。 ecm / widget / ValidationTextBox ウィジェット。例4-22を参照してください
。
例4-22構成ペインのHTML実装。
<div class = "dossierContainer" data-dojo-type = "dijit.layout.ContentPane">
<table class = "propertyTable"> <tr>
<td class = "propertyRowLabel">
<label for = "dossier_param1">一式文書のフォルダ</ label> </ td>
<td class = "propertyRowValue"> <div id = "dossier_param1"
maxLength = "128"
data-dojo-attach-point = "dossierFolderClassField" data-dojo-attach-event = "onKeyUp:_onP
aramChange" data-dojo-type = "ecm.widget.ValidationTextBox" data-dojo-props = "required: 'true
'、 trim: 'true'、propercase: 'false' "> </ div> </ td> </ tr> <tr>
<td class = "propertyRowLabel">
<label for = "dossier_param2">すべての書類のルートフォルダ</ label> </ td>
<td class = "propertyRowValue"> <div id = "dossier_param2"
maxLength = "128"
data-dojo-attach-point = "dossierRootField" data-dojo-attach-event = "onKeyUp:_onParamC
hange" data-dojo-type = "ecm.widget.ValidationTextBox" data-dojo-props = "required: 'true'、 trim
: 'true'、propercase: 'false' "> </ div> </ td> </ tr> <tr>
<td class = "propertyRowLabel">
<label for = "dossier_param3">書類サブストラクチャのテンプレートフォルダ</ label> </ td>
<td class = "propertyRowValue"> <div id = "dossier_param3"
maxLength = "128"
data-dojo-attach-point = "templateFolderStructureField" data-dojo-attach-event = "onKeyUp:
_onParamChange" data-dojo-type = "ecm.widget.ValidationTextBox" data-dojo-props = "required: '
true'、 trim: 'true'、propercase: 'false' "> </ div> </ td> </ tr> </ table> </ div>
164 IBM Content Navigatorのカスタマイズと拡張
IBM Content Navigator開発用のEclipseプラグインは、構成ペインのDojoモジュールとウィジェットクラス
をすでに指定していることに注意してください。例4-23は、
DossierPlugin.java ファイル。
例4-23 DossierPlugin.javaの設定ペインの指定
public String getDojoModule(){
「dossierPluginDojo」を返します。
} public String getConfigurationDijitClass(){
「dossierPluginDojo.ConfigurationPane」を返します。}
166ページの図4-15は、プラグインの設定ペインを示しています。
第4章基本的な拡張ポイントを使用したプラグインの開発
165
図4-15 Dossierプラグインの設定ペイン
注意: 実際のシナリオでは、ユーザーが入力フィールドに入力する値に対して、より高度な検証を追加する
必要があります。使用するValidationTextBoxは基本的な検証のみを提供しますが、たとえば、フォルダーク
ラスまたはフォルダーパスがリポジトリーに存在するかどうかを検証できます。追加のエラー処理を追加す
ることをお勧めします。現在、最小限の検証とエラー処理しか存在しないため、3つのパラメーターに指定す
る値がテスト時に有効であることを確認してください。
FileNet P8の最後の2つの値は、先頭にスラッシュで始まる必要があるフォルダーパスであることを思い出
してください(例:/ CustomerDossiers。
166 IBM Content Navigatorのカスタマイズと拡張
4.6.2構成値を使用するようにコードを調整する
161ページの4.6.1、「構成パネルの追加」では、管理者は一式文書の3つの主要なパラメーターを構成します。こ
のセクションでは、ハードコードされたパラメーターを削除し、これらの構成値を使用するためにコードをどの
ように調整する必要があるかを示します。
サービスコードは3つの主要なパラメーターから独立しているため、変更されません。サービスの構成に
アクセスする必要がある場合は、
com.ibm.ecm.extension.PluginServiceCallbac ksは、configurationStringを返すloadConfigurationメ
ソッドを提供します。
2つのアクションで構成にアクセスする必要があります。JavaScriptモデリング・ライブラリーのプラグインの構
成ストリングに直接アクセスするためのIBM Content Navigatorによって提供されるメカニズムはありません。そ
のため、構成を取得するための小さなサービスを提供する必要があります。IBM Content Navigator開発にEclips
eプラグインを使用して、名前で新しいサービスを作成します GetConfigurationService。
例4-24は、executeメソッドの実装を示しています。コールバックからconfigurationStringを取得し、それを
応答オブジェクトに書き込みます。さらに、インポートする必要があります java.io.PrintWriter。
例4-24 GetConfigurationServiceの実装
public void execute(PluginServiceCallbacks callbacks、HttpServletRequest request、HttpServletResp
onse response)が例外をスローします{
文字列構成= callbacks.loadConfiguration(); PrintWriter responseWriter = respons
e.getWriter(); {を試す
responseWriter.print(構成); responseWriter.flush();
} 最後に {
responseWriter.close(); }}
これで、関係書類の作成アクションを更新する準備ができました。
168ページの例4-25は、createDossierAction()メソッドの更新されたコードを示しています。 DossierPlugin.js
ファイル。基本的に、コード全体は、 GetConfigurationService。 サービス呼び出しは非同期であることに注意し
てください。アクションは構成に依存するため、このコードはサービスが構成を返した後に実行されるため、サ
ービスのコールバック関数に入る必要があります。
第4章基本的な拡張ポイントを使用したプラグインの開発
167
例4-25 DossierPlugin.js内の更新されたCreate Dossierアクション
require(["dojo / _base / declare"、 "dojo / _base / lang"、
"ecm / widget / dialog / AddContentItemDialog"、 "ecm / model / Request"、 "dossierPluginDojo / OpenD
ossierAction"]、function(declare、lang、AddContentItemDialog、Request、OpenDossierAction){lang.setO
bject( "createDossierAction"、function(repository、アイテム){
Request.invokePluginService( " DossierPlugin "、
」 GetConfigurationService "、{
requestCompleteCallback:function(response){var dossierRootFolder = response.configuration
[1] .value;
var dossierFolderClass = response.configuration [0] .value; var
templateDossierStructure = response.configuration [2] .value;
var _createFolderSubStructure = function(dossierFolder){
var serviceParams = {
icnRepository:repository.id、serverType:
repository.type、dossierId:dossierFolder.i
d、
templateFolderStructure:templateDossierStructure};
Request.invokePluginService( "DossierPlugin"、 "CreateSubSt
ructureService"、{
requestParams:serviceParams、requestCompleteCallback:fun
ction(response){
var newFolders = []; newFolders.push(dossierFolder); var openDossier = new
OpenDossierAction(); openDossier.performAction(repository、newFolders、nul
l); }}); };
repository.retrieveItem(dossierRootFolder、function(dossierRootFolderItem){
var addContentItemDialog = new AddContentItemDialog();
addContentItemDialog.setDefaultContentClass(dossierFolderClass);
addContentItemDialog.show(repository、dossierRootFolderItem、false、false、_createFolderS
ubStructure、null、false、null);
addContentItemDialog.set( "title"、 "Create new Dossier"); addContentItemDialog.setIntroText
( "このフォルダは、関係書類の最上位フォルダになります。");
});
} // requestCompleteCallback
});
});
});
168 IBM Content Navigatorのカスタマイズと拡張
また、Open Dossierアクションは、構成されたフォルダークラス名を読み取るように調整する必要があります。例4-26を参照
してください。
例4-26 OpenDossierAction.jsのコンストラクタ
define(["dojo / _base / declare"、 "ecm / model / Action"、 " ecm /モデル/リクエスト "]、
function(declare、Action、 リクエスト) {
return declare( "dossierPluginDojo.OpenDossierAction"、[Action]、{
dossierFolderClass:null、
isEnabled:function(repository、listType、items、teamspace、resultSet){
var enabled = this.inherited(arguments);
if(items && items [0] .isFolder && items [0] .getContentClass){
if(!this.dossierFolderClass){
Request.invokePluginService( "DossierPlugin"、
"GetConfigurationService"、
{requestCompleteCallback:dojo.hitch(this、
function(response){this.dossierFolderClass
=
response.configuration [0] .value; })}); } var sam
eClass =(items [0] .getContentClass()。name == this.dossierFolderClass);
有効になっている&& items [0] .isFolder()&& sameClass;
} return false; }、
。。。
dossierFolderClassクラスプロパティを追加し、isEnabledメソッドで、 GetConfigurationService requestComp
leteCallbackコールバック関数を使用してサービスを構成し、構成から値をロードします。JavaScriptでの関数の
実行コンテキストは、関数の設計時ではなく、実行時に決定されるため、実行コンテキストを、設計対象のオブ
ジェクトに明示的に設定する必要があります。と dojo.hitch、 これを正確に実行できます。OpenDossierActionオ
ブジェクトのコンテキストで関数を実行し、そのdossierFolderClassプロパティを設定できるようになりました。
第4章基本的な拡張ポイントを使用したプラグインの開発
169
4.7現実の世界における一式文書管理
このサンプルでは、​​主にデモンストレーションの目的で、IBM Content Navigatorのサービス拡張
ポイントの実装を通じて一式文書の下部構造を作成します。
運用環境では、バックエンドサーバーに部分構造を実装することを検討します。一般的なアーキテクチャのガイ
ドラインは、コンポーネントに最適なタスクを実行することです。この例では、いくつかのサブフォルダーの作
成は典型的なバックエンドタスクであり、フロントエンド(IBM Content Navigatorなど)ではなくバックエンド
で実装されます。
IBM FileNet P8の場合、これは、関係書類の最上位フォルダーが作成されたときにトリガーされるイベントアクシ
ョンとして実現できます。関連付けられたイベントアクションハンドラーは、非同期で部分構造を作成できます
。
サンプルのもう1つの単純化は、設計が一式文書をフラットに保管することであるということです。デモ用に作成
したドシエはほんのわずかなので、これは問題ではありません。ただし、実際には数千または数百万の顧客ドシ
エが存在するシナリオでは、1つの親フォルダにすべてのドシエをファイルするのは適切な設計ではありません。
たとえば、地域に分割され、郵便番号、頭文字などでグループ化された部分構造で一式文書を管理することを検
討してください。
最後に、1つの考慮事項は、リポジトリー内の物理フォルダーを排除し、文書がリポジトリーでフラットでファイ
ルされない方法で管理されるクライアント・サイトでのみツリー構造を作成することです。この場合、ツリーノ
ードは仮想フォルダであり、その内容は検索によって決定されます。このアプローチは、173ページの第5章「カ
スタムリポジトリ検索サービスの構築」に示されています。この方法で構築された一式文書は、 仮想ドシエ。
4.8まとめ
この章では、新しいプラグインを実装してIBM Content Navigatorに追加する方法について説明します。PluginAc
tion、PluginService、PluginFeatureなど、IBM Content Navigatorの基本的な拡張ポイントのほとんどを開発する
ための詳細が提供されています。このプラグインの構成値は、プラグインのConfigurationPaneを通じて提供され
ます。
サンプルのプラグインは、IBM Content Navigatorの単純な一式文書管理拡張機能を実装します。ドシエの基本
的な考え方は、顧客のすべてのドキュメント、従業員のすべてのドキュメントなど、主要な注文の原則に従っ
てリポジトリ内のドキュメントの構造化されたビューを取得することです。それ
170 IBM Content Navigatorのカスタマイズと拡張
ユーザーは、新しい一式文書を作成したり、既存の一式文書を検索したり、開いたり、作業したりできます。
このプラグインは、IBM FileNet P8とIBM Content Managerの両方のリポジトリーに実装されています。
第4章基本的な拡張ポイントを使用したプラグインの開発
171
172 IBM Content Navigatorのカスタマイズと拡張
5
チャプター5。
カスタムの構築
リポジトリ検索サービス
この章では、IBM Content Navigatorプラグインを作成して、製品の基本機能を拡張する方法について説明します
。カスタムリポジトリ検索サービスの作成方法を紹介し、既存のContentListウィジェットに結果を表示します。
カスタムリポジトリ検索サービスを使用すると、顧客は検索を使用して独自の機能を作成し、結果を表示できま
す。
この章では、次のトピックについて説明します。
例の概要
ContentListウィジェットでの結果の表示サンプルプラグインのカスタムリポジトリ検
索サービスリポジトリに対する検索のクエリ文字列カスタムリポジトリ検索サービス
で新しいプラグインを作成する既存の検索サービスに新しい関数を追加する
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
173
5.1例の概要
IBM Content Navigatorは、リポジトリー検索モデルとしてSearchTemplateを提供します。IBM Content Navig
atorを拡張して新しい関数を作成する場合は、SearchTemplateモデルを使用して独自の検索を作成できます。
独自の検索を作成する理由はたくさんあります。現在の検索テンプレートビルダーは、執筆時点でIBM FileNet
WorkplaceまたはIBM FileNet WorkplaceXTの検索デザイナーアプレットが行った複雑なブール演算のすべてを
提供しているわけではありません。さらに、SearchTemplateモデル全体を構築するよりも構築がはるかに簡単
なクエリ文字列で検索したい場合があります。別の理由として、コンテンツ管理リポジトリーに対する検索を構
築したくない場合があります。ただし、データベースに対して検索を構築する必要があります。このシナリオで
は、コンテンツナビゲーターのContentListウィジェットを使用して、結果とオブジェクトを処理します。これら
の状況では、カスタムリポジトリ検索サービスがユーザーに必要になります。
これは、IBM Content Navigatorを拡張するときに、常にカスタムリポジトリ検索サービスを使用する必要がある
ことを意味しません。IBM Content Navigatorで保存済み検索を処理する必要がある場合(例えば、保存済み検索
を取得して保存済み検索を変更する場合)、SearchTemplateモデルを使用する必要があります。
この章に示す例は、カスタム・リポジトリー検索サービスを提供し、既存のContentListウィジェットに結果を表
示するIBM Content Navigatorのプラグインです。IBM Content ManagerまたはIBM FileNet Content Managerのク
エリ文字列を使用して検索を実行できます。この例は、IBM Content Navigatorの基本機能を拡張します。カスタ
ムリポジトリ検索サービスを使用すると、検索を使用して独自の機能を作成し、結果を表示できます。
5.2 ContentListウィジェットでの結果の表示
カスタムリポジトリ検索サービスを使用する場合は、検索結果の処理方法と表示方法を検討する必要があります
。IBM Content Navigatorで提供されるContentListウィジェットは、検索結果セットを表示する強力なウィジェッ
トです。カスタマイズ可能な多くのモジュールが含まれています。可能な限りContentListウィジェットを使用す
ることをお勧めします。
ContentListウィジェットは、結果セットリストの表示に使用されるDojoモジュールである一般的なグリッドのよ
うに見えます。ContentListは、GridXパッケージに基づいています。Dojoの拡張です。いくつかの拡張機能とカス
タマイズ可能なモジュールがあります。
174 IBM Content Navigatorのカスタマイズと拡張
たとえば、ContentListウィジェットのビューには、ViewDetail、ViewMagazine、およびViewFilmStripの3つの
タイプがあります。ContentListウィジェットに使用するビューを決定できます。
ViewDetail、ViewMagazine、およびViewFilmStripビューモジュールが構成されたContentListの例を示します。
右上のボタンに3つの正方形のアイコンが表示されます。ユーザーは、使用するビューを選択できます。図5-1
は、ViewDetailビューの例を示しています。
図5-1モジュールを含むContentListウィジェット
ツールバーモジュールはウィンドウの上部にあります。いくつかのボタンが表示されます。ブレッドクラムモジュールは
、ツールバーモジュールのすぐ下にパスを表示します。図5-1は、 RedBK → RedBK。 グリッドには、プロパティ付きのド
キュメントリストが表示されます。docinfoモジュールは、右側にサムネイルとドキュメントのプロパティを表示します。
第5章カスタム・リポジトリー検索サービスの構築 175
図5-2は、ViewMagazineビューモジュールの例を示しています。
図5-2 ContentListのマガジンビュー
176 IBM Content Navigatorのカスタマイズと拡張
図5-3は、フィルムストリップビューの例を示しています。これはグリッドにのみ影響します。
図5-3 ContentListのFilmStrip
ContentListモジュール
ContentListには、IBM Content Navigatorによって提供されるいくつかのモジュールがあります。ContentList内でこれ
らのモジュールを選択してカスタマイズできます。
ContentList:データと起動アクションを表示するコアモジュール。ツールバー:ボタンを含むツ
ールバーを提供します。バー:コンテンツリストウィジェットを配置するバー機能を提供します
。ブレッドクラム:ブレッドクラム機能を提供します。DocInfo:ドキュメントの詳細を表示しま
す。
第5章カスタム・リポジトリー検索サービスの構築 177
FilterData:データをフィルタリングする機能を提供します。InlineMessag
e:メッセージをインラインで表示します。
TotalCount:合計数の結果を表示します。合計数の情報を提供できないリポジトリでは非表示になります。Vie
wDetail:詳細ビューを表示するビューモジュール。ViewMagazine:マガジンビューを表示するビューモジュー
ル。ViewFilmStrip:フィルムストリップビューを表示するビューモジュール。RowContextManu:コンテキスト
メニューを表示するグリッドモジュール。DndFromDesktopAddDoc:ユーザーがデスクトップからグリッドに
ドラッグアンドドロップできるようにするグリッドモジュール。
DndRowMoveCopy:行をドラッグアンドドロップする機能を提供するグリッドモジュール。その後、ドキュ
メントをドロップするときに移動またはコピーします。DndRowCopy:行をドラッグアンドドロップし、ド
キュメントをドロップするときにコピーする機能を提供するグリッドモジュール。DndDropOnly:DndRow
MoveCopyを拡張するグリッドモジュール。行のドラッグを無効にすることができます。
例5-1は SampleFeaturePane.js サンプルプラグインファイル。これは、グリッドモジュールとContentListウィジェット
の他のモジュールを設定する方法を示しています。DndRowMoveCopyおよびDndFromDesktopAddDocモジュールは
、「ドラッグアンドドロップ」機能を提供します。RowContextMenuモジュールは、コンテキストメニューを提供しま
す。独自のコンテキストメニューモジュールを作成し、システムメニューを置き換えることができます。デスクトッ
プ構成には、ViewFilmStripビューを使用できるかどうかを制御する設定があります。ここのコードもこの設定を尊重
します。
例5-1 SampleFeaturePane.js
getContentListGridModules:function(){
var array = []; array.push(DndRowMoveCopy); arr
ay.push(DndFromDesktopAddDoc); array.push(R
owContextMenu); 配列を返す; }、
getContentListModules:function(){
var viewModules = []; viewModules.push(ViewDetail);
viewModules.push(ViewMagazine);
if(ecm.model.desktop.showViewFilmstrip){
viewModules.push(ViewFilmStrip); }
178 IBM Content Navigatorのカスタマイズと拡張
var array = [];
array.push(DocInfo);
array.push({
moduleClass:Bar、top:[
[[{moduleClass:Toolbar
}、
{moduleClasses:viewModules、
"className": "BarViewModules"}]]]});
配列を返す; }、
データをContentListウィジェットに設定するには、setResultSet(モデル、リストParent)メソッドを使用して結果
セットを設定します。結果セットがSearchTemplate検索結果などのIBM Content Navigatorモデルからのものである
場合、結果を直接設定できます。結果セットがデータベースなどの他のリポジトリ検索からのものである場合、結
果はResultSetモデル形式とともに作成する必要があります。次に、ContentListはそれも表示できます。
便利なリンク
詳細については、次のソースを参照してください。
GridXの基本を学ぶ:
http://oria.github.io/gridx/
コンテンツリストウィジェットパッケージの詳細:
http://pic.dhe.ibm.com/infocenter/cmgmt/v8r4m0/topic/com.ibm.develop ingeuc.doc / eucrf015.htm
第5章カスタム・リポジトリー検索サービスの構築 179
5.3サンプルプラグインのカスタムリポジトリ検索サービス
カスタム・リポジトリー検索サービスは、IBM Content Navigatorの拡張サービスです。IBM Content Naviga
torは、サンプルプラグインにサンプルを提供します。
カスタムリポジトリ検索サービスを実装する前に、まずその動作を確認します。動作を確認するには、サンプル
プラグインをIBM Content Navigatorに追加します。サンプル機能を表示するようにデスクトップを構成します。
クリック セーブ 変更を保存します。図5-4は、デスクトップへのサンプル機能の追加を示しています。
図5-4表示するサンプル機能を追加する
デスクトップにサンプル機能を追加すると、デスクトップの機能ペインに一覧表示されます。クリックして; サン
プルプラグインのカスタムリポジトリ検索のビューが表示されます。検索サービスは、IBM Content Managerお
よびIBM FileNet Content Managerをサポートしています。サンプルのプラグイン検索バーのプロンプトテキスト
は、さまざまなリポジトリタイプによって異なります。サンプル機能アイコンは、元の検索機能と同じです。18
1ページの図5-5を参照してください。
180 IBM Content Navigatorのカスタマイズと拡張
図5-5カスタムリポジトリ検索サービスのサンプル機能
検索するには、有効なクエリ文字列を入力して、 探す。 検索結果は、以下のContentListウィジェットに表示
されます。に注意してください infolder '/ RedBk'
パラメーターは、IBM FileNet Content Managerオブジェクトストアに、次の名前のフォルダーがあることを意味します RedBk
ルートフォルダのすぐ下。クエリ文字列については、183ページの5.4、「リポジトリに対する検索のクエリ文字列」で説明
しています。
図5-6クエリ文字列を使用した検索と結果の表示
このようにして、ユーザーは独自の検索を簡単に構築できます。
5.3.1カスタムリポジトリ検索サービスのサンプルコード
一部のプラグインでカスタムリポジトリ検索サービスを使用する場合は、最初にサンプルプラグインのコードか
ら始めます。サンプルコードの機能が要件を正確に満たしている場合は、調整せずにそのまま使用できます。
第5章カスタム・リポジトリー検索サービスの構築 181
サンプルコードは、IBM Content ManagerまたはIBM FileNet Content Managerリポジトリに対してクエリ文
字列を実行する機能を提供します。
サンプルプラグインプロジェクトには、カスタムリポジトリ検索サービスに関連する3つのJavaファイルがあり
ます。
SamplePluginSearchService.java
SamplePluginSearchServiceCM.java
SamplePluginSearchServiceP8.java
SamplePluginSearchService.javaは、PluginServiceを拡張する実際のサービスです。このファイルの3つのメソッ
ドは次のとおりです。
getId()execute()writeResponse()
getId()メソッドは、Dojoコードで使用されるサービスIDを返します。
execute()メソッドは主要な機能を備えています。まず、リクエストからリポジトリ情報を取得します。次に、
クエリ文字列を取得します。callbacks.getSynchObject()メソッドは、同期されたリポジトリオブジェクトを取
得しようとします。存在する場合は、同期して検索してください。ない場合は、直接検索してください。getSyn
chObject()メソッドは、IBM Content MangerまたはIBM Content Manager OnDemandリポジトリー専用です。
IBM FileNet Content Managerリポジトリの場合、常にnullを返します。次に、応答を書き込みます。
writeResponse()メソッドは、その名前が示すように、応答を書き戻します。キャッシュなしのヘッダーを書き込みます
。次に、クライアントが応答をサポートしている場合、または元のJSON文字列を送信する場合、応答を圧縮しようとしま
す。
SamplePluginSearchServiceCM.java そして SamplePluginSearchServiceP8.java 1つはIBM Content Manager用で
、もう1つはIBM FileNet Content Manager用です。両方のファイルが応答を構築し、以下から呼び出されます
SamplePluginSearchService.java。 実行すると、次のタスクが実行されます。
1.結果の構造を構築します。
2.リポジトリに対してクエリ文字列を実行します。
3.アイテムの特権マスクを取得します。
4.結果に属性を追加します。
重要な部分は、結果の構造を構築する方法です。メソッドbuildCMReusltStructure()およびbuildP8ResultS
tructure()で、ユーザーは結果セットの列を追加する方法、およびマガジンビューの列を追加する方法を確
認できます。
SampleFeaturePane.js runSearch()メソッドは、ユーザーがクリックしたときにsamplePluginS
earchServiceを呼び出します。 探す ボタン。
182 IBM Content Navigatorのカスタマイズと拡張
ボタンクリックイベントとDojoメソッドは、
SampleFeaturePane.html テンプレート。結果セットはJavaサービスに組み込まれているため、searchRes
ultsという名前でContentListウィジェットに設定できます。searchResultsは、 SampleFeaturePane.html テ
ンプレート。
229ページの 『第6章検索サービスとウィジェットを使用したフィーチャーの作成』では、IBM Content Navigatorの新機
能ペインを拡張する方法について説明しています。また、HTMLテンプレートおよびその他の詳細についても説明しま
す。
5.4リポジトリに対する検索のクエリ文字列
サンプルプラグインは、クエリ文字列を使用してリポジトリを検索する方法を示しています。このセクショ
ンでは、IBM Content ManagerおよびIBM FileNet Content Managerのクエリ文字列を紹介します。
SQLがデータベースに対して行うのと同様に、クエリ文字列はコンテンツ管理リポジトリの検索に使用され
ます。コンテンツ管理リポジトリが異なれば、クエリ文字列構文も異なります。
5.4.1 IBM Content Managerクエリ文字列
リポジトリー・タイプがIBM Content Managerの場合、IBM Content Manager照会言語を使用して照会ストリング
を作成します。これはSQL型の言語ではありませんが、XML形式のファイルを検索するために定義された言語で
あるXQueryに似ています。IBM Content Managerは、SQLに変換されるXPATHクエリを使用します。このSQLス
テートメントは、IBM Content Managerライブラリサーバーに対して実行されます。IBM Content Managerのクエ
リ文字列は、IBM Content Manager Client for Windowsでテストできます。
次にいくつかの例を示します。
IBM Content Managerクエリ文字列の例
例5-2のIBM Content Managerのサンプルクエリ文字列は、 題名 属性を含み、 本 ストリング。行の先頭の文字
(/ *)は、すべてのItemTypeを検索することを意味します。スラッシュ(/)は、ItemTypeスコープを修飾するた
めに使用されます。アットマーク(@)は、ルールのIBM Content Manager内部属性名の前に付けられます。角
かっこ([])は、ルールを包含するために使用されます。
例5-2属性「Title」を含むすべてのアイテムを検索し、「book」文字列を含む
'/ * [@Title like "%book%"]'
第5章カスタム・リポジトリー検索サービスの構築 183
ItemTypeでのみアイテムを検索する場合 本、 例5-3のクエリ文字列は、パフォーマンスが向上します。
例5-3「タイトル」属性を含む本のアイテムの検索に「本」という文字列が含まれている
'/ BOOK [@Title like "%book%"]'
IBM Content Managerでは、すべてのアイテムにシステム定義の属性であるセマンティックタイプがあります
。ドキュメントのセマンティックタイプは1で、フォルダーのセマンティックタイプは2です。ドキュメントの
みを検索する場合は、次のルールをルール そして キーワード:
(@SEMANTICTYPE IN(1))
例5-4タイトルが「book」文字列を含むドキュメントのみを検索
'/ * [(@SEMANTICTYPE IN(1))AND @Title like "%book%"]'
例5-5のルールは、 icmadmin 最後の修飾子です。
例5-5「icmadmin」によって最後に変更されたアイテムを検索する
(@LASTCHANGEDUSERID = "icmadmin")
IBM Content Managerのクエリ文字列は柔軟で強力です。複雑になる可能性があります。すべてを詳細に説明す
ることは、この本の範囲を超えています。このセクションでは、クエリルールに結合できる、頻繁に使用される
システム属性の一部のみを示します。これらの例では、簡単な検索をいくつか試すことができます。
便利なリンク
IBM Content Managerのクエリ文字列の詳細については、次のソースを参照してください。
データの検索:
http://pic.dhe.ibm.com/infocenter/cmgmt/v8r5m0/index.jsp?topic=%2Fco
m.ibm.programmingcm.doc%2Fdcmaq009.htm
システムテーブル、ICMUT00300001(基本テーブル):
http://bit.ly/1goG3aN
184 IBM Content Navigatorのカスタマイズと拡張
5.4.2 IBM FileNet Content Managerクエリ文字列
通常、IBM FileNet Content Managerのクエリ文字列構文は、SQL-92標準に準拠しています。実行中は、デ
ータベースに対してSQLに変換されます。
特定のIBM FileNet Content Managerパラメーターがあります。たとえば、特定のフォルダ内のアイテムを検索す
る場合は、 Infolder パラメータを使用する必要があります。例5-6のクエリ文字列は、フォルダ内のすべてのプロ
パティを持つすべてのドキュメントを検索します。 RedBK ルートフォルダの下で呼び出されます。
注意: このクエリ文字列をPDFファイルからコピーする場合は、オープンとクローズの単一引用符( '')
文字をWebページ上の標準の単一引用符に変換します。
例5-6「RedBk」フォルダ内のすべてのドキュメントを検索し、それらのすべての属性を返す
このinfolder '/ RedBK'があるドキュメントから*を選択します
IBM FileNet Content ManagerのEnterprise Manager管理クライアント内のQuery Builderは、クエリ文字列を作成
して実行する機能を提供します。これを使用して、クエリ文字列が機能するかどうか、および得られる結果をテ
ストできます。Query Builderは、IBM FileNet Content Manager Enterprise Manager管理クライアントをインスト
ールしたWindowsシステムから起動できます。
Enterprise Manager管理クライアントのクエリビルダーでクエリ文字列をテストするには、次の手
順に従います。
1. IBM FileNet Content ManagerのEnterprise Managerを起動します。
2.検索するオブジェクトストアに移動します。
3.右クリック の検索結果 ノードと選択 新しい検索。
保存した検索を開いて、既存の検索を実行または調整することもできます。保存した検索を表示するには、
見る → SQLビュー。
4.クエリ文字列を記述します。クリック OK 構文が正しいかどうかを判断して取得する
検索結果。
Enterprise Managerで実行されるクエリ文字列とAPIで実行されるクエリ文字列には違いがあります。Enterprise
Managerで実行されるクエリ文字列は、 この または TableName。 これが最初の値です。186ページの図5-7を参照
してください。
第5章カスタム・リポジトリー検索サービスの構築 185
図5-7 Enterprise Managerクエリビルダーを実行するサンプルクエリ文字列
クエリビルダーを使用すると、最初にクエリ文字列を試し、アプリケーションでのデバッグを回避できます。それは多くの
時間を節約します。
IBM FileNet Content Managerバージョン5.2以降には、Content Platform Engine(ACCE)の管理コンソールと呼
ばれる管理クライアントがあります。アクセスするには、ブラウザから次のURLを使用します。
http:// <CEServer>:<Port> / acce
Content Platform Engineの管理コンソールからクエリ文字列をテストするには、次の手順を実行します。
1.ブラウザクライアントを起動します。
2.アクセスするオブジェクトストアを[オブジェクトストア]リストから選択します。
3.選択 探す ノード。
4. [簡易検索]タブで検索を作成するか、[SQLクエリ]タブでクエリ文字列を実行します。187ページの図5-8を参照
してください。
ACCEでは、検索結果はクエリ文字列を実行するための合計数量のみを返します。ここでクエリ文字列をテストして
、構文エラーを回避します。
186 IBM Content Navigatorのカスタマイズと拡張
図5-8 ACCEでのクエリ文字列を使用した検索
役立つリンク
ACCEとオブジェクトの検索について詳しくは、IBM Knowledge Centerを参照してください。
http://pic.dhe.ibm.com/infocenter/p8docs/v5r2m0/index.jsp?topic=%2Fcom。ibm.p8.ce.admin.tasks.doc%2Fp8p
cc187.htm
5.5カスタムリポジトリ検索サービスを使用して新しいプラグインを作成する
カスタムリポジトリ検索を含む新しいプラグインを作成する場合、最も簡単な方法は、可能であればサンプルプ
ラグインの既存のコードを使用することです。このセクションでは、既存のカスタムリポジトリ検索サービスを
プラグインに追加する方法を示します。
5.5.1新しいプラグインプロジェクトの作成
73ページの第3章「開発環境の設定」では、Eclipseプラグインを使用して新しいプラグインプロジェクトを開始
する方法について説明します。そこで説明されている手順に従って、CustomSearchPluginという名前の新しいプ
ラグインを作成します。この構成を188ページの図5-9に示します。
第5章カスタム・リポジトリー検索サービスの構築 187
図5-9新しいプラグイン、CustomSearchPlugin構成
5.5.2サンプルプラグインからの検索サービスのインポート
プラグインプロジェクトが作成されたら、CustomSearchPluginプロジェクトで検索サービスを作
成します。次の手順を実行します:
1.を使います CustomSearchPlugin Eclipseでプロジェクトを展開し、 src
ノード。
2.を右クリック com.ibm.com.extension.customsearch パッケージ化して選択
IBM Content Navigator → サーバー拡張 → 新しいサービス。
188 IBM Content Navigatorのカスタマイズと拡張
3.クラス名フィールドに、 SearchService。 図5-10を参照してください。
図5-10新しいサービスのクラス名を入力
4.クリック OK。 今 SearchService.java 創造された。また、に登録されています
CustomSearchPlugin.java サービスとしてファイル。まだ機能は含まれていません。
5.次のJARファイルを、Content Navigatorに関連するJARファイルが置かれているディレクトリ(たとえば、 na
vigatorAPI.jar。 それらをCustomSearchPluginプロジェクトのビルドパスに追加します。
jace.jar struts-1.1.jar
cmbicmsdk81.jar
の jace.jar ファイルは、IBM FileNet Content ManagerのJava APIを提供します。の cmbicmsdk81.jar ファイ
ルは、IBM Content ManagerのJava APIを提供します。の struts-1.1.jar ファイルは、Struts関連のAPIを提
供します。
73ページの第3章「開発環境の設定」で説明されているように、サンプルプラグインプロジェクトが正しく設定さ
れている場合は、これらを見つけることができます。
6.以下のJavaファイルをcom.ibm.com.extension.customsearchパッケージにコピーします。
SamplePluginSearchServiceCM.java
SamplePluginSearchServiceP8.java
これら2つのJavaファイルのコンパイルエラーが発生した場合は、
jace.jar、 struts-1.1.jar、 そして cmbicmsdk81.jar ファイルはプロジェクトのビルドパスにあります。
第5章カスタム・リポジトリー検索サービスの構築 189
7.検索サービスロジックを呼び出す SearchService.java。 これをコピーして行います
からのコード SamplePluginSearchService.java ファイル:
–
–
REPOSITORY_ID、REPOSITORY_TYPE、およびQUERYの定義を SearchService.java。
execute()メソッドとwriteResponse()メソッドを
SamplePluginSearchService.java に SearchService.java。 古い空のexecute()メソッドを必ず削除し
てください SearchService.java。
8.次の2つのファイルのサンプルプラグインパスを指すインポートエラーがある可能性があります。2つのイン
ポート行を削除します。
SamplePluginSearchServiceCM.java
SamplePluginSearchServiceP8.java
のコード SearchService.java ファイルは例5-7のようになります。
例5-7 SearchService.java
パッケージcom.ibm.com.extension.customsearch;
import java.io.OutputStreamWriter; import
java.io.Writer;
import java.util.zip.GZIPOutputStream;
import javax.security.auth.Subject; import
javax.servlet.http.HttpServletRequest; import
javax.servlet.http.HttpServletResponse;
import com.filenet.api.util.UserContext; import
com.ibm.ecm.extension.PluginService; import
com.ibm.ecm.extension.PluginServiceCallbacks; import
com.ibm.ecm.json.JSONMessage; import
com.ibm.ecm.json.JSONResultSetResponse;
/ **
* クラスを作成するために拡張された抽象クラスを提供します
* プラグインによって提供される各サービスを実装します。サービスは
* サーブレットまたはStrutsアクションと同様に、実行するアクション
* IBM Content Navigatorサーバーでの操作。サービスがアクセスできる
* コンテンツサーバーアプリケーションプログラミングインターフェイス(API)とJava EE
* API。
* <p>サービスは、次のJavaScript関数から呼び出されます
* を使用してプラグインに定義された
* <code> ecm.model.Request.invokePluginService </ code>関数。
* </ p>
* IBMコンテンツを実装するときは、サーブレットのベストプラクティスに従ってください
* ナビゲータープラグインサービス。特に、常に
* マルチスレッドで使用し、非共有情報をインスタンスに保持しない
* 変数。
190 IBM Content Navigatorのカスタマイズと拡張
*/
パブリッククラスSearchServiceはPluginService {
public static final String REPOSITORY_ID = "repositoryId"; public static final String
REPOSITORY_TYPE = "repositoryType"; public static final String QUERY = "query"; /
**
* このサービスの一意の識別子を返します。
* <p>
* <strong>重要:</ strong>この識別子はURLで使用されるため、
* 英数字のみを含みます。
* </ p>
*
* @returnサービスを識別するために使用される<code> String </ code>。
*/
public String getId(){
「SearchService」を返します。}
/ **
* これが使用するIBM Content Navigatorサービスの名前を返します
* サービスのオーバーライド。このサービスがIBMをオーバーライドしない場合
* Content Navigatorサービスでは、このメソッドは<code> null </ code>を返します。
*
* @returnsサービスの名前。
*/
public String getOverriddenService(){
nullを返します。}
/ **
* このサービスのアクションを実行します。
*
* @paramコールバック
* <code> PluginServiceCallbacks </ code>のインスタンス
* で使用できるいくつかの関数を含むクラス
* サービス。これらの関数は、プラグインへのアクセスを提供します
* 構成およびコンテンツサーバーAPI。
*
@paramリクエスト
* 提供する<code> HttpServletRequest </ code>オブジェクト
* リクエスト。サービスは、呼び出しパラメーターにアクセスできます
* リクエスト。
* @param応答
* 生成される<code> HttpServletResponse </ code>オブジェクト
* サービスによって。サービスは出力ストリームを取得し、
* 応答を記述します。応答はJSON形式である必要があります。
* @throws例外
* サービスの実行中に発生する例外。もし
* ログレベルは、エラーをログに記録するのに十分な高さです。
第5章カスタム・リポジトリー検索サービスの構築 191
* 例外はIBM Content Navigatorによってログに記録されます。
*/
public void execute(PluginServiceCallbacks callbacks、
HttpServletRequestリクエスト、HttpServletResponseレスポンス)が例外をスローしま
す{String methodName = "execute"; callbacks.getLogger()。logEntry(this、method
Name、request);
String repositoryId = request.getParameter(REPOSITORY_ID); String repositoryType = r
equest.getParameter(REPOSITORY_TYPE); 文字列クエリ= request.getParameter(QU
ERY);
JSONResultSetResponse jsonResults = new JSONResultSetResponse();
jsonResults.setPageSize(350);
{を試す
if(repositoryType.equals( "p8")){
件名件名= callbacks.getP8Subject(repositoryId); UserContext.get()。pus
hSubject(subject); }
オブジェクトsynchObject = callbacks.getSynchObject(repositoryId、
repositoryType);
if(synchObject!= null){
同期(synchObject){
if(repositoryType.equals( "cm")){
SamplePluginSearchServiceCM.executeCMSearch(repositoryId、query、callbacks、jsonResults、request.g
etLocale());
} else if(repositoryType.equals( "p8")){
SamplePluginSearchServiceP8.executeP8Search(repositoryId、query、callbacks、jsonResults、request.g
etLocale());
}}}
そうしないと
{
if(repositoryType.equals( "cm")){
SamplePluginSearchServiceCM.executeCMSearch(repositoryId、
クエリ、コールバック、jsonResults、request.getLocale());
} else if(repositoryType.equals( "p8")){
SamplePluginSearchServiceP8.executeP8Search(repositoryId、
クエリ、コールバック、jsonResults、request.getLocale());
}}
//結果をレスポンスに書き込みますwriteResponse(request、respons
e、jsonResults);
}キャッチ(例外e){
//エラー情報を提供します
192 IBM Content Navigatorのカスタマイズと拡張
callbacks.getLogger()。logError(this、methodName、request、e);
JSONMessage jsonMessage = new JSONMessage(0、e.getMessage()、 "これ
検索文字列が無効な場合、エラーが発生する可能性があります。 "、"検索文字列が正しい構文であることを確認してくださ
い。 "、" IBM Content Navigatorのログで詳細を確認してください。 "、" ");
jsonResults.addErrorMessage(jsonMessage); writeResponse(リク
エスト、レスポンス、jsonResults); } 最後に {
if(repositoryType.equals( "p8")){
UserContext.get()。popSubject(); }
callbacks.getLogger()。logExit(this、methodName、request); }}
private void writeResponse(HttpServletRequest request、HttpServletResponse response、JSON
ResultSetResponse json)throws Exception {
ライターライター= null;
{を試す
//ブラウザが以降のキャッシュ応答を返さないようにします
リクエスト
response.addHeader( "Cache-Control"、 "no-cache");
//クライアントがGZip JSONレスポンスをサポートしている場合、それを返します。String受諾エンコーディング
= request.getHeader( "Accept-Encoding"); if(acceptedEncodings!= null && acceptedEncodings.indexOf(
"gzip")
> = 0){
if(!response.isCommitted())
response.setBufferSize(65536); //何度も応答するため
デフォルトのバッファ(4096)よりも大きい
response.setHeader( "Content-Encoding"、 "gzip"); response.setContentType( "text / plain
"); // text / plainである必要があります
Firebug用
GZIPOutputStream gzos = new
GZIPOutputStream(response.getOutputStream());
writer = new OutputStreamWriter(gzos、 "UTF-8"); //安全なJSONプレフィ
ックスwriter.write( "{} &&");を追加します writer.flush(); json.serialize(w
riter); } そうしないと {
response.setContentType( "text / plain"); // text / plainである必要があります
Firebug用
response.setCharacterEncoding( "UTF-8"); writer = response.ge
tWriter(); //セキュアなJSONプレフィックスを追加します
第5章カスタム・リポジトリー検索サービスの構築 193
writer.write( "{} &&");
writer.flush();
json.serialize(writer); }
}キャッチ(例外e){
eをスローします
。} 最後に {
if(writer!= null)
writer.close(); }}}
CustomSearchPluginプロジェクトをビルドしようとすると build.xml、 失敗します。JARファイルのパスを build.xml
ファイル。のクラスパスセクション
build.xml 例5-8に示します。
例5-8 build.xmlのクラスパスセクション
<path id = "classpath">
<pathelement location = "C:/icnlib/navigatorAPI.jar" /> <pathelement location =
"C:/icnlib/jace.jar" /> <pathelement location = "C:/icnlib/struts-1.1.jar" />
<pathelement location = "C:/icnlib/cmbicmsdk81.jar" /> <pathelement location = "./
lib / j2ee.jar" /> <pathelement location = "./ temp" /> </ path>
これで、CustomSearchPluginプロジェクトに、サンプルプラグインのカスタムリポジトリ検索サービスが追加されました。あなた
はそれをテストする必要があります。そのためには、サンプルプラグインから機能ペインをインポートします。
5.5.3サンプルプラグインからの機能ペインのインポート
CustomSearchPluginプロジェクトに新しいフィーチャーを作成します。
1. Eclipseでプロジェクトを展開し、 src ノード。
2.を右クリックします com.ibm.com.extension.customsearch パッケージ。
3.選択 IBM Content Navigator → 新機能。
4.新しいプラグイン機能の構成を入力します。195ページの図5-11を参照してください。
194 IBM Content Navigatorのカスタマイズと拡張
図5-11新しいプラグイン機能の構成を入力
図5-11では、アイコンスタイルクラス 新機能のアイコンを表示するクラスです。SamplePluginFeatureが使用する
searchLaunchIconクラスを使用します。これは、IBM Content Navigator定義によって提供されます。新機能のカ
スタムアイコンを使用して、独自のクラスを構築できます。または、クリックできます 特徴画像を選択 アイコン
ファイルを選択します。ここでクラス名としてmyIconClassを使用する場合、クラスは CustomSearchPlugin.css
例5-9のようにファイル。
例5-9アイコンクラスの例
。myIconClass
{
幅:32px; 高さ:32p
x;
background:url( 'images / <NameOfYourImage> .png')no-repeat; }
アイコンの設定方法とリソースの追加方法については、211ページの第6章「検索サービスとウィジェット
を使用した機能の作成」を参照してください。
第5章カスタム・リポジトリー検索サービスの構築 195
ここで、新しい空の機能を取得します。これをビルドしてIBM Content Navigatorにデプロイすることにより、
すべてが正常に機能することをテストできます。
CustomSearchPluginプロジェクトをチェックして、新しい機能の作成時に何が起こったかを確認してください。サービスの拡
張とは異なり、いくつかのファイルが作成されます。
CustomFeaturePane.java
CustomFeaturePane.js
CustomFeaturePane.html
新しい機能には通常、独自のペインとテンプレートがあります。図5-12を参照してください。
図5-12新しいフィーチャーを作成した後の構造
これで、機能関連のコードをサンプルプラグインから新しい機能に移動できます。
1。 CustomFeaturePane.html ファイル、その内容を
SamplePluginFeaturePane.html サンプルプラグイン内。
2。 CustomFeaturePane.js ファイル、その内容を
SamplePluginFeaturePane.js。
3.に追加の調整を行います CustomFeaturePane.js 次のようにファイル:
–
セクターの定義の最後の行を次のように変更します。
dojo / text!./ templates / CustomFeaturePane.html
変更する理由は、使用するテンプレートが
CustomFeaturePane.html このプロジェクトでは、ライン
SamplePluginFeaturePane.js 別のものを指します。
196 IBM Content Navigatorのカスタマイズと拡張
–
declareの最初の値を次のように変更します。
customSearchPluginDojo.CustomFeaturePane
–
を見つける Request.invokePluginService runSearch()メソッドの行を次のテキストに変更します
。
Request.invokePluginService( "CustomSearchPlugin"、 "SearchService"、
最初の値は、CustomSearchPlugin.getId()メソッドで定義されたプラグインIDです。2番目の値は
、SearchService.getId()で定義された検索サービスIDです。これは、サービスが呼び出される方
法です。
5.5.4新しいプラグインのビルドとデプロイ
検索サービスとそれを使用するためのペインをサンプルプラグインから別のプラグインプロジェクトに移動したら、
新しいプラグインをビルドしてデプロイできます。
新しいプラグインをビルドしてデプロイするには、次の手順に従います。
1.を見つける build.xml プロジェクトで、それを右クリックして選択します として実行 → 蟻
ビルド。 コンパイルエラーが発生した場合は、プロジェクトのビルドパスにあるすべてのJARファイルが build.xml ビ
ルドパス。ビルドが完了すると、次の名前のファイル CustomSearchPlugin.jar プラグインプロジェクトで生成されま
す。Eclipseで更新して確認してください。
2.以下のURLを使用して、IBM Content Navigator管理デスクトップに移動します。
http:// NavigatorURL:port / navigator?desktop = admin
3.をクリックします プラグイン タブ、選択 新しいプラグイン、 を入力
CustomSearchPlugin.jar パス、クリック 負荷。
第5章カスタム・リポジトリー検索サービスの構築 197
プラグインに関する情報が表示されます(図5-13)。
図5-13カスタム検索プラグイン管理デスクトップの追加
198 IBM Content Navigatorのカスタマイズと拡張
4.設定するデスクトップを開き、 外観 タブ、追加
CustomFeaturePane 選択した機能に。図5-14を参照してください。
図5-14 CustomFeaturePaneを選択した機能に追加
5.ブラウザーでIBM Content Navigatorのデスクトップに再度アクセスして、新機能をテストします。
http:// NavigatorURL:port / navigator?desktop = RedBK
サンプルのプラグイン機能ペインが表示されれば、成功です。
5.6既存の検索サービスに新しい関数を追加する
カスタムリポジトリ検索サービスをサンプルプラグインとして取得したので、次はカスタマイズを行います。
このセクションでは、カスタム検索プラグインサンプルでのみIBM FileNet Content Managerに対して行われ
る拡張について説明します。
5.6.1ページング機能の追加
の SamplePluginSearchServiceP8.java コードには、ページサイズに対して定義されたパラメーターがあります。
int pageSize = 350;
オリジナルのコード SamplePluginSearchServiceP8.java 検索結果の最初のページを取得します。したがって、
この検索サービスでは、結果の最初の350アイテムをIBM FileNet Content Managerから取得します。IBM Conte
nt Navigatorの参照ペインまたは検索ペインで、ContentListをスクロールして
第5章カスタム・リポジトリー検索サービスの構築 199
下部の次の数ページの検索を続行します。この機能をカスタム検索プラグインに追加します。この場合も、この
実装はIBM FileNet Content Managerリポジトリーに対してのみ行われます。
図5-15は、ContentListがページング検索をトリガーするタイミングを示しています。結果が待機中であることを
示す青い列の行がいくつかあります。
図5-15ページング検索のContentList
IBM FileNet Content Manager APIは、PageIteratorオブジェクトによるページング機能を提供します。オリジナル
で SamplePluginSearchServiceP8.java サンプルプラグインでは、例5-10に示すコードが検索結果から最初のペー
ジを取得します。完全なコードはサンプルプラグインにあります。
例5-10 SamplePluginSearchServiceP8.javaからのコードスニペット
//最初のpageSizeの結果を取得します。
int pageSize = 350;
List <Object> searchResults = new ArrayList <Object>(pageSize); IndependentObjectSet resultsObjectSet = sea
rchScope.fetchObjects(searchSQL、pageSize、filter、true);
PageIterator pageIterator = resultsObjectSet.pageIterator();
if(pageIterator.nextPage()){
for(Object obj:pageIterator.getCurrentPage()){
searchResults.add(obj); }}
200 IBM Content Navigatorのカスタマイズと拡張
検索結果の次のページを取得するには、pageIterator.nextPage()メソッドを使用します。ページングを実装す
る方法は、pageIteratorオブジェクトを保存し、ユーザーが継続検索をトリガーしたときに次のページを取得する
ために使用します。
検索は2つのタイプに分けられます。
検索を開始し、結果の最初のページを取得し、pageIteratorオブジェクトをセッションに保存します。contin
uationData値をResultSetに入れます。セッションからpageIteratorを取得します。存在する場合は、そこから
検索結果の次のページを取得します。
最初のタイプの検索は、
SamplePluginSearchServiceP8.java。 pageIteratorオブジェクトをセッションに追加します。カスタム検索プラグ
イン SamplePluginSearchServiceP8.java ファイルの最終バージョン、コードにはこれが含まれています。最初の
ページアイテムの数がpageSizeと等しい場合、より多くの結果がある可能性があります。pagerIterator sessionK
eyがcontinuationData結果セットに入れられます。次に、pageIteratorが、そのsessionKeyを名前としてセッショ
ンに入ります。例5-11は、コードのキースニペットを示しています。完全なコードを確認してください SamplePluginSearchServiceP8.java
この章のCustomSearchPluginプロジェクト。itemCountパラメータは、最初のページからの結果数量です。リク
エストパラメータは、ウェブアプリケーションのリクエストオブジェクトです。
例5-11 keyとpageIteratorをセッションに設定する
String sessionKey = "pagerIterator"; request.getSession()。removeAttribute
(sessionKey); if(itemCount == pageSize){
jsonResultSet.put( "continuationData"、sessionKey); //これにはCEバージョン
5.0以上が必要です
request.getSession()。setAttribute(sessionKey、pageIterator); }
ContentListウィジェットは、ページング機能に必要な部分をすでに提供しています。
ContentListをスクロールするときに、ResultSetオブジェクトにcontinuationDataパラメータが含まれている場
合、ContentListは次のようなサービスをトリガーします。
/ p8 / continueQuery。 最初のパスの値は、リポジトリタイプによって異なります。それは可能性があります / cm / continueQuery または/
cmis / continueQuery。 このサービスは、次のページがある場合はそれを返すことができます。
ContentListがトリガーするサービスは、IBM Content Navigatorサービスです。ここで説明した方法とは異なる方
法でページング検索を処理します。そのため、カスタム検索プラグインで必要なことを行うには、独自のプラグ
インが必要です。
第5章カスタム・リポジトリー検索サービスの構築 201
独自のサービスをトリガーするには、IBM Content Navigatorに含まれている要求フィルター機能を使用します。
リクエストフィルタは、リクエストを独自のリクエストに置き換えるために使用できるメカニズムです。つまり
、ContentListがリクエストを
/ p8 / continueQuery、 それをキャプチャし、別の方法を使用して応答することができます。
IBM Content Navigatorを使用すると、要求フィルターをより簡単に拡張および構築できます。という名前のリクエス
トフィルターを作成します ContinueQueryService.java 交換する
/ p8 / continueQuery プラグイン用。
次の手順を実行します。
1. Eclipseプラグインを使用して要求フィルターを作成します。カスタム検索プラグインプロジェクトのパッケー
ジを右クリックして、 IBM Content Navigator →
サーバー拡張 → 新しい要求フィルター。
2.新しい要求フィルターダイアログで、次のように構成します(203ページの図5-16を参照)。
–
クラス名を次のように入力します ContinueQueryService。
- 選択する / p8 / continueQuery サービスのリストからクリックして 選択を追加します。 フィルタリング
するサービスを複数選択できます。このサンプルでは、​​IBM FileNet Content Managerのコードのみ
を変更します。
3.クリック OK。 次に、要求フィルターが生成され、以下に登録されます。
CustomSearchPlugin.java。
202 IBM Content Navigatorのカスタマイズと拡張
図5-16新しい要求フィルターの構成
新しいで ContinueQueryService.java、 getFilteredServices()メソッド(例5-12)は、フィルタリングされるサービ
スを示しています。リストにすることもできます。
例5-12 ContinueSearchService.javaのgetFilteredServicesメソッド
@オーバーライド
public String [] getFilteredServices(){
return new String [] {"/ p8 / continueQuery"}; }
コアメソッドは、filter()メソッド内にあります。戻り値の型はJSONObjectである必要があります。メソッドに任
意のコードを追加できます。
リクエストからcontinuationData文字列を取得しようとし、それをキーとして使用してセッションから値を取得し
ます。値がnullでない場合は、前にセッションに配置したpageIteratorである必要があります。次に、それを使用
して検索結果の次のページを取得します。nullの場合、リクエストはカスタム向けではないことを意味します
第5章カスタム・リポジトリー検索サービスの構築 203
検索プラグインですが、IBM Content Navigator用です。この状況では、nullを返します。元のIBM Content Navigator
サービスハンドラーに移動します。例5-13を参照してください。
例5-13 ContinueQueryService.javaのfilterメソッド
@オーバーライド
public JSONObject filter(PluginServiceCallbacks callbacks、HttpServletRequest request、JSONArtifact jso
nRequest)が例外をスローします{
文字列continueQeurySessionKey = request.getParamete
r( "continuationData");
if(request.getSession()。getAttribute(continueQeurySessionKey)!= null){//リクエストはプラグ
インサービスからのもの
JSONResultSetResponse jsonResults = new
JSONResultSetResponse();
this.execute(callbacks、request、jsonResults); jsonResultsを返します
。} そうしないと {
//リクエストはサンプルプラグイン検索サービスに関連していません。//デフォルトのICN
サービスハンドラーに移動します。
nullを返します。}}
次のページデータを取得して結果を返すロジックは、メソッドexecute()にあります。このメソッドは、作成し
たキーを使用して、セッションからpageIteratorを取得します。pageIteratorがnullでない場合は、pageIteratorを
使用して検索結果の次のページを取得します。例5-14を参照してください。この値でページング機能をテストす
る方が簡単なので、pageSizeを50に変更します。必要に応じて元の値350を保持できますが、ページングが機能
するかどうかを確認するには、350より大きい検索結果が必要になります。
例5-14 ContinuQueryService.javaのexecuteメソッド
public static final String REPOSITORY_ID = "repositoryId"; public static final String
REPOSITORY_TYPE = "repositoryType"; public static final int pageSize = 50;
public void execute(PluginServiceCallbacks callbacks、HttpServletRequest request、JSONResultSetR
esponse jsonResults)が例外をスローします{
String methodName = "execute";
callbacks.getLogger()。logEntry(this、methodName、request);
String repositoryId = request.getParameter(REPOSITORY_ID);
204 IBM Content Navigatorのカスタマイズと拡張
文字列continueQeurySessionKey = request.getPa
rameter( "continuationData");
jsonResults.setPageSize(pageSize);
List <Object> searchResults = new ArrayList <Object>(pageSize); int itemCount = 0;
{を試す
件名件名= callbacks.getP8Subject(repositoryId); UserContext.get()。pus
hSubject(subject);
オブジェクトsynchObject = callbacks.getSynchObject(repositoryId、 "p8"); if(synchObject!
= null){
同期(synchObject){
PageIterator pageIterator =(PageIterator)
request.getSession()。getAttribute(continueQeurySessionKey);
if(pageIterator.nextPage()){
for(Object obj:pageIterator.getCurrentPage()){
searchResults.add(obj);
itemCount ++; }
} if(itemCount == pageSize){
String sessionKey = "pagerIterator"; jsonResults.put( "continuationDa
ta"、sessionKey); } そうしないと {
request.getSession()。removeAttribute(continueQeurySessionKey);
}}}
そうしないと
{
PageIterator pageIterator =(PageIterator)
request.getSession()。getAttribute(continueQeurySessionKey);
if(pageIterator.nextPage()){
for(Object obj:pageIterator.getCurrentPage()){
searchResults.add(obj);
itemCount ++; }
} if(itemCount == pageSize){
String sessionKey = "pagerIterator"; jsonResults.put( "continuationDa
ta"、sessionKey); } そうしないと {
request.getSession()。removeAttribute(continueQeurySessionKey); }
} //検索結果の特権マスクを取得します。HashMap <Object、Long> privMasks
= callbacks.getP8PrivilegeMasks(repositoryId、searchResults);
ObjectStore objectStore = callbacks.getP8ObjectStore(repositoryId);
第5章カスタム・リポジトリー検索サービスの構築 205
for(オブジェクトsearchResult:searchResults){
ドキュメントdoc =(ドキュメント)searchResult; / * * IDは次の形式
を使用します。
*
<オブジェクトクラス名>、<オブジェクトストアID>、<オブジェクトID>
*/
StringBuffer sbId = new StringBuffer();
sbId.append(doc.getClassName())。append( "、")。append(objectStore.get_Id()。toStrin g())。append( "、")。app
end(doc.get_Id()。toString() );
長い特権=(privMasks!= null)?privMasks.get(doc):0L;
JSONResultSetRow行=新しいJSONResultSetRow(sbId.toString()、
doc.get_Name()、doc.get_MimeType()、特権);
//ロックされたユーザー情報(ある場合)を追加しますrow.addAttribu
te( "locked"、doc.isLocked()、
JSONResultSetRow.TYPE_BOOLEAN、null、(new Boolean(doc.isLocked()))。toString());
row.addAttribute( "lockedUser"、doc.get_LockOwner()、
JSONResultSetRow.TYPE_STRING、null、doc.get_LockOwner());
row.addAttribute( "currentVersion"、doc.get_IsCurrentVersion()、
JSONResultSetRow.TYPE_BOOLEAN、null、(new Boolean(doc.get_IsCurr
entVersion()))。toString());
//属性を追加します
row.addAttribute( "ID"、doc.get_Id()。toString()、
JSONResultSetRow.TYPE_STRING、null、doc.get_Id()。toString());
row.addAttribute( "className"、doc.getClassName()、
JSONResultSetRow.TYPE_STRING、null、doc.getClassName());
row.addAttribute( "ModifiedBy"、doc.get_LastModifier()、
JSONResultSetRow.TYPE_STRING、null、doc.get_LastModifier());
row.addAttribute( "LastModified"、
doc.get_DateLastModified()。toString()、JSONResultSetRow.TYPE_TIMESTAMP、null、doc.get_DateLastModifie
d()。toString());
row.addAttribute( "Version"、doc.get_MajorVersionNumber()+ "。" +
doc.get_MinorVersionNumber()、JSONResultSetRow.TYPE_STRING、null、doc.get_MajorVersion
Number()+ "。" + doc.get_MinorVersionNumber());
row.addAttribute( "{NAME}"、doc.get_Name()、
JSONResultSetRow.TYPE_STRING、null、doc.get_Name());
row.addAttribute( "ContentSize"、doc.get_ContentSize()、
JSONResultSetRow.TYPE_INTEGER、null、null);
jsonResults.addRow(row); }
}キャッチ(例外e){
//エラー情報を提供します
callbacks.getLogger()。logError(this、methodName、request、e);
206 IBM Content Navigatorのカスタマイズと拡張
JSONMessage jsonMessage = new JSONMessage(0、e.getMessage()、 "このエラーは、検索文字列が無効
な場合に発生する可能性があります。"、 "検索文字列が正しい構文であることを確認してください。"、 "詳細については、IBM C
ontent Navigatorログを確認してください。 "、" ");
jsonResults.addErrorMessage(jsonMessage); } 最後に
{
UserContext.get()。popSubject();
callbacks.getLogger()。logExit(this、methodName、request); }}
ページングを使用したカスタム検索サービスのロジックを図5-17にまとめます。
カスタム検索サービス
ページングあり
クリック 探す
ContontListを下にスクロール
SamplePluginSearchServiceP8.javaで最初
のページを取得する
ContinueQueryService.javaで次のページ
を取得してみてください
ResultSetを表示
ContentList
図5-17ページングロジックを使用したカスタム検索サービス
5.6.2管理設定からの結果プロパティ設定の取得
これで、カスタム検索サービスにページング機能が追加されました。ContentListに表示されるすべてのプロパテ
ィがハードコーディングされていることがわかります。IBM Content Navigatorの「検索」タブには、リポジトリ
ーに表示される検索結果の設定があります。209ページの図5-18を参照してください。表示されたプロパティは、
IBM Content Navigatorの検索結果に表示されます。これは、プラグインコードがそれを読み取って使用する場合
、プラグインカスタム検索サービスにも使用できます。これを行うためにコードを拡張します。Classプロパティ
をそのまま選択しないでください。検索結果の処理中にエラーが発生します。
第5章カスタム・リポジトリー検索サービスの構築 207
図5-18検索結果のプロパティの表示構成
プラグインで検索結果表示設定情報を簡単に取得できます。例5-15を参照してください。
例5-15 SamplePluginSearchServiceP8.javaの検索のデフォルト列設定の取得
RepositoryConfig repoConf = Config.getRepositoryConfig(request); String [] folderColumns =
repoConf.getSearchDefaultColumns();
folderColumnsを使用すると、クエリ文字列に基づいて検索するプロパティを決定できます。次に、その設定でど
の列を表示するかを決定できます。
サンプルコードでは、これらのプロパティをクエリ文字列に追加していません。すべてのドキュメントが持つシ
ステムプロパティを選択します。例5-16を参照してください。
例5-16 SamplePluginSearchServiceP8.javaに基づく結果セット列の作成
String []状態=新しい文字列[1]; states [0] = JSONResultSetColumn.STA
TE_LOCKED;
jsonResultSet.addColumn(new JSONResultSetColumn( " "、 "multiStateIcon"、fa
lse、states));
jsonResultSet.addColumn(new JSONResultSetColumn( " "、 "17px"、 "mimeTypeIcon"、null、
false));
//jsonResultSet.addColumn(new
JSONResultSetColumn(resources.getMessage(clientLocale、 "search.results.header.id")
、 "200px"、 "ID"、null、false));
208 IBM Content Navigatorのカスタマイズと拡張
//jsonResultSet.addColumn(new JSONResultSetColumn( "Class Name"、 "125px"、 "className"、
null、false));
for(String columnString:folderColumns){
if(columnString.equals( "LastModifier"))
jsonResultSet.addColumn(new
JSONResultSetColumn(resources.getMessage(clientLocale、 "search.results.header.lastModifiedByUse
r")、 "125px"、 "ModifiedBy"、null、false));
else if(columnString.equals( "DateLastModified"))
jsonResultSet.addColumn(new
JSONResultSetColumn(resources.getMessage(clientLocale、 "search.results.header.la
stModifiedTimestamp")、 "175px"、 "LastModified"、null、false));
else if(columnString.equals( "MajorVersionNumber"))
jsonResultSet.addColumn(new
JSONResultSetColumn(resources.getMessage(clientLocale、 "search.results.header.version")、 "50p
x"、 "Version"、null、false));
else if(columnString.equals( "{NAME}"))
jsonResultSet.addColumn(new JSONResultSetColumn( "Name"、
"200px"、columnString、null、false));
そうしないと {
jsonResultSet.addColumn(new
JSONResultSetColumn(columnString、 "80px"、columnString、null、true));
}}
これを使用した後、構成に基づいて列を表示できます(図5-19)。
図5-19構成に応じた検索結果のプロパティの表示
第5章カスタム・リポジトリー検索サービスの構築 209
5.6.3カスタム検索プラグインのメインファイル
カスタム検索プラグインのソースコードのすべてのコンテンツが前のセクションにリストされているわけではありません
。この章に関連するCustomSearchPluginのプロジェクトで確認してください。次のリストは、すべての主なファイルにつ
いて説明しています。
CustomSearchPlugin.java
カスタム検索プラグインのメインクラスは、IBM Content Navigatorプラグインが必要とするすべての情報を提
供します。すべての拡張機能とスクリプトが登録されています。SearchService.java
このサービス拡張を使用すると、カスタム検索を実行できます。詳細な実装は SamplePluginSearchServiceCM.java
そして
SamplePluginSearchServiceP8.java。
SamplePluginSearchServiceCM.java
これはサンプルプラグインからコピーしたもので、クエリ文字列を使用してIBM Content Managerリポジト
リを検索できます。SamplePluginSearchServiceP8.java
これはサンプルプラグインからコピーされ、ページング検索をサポートするように拡張されます。これを
使用すると、クエリ文字列を使用してIBM FileNet Content Managerリポジトリを検索できます。Continu
eQueryService.java
この要求フィルター拡張により、ページング検索が可能になります。それはの要求をフィルタリングします
/ p8 / continueQuery。 セッションでpageIteratorが保存されると、検索結果の次のページが返されます
。
5.7まとめ
この章では、IBM Content Navigatorプラグインにカスタム検索サービスを実装する方法について説明します。サン
プルプラグインには、カスタム検索サービス用のサンプルコードが用意されています。この章では、他のプラグイ
ンでコードを再利用する方法について説明します。また、IBM FileNet Content Managerのページング機能を使用
してコードを拡張し、リポジトリーの検索結果プロパティー構成を使用する方法についても説明します。
210 IBM Content Navigatorのカスタマイズと拡張
6
第6章。
フィーチャーを作成する
検索サービスとウィジェット
この章では、検索サービスやウィジェットを含む新しい機能プラグインを作成する方法について説明します。1
73ページの第5章「カスタムリポジトリ検索サービスの構築」のトピックを続けますが、実際のシナリオを構築
するためのウィジェットの使用に焦点を当てています。この章では、仮想フォルダーの参照ペインを実装します
。
この章では、次のトピックについて説明します。
例の概要
機能のレイアウトの調整カスタムツリーを表示するためのツリーウィジェットの作成
検索と結果を表示するためのクラスノードの関数の追加ContentListウィジェットへの
追加モジュールの構成
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
211
6.1例の概要
179ページの第5章「カスタムリポジトリ検索サービスの構築」では、サンプルプラグインからインポートされた
検索サービスを使用して新しい機能を作成しました。自分のページでは検索サービスを利用していません。Cus
tomSearchPaneは、検索サービスが機能していることを示すために作成されました。この章では、カスタム検索
プラグインを実際のシナリオ、 仮想フォルダ参照ペイン。
IBM Content Navigatorには、ブラウズペインと呼ばれる機能があります。複数のリポジトリがある場合、ユーザ
ーはリポジトリを変更でき、左側のペインにフォルダツリーが表示されます。フォルダツリーのノードをクリッ
クすると、そのフォルダのコンテンツが右側のペインのContentListに表示されます。図6-1は、IBM Content Nav
igatorの参照ペインを示しています。
図6-1 IBM Content Navigatorの参照ペイン
参照ペインを使用すると、選択したリポジトリ内のドキュメントとフォルダをナビゲートできます。ユーザーは
フォルダー構造ごとにコンテンツリポジトリを探索できます。
リポジトリ内のドキュメントを閲覧するためのより柔軟な方法が必要になる場合があります。この例では、別の
参照機能を作成します
仮想フォルダ。 ツリーは存在しますが、フォルダに基づくものではありません。一部のノードはドキュメントクラスであり
、一部のノードはドキュメントプロパティ値です。ユーザーはナビゲーションツリーを構築できます。ユーザーがツリーのノ
ードをクリックすると、一致するドキュメントを取得するための検索がトリガーされます。
212 IBM Content Navigatorのカスタマイズと拡張
ツリー構造の定義はユーザーに任せることができます。独自のツリーを定義して、ツリー構造の構成を保存
できます。
この章では、基本的な仮想フォルダの例を示します。ツリー構造はハードコーディングされていますが、拡張
してより多くの機能を実装できます。この機能を実装するために、カスタム検索プラグインの例を拡張します
。
6.2フィーチャーのレイアウトの調整
Dojoウィジェットの場合、HTMLテンプレートが定義されています。ウィジェットのレイアウトは、このテンプレートファイルで
定義されています。の dijit._TemplatedMixin ウィジェットをすばやく簡単に作成するのに役立ちます。IBM Content Navigatorはこ
れを使用してウィジェットを作成します。
179ページの第5章「カスタムリポジトリ検索サービスの構築」でカスタム検索プラグインのカスタム機能ペイン
を作成したときに、テンプレートHTMLファイルがEclipseプラグインによって自動的に作成されました。ファイ
ルの名前は CustomFeaturePane.html 機能のコードを例6-1に示します。
例6-1カスタム検索プラグインのCustomFeaturePane.html
<div class = "ecmCenterPane">
<div data-dojo-type = "idx / layout / BorderContainer" data-dojo-props =
"gutters:true">
<div data-dojo-attach-point = "searchArea" data-dojo-type = "dijit
/ layout / ContentPane"
data-dojo-props = "splitter:true、region: 'top'"
class = "sampleSearchArea">
<div data-dojo-attach-point = "repositorySelectorArea" class =
"sampleRepositorySelectorArea"> </ div>
<label for = "$ {id} _queryString"
data-dojo-attach-point = "cm8HelpText" style = "display:none">以下で実行するXPathクエリを入力(例:&
quot; / NOINDEX")</ label>
<label for = "$ {id} _queryString"
data-dojo-attach-point = "p8HelpText" style = "display:none">以下で実行するSQLクエリを入力します(例:&
quot; SELECT * FROM Document")</ label>
<div class = "sampleQueryInputArea">
<input id = "$ {id} _queryString"
data-dojo-attach-point = "queryString" data-dojo-type = "dijit / form /
TextBox"> </ input>
<button data-dojo-attach-point = "searchButton"
data-dojo-type = "dijit / form / Button"
第6章検索サービスとウィジェットを使用したフィーチャーの作成 213
data-dojo-attach-event = "onClick:runSearch"
class = "searchButton">
$ {messages.search} </
button> </ div> </ div>
<div data-dojo-attach-point = "resultsArea" data-dojo-type = "dijit /
layout / ContentPane" data-dojo-props = "region: 'center'">
<div data-dojo-attach-point = "searchResults" data-dojo-type = "ecm /
widget / listView / ContentList"
data-dojo-props = "emptyMessage: '$ {messages.folder_is_empty}'">
</ div> </
div> </ div> </ div>
このテンプレートのレイアウトを図6-2に示します。
repositorySelectorArea
sampleQueryInputArea
resultArea
図6-2 CustomFeaturePane.htmlのレイアウト
テンプレートには次のコンポーネントがあります。
data-dojo-attach-point
これは、作成されたドキュメントオブジェクトモデル(DOM)要素への参照です。この値は、ウィジェット
でプロパティとして使用できます。たとえば、cm8HelpTextは次の場所にあります CustomFeaturePane.js を使
用して this.cm8HelpText。
214 IBM Content Navigatorのカスタマイズと拡張
データ道場型
これにより、事前定義されたDojoウィジェットへの参照が提供されます。たとえば、検索ボタンは既
存の dijit / form / Buttonウィジェット。
data-dojo-attach-event
これは、ウィジェットのイベントを処理するメカニズムを提供します。たとえば、検索ボタンのonClickイベ
ントは、runSearch関数によって処理されます。 CustomFeaturePane.js。
data-dojo-props
これはウィジェットのプロパティを定義します。
仮想フォルダーの参照の新機能ペインで使用するレイアウトは、IBM Content Navigatorの参照ペインに似ていま
す。図6-3はこのレイアウトを示しています。
repositorySelectorArea
resultsArea
navTreePane
図6-3仮想フォルダ参照機能のレイアウト
この例では、テンプレートHTMLファイルは例6-2のように変更されます。
例6-2仮想フォルダ参照ペインのテンプレート
<div class = "ecmCenterPane" data-dojo-attach-point = "containerNode">
<div data-dojo-type = "idx.layout.BorderContainer" data-dojo-attach-point = "container" class =
"contentPane" gutters = "false" design = "sidebar">
<div data-dojo-type = "dijit.layout.ContentPane" region = "leading" class = "paneNoOverflow" Split =
"true">
<div data-dojo-type = "dijit.layout.BorderContainer" gutters = "false" class =
"navContainer">
<div data-dojo-type = "dijit.layout.ContentPane"
data-dojo-props = "region: 'top'">
第6章検索サービスとウィジェットを使用したフィーチャーの作成 215
<div data-dojo-attach-point = "repositorySelectorArea"
class = "sampleRepositorySelectorArea"> </ div>
</ div>
<div data-dojo-attach-point = "searchSelectorArea"
class = "navContainerBottomBar" data-dojo-type = "dijit.layout.ContentPane" region = "center">
<div data-dojo-type = "dijit.layout.ContentPane"
id = "navTreePane"、style = "width:100%; height:100%; overflow:auto;"、data-dojo-attach-point = "na
vTreePaneObj"> </ div>
</ div> </
div> </ div>
<div data-dojo-type = "dijit.layout.ContentPane" region = "center">
<div data-dojo-attach-point = "navResult"
data-dojo-type = "ecm.widget.listView.ContentList" emptyMessage = "folder is empty"> </ div>
</ div> </
div> </ div>
これを行うには、カスタム検索プラグインで新しい機能を作成する必要があります。次の手順でフィーチャーを
作成します。完全なダイアログを217ページの図6-4に示します。
1. IBM Content Navigator Eclipseプラグインが構成されていることを確認します。
2.を右クリック com.ibm.ecm.extension.customsearch のパッケージ
EclipseのCustomSearchPluginプロジェクトと選択 IBM Content Navigator →
新機能。
3.クラス名として、次を入力します VirtualFolderBrowePane。
4. 32 * 32のPNG画像ファイルを新しい機能のアイコンとして探します。を選択 使用する
新機能画像 ボックスをクリックして、画像を選択します。大きなボタンにプレビューが表示されます。クリック O
K。
216 IBM Content Navigatorのカスタマイズと拡張
図6-4新しい仮想フォルダの参照ペイン機能
5.ウィザードを完了します。次のファイルが作成されます。
VirtualFolderBrowsePane.java
VirtualFolderBrowsePane.js
VirtualFolderBrowsePane.htmlファイル
6. CustomSearchPlugin.javaのgetFeatures()メソッドが例6-3のようになっていることを確認します。そうでない場合は、手動
で変更してください。
例6-3 CustomSearchPlugin.javaのgetFeaturesメソッド
public com.ibm.ecm.extension.PluginFeature [] getFeatures(){
return new com.ibm.ecm.extension.PluginFeature [] {new com.ibm.ecm.extension.customsear
ch.CustomFeaturePane()、new com.ibm.ecm.extension.customsearch.VirtualFolderBrowsePan
e()}; }
第6章検索サービスとウィジェットを使用したフィーチャーの作成 217
7。 VirtualFolderBrowsePane.html Eclipseプラグインによって生成されるファイル
空以外のコンテンツは含まれていません div 素子。このファイルの内容を215ページの例6-2のコードに置き換え
ます。これにより、レイアウトがデザインに合わせて調整されます。必要に応じて、プラグインをビルドして
、テンプレートレイアウトが機能するかどうかを確認し、必要な調整を行うことができます。
8.機能アイコンファイルが次のパッケージにコピーされます。
com.ibm.ecm.extension.customsearch.WebContent.imagesパッケージ
そのパッケージにアイコンを追加することもできます。次に、アイコンの定義は
CustomSearchPlugin.css 例6-4に示すファイル。
例6-4アイコンのCSS定義
。CustomSearchPluginLaunchIcon
{
幅:32px; 高さ:32p
x;
背景:url( 'images / search.png')繰り返しなし; }
9.の機能のアイコンを定義します VirtualFolderBrowsePane.java に示すように
例6-5。
例6-5機能のアイコン定義
public String getIconUrl(){
「CustomSearchPluginLaunchIcon」を返します。}
6.3カスタムツリーを表示するツリーウィジェットの作成
223ページの6.2、「フィーチャーのレイアウトの調整」では、必要なレイアウトを作成します。リポジトリセ
レクタ関連のコードはすでに CustomFeaturePane.js
ファイル。で再利用できます VirtualFoldedrBrowsePane.js ファイル。
次のステップは、カスタムツリーを作成することです。ツリーは、Dojo Tree dijitを使用して作成されます。Tree
dijitには、データとノードを管理するためのTreeStoreが必要です。ツリーデータの初期化はJSON文字列です。
元の空のツリーデータを定義します。
表示されるノードごとに3つのプロパティがあります。
名前:表示名id:ノードのID子:子ノード
のデータ
218 IBM Content Navigatorのカスタマイズと拡張
例6-6は、使用する初期ツリー構造を定義するJSONを示しています。
例6-6元のツリーのデータ構造
var data = "{\" name \ ":\" Multiple Demension Tree \ "、\" id \ ":\" root \ "、\" children \ ":
[{\" name \ ":\" My Navigator \ "、\" id \ ":\" my_navigator \ "、\" children \ ":[]}]}";
ツリーには、データを管理し、表示を処理するためのオブジェクトストアモデルが必要です。ここではメモリーストアを使
用しています。これは、Dojoが提供する組み込みオブジェクトストアです。コードを例6-7に示します。
例6-7メモリオブジェクトストアの使用
this.TreeStore = new Memory({
データ:[json.parse(data)]、
getChildren:lang.hitch(this、function(object){return object.children;}
)});
フォルダーとクラスを組み合わせて表示するサンプルツリー(図6-5)を作成します。これにより、ユーザーはフォルダーお
よびクラスごとにドキュメントをナビゲートできます。
図6-5フォルダとクラスを含むカスタムツリー
このツリーを構築するには、フォルダーリストとクラスリストを取得します。IBM Content Navigatorは、リポジトリー内のデ
ータの処理に使用できるモデルレイヤーAPIを提供します。
ルートフォルダーからフォルダーを取得するには、ルートフォルダーIDが必要です。ルートフォルダーIDは、例6-8に示
すように、IBM Content Navigator APIによって取得できます。
例6-8 rootItemIdをルートフォルダに設定します。
var rootItemId = this.repository.rootFolderId || "/";
第6章検索サービスとウィジェットを使用したフィーチャーの作成 219
ルートフォルダーIDを使用して、例6-9に示すようにIBM Content Navigator APIを呼び出すことにより、最上位のフォル
ダーを取得できます。
例6-9ルートフォルダのサブフォルダを取得する
this.repository.retrieveItem(rootItemId、lang.hitch(this、function(rootFolder){
this.repository.rootFolder = rootFolder;
rootFolder.retrieveFolderContents(true、callbackGetFolders); })、null、null、null、this._objectStore
?this._objectStore.id: "");
使用できます rootFolder.retrieveFolderContents そのすべてのサブフォルダを取得します。callbackGetFoldersを使用して
、フォルダーをツリーノードに設定します。コードは例6-10にあります。
例6-10 callbackGetFoldersは、フォルダをツリーノードに設定します。
var callbackGetFolders = lang.hitch(this、function(resultset)
{this.mainfolders = [];
for(resultet.itemsの行)
{var element = {
値:resultset.items [row] .id、label:resultset.items [row] .name、n
ame: "Folder:" + resultset.items [row] .name、id:resultset.item
s [row] .id、criteriaType :「フォルダ」、子供:[]
} this.mainfolders.push(element);
} this.setupNavTree(); });
クラスを取得するコードを例6-11に示します。callbackGetClassesは、クラスデータをツリーに挿入するコール
バック関数です。コードは、221ページの例6-12に示されています。
例6-11リポジトリのクラスを取得する
this.repository.retrieveContentClasses(callbackGetClasses);
220 IBM Content Navigatorのカスタマイズと拡張
例6-12 callbackGetClasses
var callbackGetClasses = lang.hitch(this、function(contentClasses)
{this.classnames = [];
for(contentClassesのdocclass)
{var element = {
value:contentClasses [docclass] .id、label:contentClasses [docclass
] .name、name: "Class:" + contentClasses [docclass] .name、id:co
ntentClasses [docclass] .id、criteriaType: "Class"、子:[ ]
} this.classnames.push(element); }});
顧客がカスタムツリーに表示したいクラスを表示するには、このコードにフィルターロジックを追加できます
。
カスタム・ツリーのアイコンは、IBM Content Navigatorフォルダーのアイコンと同じではないことに気付くでし
ょう。別のアイコンの使用方法と、オブジェクトストアでツリーを作成する方法を示します。222ページの例6-1
3は、ツリーのgetIconClass()メソッドをオーバーライドする方法を示しています。ノードのタイプごとに異な
るアイコンを返します。この例は、新しいアイコンリソースの使用方法も示しています。222ページの例6-14は、
アイコンリソースをIBM Content Navigatorプラグインプロジェクトに手動で追加する方法を示しています。
ファイルタイプ: すべてのリソースファイルタイプがIBM Content Navigatorプラグインメカニズムでサポートされているわけではありません。
現在サポートされているファイルタイプはです。 png、 .jpg、 .jpeg、 .gif、
。json、 .js、 .css、 .xml、 と。 html。
第6章検索サービスとウィジェットを使用したフィーチャーの作成 221
例6-13オブジェクトストアとさまざまなアイコンを使用してツリーを作成する
this.navTree = new Tree({
モデル:TreeModel、onOpe
nClick:true、永続化:false、
getIconClass:lang.hitch(this、function(item、opened)
{if(item.id!= "root" && item.id!= "my_navigator")
return(opened? "searchFolderOpenIcon":
archFolderCloseIcon ");
そうしないと
return(opened? "dijitFolderOpened":
"dijitFolderClosed");
})}、 "divTre
e");
JavaScriptコードでは、アイコン文字列はCSSファイル内のクラス名です。CSSファイルのアイコンクラスの定
義を例6-14に示します。アイコンファイルが画像パスにあることを示しています。それらは実際には次の場所に
置かれます。
com.ibm.ecm.etension.customsearch.WebContent.images
例6-14 CustomSearchPlugin.cssのアイコン定義
。searchFolderOpenIcon、searchFo
lderOpenIcon {
background-image:url(images / SearchFolderOpened.png); 幅:16px; 高さ:16
px;
} .searchFolderCloseIcon、searchFo
lderCloseIcon {
background-image:url(images / SearchFolderClosed.png); 幅:16px; 高さ:16p
x; }
この例は、単純なカスタムツリーを構築する方法を示しています。このメカニズムに基づいて、他のデータを使
用して独自のツリーを構築できます。たとえば、プロパティの値を使用してツリーを構築し、ユーザーはプロパ
ティ値ごとにドキュメントをナビゲートできます。階層構造を持つ種類のプロパティ値ツリーを構築することも
できます。さらに機能を追加するには、各ユーザーのツリー構成を保存します。次に、ユーザーは独自のドキュ
メントナビゲーションツリーを定義できます。ドキュメントのナビゲーションを管理するこの方法は柔軟です。
222 IBM Content Navigatorのカスタマイズと拡張
6.4クラスノードに関数を追加して結果を検索および表示する
現在、リポジトリセレクタを変更するとツリーが表示されますが、これまでのところ、ツリーでノードが選択されて
いるときのアクションは定義されていません。
IBM Content Navigatorでは、ユーザーがフォルダーツリーのノードをクリックすると、1つまたは複数の検索が
トリガーされます。フォルダーのコンテンツが取得され、ContentListに表示されます。
この仮想フォルダー参照機能の例では、IBM Content Navigatorの参照ペインに類似した機能も取得したいと考え
ています。カスタムツリーのノードをクリックすると、検索がトリガーされ、結果がContentListに表示されます
。検索条件は、ノードのプロパティに従って構築されます。
これを行うには、検索メソッドをカスタムツリーに接続する必要があります。Dojo接続を使用すると、DOMイベ
ントを関数にバインドできます。例6-15では、カスタムツリーノードのonClickイベントがexecuteSearch()メ
ソッドにバインドされています。executeSearch()メソッドは、ノード情報に基づいてクエリ文字列を作成し、
検索して結果を取得します。例6-15は、ツリーのonClickイベントを検索関数に接続する方法を示しています。e
xecuteSearch()メソッドは、ユーザーがクリックしたフォルダーまたはクラスに基づいて検索を実行します。
例6-15検索関数へのツリーのonClickイベントの接続
this.connect(this.navTree、 "onClick"、lang.hitch(this、function(item){
if(item.id!= "root" && item.id!= "my_navigator")
{this.executeSearch(item); }}));
検索では、173ページの第5章「カスタムリポジトリ検索サービスの構築」で構築されたカスタム検索プラグイン
の既存の検索サービスを使用します。クエリ文字列による検索をサポートしています。IBM FileNet Content Ma
nagerのサービスはページングをサポートし、プロパティ構成を表示します。
ユーザーがフォルダーノードをクリックすると、検索によりフォルダーがパラメーターとして渡され、そのフォルダー内
のすべてのドキュメントが検索されます。ユーザーがクラスノードをクリックすると、フォルダーとクラスの両方がパラ
メーターとして渡され、ドキュメントが検索されます。224ページの例6-16は、このロジックを示しています。パラメー
タを構築した後、runSearch()メソッドが起動され、リポジトリに対して検索が実行されます。
第6章検索サービスとウィジェットを使用したフィーチャーの作成 223
例6-16検索用のビルドパラメーター
executeSearch:function(item){
var node = this.navTree.getNodesByItem(item); var path = node [0]
.tree.path; var docClassName = ""; var mainFolderID = ""; for(i = 2;
path [i]!= undefined; i ++)
{if(path [i] .criterionType == "Class")
{docClassName = path [i] .value; } else if(path [i] .criterionType ==
"Folder")
{mainFolderID = path [i] .value; }
} this.runSearch(docClassName、mainFolderID); }、
前のサンプルでは、​​クエリ文字列全体を手動で入力する必要がありました。ただし、このツリーノードトリガー
検索では、クエリ文字列をコードで生成する必要があります。例6-17は、クエリ文字列の作成方法を示していま
す。
例6-17クエリ文字列の作成
if(this.repository.type == "cm"){
var scoperule = "/ *";
var baserulestart = '[(@ SEMANTICTYPE IN(1))'; var ruleEnd =
"]"
var folderrule = 'INBOUNDLINK [@LINKTYPE = "DKFolder"] / @ SOURCEITEMREF =
'; var attributerule = "";
if(docClassName!= "")
scoperule = '/' + docClassName + ""; var query = scoperule +
baserulestart; if(attributeName!= "" && attributeName!= undefined)
{attributerule = '((@' + attributeName + "=" + attributeValue + '))'
query = query + "AND" + attributerule;
} if(mainFolderID!= ""){
itemid = mainFolderID.split( "")[6]; mainFolderID = itemid.substr(0、item
id.length-2); folderrule = folderrule + '"' + mainFolderID + '"';
224 IBM Content Navigatorのカスタマイズと拡張
query = query + "AND" + folderrule;
} query + = ruleEnd; requestParams.query = query; }
else if(this.repository.type == "p8"){
var query = "Select * from";
if(docClassName && docClassName.length> 0){
クエリ+ = docClassName;
}そうしないと{
クエリ+ = "DOCUMENT";
} if(mainFolderID ||(attributeName && attributeValue)){
query + = "where"
} if(mainFolderID && mainFolderID.length> 0){
var folderID = mainFolderID.substr(mainFolderID.length-38、mainFolderID.length);
query + = "this INFOLDER" + folderID;
} requestParams.query = query; }
その後、ユーザーがカスタムツリーのノードをクリックすると、検索が開始され、結果がContentList
に表示されます。
6.5 ContentListウィジェットに追加のモジュールを構成する
ContentListウィジェットは、IBM Content Navigatorの重要なウィジェットです。これはDojo GridXウィジェットに基づ
いていますが、多くの機能強化が含まれています。ContentListを変更および構成できるモジュールもあります。GridX
は、データを表示するデータグリッドウィジェットです。また、モジュールメカニズムもサポートしています。これに
はいくつかのモジュールがあり、独自のモジュールをGridXに拡張または構築できます。ContentListモジュールは次の
とおりです(これらのモジュールについては、173ページの第5章「カスタムリポジトリ検索サービスの構築」で説明し
ています)。
ContentList:これは、データと起動アクションを表示するためのコアモジュールです。ツールバー:ボタ
ンを含むツールバーを提供します。バー:ContentListウィジェットを配置するバー機能を提供します。ブ
レッドクラム:ブレッドクラム機能を提供します。DocInfo:ドキュメントの詳細を表示します。
第6章検索サービスとウィジェットを使用したフィーチャーの作成 225
FilterData:データをフィルタリングする機能を提供します。InlineMess
age:メッセージをインラインで表示します。
TotalCount:結果の総数を表示します。結果の合計数を提供できないリポジトリでは非表示になります。ViewDetail
:詳細ビューを表示するビューモジュール。ViewMagazine:マガジンビューを表示するビューモジュール。ViewFil
mStrip:フィルムストリップビューを表示するビューモジュール。RowContextManu:コンテキストメニューを表示
するグリッドモジュール。DndFromDesktopAddDoc:ユーザーがデスクトップからグリッドに「ドラッグアンドドロ
ップ」できるようにするグリッドモジュール。
DndRowMoveCopy:行をドラッグアンドドロップし、ドキュメントをドロップするときに移動またはコピー
するグリッドモジュール。
DndRowCopy:行をドラッグアンドドロップし、ドキュメントをドロップするときにコピーするグリッドモジ
ュール。
DndDropOnly:グリッドモジュールはDndRowMoveCopyを拡張します。行のドラッグを禁止できます。
このセクションでは、サンプルコードでContentListのその他のモジュールを構成します。例6-18は、ContentListモ
ジュールを示しています。コードはサンプルプラグインからインポートされます。
例6-18 ContentListモジュール
getContentListModules:function(){
var viewModules = []; viewModules.push(ViewDetail);
viewModules.push(ViewMagazine);
if(ecm.model.desktop.showViewFilmstrip){
viewModules.push(ViewFilmStrip);
} var array = [];
array.push(DocInfo);
array.push({
moduleClass:Bar、top:[
[[{moduleClass:Toolbar
}、{
226 IBM Content Navigatorのカスタマイズと拡張
moduleClasses:viewModules、 "className
": "BarViewModules"}]]]});
配列を返す; }、
次のモジュールを使用できます。
ViewDetail
ViewMagazine
ViewFilmStrip
DocInfoツールバーバー
DndRowMoveCopy
DndFromDesktopAddDoc
RowContextMenu
Barモジュールを使用すると、ユーザーはContentListモジュールをContentListグリッドの下または上に配置できま
す。サンプルコードでは、ContentListの上に1行のモジュールが設定されています。1つ目はToolBar、2つ目はC
ontentListのビューモジュールです。の
"className": "BarViewModules" モジュールを表示するためのクラス名を指定することを意味します。ユーザーはここ
で任意のクラス名を設定できます。Barモジュールは、<table>、<tr>、および<td>への文字列を処理し、配列は、作成す
る<table>、<tr>、および<td>の数を決定します。
次に、行とモジュールを追加します。1行目にFilterDataのモジュールがもう1つあります。2行目はブレッドク
ラムです。3行目はInlineMessageです。次に、TotalCountモジュールがContentListグリッドの下部に追加され
ます。例6-19は、更新されたContentListモジュールを示しています。
例6-19 ContentListにモジュールを追加する
var array = [];
array.push(DocInfo);
array.push({
moduleClass:Bar、top:[
[[{moduleClass:Toolbar
第6章検索サービスとウィジェットを使用したフィーチャーの作成 227
}、
{moduleClass:FilterData、
"className": "BarFilterData"}、
{moduleClasses:viewModules、
"className": "BarViewModules"}]]、
[[{moduleClass:Breadcrumb、
}]]、
[[{moduleClass:InlineMessage
}]]]
、
下部:[[[{moduleClass:TotalCount
}]]]});
配列を返す;
228 IBM Content Navigatorのカスタマイズと拡張
コードを変更した後、プラグインをビルドしてデプロイします。図6-6は、更新されたインターフェースを示しています。
フィルターデータコンポーネントが上部に表示されます。インラインメッセージは、50個のアイテムがこのページの結果セ
ットにあることを示しています。TotalCountモジュールは、すべての結果の数量が59であることを示しています。Conten
tListを下にスクロールすると、最新の9件の結果を取得するために連続クエリが起動されます。
図6-6更新されたカスタム検索結果表示インターフェース
Breadcrumbモジュールは、結果セットにparentFolderまたはsearchTemplateを設定する必要があります。リンクをク
リックすると、そのアイテムのopenメソッドが実行されます。ユーザーがブレッドクラム関数を他の条件で使用した
い場合は、独自のモジュールを作成して、ここに追加できます。
第6章検索サービスとウィジェットを使用したフィーチャーの作成 229
InlineMessageモジュールは、setMessage()メソッドを使用して、警告、情報、確認、エラーのメッセージを
表示します。例6-20は、結果セット内のアイテム数を示しています。
例6-20 InlineMessageModuleを使用してメッセージを表示する
var inlineMessageModule = this.navResult.getContentListModule( "inlineMessage");
if(inlineMessageModule){
inlineMessageModule.clearMessage();
inlineMessageModule.setMessage( "結果セットアイテムの長さは:"
+ resultSet.items.length、 "info"); }
TotalCountモジュールは、見つかった合計結果の数を示します。結果セットにtotalCountおよびtotalCount
Typeを設定します。次に、ContentListに表示されます。IBM FileNet Content Manager V5.2以降には、クエ
リ文字列で指定できるオプションがあり、
pageIterator.getTotalCount() 方法。オプションはに似ています オプション(COUNT_LIMIT 1000)。
nullを返す: 結果のサイズがページサイズより小さい場合、pageIterator.getTotalCount()はnullを返すこ
とに注意してください。
例6-21は、カウント制限が指定されたクエリを示しています。
例6-21 IBM FileNet Content Manager V5.2のCOUNT_LIMITオプション
このinfolder '\ Test' OPTIONS(COUNT_LIMIT
1000)
例6-22は、TotalCountモジュールが表示する結果セットにデータを設定するサンプルコードを示しています。こ
のモジュールは、結果セットでこれらの2つの値を設定することにより、他のデータにも使用できます。
例6-22 TotalCountモジュール設定のサンプル
jsonResultSet.put( "totalCount"、totalCount); jsonResultSet.put( "to
talCountType"、 "total");
230 IBM Content Navigatorのカスタマイズと拡張
図6-7は、完成した機能のユーザーインターフェイスを示しています。
図6-7完成した機能が実装されたユーザーインターフェイス
6.6まとめ
この章では、カスタム検索プラグインを拡張して、仮想フォルダーを参照するための新機能を提供します。これ
を行うには、レイアウトを調整し、カスタムツリーを作成し、検索メソッドをツリーノードに接続して、クエリ
文字列を自動的に作成します。また、モジュールを使用してContentListウィジェットをコードでカスタマイズす
る方法も示します。この章のサンプルコードを使用して、独自のカスタムドキュメントナビゲーションプラグイ
ンを構築できます。
117ページの第4章「基本的な拡張ポイントを使用したプラグインの開発」のサンプルコードは、フォルダを使用してさまざ
まなタイプのドキュメントを管理する方法を示しています。ただし、この章では、ドキュメントクラスごとに異なるタイプ
のドキュメントを管理できることを示しています。ユーザーはドキュメントクラスごとにドキュメントをナビゲートするこ
ともできます。
519ページの付録C「カスタム検索プラグインプロジェクトのコアコード」は、以下のカスタム検索プラグイン
プロジェクトの2つのファイルからコアコードを提供します。
VirtualFolderBrowsePane.js
拡張されたSamplePluginSearchServiceP8.javaコード
完全なコードについては、この本に関連する追加の資料をダウンロードしてください。535ページの付録D「その
他の資料」を参照してください。
第6章検索サービスとウィジェットを使用したフィーチャーの作成 231
232 IBM Content Navigatorのカスタマイズと拡張
7
第7章。
要求および応答フィルターと外部データサ
ービスの実装
この章では、リクエストフィルタとレスポンスフィルタについて説明します。これらのフィルターを使用すると
、サービスに送信する前に要求を変更し、サービスから受信した後に応答を変更できます。IBM Content Naviga
torでは、外部データサービス(EDS)は、要求および応答フィルターの特別な実装です。この章では、EDSの実
装についても説明します。独自の要求フィルターと応答フィルターを実装するタイミングと、EDSを使用するタ
イミングを理解することが重要です。この章では、どちらを実装するかについてのガイドラインを示します。
この章では、次のトピックについて説明します。
要求および応答フィルターの概要外部データサービス
(EDS)の概要例の概要
サンプルEDSプロジェクトの設定選択リストプロパテ
ィフィールドの検証フィールドプロパティの設定追加
ダイアログのプロパティの並べ替え大きな選択リスト
のフィルター展開と構成
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
233
7.1要求および応答フィルターの概要
IBM Content Navigatorでは、サービス呼び出しを実行すると、要求がサービスに送信され、応答がサービスから
クライアント層に送信されます。これらの応答と要求はJSON形式です。一般に、IBM Content Navigatorフレー
ムワークは、サービス呼び出しとフレームワークによって定義される標準のJSON形式で要求と応答を作成します
。
場合によっては、サービスに送信またはサービスから返されるデータを変更するために、要求と応答を変更する
必要があります。プラグインを作成して、サービスに対して行われた要求をフィルタリングしたり、サービスか
ら受信した応答をフィルタリングしたりできます。たとえば、リクエストに含まれているドキュメントを確認し
、外部情報に基づいて追加レベルのセキュリティチェックを実行することができます。応答については、サービ
スが特定の要求を実行できない場合に、追加のエラー処理コードを実装することができます。特別なDojoクラス
を使用してJSON出力を変更することにより、結果セットの専用列に特別なフォーマットを定義することもできま
す。要求または応答フィルターは、クライアントとサービスの間にあり、必要に応じて応答と要求を変更します
。
提供されるサービスは、 struts-config.xml 次のディレクトリにあるファイル:
< WAS_InstallPath> / プロファイル/ < nameOfProfile> / installedApps / < nameOfCell> / n avigator.ear /
navigator.war / WEB-INF
の<action-mappings>セクション struts-config.xml ファイルには、フィルタリングできるアクションがリストされてい
ます。getFilteredServices()メソッドによって返される必要があるアクションの名前は、<action path>タグです。
この章では、2つの応答フィルターのサンプルが実装されています。
260ページの7.8、「追加ダイアログでのプロパティの順序付け」
279ページの7.9、「大きな選択リストのフィルター」
7.1.1リクエストとレスポンスのフィルターを実装するタイミング
次のタイプのタスクを実行する場合は、リクエストフィルターとレスポンスフィルターを実装します。
ダイアログのプロパティを並べ替えます。
チームスペースビルダーペインなど、EDSに含まれていないアクションのデータを制御します。
参照ビューでフォルダーを開くときに、ドキュメントリストビューにカスタムコントロールを追加します(たとえば
、フォルダーごとに異なる既定の並べ替え列を設定します)。
234 IBM Content Navigatorのカスタマイズと拡張
注意: 次のセクションでEDSの学習と実装に進む前に、多くの実装はおそらく要求と応答のフィルターとし
て行う必要があることに注意してください。要求および応答フィルター実装の例としてEDSを使用できます
。
7.2外部データサービス(EDS)の概要
EDSの2つの部分は次のとおりです。
EDS機能を有効にするために使用されるEDSプラグイン外部データを取得してプロパティの動作を
設定するために使用されるEDS Webアプリケーション
EDSプラグインは、要求および応答フィルターを使用して、サービスがEDS機能を提供できるようにします。多
くの場合、独自の要求および応答フィルターを実装します。ただし、EDSは実装を簡素化できる場合があります
。
この章では、次のEDSサンプルが実装されています。
246ページの7.5.1、「単純な選択リスト」
257ページの7.5.2、「従属選択リスト」
7.6、256ページの「プロパティフィールドの検証」
257ページの7.7、「フィールドプロパティの設定」
7.2.1 EDSを使用する場合
次のタスクを実行する場合は、EDSを使用します。
プロパティに値を事前入力します。
プロパティまたは依存プロパティの選択リストの値を検索します。最小値と最大値を設定しま
す。
読み取り専用、必須、非表示などのプロパティのステータスを設定します。プロパティ
の検証とエラーチェックを実装します。
EDSプラグインでは、多くの要求および応答フィルターを実装します。EDSプラグインには、次のリクエストフィル
ターが含まれています。
AddItemFilter
CheckinFilter
EditAttributesFilter
SearchFilter
DispatchItemFilter
UpdateStepProcessRequestFilter
第7章要求および応答フィルターと外部データサービスの実装 235
各リクエストフィルタについて、表7-1でそのサービスとアクションについて説明します。
表7-1 EDSプラグインの要求フィルター
フィルタ
サービス
アクション
AddItemFilter
/ p8 / addItem / cm
ドキュメントとフォルダーを追加す
/ addItem
る
CheckinFilter
/ p8 / checkIn
チェックインドキュメント
EditAttributesFilter
/ p8 / editAttributes / cm /
プロパティを編集する
editAttributes
SearchFilter
/ p8 / search / cm
探す
/ search / od /
search
DispatchItemFilter
/ p8 / completeStep
ワークフロー
UpdateStepProcessRequ
/ cm / completeStep
ワークフロー
estFilter
EDSプラグインには、次の応答フィルターが含まれています。
OpenContentClassFilter OpenItemFilter
OpenProcessorFilter
UpdateParameterDefsFilter
UpdateAttributeDefsFilter
OpenSearchTemplateFilter
OpenInbasketFilter
StepProcessVarsFilter
UpdateStepProcessVarsFilter
表7-2に、各応答フィルタのサービスとアクションを示します。
表7-2 EDSプラグインの応答フィルター
フィルタ
サービス
アクション
OpenContentClassFilter
/ cm / openContentClass / p8 /
クラスを選択
openContentClass
OpenItemFilter
/ p8 / openItem / cm
プロパティを編集する
/ openItem
OpenProcessorFilter
/ p8 / getLaunchParameters / p8 /
getStepParameters
236 IBM Content Navigatorのカスタマイズと拡張
ワークフロー
フィルタ
UpdateAttributeDefsFilter
サービス
アクション
/ p8 / getDependentParamet ers
ワークフローの従属パラメーター
/ p8 / getDependentAttribute情報
依存プロパティ
/ cm / getDependentAttribut eInfo
OpenSearchTemplateFilte r
/ cm / openSearchTemplate / p8 /
探す
openSearchTemplate / od /
openSearchTemplate
OpenInbasketFilter
/ p8 / getFilterCriteria
ワークフロー
StepProcessVarsFilter
/ cm / getStepParameters
ワークフロー
UpdateStepProcessVarsFi lter
/ cm / getDependentParame ters
ワークフローの従属パラメーター
実装されたEDS要求および応答フィルターに従って、IBM Content Navigatorで以下のアクションを実装でき
ます。
ドキュメントとフォルダの追加リポジトリへのドキュメント
のチェックイン1つまたは複数のアイテムのプロパティの編集
ビューアでのアイテムプロパティの編集エントリテンプレー
トの使用
プロセスワークフローステッププロパティとワークフローフィルター基準フィールドの設定検索の作成ま
たは使用
IBM Content Manager OnDemand検索フォルダーの制御UpdateParameterDefsFilte r
EDSの使用: ここに記載されている以外のアクションを実行する場合は、カスタムの要求および応答フィル
ターの実装を検討してください。
第7章要求および応答フィルターと外部データサービスの実装 237
EDSプラグインのいくつかのデフォルトプロパティの動作を表7-3に示します。
表7-3 EDSプラグインのデフォルトのプロパティ動作
オプション
サンプル
説明文
ラベル
新しいラベル
プロパティのラベル
値
新しい価値
プロパティの値
customValidationError
このフィールドはメール形式である必要があ
無効な理由の説明
ります
customInvalidItems
[0、3、4、8]
無効な複数値アイテム
ディスプレイモード
読み取り専用/読み取り/書き込み
読み取り専用または読み取り書き込み
必須
真/偽
必要かどうか
隠された
真/偽
非表示かどうか
minValue
1
最小値を上書き
maxValue
100
最大値を上書き
maxLength
10
最大長さを上書き
フォーマット
\\ b [\\ w \\ .-] + @ [\\ w \\ .-]
正規表現の形式
+ \\。\\ w {2,4} \\ b
formatDescription
nicolas@sample.net
フォーマットのサンプル
choiceList
[{"displayName": "<name>"
選択リスト
「アクティブ」:<trueまたは
false>
"value":<value>}、//その
他の選択肢...]
hasDependentProperties
真/偽
EDSサービスのプロパティ動作を直接使用できます。
238 IBM Content Navigatorのカスタマイズと拡張
依存プロパティがあります
7.2.2 IBM Content Navigatorで提供されるサンプルEDSサービス
IBM Content Navigatorが提供するサンプルEDSサービスは、JSONファイルを使用して、プロパティー動作定義
とデータリストを格納します。ObjectTypes.jsonでは、EDS関数が有効になるすべてのオブジェクトタイプが含
まれます。オブジェクトタイプには、リポジトリ内のクラス名、ワークフローステップ、IBM Content Manager
OnDemand検索名などが含まれます。オブジェクトタイプごとに、オブジェクト名に_を付けた名前のJSONファ
イルがあります。 PropertyData プロパティの動作定義とデータリストをこのオブジェクトタイプに保存します。
例として、クラスDocumentの場合、JSONファイルの名前は Document_PropertyData.json。
PropertyData JSONファイルでは、すべてのプロパティの動作を設定できます。例7-1は、JSONファイル
のJSON形式を示しています。
例7-1サンプルJSONファイル
[
{"symbolicName": "<symbolic_name>"、
"value":<潜在的な新しい値>、
"customValidationError": "無効な理由の説明"、 "customInvalidItems":[0,3,4,8]、//無効な複数値ア
イテム "displayMode": "<readonly / readwrite>"、 "required":< trueまたはfalse>、 "hidden":<t
rueまたはfalse>、 "maxValue":<overridden max value>、 "minValue":<overridden min value>、
"maxLength":<underlying max>、
"format":<フォーマットを検証する正規表現>、 "formatDescription":<フォーマットの人
間が読める形式の説明>、 "choiceList":
{"displayName": "<display_name>"、
「選択肢」:
[{"displayName": "<name>"
"アクティブ":<trueまたはfalse> "値":
<値>}、
//その他の選択肢...]
} //または特別な値:
//
第7章要求および応答フィルターと外部データサービスの実装 239
//値の説明
// -------------------------------------- // "default" Use class defined choice list (存在する
場合)。// null現在割り当てられている選択リストを削除します。//
//選択リストを使用しない場合、ナビゲーターは
有効な値が定義されている場合は、有効な値のリストからの選択リスト。
"hasDependentProperties":<trueまたはfalse>、}、
//その他のプロパティ...]
EDSプラグインで定義されたデフォルトのプロパティ動作に加えて、サンプルEDSサービスはカスタマイズさ
れたプロパティ動作を提供します。独自のEDSサービスでプロパティの動作をカスタマイズすることもできま
す。カスタマイズされたプロパティ動作の実装については、を参照してください。 UpdateObjectTypeServlet.java
サンプルEDSサービス内。
カスタマイズされたプロパティの動作の実装については、
UpdateObjectTypeServlet.java サンプルEDSサービスのファイルは次のとおりです。
initialValue:プロパティの初期値を与える
validateAs:今のところ、サンプルEDSサービスは、カスタマイズされたプロパティ検証NoThreesを実装して
います(55ページの1.5.1「サンプル外部データサービス」を参照)。このカスタマイズされたプロパティの
検証では、文字列に次のような「3」文字を使用できません。 サンプル3。
timestamp:プロパティに強制的なタイムスタンプ値を与えます。dependentOn:このプロパ
ティが依存する別のプロパティを指定します。dependentValue:このプロパティが依存する値
を指定します。
7.3例の概要
保険会社は、損害保険、損害保険、自動車保険を扱っています。ポリシーに関連するすべてのドキュメントは、
IBM FileNet Content Managerを使用する保険会社のエンタープライズコンテンツ管理(ECM)リポジトリに保
存されます。
インバウンド通信はスキャンされ、インデックスが付けられ、クライアントベースのファイリングシステムにクライアントタイプのポ
リシー番号内でドキュメントタイプごとに保存されます。
インバウンドドキュメントの提出は、インバウンドドキュメントへの正しい値の割り当てに依存しています。無
効またはスペルミスのある単語は、
240 IBM Content Navigatorのカスタマイズと拡張
ドキュメントは正しく提出されません。誤って提出されたドキュメントは適切なビジネスプロセスに入らず、遅
延と追加コストにつながります。
保険会社は、受信ドキュメントキャプチャのスキャン後のインデックス作成フェーズで入力されるデータの
一貫性を管理するために、外部データサービスを実装することを決定しました。
保険会社は、そのアプリケーションにさまざまな機能を実装したいと考えています。
選択リスト
–
簡単な選択リスト:婚姻状況などのデータを選択するため
–
依存選択リスト:住所データなどの値を制約する場合
–
フィルター選択リスト:選択リストのフィールド選択のフィルター選択
–
メインのポリシー管理システムに対して、ポリシー番号やクライアントIDなどの主要なデータを検証
するために、[追加]ダイアログでプロパティを並べ替えます。
EDSを実装すると、データ入力の労力が減り、ドキュメントのインデックス作成フェーズの精度が向上し、
ドキュメントのミスファイリングのリスクが最小限に抑えられ、操作全体のコストが削減されます。
単純な選択リスト、依存選択リスト、およびフィールド検証機能については、EDSを使用して簡単に実装できま
す。フィルター選択リストおよび追加ダイアログ機能のプロパティの並べ替えの場合、それらはEDSで実装でき
ません。同社は、機能を実装するために応答フィルタープラグインを使用する必要があります。
会社は、EDSが提供する機能を活用して、会社のプロパティ入力フィールドを操作したいと考えています。いく
つかのユースケースがEDS機能で満たされます。
自動車保険請求のすべての推定者に選択リストを提供します。この選択リストは、データベーステーブルのユーザーの
リストにすることができます。詳細については、246ページの7.5.1、 『単純選択リスト』を参照してください。1つのメ
インカテゴリに属する​​カテゴリの依存選択リストを提供します。この選択リストは、各メインカテゴリの下で使用可能
なカテゴリを制限するためのものです。カテゴリはリージョンにすることができます。サブカテゴリは、オフィスのあ
る都市です。詳細については、255ページの7.5.2、「従属選択リスト」を参照してください。
第7章要求および応答フィルターと外部データサービスの実装 241
入力されたクレーム番号をフォーマットごとに検証します。たとえば、文字の正確な数とタイプが含まれてい
るかどうかを検証します。詳細については、256ページの7.6、「プロパティフィールドの検証」を参照してく
ださい。選択リストに提供された理由のいずれも意味がない場合、クレームが開かれた理由を説明するカスタ
ムテキストを受け入れる入力プロパティフィールドを非表示にします。
詳細については、257ページの7.7、「フィールドプロパティの設定」を参照してください。新しく作成され
た保険金請求の調整済み損失額を特定の値に制限します。
詳細については、259ページの7.7.2、「フィールドの最小値と最大値の設定」を参照してください。
リクエストとレスポンスのフィルターを実装することにより、次の機能が実現されます。
追加ダイアログでプロパティを並べ替えます。追加ダイアログでのプロパティの元の順序は適切ではありません。特
定のクラスに特定の順序を設定します。詳細については、260ページの7.8、「追加ダイアログでのプロパティの順序
付け」を参照してください。フィルター選択リスト。大きな選択リストの場合、大きな選択リストを持つ特定のプロ
パティにフィルター機能を提供します。詳細については、266ページの7.9、「大きな選択リストのフィルター」を参
照してください。
7.4サンプルEDSプロジェクトの設定
このセクションでは、IBM Content Navigatorで提供されるサンプルEDS実装に基づいて、EDSの新しい実装を
作成します。サンプルのEDS実装は次の場所にあります。
< IBM Content Navigatorインストール> / サンプル/ sampleEDSService
提供されているサンプルは、WARファイルとして、この章全体で使用されているEclipseまたはRational Appl
ication Developerのワークスペースにインポートできます。
次の手順では、サンプルプロジェクトのインポートとセットアップについて説明します。
1.クリック ファイル → インポート、 選択する ワークスペースへの既存のプロジェクト オプションとして、
次にクリックします 次。
2.次のウィンドウで、提供されているsampleEDSServiceディレクトリへのパスを入力します。243ページの図71を参照してください。
242 IBM Content Navigatorのカスタマイズと拡張
図7-1プロジェクトのインポートダイアログ
第7章要求および応答フィルターと外部データサービスの実装 243
3.クリック 終わり。 インポートされたプロジェクトを図7-2に示します。
図7-2サンプルのEDSプロジェクト構造
4.既存のプロジェクトをインポートした後、構成された参照へのビルドパスの問題が発生します。 j2ee.jar 簡単に
修正できるファイル。プロジェクトのプロパティを開き、選択します Javaビルドパス 左側の左側のナビゲー
ションから、次に 図書館 存在しない参照への既存の参照を削除するタブ j2ee.jar ファイル。
5.選択 ライブラリを追加 → サーバーランタイム → 次 → WebSphereアプリケーション
サーバーv7.0 → 仕上げ Rational Application Developerに含まれている組み込みのWebSphereランタイムをビ
ルドパスに追加します。
6.プロジェクトを選択してから、プロジェクトの名前をcustomEDSServiceに変更し、 リファクタリング → リネーム
上部のアクションバーから。
244 IBM Content Navigatorのカスタマイズと拡張
Eclipseまたは別のIDEを使用する場合は、有効なパスを指定してください j2ee.jar ファイル。ビルドパスは、図7
-3に示すものと同様である必要があります。
図7-3 EDSプロジェクトのビルドパス
2つのサーブレットクラスは、EDS実装の機能全体を構築します。
GetObjectTypesServlet:HTTP GETサービスを提供して、このEDS実装でサポートされるオブジェクトタ
イプのリストを決定します。UpdateObjectTypeServlet:外部データを取得し、メタデータを動的に変更、
検証、および強化するために使用されるHTTP POSTサービスを提供します。
サンプルの残りのファイルは、このEDS実装によって返されたデータを保持するJSONファイルです。これ
は、
ObjectTypes.json ファイル。246ページの7.5「選択リスト」では、UpdateObjectTypeServletクラスを
変更し、GetObjectTypesServletを変更しません。
サンプルの保険会社では、ClaimとPolicyの2つのドキュメントクラスで構成されるデータモデルを作成します。
クレームのみを使用するため
第7章要求および応答フィルターと外部データサービスの実装 245
サンプルのドキュメントクラス。このエントリは、既存のエントリに配置する必要がある唯一のものです。 ObjectTypes.json
ファイル、EDSがサポートするオブジェクトタイプとして認識されるすべての既存のエントリを置き換えます。新しい ObjectTypes.json
ファイルを例7-2に示します。
例7-2 ObjectTypes.json
[{"symbolicName": "申し立て"}]
7.5選択リスト
EDSの主な機能の1つは、選択リストに値を提供することです。選択リストは階層化することができ、従属とし
て指定することもできます。つまり、ある選択リストの値は、別のプロパティの値の選択に依存しています。
7.5.1単純な選択リスト
この例の保険会社の最初の要件は、自動車保険金請求に割り当てることができる見積もりの​​リストを用意するこ
とです。リストは、人々に関する情報を含むデータベーステーブルから取得されます。リソース参照を通じてア
プリケーションに割り当てられたデータソース定義を使用して、データベースに接続できるようにWebアプリケ
ーションを準備するために必要です。インターネットにはJDBCデータベースアクセスを構成する方法のサンプル
が多数あるため、この章ではこの情報については説明しません。代わりに、展開先のアプリケーションサーバー
上の作業データソース構成に依存します。
UpdateObjectTypeServletの最初の行は、リクエストJSONをロードし、JSNON4Jを使用していくつかの値を抽
出するときに変更されません。例7-3は、リクエストをロードしてデータベース接続を初期化するために使用され
る最初の行を示しています。
例7-3サンプルEDSサーブレットからのコードスニペット
protected void doPost(HttpServletRequest request、HttpServletResponse response)
ServletException、IOException {String objectType = request.getPathInfo()。s
ubstring(1);をスローします。
//リクエストjsonを取得します
InputStream requestInputStream = request.getInputStream();
246 IBM Content Navigatorのカスタマイズと拡張
JSONObject jsonRequest = JSONObject.parse(requestInputStream); String requestMode =
jsonRequest.get( "requestMode")。toString(); JSONArray requestProperties =
(JSONArray)jsonRequest.get( "properties"); JSONArray
responseProperties = new JSONArray(); JSONArray propertyData
=
getPropertyData(objectType、request.getLocale());
特定のオブジェクトタイプのプロパティを読み取るために、サンプルのgetPropertyData()メソッドを実装し
て、JSONファイルではなくデータベースにアクセスします。このメソッドは、例7-4に示すように実装されて
います。
例7-4データベーステーブルから読み取るカスタムgetPropertyData
//データベース定数
private final String schema = "NAVIGATOR"; プライベート最終文字列edsTable
= "EDS"; プライベート最終文字列edsChoicesTable = "EDS_CHOICES";
/ **
* EDSデータベーステーブルからプロパティデータを取得し、元のデータを置き換えます
* JSONファイルから読み取るgetPropertyData。
*
* @param objectType
* @paramロケール
* @returnサンプルのJSON形式のEDSデータ
*/
プライベートJSONArray getPropertyData(String objectType、Locale locale){
JSONArray jsonPropertyData = new JSONArray(); 接続con = nul
l;
{を試す
コンテキストctx = new InitialContext();
DataSource ds =(DataSource)ctx.lookup( "java:comp / env / jdbc / EDSDB"); con =
ds.getConnection();
//データベースにEDSデータをクエリしますStatement stmt =
con.createStatement(); ResultSet results = stmt.executeQuery( "SELECT" +
edsTable
+ ".OBJECTTYPE、" + edsTable + ".PROPERTY、" + edsTable
+ ".DISPMODE、" + edsTable + ".REQUIRED、" + edsTable
+ ".HIDDEN、" + edsTable + ".MAXVAL、" + edsTable
+ ".MINVAL、" + edsTable + ".MAXLEN、" + edsTable
+ ".FORMAT、" + edsTable + ".FORMATDESC、" + edsTable
+ ".HASDEPENDANT、" + edsChoicesTable + ".LISTDISPNAME、"
+ edsChoicesTable + ".DISPNAME、" + edsChoicesTable
+ ".VALUE、" + edsChoicesTable + ".DEPON、" + edsChoicesTable
第7章要求および応答フィルターと外部データサービスの実装 247
+ ".DEPVALUE" + "FROM" +スキーマ+ '。' + edsTable + ''
+ edsTable + "LEFT JOIN" + schema + '。' + edsChoicesTable
+ '' + edsChoicesTable + "ON" + edsTable
+ ".OBJECTTYPE =" + edsChoicesTable + ".OBJECTTYPE"
+ "AND" + edsTable + ".PROPERTY =" + edsChoicesTable
+ ".PROPERTY" + "AND" + edsChoicesTable + ".LANG = '"
+ ロケール+ "'" + "場所" + edsTable + ".OBJECTTYPE ='"
+ objectType + "'" + "ORDER BY" + edsChoicesTable
+ ".DEPON、" + edsChoicesTable + ".DEPVALUE");
文字列プロパティ= null; 文字列listDispName
= null; boolean firstLoop = true; 文字列depe
ndentOn = null; 文字列dependentValue = nu
ll;
JSONObject propertyJson = new JSONObject(); JSONObject
choiceList = new JSONObject(); JSONArrayの選択=新しいJS
ONArray();
// EDSデータを反復処理し、対応するJSONを構築します(results.next()){
文字列propertyTemp = results.getString( "property");
if(firstLoop){
property = propertyTemp;
listDispName = results.getString( "listdispname"); propertyJson = fillBasicPrope
rties(results、property); firstLoop = false; }
//プロパティが前のループの//と異なるかどうかを確認しますif(!propert
yTemp.equals(property)){
if(!choices.isEmpty()){
choiceList.put( "displayName"、listDispName); choiceList.put( "choice
s"、choices); propertyJson.put( "choiceList"、choiceList); listDispNam
e = results.getString( "listdispname"); choiceList = new JSONObject()
; 選択肢=新しいJSONArray();
} jsonPropertyData.add(propertyJson); property =
propertyTemp;
propertyJson = fillBasicProperties(results、property); }
248 IBM Content Navigatorのカスタマイズと拡張
文字列listDispNameTemp = results.getString( "listdispname"); if(!results.wasNull()
){
if(!listDispNameTemp.equals(listDispName)){
choiceList.put( "displayName"、listDispName); choiceList.put
( "choices"、choices); propertyJson.put( "choiceList"、choiceL
ist);
//プロパティを閉じ、配列に追加して、新しいjsonPropertyData.add(pro
pertyJson);を作成します。
listDispName = listDispNameTemp; choiceList = ne
w JSONObject(); 選択肢=新しいJSONArray(); } }
そうしないと {
//選択リストがアタッチされていないため、次のループに進みます。}
文字列dependentOnTemp = results.getString( "depon"); 文字列dependentValueTem
p = results.getString( "depvalue");
// dependenOn / Valueが選択リストに設定されているかどう
かを確認します
if((null!= dependentOnTemp && null!= dependentValueTemp
&&!dependentOnTemp.isEmpty()&&!dependentValueTemp
。isEmpty())){
//過去の値はnullです。(null == dependentOn && null == dependentValue){の場合、de
pendentOn / dependentValueを設定します{
dependentOn = dependentOnTemp; dependentValue = dependentValueTemp;
propertyJson.put( "dependentOn"、dependentOn); propertyJson.put( "depen
dentValue"、dependentValue); } そうしないと {
//履歴値はnullではないが異なる// // if(!dependentOnTemp.equals
(dependentOn)
|| !dependentValueTemp.equals(dependentValue)){dependentOn =
dependentOnTemp; dependentValue = dependentValueTemp; propertyJson
= fillBasicProperties(results、
プロパティ);
propertyJson.put( "dependentOn"、dependentOn); propertyJson.put( "de
pendentValue"、dependentValue); }}}
第7章要求および応答フィルターと外部データサービスの実装 249
JSONObject選択=新しいJSONObject(); choice.put( "displayName"、results.getS
tring( "dispname")); choice.put( "value"、results.getString( "value")); choices
.add(choice);
} //最後のプロパティを追加しますjsonPropertyData.add
(propertyJson);
stmt.close();
con.close();
}キャッチ(NamingException e){
e.printStackTrace();
}キャッチ(SQLException se){
System.out.println( "SQL Exception:");
// SQL例外をループします(se!= null){
System.out.println( "State:" + se.getSQLState()); System.out.println(
"Message:" + se.getMessage()); System.out.println( "Error:" +
se.getErrorCode());
se = se.getNextException(); } } 最後に
{
{を試す
if(null!= con &&!con.isClosed())
con.close();
}キャッチ(SQLException se){
System.out.println( "SQL Exception:");
// SQL例外をループします(se!= null){
System.out.println( "State:" + se.getSQLState()); System.out.println(
"Message:" + se.getMessage()); System.out.println( "Error:" +
se.getErrorCode());
se = se.getNextException(); }}}
jsonPropertyDataを返します。}
/ **
* EDSテーブルからプロパティを読み取り、新しいプロパティを開始する
250 IBM Content Navigatorのカスタマイズと拡張
*
* @paramの結果
* @paramプロパティ
* @return
* @throws SQLException
*/
プライベートJSONObject fillBasicProperties(ResultSet結果、Stringプロパティ)
SQLExceptionをスローします{
JSONObject propertyJson = new JSONObject(); propertyJson
.put( "symbolicName"、property);
//すべてのオプション設定を確認しますString displayMode = results.getString
( "dispmode"); if(!results.wasNull())
propertyJson.put( "displayMode"、displayMode); 必要な文字列= results
.getString( "required"); if(!results.wasNull()&& '1' ==
required.charAt(0))
propertyJson.put( "必須"、true); String hidden = results.getString
( "hidden"); if(!results.wasNull()&& '1' == hidden.charAt(0))
propertyJson.put( "hidden"、true); Double maxVal = results
.getDouble( "maxval"); if(!results.wasNull())
propertyJson.put( "maxValue"、maxVal); Double minVal =
results.getDouble( "minval"); if(!results.wasNull())
propertyJson.put( "minValue"、minVal); 整数maxLen = r
esults.getInt( "maxlen"); if(!results.wasNull())
propertyJson.put( "maxLength"、maxLen); 文字列フォーマッ
ト= results.getString( "format"); if(!results.wasNull())
propertyJson.put( "format"、format); 文字列formatdesc = results.getStr
ing( "formatdesc"); if(!results.wasNull())
propertyJson.put( "formatDescription"、formatdesc); String hasDependant =
results.getString( "hasdependant"); if(!results.wasNull()&& '1' ==
hasDependant.charAt(0))
propertyJson.put( "hasDependentProperties"、true);
propertyJson; }
第7章要求および応答フィルターと外部データサービスの実装 251
データベースには、各ドキュメントタイププロパティに必要な情報を含む2つのテーブルがあります。提供されて
いるデータベース構造を、null許容、varcharサイズ、およびその他のデータベース列の詳細に関するサンプルと
して考えてください。
2つのテーブルは、図7-4および図7-5に示すように定義されています。
図7-4 EDSオブジェクトプロパティテーブルの定義
図7-5 EDS選択テーブルの定義
getPropertyData()メソッドが書き換えられた後、ユースケースに従ってデータをテーブルに挿入できます。
最初のサンプルでは、​​オブジェクトプロパティテーブルと選択リストテーブルにデータを挿入します。オブジェクトプロパティテー
ブルの場合、ClaimオブジェクトタイプとEstimatorプロパティの1つのデータエントリを挿入します。図7-6を参照してください。
図7-6単純なプロパティ定義
252 IBM Content Navigatorのカスタマイズと拡張
選択リスト表の場合、必要な数の推定量の選択肢を挿入します。この推定量の選択リストは、クレーム処理
でユーザーがクレームの推定量を選択する必要がある場合に(EDSを使用して)表示されます。図7-7は、推
定器の選択に対する4つのデータエントリを示しています。
図7-7単純な選択リストのデータ
次に、実装されたサービスをデプロイしてテストします。デプロイメントについては、260ページの7.8、「追加ダイア
ログでのプロパティの順序付け」の指示に従ってください。
EDS実装の検証は、IBM Content Navigatorを使用して、一部のウィンドウで文書追加アクションを呼び出すこと
により行われます。このテストでは、参照ペインを使用してこのアクションを呼び出します。フォルダ構造から
、既存のクレームドキュメントを選択し、推定者を割り当てます。プロパティダイアログのロード中に、プログ
ラムはEDSを呼び出して、ユーザーインターフェイスに影響を与え、この特定のドキュメントクラスに対して定
義されている、選択リストの変更やその他の変更を要求します。
第7章要求および応答フィルターと外部データサービスの実装 253
図7-8は、EDSが提供するデータベースからの値が入力された結果の選択リストを示しています。
重要: 外部データサービスを使用して提供する選択リストに関連付けられている同じプロパティのContent P
latform Engine定義に選択リストを実装しないでください。
図7-8単純な選択リスト
254 IBM Content Navigatorのカスタマイズと拡張
7.5.2依存選択リスト
依存選択リストの場合、最初のサンプルを展開し、選択テーブルのDEPONフィールドとDEPVALUEフィールド
、およびオブジェクトプロパティテーブルのHASDEPENDANTフィールドを利用します。これらの項目は、特定
のプロパティが別のプロパティとその選択された値に依存していることを示しています。この場合、地域と支社
のプロパティ間の依存関係を示す必要があるため、両方のデータベーステーブルに挿入を行う必要があります。
挿入されたデータを図7-9および図7-10に示します。
図7-9依存関係のあるプロパティ定義
図7-10依存選択リストのエントリ
データベーステーブルに入力されたこの新しいデータをテストするために、もう一度プロパティダイアログを呼び出します。Regi
onプロパティには、関連付けられた選択リストがあります。図7-11を参照してください。最初のテーブルデータで指定されている
ように、RegionプロパティではhasDependentPropertiesフラグが有効になっています。このようなプロパティー値が変更されるた
びに、IBM Content NavigatorをトリガーしてEDSを再呼び出しします。
図7-11依存選択リスト:地域
第7章要求および応答フィルターと外部データサービスの実装 255
ここで、Regionの値をSouthwestに変更すると、ブランチオフィスの選択リストが更新され、データベーステ
ーブルの値が反映されます。
図7-12に示す選択リストが結果です。
図7-12依存選択リスト:支社
7.6プロパティフィールドの検証
EDSの強力な機能は、プロパティフィールドのカスタム検証メカニズムを実装し、適切なエラーメッセージ
でユーザーに応答する機能です。
このサンプルでは、​​クレーム番号プロパティを、2つの数値、その後にダッシュ、5つの数値が続く特定の形式
(01-12345など)に一致させる必要があります。したがって、図7-13のように、EDSオブジェクトプロパティ
テーブルにデータを挿入する必要があります。
図7-13検証データ
このステップは、Claimクラスの既存のドキュメントのプロパティダイアログを使用してテストできます。定義さ
れたルールに一致しない文字列を入力すると、Claim Numberプロパティの入力フィールドに検証エラーが発生す
ることが予想されます。ルールの構文は正規表現であるため、より複雑な検証ルールを指定することもできます
。入力した値がどのように見えるかの「ヒント」を提供するために、ツールチップでフォーマット記述値を利用
できます。
256 IBM Content Navigatorのカスタマイズと拡張
検証をテストするには、次のように入力します 01-123456 または 01-1234A クレーム番号の値として。結果
のエラーを図7-14に示します。
図7-14ツールチップ付きの検証エラー
7.7フィールドプロパティの設定
EDSを使用すると、プロパティフィールドの特定の特性を操作して、定型入力、検索ビュー、またはオ
ブジェクトプロパティを操作するウィンドウの外観に影響を与えることができます。
7.7.1フィールドステータスの設定
IBM Content Navigatorユーザー・インターフェースでは、いくつかの入力フィールドに、外観に影響を与える特
定のプロパティーがあります。これらのプロパティの中で、入力フィールドの必須、非表示、または読み取り専
用のステータスは、EDSを介して設定できます。このサンプルでは、​​Reasonプロパティで[Other]の値が選択リス
トから選択されている場合、Other Reasonプロパティを動的に表示します。したがって、図7-15と図7-16に示す
ように、両方のEDSテーブルにデータを挿入します。
図7-15プロパティ定義:理由
図7-16トリガー値を含む選択リストデータ
第7章要求および応答フィルターと外部データサービスの実装 257
クレームドキュメントのプロパティダイアログを再度開くと、新しく構成された選択リストが[その他]オプ
ションとともに表示されます。図7-17を参照してください。
図7-17非表示のプロパティ選択リスト
「その他」オプションをトリガーとして使用して、「その他の理由」プロパティー入力フィールドを表示します
。特定の値を別のプロパティのトリガーにするために、サンプルとして単純なコード機能を追加します。更新さ
れたコードセクションは、UpdateObjectServletクラスの元のdoPost()メソッドに挿入されます。コードは、i
nitialNewObject、initialExistingObject、およびinProgressChnagesに対して実行する必要があるため、要求モー
ドを制限するこの元のifステートメント内に配置されます。例7-5にコードを示します。
例7-5プロパティフィールドを動的に非表示にするコード挿入
//プロパティ 'Reason'が含まれているかどうかを確認し、値に応じて// 'OtherReason'の非表示プロパ
ティをtrueまたはfalseに設定しますif(overridePropertyName.equals( "Reason")){
for(int j = 0; j <requestProperties.size(); j ++){
JSONObject requestProperty =
(JSONObject)requestProperties.get(j); 文字列requestPropertyName
= requestProperty.get(
"symbolicName")。toString();
if(requestPropertyName.equals( "OtherReason")){
if(overrideProperty.get( "value")。equals( "Other")){
requestProperty.put( "hidden"、false); } そうしないと {
requestProperty.put( "hidden"、true);
} responseProperties.add(requestProperty); }}}
サンプルEDS実装を再デプロイして、Javaソースコードに加えられた変更を組み込む必要があります。
258 IBM Content Navigatorのカスタマイズと拡張
結果は、Reason値をOtherに設定してプロパティダイアログを再度開くことでテストできます。次に、[その他の
理由]プロパティの入力フィールドが非表示ではなくなっていることがわかります。Reasonフィールドに別の値
を選択すると、EDSが再び呼び出され、プロパティが再び非表示状態に切り替わります。結果を図7-18に示しま
す。
図7-18最初に非表示になったプロパティが表示される
7.7.2フィールドの最小値と最大値の設定
前のサンプルで示した入力フィールドプロパティと検証オプションに加えて、整数、浮動小数点、および日時の
プロパティに対して特別な範囲設定を使用できます。プロパティフィールドの最小値と最大値は、必要に応じて
EDSで設定できます。
このサンプルでは、​​調整された損失プロパティ値に設定できる最大量を制限します。
最大値を設定するには、図7-19に示すように、オブジェクトプロパティのEDSテーブルに1行挿入します。
図7-19最大値プロパティ
機能をテストし、他の検証サンプルと同様の結果を期待します。つまり、検証エラーが発生します。関連するツ
ールチップは、検証の失敗の原因についてのヒントを提供します。この例では、12000を超える金額を入力する
と検証が失敗することがわかります。この金額は、調整済み損失プロパティの最大値としてオブジェクトプロパ
ティテーブルに入力したものです。結果の検証エラーを図7-20に示します。
図7-20最大値検証エラー
入力フィールドのキャプションの横にある疑問符アイコンの上にマウスを置くと、構成された最小値と最大値
も表示されます。この
第7章要求および応答フィルターと外部データサービスの実装 259
ホバーすると同様のツールチップが表示され、データ型と最小値と最大値に関する情報が提供されます。
注意: リポジトリのプロパティに最小値または最大値が指定されている場合、サービスは設定の制限を緩和
できません。つまり、サービスは最小値または最大値を大きい値または小さい値にのみ設定できます。最小
値または最大値を増減することはできません。
7.8追加ダイアログのプロパティの順序付け
このサンプルでは、​​CustomerDossierクラスを使用します。プロパティの元の順序を図7-21に示します。ここで、
CompanyプロパティはCustomerNumberプロパティの下にあります。このサンプルでは、​​Companyプロパティを
CustomerNumberプロパティの上に移動して、プロパティの順序を変更します。
図7-21 CustomDossierクラスの元のプロパティの順序
EDSはプロパティデータと動作のみを制御できます。ダイアログ内のプロパティの順序を変更することはできま
せん。この機能を実装するには、応答フィルタープラグインが必要です。
260 IBM Content Navigatorのカスタマイズと拡張
注意: EDSで変更を実装する前に、EDSがサポートするタスクのタイプを最初に決定します。237ページの7
.2.1、「EDSを使用する場合」を参照してください。EDSがタスクのタイプをサポートしていない場合は、代
わりに独自の要求および応答フィルターを実装してください。
変更したプラグインを適用すると、プロパティの順序は図7-22のようになります。
図7-22 CustomDossierの更新されたプロパティの順序
第7章要求および応答フィルターと外部データサービスの実装 261
この応答フィルタープラグインを実装するには、次の手順に従います。
1.新しいIBM Content Navigatorプラグインプロジェクトを作成します。サンプルプラグインの場合は、次のように
入力します。 SampleFilterPlugin 記述名として。図7-23に示すように、プラグインプロジェクトの残りの情報
を入力します。
図7-23新しいプラグインプロジェクトの作成
2.を選択して、新しく作成したプロジェクトに新しい応答フィルターを作成します。 IBM
コンテンツナビゲーター → サーバー拡張 → 新しい応答フィルター。 263ページの図7-24を参照してください
。
262 IBM Content Navigatorのカスタマイズと拡張
図7-24新しい応答フィルターの作成
3.応答フィルター設定ダイアログで、Javaパッケージ名とクラス名を入力します。このフィルターによって拡張
されるサービスを選択します。このサンプルの場合、図7-25(157ページ)に示すように情報を入力します。
リポジトリからクラス情報を取得するには、次の2つのサービスを選択します。
/ cm / openContentClass / p8 /
openContentClass
第7章要求および応答フィルターと外部データサービスの実装 263
図7-25新しい応答フィルターの設定
4。 OpenContentClassFilter.java ファイルが作成されます。このJavaファイルでは、
jsonResponseパラメータに格納されているプロパティの順序の変更を実装します。すべてのプロパティ情報
は、jsonResponseの基準プロパティに格納されます。配列内のプロパティの位置によって、ダイアログに表
示される順序が決まります。このサンプルは、配列内のプロパティに指定された位置を設定して、追加ダイ
アログの並べ替え機能を実現します。
例7-6は、このプラグインのサンプルコードを示しています。それがどのように機能するかを説明し、サンプルを単純にするた
めに、クラス名とプロパティの順序はハードコーディングされています。より構成しやすくすることができます。
例7-6プロパティの表示順序を変更する応答フィルターコードスニペット
パッケージcom.ibm.ecm.extension.samplefilter;
import javax.servlet.http.HttpServletRequest;
import com.ibm.ecm.extension.PluginResponseFilter; import
com.ibm.ecm.extension.PluginServiceCallbacks; import
com.ibm.json.java.JSONObject;
264 IBM Content Navigatorのカスタマイズと拡張
import com.ibm.json.java.JSONArray;
/ **
*
フィルタを作成するために拡張された抽象クラスを提供します
*
特定のサービスからの応答。サービスからの応答
*
に返される前に、JSON形式でフィルターに提供されます
*
Webブラウザ。その後、フィルターはその応答を変更できます。
*
変更された応答がWebブラウザーに返されます。
*/
パブリッククラスOpenContentClassFilterはPluginResponseFilterを拡張します{
/ **
*
これによって拡張されるサービスの配列を返します
*フィルター。
*/
public String [] getFilteredServices(){
新しいString [] {
"/ cm / openContentClass"、 "/ p8 / openContentClass"};
}
public void filter(String serverType、PluginServiceCallbacks callbacks、
HttpServletRequestリクエスト、JSONObject jsonResponse)が例外{
// EDSに渡す初期プロパティ値を入力します。これらは//デフォルト値になります
JSONArray jsonProperties =
(JSONArray)jsonResponse.get( "基準"); 文字列symbolicNa
me =
jsonResponse.get( "template_name")。toString();
if(symbolicName.equals( "CustomerDossier")){
updateJSONPropertiesOrder(jsonProperties); }
}
public void updateJSONPropertiesOrder(JSONArray jsonProperties){
String [] PropertiesOrder = {"Company"、 "CustomerNumber"、 "PhoneNumber"};
for(int i = 0; i <PropertiesOrder.length; i ++){
for(int j = 0; j <jsonProperties.size(); j ++){
JSONObject jsonProperty =
第7章要求および応答フィルターと外部データサービスの実装 265
(JSONObject)jsonProperties.get(j); もし
(jsonProperty.get( "name")。toString()。equals(PropertiesOrder [i])){
JSONObject jsonEDSProperty =
(JSONObject)jsonProperties.get(j); jsonProperties.add
(i + 1、jsonEDSProperty); jsonProperties.remove(j + 1); }}
}}}
7.9大きな選択リストのフィルター
図7-26は、単一値プロパティの選択リストに使用されるドロップダウン入力コンボボックスを示しています。
図7-26通常の動作の選択リスト
266 IBM Content Navigatorのカスタマイズと拡張
ドロップダウン入力コンボボックスは、選択リストの「次で始まる」フィルターを提供できます。大きな選択リス
トの場合、選択リストの「包含」フィルターが必要な場合は、動作を変更するプラグインが必要です。既存のドロ
ップダウン入力コンボボックスを壊さないように、このサンプルでは、​​指定されたプロパティに新しいフィルター
ウィジェットを提供しています。プラグインが登録されると、Companyプロパティの選択リストは図7-27のよう
になります。
図7-27制限に一致するプロパティのみを表示する変更された選択リスト
このプラグインサンプルには、フィルタープラグインが機能するクラスとプロパティを指定するための応答フィルターがありま
す。プラグインは、フィルター選択ダイアログ用にカスタマイズされたウィジェットも提供します。カスタマイズされたウィジ
ェットを呼び出すために、プラグインは1つの_をオーバーライドします createSearchChoiceListEditor() のメソッド
SinglePropertyEditorFactory.js ファイル。
第7章要求および応答フィルターと外部データサービスの実装 267
この応答フィルタープラグインを実装するには、次の手順を実行します。
1.図7-28に示すように、新しいIBM Content NavigatorプラグインプロジェクトSampleSe
archChoiceListPluginをプロジェクト情報とともに作成します。
図7-28 SampleSearchChoiceListPluginプロジェクト情報
2.プロジェクトに新しい応答フィルターを作成します。応答フィルター設定ダイアログ(269ページの図729を参照)で、次のタスクを実行します。
–
Javaパッケージ名とクラス名を入力します。
–
このフィルターによって拡張されるサービスを選択します。このサンプルでは、​​次の2つのサービ
スを選択して、リポジトリからクラス情報を取得します。
/ cm / openContentClass / p8 /
openContentClass
268 IBM Content Navigatorのカスタマイズと拡張
図7-29 SampleSearchChoiceListPluginプロジェクトの応答フィルター
という名前のJavaファイル OpenContentClassFilter.java 創造された。このサンプルでは、​​応答フィルターを使用して
、プラグインが適用されるクラスを指定しています。また、 「カーディナリティ:SEARCHCHOICE」 応答JSONオ
ブジェクトのプロパティへのオプション。例7-7は、このプラグインのコードスニペットを示しています。それがど
のように機能するかを示し、サンプルを単純にするために、クラス名とプロパティはハードコーディングされていま
す。より構成しやすくすることができます。短いコードスニペットでは、一部のコメントが削除されています。
例7-7「含む」制限に基づく選択リスト項目の応答フィルター
パッケージcom.ibm.ecm.extension.samplesearchchoicelist;
import javax.servlet.http.HttpServletRequest;
import com.ibm.ecm.extension.PluginResponseFilter; import
com.ibm.ecm.extension.PluginServiceCallbacks; import
com.ibm.json.java.JSONArray; import com.ibm.json.java.JSONObject;
パブリッククラスOpenContentClassFilterはPluginResponseFilterを拡張します{
/ **
第7章要求および応答フィルターと外部データサービスの実装 269
*
これによって拡張されるサービスの配列を返します
*フィルター。
*/
public String [] getFilteredServices(){
新しいString [] {
"/ cm / openContentClass"、 "/ p8 / openContentClass"};
}
public void filter(String serverType、PluginServiceCallbacks callbacks、
HttpServletRequestリクエスト、JSONObject jsonResponse)が例外{
// EDSに渡す初期プロパティ値を入力します。これらは//デフォルト値JSONArray jsonPropertie
s=
(JSONArray)jsonResponse.get( "基準"); 文字列symbolicNa
me =
jsonResponse.get( "template_name")。toString();
if(symbolicName.equals( "CustomerDossier")){
updateJSONFilterOption(jsonProperties);
}}
public void updateJSONFilterOption(JSONArray jsonProperties){
for(int i = 0; i <jsonProperties.size(); i ++){
JSONObject jsonProperty
=(JSONObject)jsonProperties.get(i);
if(jsonProperty.get( "name")。toString()。equals( "Company"))
{
JSONObject jsonEDSProperty =(JSONObject)jsonProperties.get(i); jsonED
SProperty.put( "cardinality"、 "SEARCHCHOICE"); }}
}}
270 IBM Content Navigatorのカスタマイズと拡張
カスタマイズされたウィジェットを呼び出すために、プラグインは1つのメソッドをオーバーライドします。
_createSearchChoiceListEditor()。 このメソッドは、
SampleSearchChoiceListPlugin.js。 例7-8は、オーバーライドされたメソッドを示しています。
例7-8オーバーライドされたメソッド_createSearchChoiceListEditor()のコードスニペット
/ SampleSearchChoiceListPlugin / src / com / ibm / ecm / extension / samplesearchcho icelist / WebContent / req
uire(["dojo / _base / declare"、
"dojo / _base / lang"、
"ecm / widget / SinglePropertyEditorFactory"、 "sampleSearchChoiceListPluginD
ojo / SearchChoicePane"]、
function(declare、lang、SinglePropertyEditorFactory、SearchChoicePane){/ **
*
この関数を使用して、プラグインに必要なグローバルJavaScriptメソッドを追加します。
*/
SinglePropertyEditorFactory.prototype.createSinglePropertyEditor = function(kwArgs){
var methodName = "createSinglePropertyEditor"; this.logEntry(methodName、 "name:" + kwArgs.
name + "label:" + kwArgs.label + "type:" + kwArgs.dataType + "required:" + kwArgs.required);
if(!kwArgs.minMaxValues){
kwArgs.minMaxValues = this.getMinMax(kwArgs.minValue、kwArgs.maxValue、kwArgs.d
ataType、kwArgs.dataFormat); // getPromptTextの前にこれを呼び出します
} var baseConstraints = {
名前:kwArgs.name || ""、ラベル:kwArg
s.label || ""、dataType:kwArgs.dataType
、readOnly:kwArgs.readOnly、id:kwA
rgs.id、
promptText:this.getPromptText(kwArgs)、必須:kwArgs.r
equired};
var editor = null;
kwArgs.cardinality = kwArgs.cardinality.toUpperCase(); if(kwArgs.cardinality
&&(kwArgs.cardinality == "LIST" || kwArgs.cardinality == "MULTI")){
editor = this._createMultiValueEditor(baseConstraints、kwArgs);
第7章要求および応答フィルターと外部データサービスの実装 271
} else if(kwArgs.cardinality && kwArgs.cardinality == "SINGLE" && kwArgs.choiceList &&
kwArgs.choiceListNested){
editor = this._createSingleChoiceTreeEditor(baseConstraints、kwArgs);
} else if((kwArgs.cardinality && kwArgs.cardinality == "SEARCHCHOICE" &&
kwArgs.choiceList)){
editor = this._createSearchChoiceListEditor(baseConstraints、kwArgs);
} else if((kwArgs.cardinality && kwArgs.cardinality == "SINGLE" &&
kwArgs.choiceList)||(kwArgs.valueOptions && kwArgs.valueOptions.length> 0)){
エディター=
this._createSingleChoiceListEditor(baseConstraints、kwArgs);
} else if(kwArgs.dataType == "xs:date" || kwArgs.dataType == "xs:timestamp"){
editor = this._createDateTimestampEditor(baseConstraints、kwArgs);
} else if(kwArgs.dataType == "xs:time"){
editor = this._createTimeEditor(baseConstraints、kwArgs); } else if(kwArgs.dataType
== "xs:guid"){
editor = this._createGuidEditor(baseConstraints、kwArgs); } else if(kwArgs.dataType =
= "xs:reference"){
editor = this._createReferenceEditor(baseConstraints、kwArgs); } else if(kwArgs.dataType ==
"xs:object"){
editor = this._createObjectEditor(baseConstraints、kwArgs); } else if(kwArgs.dataType == "xs:
integer" || kwArgs.dataType == "xs:short" || kwArgs.dataType == "xs:long" || kwArgs.dataType ==
"xs:decimal" || kwArgs.dataType == "xs:double"){
editor = this._createNumberEditor(baseConstraints、kwArgs); } else if(kwArgs.dataType =
= "xs:group"){//ユーザーとグループ
editor = this._createGroupEditor(baseConstraints、kwArgs); } else if(kwArgs.dataType =
= "xs:user"){//ユーザー
editor = this._createUserEditor(baseConstraints、kwArgs); } そうしないと {
editor = this._createTextEditor(baseConstraints、kwArgs); }
if(baseConstraints.label && editor){
editor.set( "title"、baseConstraints.label); editor.set( "alt"、base
Constraints.label);
} this.logExit(methodName); エディタを返
します。}、
272 IBM Content Navigatorのカスタマイズと拡張
/ **
*
@private検索選択リストエディターを作成します。
*/
SinglePropertyEditorFactory.prototype._createSearchChoiceListEditor = function(baseConstraints、kwArg
s){
var availableData = kwArgs.choiceList;
var SearchChoice = new SearchChoicePane({
availableData:availableData、selectedValues:kwArgs.values、i
sTree:kwArgs.choiceListNested、編集可能:!kwArgs.readOnly、
hasSorting:!kwArgs.uniqueValues、hideAvailableOnAdd:kwArg
s.uniqueValues、allowDuplicateValues:!kwArgs} .Value
lang.mixin(baseConstraints、{
「ラベル」:SearchChoice.getLabel()、幅:kwA
rgs.width || ""、dropDown:SearchChoice});
var editor = new ecm.widget.DropDownInput(baseConstraints); editor.set( "value"、Searc
hChoice.getValue()); editor.startup();
エディタを返します。}; })
;
このサンプルには、フィルター選択リスト用の2つのDojoウィジェット、SearchChoicePaneおよびChoiceGridが
あります。ChoiceGridはSearchChoicePaneに含まれています。SearchChoicePaneが呼び出されます SampleSearchChoiceListPlugin.js
Dojoパーツはこの章の要点ではなく、スペースが限られているため、Dojoウィジェットの詳細なサンプルコード
はここにはリストされていません。
第7章要求および応答フィルターと外部データサービスの実装 273
7.10展開と構成
サンプルのWebSphere Application Serverであるアプリケーションサーバーにアプリケーションをデプロイする前
に、データベースにテーブルを作成する必要があります。このデータベースは、このシナリオを単純にするため
にIBM Content Navigatorに使用されるデータベースと同じにすることができます。必要に応じて、別のデータベ
ースを作成するか、別の既存のデータベースを使用することもできます。必要なテーブルは、この本のダウンロ
ード可能な資料に含まれている添付のDDLスクリプトで作成およびロードできます(ダウンロード情報について
は、535ページの付録D「追加資料」を参照してください)。IBM Content Navigatorデータソースから構成された
データベースユーザーを再利用する場合は、テーブルに必要な権限を設定してください。
次の準備手順は、別のデータベースを作成し、IBM Content Navigatorのデプロイ先とは異なるアプリケーション
サーバーにデプロイする場合、データベースを指すJDBCデータソースを指定することです。それ以外の場合は、
IBM Content Navigator構成およびデプロイメントツールを使用してすでに作成したデータソース定義を再利用で
きます。新しいデータソースを作成する必要がある場合は、アプリケーションサーバーのドキュメントの指示に
従ってください。
カスタムEDS実装をWebSphere Application Serverにデプロイするには、以下の手順を実行します。
1.プロジェクトをWARファイルとして希望の場所にエクスポートします。
2. WebSphere管理コンソールを開き、ログインします。
3.選択 用途 → 新しいアプリ → 新しいエンタープライズアプリケーション。
4.インストールパスをステップ1でエクスポートしたWARファイルにポイントし、クリックしてすべてのステッ
プを実行します。 次。 次に、JDBCデータソース参照を選択します。 jdbc / CIWEBDS そしてデプロイメントルート
/ customEDSService。
5.クリック 仕上げ そして セーブ マスター構成を保存します。
6.選択 用途 → アプリケーションの種類 → WebSphereエンタープライズ
アプリケーション、 自動的に開始しなかった場合は、EDSアプリケーションを開始します。
7.検証テストの場合は、GetObjectTypesServletへのURLを入力します。
http:// < server_name> [:<port>] / customEDSService / types
このデプロイされたEDSは、サンプルの外部データサービスを使用するために、edsPluginという名前の外部
データサービスサポートプラグインを登録および構成するIBM Content Navigatorデプロイメントにリンクする
必要があります。
274 IBM Content Navigatorのカスタマイズと拡張
次の手順を実行します。
1.ロード edsPlugin.jar ファイル。IBM Content Navigator管理ツールで、
プラグインの構成オプションで、URLまたはファイルパスを定義します。 edsPlugin.jar ファイル:
a。次のサンプル形式でURLを入力します。
http:// < server_name>:<port> / <ECMClient_installdir> / plugins / edsPlu gin.jar
b。サーバーにインストールされているファイルへのパスを入力します。たとえば、次のいずれかのパスを使用し
ます。
•
マイクロソフトウィンドウズ:
C:\ Program Files \ IBM \ ECMClient \ plugins \ edsPlugin.jar
•
LinuxまたはIBMAIX®システム:
/opt/IBM/ECMClient/plugins/edsPlugin.jar
ECMClientフォルダーは、IBM Content Navigatorのインストール・ディレクトリーです。
2.の後 edsPlugin.jar ファイルがロードされたら、EDSがある場所へのURLを指定します
展開されました。たとえば、次のURLを指定できます。
http:// < server_name> [:<port>] / customEDSService
3.クリック セーブ そして 閉じる。
4. Webブラウザーを更新します。
これで、IBM Content NavigatorがEDSプラグインをロードしました。プラグインは、デプロイされたサンプル
EDSサービスを呼び出し、返されたデータを使用して、表示されているデータとプロパティを操作するように
構成されています。
要求および応答フィルター・プラグインをIBM Content Navigatorに登録するには、以下の手順を実行します。
1.プラグインプロジェクトをビルドし、JARファイルを目的の場所にコピーします。
2.ロード SampleFilterPlugin.jar およびSampleSearchChoiceListPlugin.jar
ファイル。IBM Content Navigator管理ツールのプラグインの構成オプションで、プラグインJARファイ
ルへのファイルパスを入力し、
負荷。
3.クリック セーブ そして 閉じる。
4. Webブラウザーを更新します。
これで、要求と応答のフィルタープラグインが読み込まれました。プロパティの順序は、プラグイン設定にある必要があ
ります。フィルターダイアログも、プラグインで設定されている選択リストプロパティで開く必要があります。
第7章要求および応答フィルターと外部データサービスの実装 275
パフォーマンスに関する考慮事項
カスタムEDSの実装と展開が必要な場合は、次の点を考慮してください。
EDSがアクセスするはずのデータに物理的に可能な限り近づけてEDSサービスを配置します。同じマシン上
に配置し、間にネットワークがないことは、待ち時間の問題を回避するための最良のアプローチです。
頻繁に要求されるオブジェクトタイプの応答時間が可能な限り短くなるように、キャッシングテクニックの
実装を検討してください。アプリケーションサーバースレッドのWebContainer設定を、予想されるユーザー
数とEDSを呼び出すアクションに合わせてスケーリングします。
7.11結論
この章では、要求フィルタと応答フィルタ、および特別な実装の1つであるEDSについて説明します。EDSは、R
ESTサービス構文に基づいてカスタム要件を個別に実装するために使用できる強力な拡張機能です。EDSは、プ
ロパティデータと動作を制御できます。この章では、EDS実装の方法と、IBM Content Navigatorユーザー・イン
ターフェースを操作するためのいくつかの主要機能を示します。また、要求および応答フィルターを使用して他
の機能を実装する方法も示します。
276 IBM Content Navigatorのカスタマイズと拡張
8
チャプター8。
カスタムステップの作成
プロセッサー
この章では、IBM Content Navigatorツールキットを使用してカスタムワークフローステッププロセッサを作成する
方法について説明します。IBM Content Navigatorで提供されるステッププロセッサーとステッププロセッサーに関
する背景情報を提供します。次に、カスタムステッププロセッサを作成するプロセスをステップ実行します。
この章では、次のトピックについて説明します。
ワークフロー・ステップ・プロセッサーの概要IBM Content
Navigatorステップ・プロセッサーカスタム・ステップ・プ
ロセッサー例の概要
カスタムステッププロセッサの作成カスタムステッププロセッサ
の展開カスタムステッププロセッサの登録アプリケーションスペ
ースと受信トレイの構成埋め込みビューアを使用するアクション
の追加カスタムステッププロセッサの使用とテスト外部データサ
ービスの追加
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
277
8.1ワークフローステッププロセッサの概要
あ ワークフロー ルートで接続された一連の作業ステップです。ルートは、前のステップからの出力に基づいて
、次に処理されるステップを決定します。手順では、ワークフローの実際のタスクを実行します。
ワークフローステップは、作業実行者とステッププロセッサに分類できます。あ
作業者 ユーザーインターフェイスを含まない自動タスクです。作業者は、ワークフローの情報に基づいていく
つかのアクションを実行します。このアクションには、添付ドキュメントの更新、外部システムの呼び出し、IB
M FileNet P8操作またはその他の関連アクティビティの実行が含まれます。あ ステッププロセッサー
ユーザーインターフェイスを表示するために使用され、ワー​​クフローキューに追加されて処理されます。ユーザ
ーがステップを実行すると、ユーザーインターフェイスが表示され、ユーザーがステップを実行します。ユーザ
ーが適切なアクションを完了すると、ユーザーはステップを完了し、ワークフローはそのステップからのルート
を使用して、実行する次のステップを決定します。
ワークフローをデザインするとき、デザイナーは、アクティビティアイコンをデザインウィンドウにドラッグして、ワー
クフローにステッププロセッサを追加します。次に、プロパティユーザーインターフェイスを介してステッププロセッサ
を構成します。最初のステップは、使用するステッププロセッサを指定することです。IBM Content Navigatorがインスト
ールおよび構成されている場合、IBM Content Navigatorのステップおよび起動プロセッサーは、使用可能なステッププロ
セッサーのリストに表示されます。さらに、カスタムステッププロセッサが登録されている場合は、それらが表示されま
す。
8.2 IBM Content Navigatorステッププロセッサー
IBM Content Navigatorは、ワークフローで使用するための2つの構成可能なステッププロセッサーを提供します。これらは、
起動プロセッサとステッププロセッサです。の 起動プロセッサ は、ワークフローの最初のステップとして使用され、ワー​​ク
フロープロセスを開始するために使用される特殊なタイプのステッププロセッサです。起動プロセッサは、ワークフローの最
初のステップとしてのみ使用できます。の ステッププロセッサー 最初のステップを除いて、ワークフローのどこでも使用
できます。ステッププロセッサは、ユーザーの操作を必要とするワークフローステップのユーザーインターフェイスを提供す
るために使用されます。
Content Navigatorで提供されるステッププロセッサは、多くのユースケースで機能する機能を提供します。こ
れらは、ユーザーが手順を完了するために必要な情報を表示するマルチタブユーザーインターフェイスを提供
します。最初のタブには、ステップに設定されたすべてのプロパティが表示されます。ユーザーは、ステップ
を完了するために必要な既存の値と入力値を調べることができます。279ページの図8-1に、[プロパティ]タブの
サンプルを示します。
278 IBM Content Navigatorのカスタマイズと拡張
図8-1 Content Navigatorのステッププロセッサのプロパティページ
2番目のタブには、ワークフローに添付され、表示するように構成されているドキュメントが表示されます。ユー
ザーはドキュメントを追加して、既存のドキュメントを表示できます。図8-2は、Content Navigatorステッププロ
セッサの[Attachments]タブを示しています。
図8-2 Content Navigatorのステッププロセッサの添付ファイルページ
第8章カスタムステッププロセッサの作成
279
ワークフローの履歴を表示するオプションの3番目のタブもあります。さらに、これらのステッププロセッサには
、ステップの完了、進行中の作業の保存、キャンセル、または他のユーザーへの作業の再割り当てなど、さまざ
まなワークフローステップアクションを実行するためのボタンがあります。
プロセスデザイナーは、ワークフローの作成と変更に使用されるツールです。これにより、ユーザーはワークフロ
ーステップをデザインスペースにドラッグし、ステップを構成して、他のステップにリンクできます。Content Na
vigatorのステッププロセッサをProcess Designerのワークフローに追加すると、簡単な構成で実行できるいくつかの
基本的なカスタマイズを利用できます。これらのカスタマイズを実行するには、Process Designerでワークフローに
アクティビティを追加してから、このアクティビティを選択します。次に選択します ナビゲーターステッププロセッサー
[ステッププロセッサ]ドロップダウンリストから。これは、Content Navigatorステッププロセッサがこのステップに
使用されることを指定します。
最初のカスタマイズは、ユーザーに提示される指示です。指示は、実行するタスクの詳細をユーザーに通知しま
す。タスクを完了するために必要な情報を提供します。
ステッププロセッサを構成するときに、ユーザーに表示するプロパティを決定することもできます。Process De
signerの[パラメーター]タブで、ユーザーに表示するワークフロープロパティを選択できます。ステッププロセッ
サ自体では、これらは[プロパティ]タブに表示され、すでに入力されている値が表示されます。プロパティごとに
表示されるプロンプトを入力でき、プロパティが読み取り専用か読み取り/書き込みかを指定することもできます
。ステッププロセッサは、Process Designerで指定されたプロンプトに基づいて、表示されるプロパティを並べ
替えます。次に、標準フィールドの下部にワークフローグループのプロパティを追加します。最後に、コメント
フィールドが最後に表示されます。
ステッププロセッサに含めるワークフローアタッチメントを選択できます。必要な特定の添付ファイルがある場
合は、それをパラメーターのリストに追加します。すべての添付ファイル、一部の添付ファイル、またはすべて
の添付ファイルをステッププロセッサに含めることができます。プロセスデザイナでワークフローの添付ファイ
ルを定義する場合、[添付ファイル]タブで添付ファイルを選択し、上部にある[開始添付ファイル]ボタンをクリッ
クして、添付ファイルパラメータの1つを開始添付ファイルとして指定できます。
また、ステップを処理するユーザーが作業を別のユーザーに再割り当てできるかどうか、[履歴]タブを表示するか
どうか、ワークフローのステータスを表示するかどうかを指定することもできます。これらのオプションは、ス
テッププロセッサ構成ページの[全般]タブで構成されます。
280 IBM Content Navigatorのカスタマイズと拡張
8.3カスタムステッププロセッサ
Content Navigatorが提供するステッププロセッサは、ワークステップの多くのユースケースをカバーします。ステッ
ププロセッサをさらに制御する必要がある場合は、カスタムステッププロセッサを作成できます。カスタムステップ
プロセッサでは、ユーザーインターフェースに表示されるウィジェットを追加または変更して、コンテンツナビゲー
タステッププロセッサのユーザーインターフェースを変更します。
Content Navigatorのステッププロセッサは、Content Navigatorツールキットを使用して作成されます。カスタム
ステッププロセッサを作成するときは、提供されているステッププロセッサを拡張する新しいステッププロセッ
サを作成します。提供されているステッププロセッサを拡張する場合、最初はそれが提供する機能から始めます
が、それを拡張して、追加のユーザーインターフェイスコンポーネントを含めたり、追加の機能を提供したりで
きます。さらに、カスタムステッププロセッサに表示されるプロパティのContent Navigator外部データサービス
を統合できます。
8.4例の概要
この例では、前の章で紹介したクレームを処理するカスタムステッププロセッサを作成します。ドキュメントが
システムに追加され、クレームドキュメントクラスに割り当てられると、クレーム処理ワークフローを開始する
イベントアクションがトリガーされます。このワークフローでは、カスタムステッププロセッサを使用して、ク
レームを確認および承認します。
Content Navigatorのステッププロセッサでは、添付ファイルペインでドキュメントを開くと、添付されたドキュメ
ントを表示できます。ドキュメントを開くと、コンテンツナビゲータービューアーが別のブラウザーウィンドウで
開き、選択したドキュメントが表示されます。カスタムステッププロセッサは、コンテンツナビゲータビューアを
ステッププロセッサのユーザーインターフェイスに埋め込みます。このビューアは、Content Navigatorのステップ
プロセッサのように別のブラウザウィンドウではなく、ステッププロセッサと同じブラウザウィンドウに表示され
ます。
さらに、233ページの第7章「要求および応答フィルターと外部データサービスの実装」で開発された外部デー
タサービスを使用して、ステッププロセッサのユーザーインターフェイスに表示されるプロパティを制御します
。クレーム番号の検証が使用され、RegionおよびBranchフィールドの依存プロパティリストが使用されます。
第8章カスタムステッププロセッサの作成
281
8.5カスタムステッププロセッサの作成
サンプルのカスタムステッププロセッサは、提供されているContent Navigatorステッププロセッサを拡張します
。これにより、サンプルの新しい機能を追加しながら、カスタムステッププロセッサがContent Navigatorステッ
ププロセッサによって提供される機能を保持できるようになります。既存のステッププロセッサウィジェットが
拡張されているため、提供する拡張機能のみをコーディングする必要があります。その他の機能は、既存のステ
ッププロセッサに委ねられます。
3つのファイルがContent Navigatorステッププロセッサを実装します。
WebContentディレクトリにあるStepProcessor.jsp ecm \ widget \ process \
templatesにあるStepProcessorLayout.html ecm \ widget \ processにあるStepProcessorLayout.js
この例では、Content Navigatorにデプロイされる3つの新しいファイルが作成されます。次のセクションでは、
これらのファイルと、それぞれに実装されるコードについて説明します。
8.5.1 StepProcessorRedbkLayout.html
このファイルは、ステッププロセッサウィジェットのHTMLテンプレートを提供します。このファイルを作成する
には、 StepProcessorLayout.html Content Navigatorから提供され、名前を付ける StepProcessorRedbkLayout.htm
l。 このテンプレートは、カスタムステッププロセッサに含まれるビューア用の新しいコンテナを追加するように
変更されます。レイアウトには、左側にステッププロセッサの既存のタブコンテナが含まれ、ビューアをタブコ
ンテナの右側に追加します。
最初のステップは、既存のstepContentPaneを変更することです。Content Navigatorプロセッサーでは、このペ
インはステッププロセッサーウィジェットの全幅を使用します。これは、ダイアログがこのペインと追加される
ビューアペインの間で分割されるように変更する必要があります。これを行うには、まず地域を センター に
リード。 これにより、このウィジェットが左側に配置されます。次に、このペインに次の属性を追加します
。
スプリッター=” true”スタイル=
”幅:50%”
これにより、stepContentPaneとビューアペインの間にスプリッタが追加され、stepContentPaneがウィジェ
ットの幅の半分に割り当てられることを指定します。
282 IBM Content Navigatorのカスタマイズと拡張
例8-1は、コンテンツペインの更新を示しています。
StepProcessorRedbkLayout.html。
例8-1 StepProcessorRedbkLayout.htmlのコンテンツペインを更新する
<div data-dojo-type = "dijit.layout.ContentPane"
data-dojo-attach-point = "stepContentPane" region = "leading" Split = "true" style =
"width:50%">
次に、ビューアコンテナが、stepContentPaneの後、ウィジェットの下部にあるActionBarペインの前にテンプレ
ートに追加されます。このコンテナは、追加されたビューアウィジェットを保持します。例8-2は、コンテンツペ
インを追加するコードを示しています。
例8-2 ContentPaneをStepProcessorRedbkLayout.htmlに追加する
<div data-dojo-attach-point = "customViewerContainer"
data-dojo-type = "dijit.layout.ContentPane" region = "center" style = "width:50%">
<div id = "contentViewer" style = "width:100%; height:100%"> </ div> </ div>
8.5.2 StepProcessorRedbkLayout.js
StepProcessorRedbkLayoutは、ステッププロセッサウィジェットを作成します。このウィジェットは、コンテ
ンツナビゲーターのステッププロセッサを拡張したもので、ウィジェットにビューアを含めるために必要な追加
コードのみが含まれています。ウィジェットの基本機能は、拡張されるウィジェットによって提供されます。こ
れは、 StepProcessorLayout.js ファイル。
このファイルは、ウィジェットが必要とするファイルを定義することから始まり、作成中のウィジェットを宣言
します。このファイルで最も重要なコードは、ビューアを初期化する起動関数です。この手順では、contentVie
werをチェックして、ビューアがすでに作成されているかどうかをチェックします。ビューアが作成されていない
場合、このプロシージャはContent Navigatorビューアのインスタンスを作成し、それをcontentViewerに割り当て
ます。例8-3は、
StepprocessorRedbkLayout.js。
例8-3 StepProcessorRedbklLayout.jsのリスト
define([
"dojo / _base / declare"、 "dojo / _
base / lang"、 "dojo / _base / conn
ect"、 "ecm / LoggerMixin"、
第8章カスタムステッププロセッサの作成
283
"ecm / widget / process / _ProcessorMixin"、 "ecm / widget / process / StepProcessorLayou
t"、 "dojo / text!./ templates / StepProcessorRedbkLayout.html"]、function(declare、lang、
connect、LoggerMixin、_ProcessorMixin、StepProcessorLayout、template ){
/ **
* @name custom.widget.process.StepProcessorRedbkLayout
* @classステッププロセッサのカスタムレイアウトを提供します。
* @augments custom.widget.process.StepProcessorLayout
*/
return declare( "custom.widget.process.StepProcessorRedbkLayout"、[
StepProcessorLayout
]、{/ ** @lends custom.widget.process.StepProcessorRedbkLayout.prototype * /
// widgetsInTemplate:ブール//
ウィジェットに他のウィジェットが含まれている場合は、これをtrueに設定します。widgets
InTemplate:true、contentString:template、
contentContainer:null、contentV
iewer:null、
// postCreate()が呼び出され、スーパークラスをオーバーライドします。postCreate:
function(){
this.logEntry( "postCreate-custom"); this.inherite
d(arguments); this.logExit( "postCreate-custom
"); }、
// startup()が呼び出されて、作成してコンテンツビューアインスタンスを配置し、コンテンツビ
ューアレイアウトのサイズを変更し、デフォルトのビューアツールバーテキストをオーバーライド
します。スタートアップ:function(){
this.logEntry( "startup-custom");
this.inherited(arguments);
//コンテンツビューアのインスタンスが存在しない場合は、作成しますif(this.contentViewer == nu
ll){
var bidiDir = "ltr"; //英語ロケールでは左から右
デフォルト。
var language = dojo.locale;
if((language.indexOf( "ar")=== 0)||(language.indexOf( "he")===
0)|| (language.indexOf( "iw")=== 0)){
bidiDir = "rtl"; //アラビア語ロケールでは右から左に使用します。}
dojo ['require']( "ecm.widget.viewer.ContentViewer");
284 IBM Content Navigatorのカスタマイズと拡張
var tabStyle = "margin:0px; padding:0px; width:100%; height:
100%; ";
//コンテンツビューアのインスタンスを作成しますthis.logDebug( "startup-custom
"、 "instantiate CV"); this.contentViewer = new ecm.widget.viewer.ContentViewer
({
スタイル:tabStyle、isEntireWi
ndow:false、dir:bidiDir、lang:
言語});
//コンテンツビューアをステッププロセッサページに配置しますthis.logDebug( "startup-custom
"、 "CVをステッププロセッサに配置します
ページ");
this.contentContainer = dojo.byId( "contentViewer");
this.contentContainer.appendChild(this.contentViewer.domNode);
// Content Viewerレイアウトのサイズを変更します
this.logDebug( "startup-custom"、 "CVレイアウトのサイズ変更"); this.contentView
er.startup();
//コンテンツビューアのツールバーにテキストを設定しますthis.logDebug( "startup-custom"、 "CVツ
ールバーにテキストを設定します"); this.contentViewer.viewerToolbarText.innerHTML = "ビューア
";
//スプリッターの動きを検出し、コンテナーのサイズを変更しますthis.connect(this.stepCo
ntentPane._splitterWidget.domNode、
"onmouseup"、function(){
if(this.contentViewer!= null){
this.contentViewer._winResizeEnd(); }}); }
this.logExit( "startup-custom"); }、
});
});
8.5.3 StepProcessorRedbkLayout.jsp
最終的なファイルはStepProcessorRedbk.jspです。これはステッププロセッサコントローラであり、ワークフ
ローで使用できるステッププロセッサとして識別するためにプロセス構成コンソールに登録されます。
第8章カスタムステッププロセッサの作成
285
このファイルは、 StepProcessor.jsp Content Navigatorで提供されるステッププロセッサウィジェットの代わりに
カスタムステッププロセッサウィジェットを使用するように、わずかな変更のみを加えたファイル
まず、コピー StepProcessor.jsp コピーに名前を付けます StepProcessorRedbk.jsp。
次に、カスタムウィジェットにdojo.requireを追加して、使用できるようにします。次に、カスタムステッププロ
セッサを使用するようにコントローラーを更新します。例8-4は、
StepProcessorRedbk.jsp。
例8-4 StepProcessorRedbk.jspのリスト
<!DOCTYPE html> <% 文字列htmlLo
cale =
request.getLocale()。toString()。toLowerCase()。replace( '_'、 '-');
htmlLocale = htmlLocale.replace( "iw"、 "he"); // Java getLocale()仕様の回避策。%>
<html lang = "<%= htmlLocale%>"> <% response.setHeader( "Cache-Control"、
"no-cache");
response.setHeader( "プラグマ"、 "キャッシュなし"); // HTTP 1.0 response.setDateHeader( "Expire
s"、0); //プロキシサーバーでのキャッシュを防止します%>
<%@ include file = "header.jsp"%>
<body class = "<%= bodyClasses%>" dir = "<%= direction%>" style = "width:100%; height:100%;
position:absolute;">
<div id = "ECMWebUIloadingAnimation"
style = "display:inline-block; position:absolute; top:10px; left:10px">
<div class = "ecmLoading"> </ div>
<div id = "ECMWebUIloadingText" class = "contentNode loadingText"> </
div>
</ div>
<script>
dojo.require( "custom.widget.process.StepProcessorRedbkLayout"); </ script>
<div dojoType = "custom.widget.process.StepProcessorRedbkLayout" id = "ECMStepProcUI" style
= "width:100%; height:100%" lang = "<%= htmlLocale%>"> </ div> </ body>
</ html>
286 IBM Content Navigatorのカスタマイズと拡張
8.6カスタムステッププロセッサのデプロイ
実装ファイルは、Content Navigatorのデプロイ済みディレクトリーに直接インストールする必要があります。カス
タムステッププロセスを展開するには、次の手順を実行します。
1. Content Navigatorアプリケーションサーバーを停止します。
2.カスタムステッププロセッサを、アプリケーションサーバー上のContent Navigatorの展開された場所にコピーしま
す。
3. Content Navigatorアプリケーションサーバーを起動します。
ファイルを次の場所にコピーします。
コピーする StepProcessorRedbk.jsp コンテンツナビゲーターに Webコンテンツ
ディレクトリ。下 Webコンテンツ、 ディレクトリを作成する カスタム\ウィジェット\プロセス そしてコピー
StepProcessorRedbkLayout.js 作成したディレクトリ。作成したカスタムディレクトリの下にテンプレ
ートディレクトリを作成してコピーします StepProcessRedbkLayout.html テンプレートディレクトリに
。
8.7カスタムステッププロセッサの登録
カスタムステッププロセッサをワークフローで使用する前に、プロセス構成コンソールで登録する必要があり
ます。ステッププロセッサを登録すると、サポートされているステッププロセッサの1つとしてProcess Des
ignerで使用できるようになります。さらに、ステッププロセッサを登録すると、ステップの実行時にカスタ
ムステッププロセッサを見つける場所がContent Platform Engineに通知されます。
プロセス構成コンソールでカスタムステッププロセッサを登録するには、次の手順を実行します。
1.左側のツリービューで、適切な接続ポイントのコンテキストメニューを選択し、 接続します。
2.接続後、接続ポイントのコンテキストメニューを再度選択し、 プロパティ。
3.をクリックします Webアプリケーション タブをクリックして、適切なURLに
Content Navigatorにはすでに指定されています。
4.をクリックします ステッププロセッサ情報 タブ。
第8章カスタムステッププロセッサの作成
287
5.をクリックします 追加 右上のアイコンをクリックし、次の情報を入力します
および構成:
- 入る ステッププロセッサRedbk カスタムステッププロセッサの名前として。
–
言語には、 HTML。
–
幅を 1200 と高さ 800。 埋め込みビューアでは、より大きなダイアログが必要です。
–
位置情報を入力してください:
私。をダブルクリックします ロケーション ステッププロセッサーを表示するフィールド
場所ダイアログ。
ii。を選択 IBM Content Navigator エントリ。
iii。入る StepProcessorRedbk.jsp 場所フィールドに入力します。
iv。クリック OK [場所]ダイアログボックスを閉じます。
6.クリック OK もう一度[追加]ダイアログボックスを閉じ、変更をコミットします。
8.8アプリケーションスペースと受信トレイの設定
Content Navigatorは、アプリケーションスペースと受信トレイを使用して、処理する作業項目のリストを表示し
ます。まだ持っていない場合は、プロセス構成コンソールで新しいアプリケーションスペースを作成する必要が
あります。
新しいアプリケーションスペースを作成するには、次の手順を実行します。
1.プロセス構成コンソール。のコンテキストメニューを選択します 応用
スペース そして選択 新着。
2.ダイアログで、名前と説明を入力して、を押します OK。
アプリケーションスペースを設定するには、次の手順を実行します。
1.作成したアプリケーションスペースを開きます。
2.をクリックします 役割 タブで、新しいロールを追加して名前を付けます ProcessClaims。
3. [受信トレイを選択]で、 受信トレイ 受信トレイのリストから。
4.クレームを処理するユーザーを選択します。
5.を押して変更を保存します OK。
次に、アプリケーションスペースがコンテンツナビゲーターのワークビューに表示されます。アプリケーション
スペースを展開すると、受信トレイを選択できるようになり、割り当てられている作業項目が表示されます。ワ
ークアイテムを開くには、ダブルクリックするか、選択してクリックします。 開いた。
288 IBM Content Navigatorのカスタマイズと拡張
8.9埋め込みビューアを使用するアクションを追加する
次のステップは、ユーザーが埋め込みビューアにドキュメントを表示する方法を提供することです。Content Navi
gatorのステッププロセッサーは、外部ビューアーにドキュメントを自動的に表示するため、埋め込みビューアーに
ドキュメントを表示できるようにするアクションが追加されます。デフォルトのコンテンツナビゲーターの動作は
オーバーライドされないため、ユーザーは埋め込みビューアーまたは非埋め込みビューアーを使用するオプション
を選択できます。
アクションを追加するには、73ページの第3章「開発環境の設定」で紹介したContent Navigator Eclipse拡張機能
を使用してContent Navigatorプラグインを作成します。その章の指示に従って、新しいContent Navigatorプラグ
インを作成します。プロジェクトで。表8-1に、プロジェクトの作成時に入力する値を示します。
表8-1新しいプラグインを作成するための値
フィールド
値
プロジェクト名
StepProcessorActionPlugin
説明的な名前
ステッププロセッサアクションプラグイン
Javaパッケージ
com.ibm.ecm.icn.plugin
クラス名
StepProcessorAction
バージョン
1.0
このプラグインは、アクションを実行するために必要です。179ページの第5章「カスタムリポジトリ検索サービ
スの構築」の手順に従って、プラグイン拡張を作成します。この場合、アクションが追加されるので、 アクション
拡張機能のリストから。入る com.ibm.ecm.icn.plugin Javaパッケージおよび
StepProcessorAction クラス名として。
アクションを実装するには、生成されたいくつかのファイルを変更する必要があります。以下のセクションでは、必
要な変更の概要を説明します。
第8章カスタムステッププロセッサの作成
289
8.9.1 StepProcessorAction.javaの更新
の StepProcessorAction.java ファイルは、実装されているアクションに関するいくつかの一般的な情報を提供しま
す。アクションに固有の情報をいくつかの手順に追加する必要があります。
getName()メソッドは、新しいアクションのメニューに表示される文字列を指定します。このフィールドを、アク
ションを説明する「ユーザーフレンドリーな」文字列に更新します。例8-5は、このプロシージャを更新するためのコ
ードを示しています。
例8-5 getNameメソッドのリスト
public String getName(Locale locale){
「埋め込みビューアで開く」を返します。}
getPrivilege()メソッドを更新して、このアクションを実行するために必要な特権を指定する必要があります。
ドキュメントを表示できるすべてのユーザーがこのアクションを実行できるため、このプロシージャは値privVie
wDocを返します。例8-6は、getPrivilege()メソッドのコードを示しています。
例8-6 getPrivilegeメソッドのリスト
public String getPrivilege(){
「privViewDoc」を返します。}
getServerTypes()メソッドは、サポートされているサーバーのタイプを返す必要があります。この例はIBM F
ileNet P8で動作するため、「 p8 " 値として。例8-7は、getServerTypes()メソッドのコードを示しています。
例8-7 getServerTypesメソッドのリスト
public String getServerTypes(){
「p8」を返します。}
8.9.2 StepProcessorActionPlugin.jsの更新
の StepProcessorActionPlugin.js ファイルは追加されているアクションを実行します。ドキュメントが選択されて
いることを確認してから、埋め込みビューアが作成されたことを確認します。これらの条件の両方が満たされた
場合、ドキュメントは埋め込みビューアに送信されます。289ページの例8-8は、 StepProcessorActionPlugin.js フ
ァイル。
290 IBM Content Navigatorのカスタマイズと拡張
例8-8 StepProcessorActionPlugin.jsのリスト
require(["dojo / _base / declare"、
"dojo / _base / lang"、
"ecm / widget / viewer / ContentViewer"]、function(decla
re、lang、ContentViewer){
lang.setObject( "stepProcessorAction"、function(repository、items、callback、teamspace、resultSet、
parameterMap){
//アクション定義は配列内の1つのオブジェクトのみを許可しますvar item = items [0]; //アイ
テムがドキュメントかどうかを確認しますif(!item.isFolder()){
//ビューアインスタンスが存在するかどうかを確認しますif
(window.contentViewer!= null){
//ビューアウィンドウでドキュメントを開きます。con
tentViewer.open(item); }}}); });
8.9.3アクションプラグインのビルドとデプロイ
Eclipseツールによって生成されたプロジェクトは、自動的に build.xml
プラグインJARファイルをビルドするファイル。走る build.xml プラグインJARファイルを作成します。JARファイ
ルが作成されたら、次の指示に従って登録およびテストします。
94ページの3.3.4、「プラグインの登録とテスト」。
プラグインが登録されたら、プラグインによって提供されるアクションを適切なメニューに追加できます。
1.管理者権限でコンテンツナビゲーターを開き、管理ビュー機能を開きます。
2.展開 メニュー ツリーで見つけて デフォルトの添付アイテムコンテキスト
メニュー。 デフォルトのメニューは変更できないため、メニューのコピーを作成する必要があります。
3.リストのメニューのコンテキストメニューを選択し、 コピー。 この意志
選択したメニューと同じタイプの新しいメニューを作成します。
4.ダイアログにカスタムメニューの名前を入力します。IDは、指定した名前に基づいて自動的に入力されます。
5.左側の利用可能なアクションから、 埋め込みビューアで開く
プラグインからアクションを選択し、[選択したアクション]領域に移動します。
6.作成された新しいメニューを保存します。
第8章カスタムステッププロセッサの作成
291
次に、新しいメニューを適切なツールバーに割り当てます。
1.デフォルトのデスクトップ(または使用するデスクトップ)を開き、
メニュー タブ。
2. FileNet P8ワークフローコンテキストメニューセクションで、 ドキュメント添付コンテキストメニュー 以前に
作成したカスタムメニューを選択します。
3.変更をデスクトップに保存します。
8.10カスタムステッププロセッサの使用とテスト
カスタムステッププロセッサを使用してテストするには、それを組み込んだワークフローを作成します。ワークフロー
はProcess Designerで作成されます。サブスクリプションは、Claimドキュメントクラスにドキュメントが追加される
たびにワークフローを開始するために使用されます。次のセクションでは、ワークフローの作成とテストの概要を説明
します。
8.10.1カスタムステッププロセッサを使用したワークフローの作成
この例では、起動ステップと、カスタムステッププロセッサを使用するアクティビティステップで構成される単純
なワークフローを作成します。これには、単一のドキュメント添付ファイルに加えて、表示する一連のプロパティ
が含まれます。次の手順では、ワークフローを作成する方法について説明します。
1. Process Designerを開きます。起動ステップを含む新しいワークフローで開きます。
2.下部の[ワークフロー]タブに、次のように入力します クレーム処理 ワークフローとして
名前。入る 申し立てを処理する 主題として。必要に応じて、説明を入力します。
3. [データフィールド]タブで、次の名前を使用して3つの文字列データフィールドを追加します。 ブランチ、 請求
番号、 そして 領域。 各データフィールドの説明を入力します。
4. [添付ファイル]タブで、次の名前の添付ファイルを追加します ClaimDocument。 出て
配列および値フィールドは空白ですが、説明を入力してください。
5.を選択します LaunchStep グラフィック領域。「一般」タブで、
LaunchClaim ステップ名として。
6.をドラッグしてアクティビティステップを追加します アクティビティ アイコンをグラフィック領域に追加します。
7.アクティビティの[一般]タブで、次のタスクを実行します。
- 入る ProcessClaim ステップ名として。
–
参加者フィールドに、 F_Originator。
292 IBM Content Navigatorのカスタマイズと拡張
–
[ステッププロセッサ]ドロップダウンリストで、 ステッププロセッサRedbkステッププロセッサ。 このス
テッププロセッサーがリストにない場合は、プロセス構成コンソールでステッププロセッサーの構成を再
確認してください。
–
このカスタムステップでクレームを処理する方法をユーザーに説明する手順を入力します。
–
[パラメーター]タブで、4つのパラメーターすべてを選択したパラメーターのリストに追加します。各パラ
メータのプロンプトを入力します。
8. LaunchStepからカスタムステップへのルートを追加します。
8.10.2サブスクリプションを追加してワークフローを開始する
サンプルワークフローは手動で起動することも、プロセスを自動化するためにワークフローサブスクリプションを
作成することもできます。この例では、Claimドキュメントクラスのドキュメントが作成されたときにワークフロ
ーを起動するサブスクリプションを作成します。これは、クレームのチェックインイベントにサブスクライブして
ワークフローを起動することで行われます。このようにして、このクラスのドキュメントがオブジェクトストアで
作成されるたびに、サブスクリプションは自動的に新しいドキュメントを添付して起動されます。その後、ワーク
フローは[クレームの処理]ステップに移動し、ワークアイテムが適切な受信トレイに到着して、クレームを処理し
ます。
8.11外部データサービスの追加
外部データサービスは、カスタムステッププロセッサを含むワークフローステッププロセッサと連携するように
構成できます。この例の場合、外部データサービスは233ページの第7章「要求および応答フィルターと外部デー
タサービスの実装」で作成されます。簡単な変更により、作成された外部データサービスをカスタムステッププ
ロセッサーに追加できます。
外部データサービスは、Claimドキュメントクラスで動作するように構成され、いくつかのカスタマイズを提供し
ました。EDSは次のフィールドに使用されます。
ClaimNumber:このフィールドのフォーマットを検証します。地域:選択リス
トを追加します。
BranchOffice:この選択リストをRegionの依存プロパティにします。
カスタムステッププロセッサで使用されるフィールド名は、Claimsドキュメントクラスのフィールド名と一致し
ます。これにより、ドキュメントクラスフィールド用に作成されたEDSを再利用できます。
これらのアイテムを使用するには、外部データサービスを更新して、ワークフローステッププロセッサをター
ゲットとして含める必要があります。これは、
ObjectTypes.json 外部データサービスプロジェクト内のファイル
第8章カスタムステッププロセッサの作成
293
サポートされているクラスのリストのワークフロー。例8-9は、更新されたコードを示しています。この例では、
Claim_Processingはワークフロー名、スペースはアンダースコアに置き換えられ、ProcessClaimはワークフロー
のステップ名です。
例8-9 ObjectTypes.jsonを更新してカスタムステッププロセッサを追加する
[{"symbolicName": "申し立て"}、
{"symbolicName": "Claim_Processing.Workflow.ProcessClaim"}、]
この変更を行った後、EDSサービスのWARファイルを再生成し、アプリケーションサーバーに再デプロイします。
この単純な変更により、ステッププロセッサのEDSが有効になります。
外部データサービスは、ユーザーによるデータの入力を検証および簡略化するためのさまざまな機能を提供でき
ます。前に示したように、選択リストを作成し、依存選択リストを指定して、ユーザーが入力したデータを検証
できます。外部データサービスで提供できるその他の主要な機能には、デフォルト値の提供、最小値と最大値の
定義、文字列フィールドの長さの指定などがあります。文字列フィールドを256文字以上に指定すると、そのフ
ィールドの入力領域は自動的に複数行の入力ボックスになります。
8.11.1ワークフローとカスタムステッププロセッサのテスト
Process Designerツールは、ワークフローを保存して起動できるため、テストをより簡単に実行できます。
ワークフローとカスタムプロセスステッププロセッサをテストするには、次の手順を使用します。
1.選択 ファイル → メインワークフローを起動 [Process Designer]メニューから。
2.最初のウィンドウで、ワークフローが保存されるオブジェクトストアとフォルダーを選択し、 次。
3. [ワークフローの保存]ダイアログで、次のように入力します ICNクレーム処理 として
ドキュメントのタイトルとクリック 終わり。 これにより、ワークフローが保存され、起動されます。
4. [起動]ダイアログで、 ローンチ。
5. Content Navigatorを起動し、Process機能を選択してから、Process Configuration Consoleから作成した受信
トレイに移動します。リストビューには、起動したワークフローの作業項目が含まれています。
6.作業項目を開いて、カスタムステッププロセッサを表示します。
294 IBM Content Navigatorのカスタマイズと拡張
図8-3は、カスタムステッププロセッサのプロパティページを示しています。クレーム番号の検証が実行されてお
り、リージョンとブランチが選択リストに関連付けられていることに注意してください。
図8-3カスタムステッププロセッサのプロパティタブ
第8章カスタムステッププロセッサの作成
295
図8-4は、ドキュメントが選択されて埋め込まれたビューアに表示されたカスタムステッププロセッサの添付ファ
イルページを示しています。
図8-4カスタムステッププロセッサのアタッチメントタブ
8.12結論
この章では、コンテンツナビゲーターステッププロセッサに基づいてカスタムステッププロセッサを作成する方法を
示します。カスタムステッププロセッサは、元のステッププロセッサを変更して、ワークフローに関連付けられたド
キュメントを表示するための埋め込みビューアを提供します。この例は、アプリケーションの機能的なニーズを満た
すためにカスタムステッププロセッサを作成する方法を示しています。
296 IBM Content Navigatorのカスタマイズと拡張
9
第9章。
Content Navigatorの使用
他のアプリケーションのウィ
ジェット
この章では、IBM Content Navigatorコンポーネントを外部アプリケーションに統合する方法について説明します
。外部アプリケーションは、IBM Content Navigatorのコンポーネントを呼び出すスタンドアロンアプリケーショ
ンにすることも、IBM Content Navigatorコンポーネントを実行する必要があるランタイム環境を提供するポータ
ルサーバーのようなコンテナーにすることもできます。
この章では、次のトピックについて説明します。
他のアプリケーションへの統合の概要例の概要
IBM Content Navigatorウィジェットの外部化Content NavigatorとURL APIの統合Content N
avigatorと特定の機能の統合Content Navigatorと特定のレイアウトの統合Content Navigato
rの特定のウィジェットの統合外部化されたウィジェットの統合(ステップ5)Microsoft Sh
arePointページでのスタンドアロンウィジェットの統合統合WebSphere Portalのポートレッ
トとしてのスタンドアロンウィジェット
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
297
9.1他のアプリケーションへの統合の概要
IBM Content Navigatorまたはそのコンポーネントの一部のみを外部アプリケーションに統合する場合、通常、次の2
つのステップを完了する必要があります。
1. IBM Content Navigatorウィジェットを外部化して、統合する必要のある部分のみが表示されるようにします。
これは、IBM Content Navigatorアプリケーション全体でも、そのウィジェットの一部または一部でもかまい
ません。これは、IBM Content Navigatorの「ルックアンドフィール」を備えた標準レイアウトでも、異なる
スタイルのカスタムレイアウトでもかまいません。このステップは、IBM Content Navigatorを統合する必要
がある最終的なターゲットシステムとは関係なく実行でき、この章の最初の部分で説明されています。
2.ステップ1の外部化されたIBM Content Navigatorパーツを外部アプリケーションに統合します。
これは、たとえば外部アプリケーションのiFrameでのIBM Content Navigatorの単純なURL呼び出しの場合も
あれば、JavaScriptコードが外部アプリケーションで実行されているより緊密な統合の場合もあります。もち
ろん、これはターゲットシステムによって異なります。
9.2例の概要
この章では、IBM Content Navigatorウィジェットおよび以下の統合の外部化の例を示します。
Content NavigatorとURL APIの統合Content Navigatorと特定の機能の統合Content Navigat
orと特定のレイアウトの統合Microsoft SharePointページでのスタンドアロンウィジェット
の統合WebSphere Portalでポートレットとしてスタンドアロンウィジェットを統合
原則として、他のシステムに統合する手順は似ています。
注意: この章の最初の部分では、IBM Content Navigatorまたはその一部を外部化する方法について、いくつ
かのアプローチを提供します。現実のシナリオでは、すべてのアプローチを実行するわけではありません。む
しろ、最も適切なアプローチを選択します。これは、おそらくシナリオのすべての要件に準拠する最も単純な
アプローチです。
アプローチの順序は、最も単純で最も柔軟性のないアプローチから始まり、最も複雑ですが最も柔軟性
の高いアプローチに進みます。
298 IBM Content Navigatorのカスタマイズと拡張
9.3 IBM Content Navigatorウィジェットの外部化
統合の最初の部分は、外部アプリケーションに統合する部分を正確に示すようにIBM Content Navigatorを準備す
ることです。
IBM Content Navigatorを外部化するさまざまなアプローチを紹介し、ターゲットシステムへの統合をシミュ
レートするために使用されるWebアプリケーションを提供します。
9.3.1 IBM Content Navigatorの外部化のアプローチ
要件に応じて、統合のレベルが異なるいくつかのアプローチがあります。このセクションでは、概要を説明し
ます。
アプローチは次のように分類できます。 アンバインド そして バウンド 11ページの1.2.4、「カスタムアプリケ
ーションの開発または統合」で導入された統合。
アンバウンド統合 外部アプリケーションが何らかの方法でIBM Content NavigatorアプリケーションのURLを呼
び出しており、IBM Content Navigatorウィジェットが外部アプリケーションの外部で実行されていることを意味
します。
バインドされた統合 とは、URL呼び出しを介さずに、IBM Content Navigatorウィジェットを直接初期化、呼び
出し、および対話することを意味します。IBM Content Navigatorウィジェットは、外部アプリケーションまたは
コンテナー内で実行されます。
アンバウンド統合
非バインド統合には、次の機能が含まれています。
URL APIとディープリンクで外部化する独自のカスタム機能
で外部化する独自のレイアウトで外部化する
URL APIとディープリンクで外部化する
完全なIBM Content Navigatorは、アプリケーション全体として統合されています。外部アプリケーションから、
基本的にIBM Content NavigatorのURLを呼び出します。URL APIによって提供される追加のURLパラメーターを
使用すると、IBM Content Navigatorのどの部分を表示するかに関して特定の制御を取得できます。この方法につ
いては、308ページの9.4「Content NavigatorとURL APIの統合」で説明しています。より柔軟で制御が必要な場
合は、他の方法のいずれかを選択する必要があります。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 299
このアプローチの長所と短所は次のとおりです。
利点:
–
コーディングなし、構成のみ。
–
iFrame統合:クロスサイトスクリプティングの問題はありません。
–
Dojoバージョンは、外部アプリケーションとIBM Content Navigatorの間で競合しません。短所:
–
iFrame統合:
–
•
マスターアプリケーションとの限られた対話(URLを変更することによる)。
•
各呼び出しは常にデスクトップ全体を再ロードします。
IBM Content Navigator全体(特定の部分やいくつかのウィジェットだけでなく)を統合します。
独自のカスタム機能で外部化する
最初のアプローチでは不十分で、IBM Content Navigatorのデフォルト機能でカバーされないものを外部化したい
場合は、プラグインを介して独自の機能を提供し、この機能をURL APIで直接呼び出すことを検討してください
。たとえば、特定の機能が必要で、上部と左側にバーがない場合は、さらに サイドクローム パラメータ。このア
プローチについては、310ページの9.5、「Content Navigatorと特定の機能の統合」で説明しています。
このアプローチはすでに強力です。独自の機能を開発することで、どのウィジェットを表示し、どのようにペ
ージ上に配置するかについて完全に自由になります。すべてのIBM Content Navigatorウィジェットとモデルを
使用するか、独自のウィジェットを開発できます。カスタム機能を表示する場合、実質的に制限はありません
。ただし、IBM Content Navigatorのデフォルトのレイアウトを変更するか、特定のウィジェットのみを外部化
し、IBM Content Navigator全体をデフォルトの起動ページで起動しない場合は、他のアプローチを検討してく
ださい。
このアプローチの長所と短所は次のとおりです。
利点:
–
カスタム機能でレンダリングするウィジェットを指定できます。
–
シームレスな統合が可能です サイドクローム パラメータ。
–
iFrame統合:クロスサイトスクリプティングの問題はありません。短所
:
–
–
iFrame統合:
•
マスターアプリケーションとの限られた対話(URLを変更することによる)。
•
各呼び出しは常にデスクトップ全体を再ロードします。
トップバナーまたは左の機能バーは変更できません(表示または非表示のみ)。
300 IBM Content Navigatorのカスタマイズと拡張
独自のレイアウトで外部化
最初の2つのアプローチと同様に、標準の起動ページのURL呼び出しを通じてIBM Content Navigator全体を開始し
ます。ただし、今回は、プラグインで提供されるカスタムレイアウトを使用して、IBM Content Navigatorの標準
レイアウト(NavigatorMainLayoutウィジェット)を変更します。このようにして、必要に応じて機能を配置した
り、機能を放棄したりすることができます。このアプローチについては、
313ページの9.6、「Content Navigatorと特定のレイアウトの統合」。
選択したウィジェットをカスタムページに提供し、それらを必要に応じて配置する場合、このアプローチは、同
じ機能を達成するためにカスタム機能を使用する以前のアプローチと同じくらい強力です。邪魔なバナーやバー
を排除するには、基本的にカスタムレイアウトでそれらをスキップします。ただし、カスタム機能アプローチで
は、sideChromeパラメータを指定して同じ結果を得ることができます。
デフォルトのレイアウトの一部を変更する必要がある場合は、前のアプローチよりも柔軟性があります。例えば
、おそらくIBM Content Navigatorが標準レイアウトで実行しているように、外部アプリケーションは左側のボタ
ン・バー以外の機能をタブ・コンテナーに表示します。次に、ユーザーがタブコンテナーでIBM Content Naviga
torの機能を切り替えて、ユーザーが使い慣れているレガシーアプリケーションと同じユーザーエクスペリエンス
を提供できるカスタムレイアウトの開発を検討してください。
このアプローチの長所と短所は次のとおりです。
利点:
–
レンダリングするウィジェットを指定できます。
–
上部のバナーまたは左側の機能バーをカスタマイズできます。
–
レイアウトにはいくつかの機能を含めることができ、すべての「統合」機能のコンテナとして機能します
。
–
iFrame統合:クロスサイトスクリプティングの問題はありません。短所
:
–
iFrame統合:
•
マスターアプリケーションとの限られた対話(URLを変更することによる)。
•
各呼び出しは常にデスクトップ全体を再ロードします。
バインドされた統合
この統合は、標準のIBM Content Navigatorアプリケーションの外部でウィジェットを使用し、コードが外部アプ
リケーションで実行されるという点で、以前のアプローチとは異なります。外部化するウィジェットを準備し、
標準の初期化プロセスではIBM Content Navigator全体を起動しません。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 301
このアプローチについては、324ページの9.7、「Content Navigatorの特定のウィジェットの統合」で説明していま
す。
このアプローチは、最も柔軟性があります。IBM Content Navigatorアプリケーションに限定されません。表示す
るウィジェット、それらを初期化する方法、およびそれらを配置する方法については、完全に自由です。また、
1つのURLを呼び出すだけでなく、任意のイベントを関連付けて、アプリケーションのコンポーネントとIBM Co
ntent Navigatorの外部化されたウィジェットとの間の対話を提供するため、外部アプリケーションとの対話のレ
ベルが高くなります。
ただし、IBM Content Navigatorが内部でどのように機能するか(例えば、モデルのロードと初期化の方法、
外部化したいウィジェットのワイヤリング方法など)を十分に理解している必要があります。
この統合タイプの重要な前提条件の1つは、ターゲット・システムでDojoフレームワークがサポートされているこ
と、およびIBM Content Navigatorで使用される正確なDojoバージョンを外部アプリケーション内で実行できるこ
とです。
このアプローチの長所と短所は次のとおりです。
利点:
–
マスターアプリケーションとのやり取りとそのコンポーネントとの配線を可能にします。
–
IBM Content Navigatorのデスクトップモデルを1回ロードできます。
–
必要に応じて、ウィジェットの初期化プロセスを制御できます。短所:
–
IBM Content Navigatorとその配線についての深い理解が必要です。
–
JavaScriptモデルのより多くのコーディングと初期化が必要です。
–
クロスサイトスクリプティングに直面します。
–
外部アプリケーションもDojoフレームワークを使用している場合、Dojoバージョンの競合が発生する可能性があります。
302 IBM Content Navigatorのカスタマイズと拡張
9.3.2 IBM Content Navigator統合パート1のシミュレーション
統合の最初の部分をテストするために、外部アプリケーションからのIBM Content Navigatorの呼び出しである2番
目の部分をシミュレートします。単純なウェルカムページを備えた単純なWebアプリケーションを提供します。
このページは、IBM Content Navigatorを統合する場所です。非バインドおよびバインド統合をエミュレートでき
ます。
図9-1は、バインドされていない統合を示しています。Container Simulationは、図9-1に示すように、IBM Conte
nt Navigatorがデプロイされているのと同じWebサーバー、または別のWebサーバーにデプロイできる小さなWe
bアプリケーションです。このシミュレーションタイプは、次のセクションで説明するアプローチに適しています
。
304ページの9.4、「Content NavigatorとURL APIの統合」
309ページの9.5、「Content Navigatorと特定の機能の統合」
313ページの9.6、「Content Navigatorと特定のレイアウトの統合」
図9-1 IBM Content Navigatorの非バインド統合のエミュレーション
304ページの図9-2は、バインドされた統合を示しています。ご覧のとおり、IBM Content Navigator統合のコード
は、 Index.html 今回は外部アプリケーションのページをエミュレートします。外部アプリケーションのページでI
BM Content Navigatorウィジェットを直接手動で設定できるのは、これだけなので、バウンド統合は、324ページ
の9.7、「Content Navigatorの特定のウィジェットの統合」で説明されているアプローチでのみ可能です。 。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 303
図9-2 IBM Content Navigatorのバインドされた統合のエミュレーション
図のように、Container Simulationアプリケーションをリモートサーバーにデプロイすると、同じ発生元のポリシ
ー違反が発行されているかどうかをすでに確認でき、それらの解決を試みることができます。これらの種類の課
題については、
344ページの9.8、「外部化されたウィジェットの統合(ステップ5)」。
これら2つのシミュレーションタイプを使用して、外部化されたIBM Content Navigatorをこの章の残りの部分で特
定の環境に統合する前に、さまざまなアプローチをテストできます。したがって、最初の部分全体は特定のター
ゲットシステムから独立しています。
選択したIDEで、新しいWebプロジェクトを作成し、次の名前のウェルカムファイルを追加します。 index.html。
図9-3は、追加した後の基本的なWebプロジェクト構造を示しています。 index.html ファイル。
図9-3コンテナシミュレーションWebプロジェクトのプロジェクト構造
304 IBM Content Navigatorのカスタマイズと拡張
Java Webアプリケーションにはデプロイメント記述ファイルがあります web.xml それは WEB-INF ディレクトリ
。私たちの目的では、それは基本的なものであり、登録するメインエントリは1つだけ index.html ウェルカムファ
イルとして。例9-1は、 web.xml
このWebプロジェクトの。
例9-1 Container Simulationプロジェクトのweb.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<web-app id = "WebApp_ID" version = "2.5" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi =
"http://www.w3.org/2001/ XMLSchema-instance "xsi:schemaLocation =" http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd ">
<display-name> ContainerSimulation </ display-name>
<welcome-file-list>
<ようこそファイル> index.html </ welcome-file> </
welcome-file-list> </ web-app>
の index.html ウェルカムページは3つのDIVタグで構成されています。最初と最後のDIVタグは、外部アプリケーシ
ョンのコンテンツを表します。中央のDIVには、外部化されたIBM Content Navigatorのコンテンツが含まれていま
す。例9-2を参照してください。
このファイルでは、統合はiFrame要素で行われるため、これはバインドされていない統合です。のURL src 属性は
、次のセクションのさまざまなアプローチで適応されます。最初のテストでは、IBM Content Navigatorデプロイ
メントを指すようにURLを調整します。
バウンド統合のシミュレーションについては、349ページの9.8.4「バウンド統合の概要」で、外部化されたIBM
Content Navigatorウィジェットが中央のDIVタグで直接初期化される方法を示します。これは、外部への直接統
合をシミュレートします。応用。
例9-2 Container Simulationプロジェクトのindex.html
<!DOCTYPE html>
<html> <head>
<title> IBM Content Navigator統合用コンテナー</ title> <style>
@import "ContainerSimulation.css"; </ style> </
head> <body>
<div class = "externalAppContent">
コンテナからの情報です</ div>
<div id = "icnIntegration">
<iframe class = "icnIntegrationFrame"
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 305
src = "http:// < ウェブサーバー>:<ポート> / navigator "name ="
IBM Content Navigator "seamless> </ iframe> </ div>
<div class = "externalAppContent">
これはコンテナからの別の情報です</ div> </ body> </ html>
初期のCSSスタイルを提供するには、新しい ContainerSimulation.css にファイル
Webコンテンツ フォルダを作成し、実装を提供します。開始点については、例9-3を参照してください。
例9-3の実装 ContainerSimulation.css iframe.icnIntegrationFrame {
幅:800px; 高さ:600p
x; オーバーフロー:自
動;
} .externalAppContent {
background-color:#ddddff; 高さ:5
0px; text-align:中央; font-size:24p
x;
} #icnIntegration {
background-color:#ddddff; マージン
:0自動; text-align:中央; }
IDEのエクスポート機能を使用して、WebアプリケーションをWebアーカイブに圧縮します。結果はアーカイブ
ファイルです。私たちの場合は ContainerSimulation.war。
このWebアーカイブを、IBM Content NavigatorがデプロイされているWebサーバーにデプロイします。この
セクションの残りの部分では、Webコンテキストを ContainerSimulation。
次の例のようなURLでWebブラウザーを起動して、シミュレーションコンテナーWebアプリケーションを起動
します。
http:// <Webサーバー>:<ポート> / ContainerSimulation
306 IBM Content Navigatorのカスタマイズと拡張
ログインすると、図9-4に示すページが開きます。
図9-4非バインド統合でデプロイされたシミュレーションコンテナーWebアプリケーション
この章の次の部分のIBM Content Navigator統合をエミュレートするWebプロジェクトができたので、さまざまな
アプローチから始めることができます。このモックコンテナーは、実際のターゲットシステムに置き換えられま
す。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 307
9.4 Content NavigatorとURL APIの統合
IBM Content Navigatorを別のアプリケーションにアンバインド統合する最初の方法は、そのURLを呼び出して、
IBM Content Navigatorを「そのまま」表示させることです。最も簡単な方法は、追加のパラメーターなしでIBM
Content Navigatorの開始ページのみを呼び出すことです。これは、前のセクションですでに実行されています。
23ページの1.4.1「URL API」で紹介したように、IBM Content Navigatorは、ディープリンクを介してユーザーに
何を表示するかを制御するURL APIを公開します。
主に次の要素を指定できます。
デスクトップ機能
フォルダードキュメント
このアプローチのサンプルとして、特定のフォルダーのコンテンツを示します。
特定のフォルダのコンテンツを表示する場合は、例9-4に示すように、別の開始ページを呼び出す必要がありま
す。の docid パラメータは、フォルダの一意の識別子を指定します。FileNet P8の場合、これはプロパティIDであ
り、オブジェクトのグローバル一意識別子(GUID)です。
例9-4特定のフォルダの内容を表示する
http:// server:port / navigator / Bookmark.jsp? desktop = DossierDesktop&featur e = browsePane& docid = 6DEFC57F-6E89-4B4B-BD0
まず、構築されたURLをブラウザに直接コピーして確認できます。結果は、309ページの図9-5のようになりま
す。
308 IBM Content Navigatorのカスタマイズと拡張
図9-5 IBM Content Navigator URL APIを使用したフォルダーのコンテンツの表示
次に、303ページの9.3.2「IBM Content Navigator統合パート1のシミュレーション」で作成したシミュレーショ
ンコンテナーアプリケーションとの統合を試すこともできます。これを行うには、 iframe タグ付け index.html
(例9-5に示されています)。ブラウザのキャッシュを空にして、ブラウザでContainer Simulationアプリ
ケーションを再起動すると、iFrameでフォルダのコンテンツが見つかり、シミュレートされた外部アプリ
ケーションにあります。
例9-5ディープリンクを使用したContainer Simulationプロジェクトのindex.html
<div id = "icnIntegration">
<iframe class = "icnIntegrationFrame" src = " http:// server:port / navigator / bookmark.jsp?desktop =
DossierDesktop&f eature = browsePane&docid = 6DEFC57F-6E89-4B4B-BD04-D4B5DC5E02E8 "
name = "IBM Content Navigator" seamless = "true"> </ iframe> </ div>
IBM Content Navigatorの制御は、URL APIに制限されています。これで十分でない場合は、URL APIの拡張を検
討することをお勧めします。この機能強化の詳細は提供していませんが、いくつかのガイダンスを提供できま
す。詳しくは、325ページの9.7.1、「Content Navigatorの初期化フェーズ」を参照してください。
URL APIを使用してIBM Content Navigatorを開始し、フォルダーのコンテンツを表示するときは、別の開始
ページを指定します。 launch.jsp ページ、指定 Bookmark.jsp。
の Bookmark.jsp ファイルは基本的に呼び出します browserbookmark.jsp 非モバイルアクセス用。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 309
の browserbookmark.jsp ファイルは、BookmarkPaneウィジェットを使用して、IBM Content Navigatorの指
定されたコンポーネント(フォルダーのコンテンツなど)を起動します。の ecm.widget.BookmarkPane.js ウ
ィジェットは、IBM Content Navigatorの標準基本ウィジェットをオーバーライドします。 ecm.widget.Desk
topPane。 次のコードスニペットは BookmarkPane.js:declare( "ecm.widget.BookmarkPane"、[ DesktopP
ane、 LoggerMixin、MessagesMixin]、{...});
desktopLoaded関数で、レイアウトはBookmarkLayoutに設定され、開始されます。つまり、IBM Conten
tナビゲーターは標準のレイアウトで開始されません。 NavigatorMainLayout、 しかし、BookmarkLayout
。の ecm.widget.layout.BookmarkLayout.js ウィジェットは、docidのような追加のURLパラメータを処理
します。
URL API機能を強化するために、次のアイテムを提供できます。
次のような独自のスタートページを提供する mybookmark.jsp。
の mybookmark.jsp 拡張するmyBookmarkPaneウィジェットを起動できます
BookmarkPane.js。
の myBookmarkPane.js BookmarkLayoutを拡張し、必要な追加機能を提供するレイアウトを指
定できます。
これは、IBM Content NavigatorのURL APIで提供される同様の拡張機能で機能します。さらに制御したい場合、
またはIBM Content Navigatorを特定のウィジェットに誘導する必要がある場合は、次のセクションで説明するよ
うに、別のアプローチの使用を検討してください。
9.5 Content Navigatorと特定の機能の統合
IBM Content Navigatorの一部を外部アプリケーションに統合する次のアプローチは、IBM Content Navigatorの
単一の機能を活用することです。
IBM Content Navigatorで特定の機能とデスクトップを開くには、前のセクションで説明したように、IBM Co
ntent Navigator URL APIを使用できます。URLは、例9-6のように構成されます。
例9-6 IBM Content Navigatorの特定のデスクトップと機能を表示する
http:// server:port / navigator /?desktop = <desktopid>&feature = <featureid>&s ideChrome = 0
310 IBM Content Navigatorのカスタマイズと拡張
標準機能IDは次のとおりです。
browsePane:標準のブラウズ機能の場合searchPane:標準の検索機能のお気に
入りの場合:標準のお気に入り機能の場合manageTeamspaces:標準のチームス
ペース機能の場合workPane:標準の作業機能の場合
指定された機能が適切に構成され、指定されたデスクトップに割り当てられていることを確認してください。
追加のURLパラメーターであるsideChromeを使用すると、左側の機能のバーと上部バナーを非表示にして、
よりシームレスな統合を実現することもできます。
機能がIBM Content Navigatorの標準機能である場合、この統合アプローチは9.4ページの9.4「Content Navigator
とURL APIの統合」と同じレベルになります。ただし、プラグインを通じて提供されるカスタム機能を開発する
と、異なる自由度。カスタム機能を提供する場合、空のページから開始して、外部アプリケーションに公開する
ウィジェットを正確に追加できます。また、sideChromeパラメーターを0(ゼロ)に設定すると、上部のバナー
や左側の機能バーなど、IBM Content Navigator標準アプリケーションからの追加機能なしで機能のみがレンダリ
ングされるため、シームレスな統合が実現します。
この本のいくつかのセクションでは、独自のフィーチャーを作成する方法について説明しているため、ここでは
説明しません。他の章で作成した機能プラグインを試してみることができます。たとえば、4.5のドシエ機能プラ
グイン、156ページの「ドシエビューを独自の機能で開く」などです。
このアプローチがどのように見えるかを理解するために、sideChromeパラメーターを使用してWork機能を呼び
出します。次の構成されたURLを呼び出しました。
http:// <サーバー>:<ポート> / navigator?desktop = <desktopid>&feature = workPane&s ideChrome = 0
312ページの図9-6に示すように、URLを直接呼び出すことができます。アプリケーションスペースのみが表示され
ます。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 311
これを開くと、図9-7に示すように、作業項目をリストする受信トレイを選択できます。
図9-6 sideChromeパラメータを使用した外部化機能
ただし、アプリケーションスペースを開いてインバスケットを選択することは、ユーザーが手動で行う2つの手順
です。特定の受信ボックスを直接開く場合は、前のセクションで説明したようにIBM Content NavigatorのURL A
PIを拡張するか、追加のURLパラメーター(applicationSpaceやinbasketなど)を読み取ることができる独自の作
業機能を開発し、直接開く必要があります。作業項目リスト。その後、カスタム作業機能は、機能拡張ポイント
を実装するプラグインとしてデプロイされます。
図9-7選択された受信トレイでの作業の外部化機能
これも、バインドされていない統合のサンプルです。これをContainer Simulationアプリケーションに統合した後
、 src の属性 IFRAME タグ(309ページの例9-5に示す)は、313ページの図9-8に似ています。これは、アプリケー
ションスペースとインバスケットを手動で選択し、小さな三角形でワークアイテムリストを最大化した後です。
受信トレイと作業項目リスト領域の間にあるグリップ。
312 IBM Content Navigatorのカスタマイズと拡張
図9-8作業ウィンドウ機能のシミュレーションコンテナーへの統合
9.6 Content Navigatorと特定のレイアウトの統合
このセクションでは、IBM Content Navigatorプラグインのレイアウト拡張ポイントの新しいレイアウトを実装し
ます。このアプローチでもIBM Content Navigator標準アプリケーションを使用していますが、どのウィジェット
を表示するか、およびそれらをどのように配置するかについては完全に自由です。サンプル実装では、ContentL
istウィジェットを公開しています。ナビゲーション用のフォルダーツリーは提供されません。
コンテンツリストウィジェットについては、172ページの5.2、「ContentListウィジェットでの結果の表示」で説明し
ます。このセクションを開始する前に、このウィジェットに精通している場合に役立ちます。
9.6.1新しいプラグインプロジェクトの設定
IDEで新しいプロジェクトを作成します。315ページの表9-1にリストされているパラメータを使用します。こ
のステップの詳細な説明はありません(これについては、
81ページの3.3、「プラグイン開発」)。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 313
表9-1 IBM Content Navigatorプラグインprのパラメーター オジェクト
パラメータ
値
説明的な名前
レイアウトプラグイン
Javaパッケージ
com.ibm.ecm.extension
クラス名
LayoutPlugin
プロジェクトは図9-9のようになります。
図9-9 Layout Pluginプロジェクトの構造
次のステップは、新しいレイアウトをプラグインに追加することです。
9.6.2レイアウトの追加
このセクションでは、IBM Content Navigatorレイアウト拡張ポイントの実装について説明します。プラグインに新
しいレイアウトを追加するには、以下の手順を実行します。
1.特定の com.ibm.ecm.extension.PluginLayout Javaクラスと
そのメソッドを実装して、必要な機能を追加します。
2. PluginLayoutクラスを追加してベースプラグインクラスにフックし、getLayouts()メソッドをオーバーライドしま
す。
314 IBM Content Navigatorのカスタマイズと拡張
どちらのタスクも、IBM Content Navigator開発用のEclipseプラグインの新規レイアウトウィザードで実行できま
す。85ページの3.3.2、「プラグイン拡張の作成」を参照してください。ContentListLayoutをクラス名として使用
します。これにより、各抽象メソッドの基本的な実装を持つクラスのスケルトンが作成されます。例9-7を参照し
てください。
例9-7 ContentListLayout.classの実装
public class ContentListLayout extends PluginLayout {
public String getId(){
「ContentListLayout」を返します。
} public String getName(Locale locale){
「ContentListLayout」を返します。
} public boolean areFeaturesConfigurable(){
falseを返します。
} public String getLayoutClass(){
"layoutPluginDojo.ContentListLayout"; }}
以外はデフォルトの実装のままにします areFeaturesConfigurable
方法。 デフォルト値を次のように変更します 偽 IBM Content Navigator機能の概念をサポートしたくないた
め、コンテンツリストウィジェットのみをレンダリングします。
例9-8は対応する ContentListLayout.js レイアウトウィジェットであるファイル。
例9-8 ContentListLayout.jsの実装
define([
「dojo / _base / declare」、「dijit / _TemplatedMix
in」、「dijit / _WidgetsInTemplateMixin」、「dijit /
layout / StackContainer」、「dijit / layout / BorderC
ontainer」、「dijit / layout / ContentPane」、「ecm
/ widget / layout / BaseLayout "、" ecm / widget / B
anner "、" ecm / widget / LoginPane "、" ecm /モデ
ル/機能 "、
"dojo / text!./ templates / ContentListLayout.html"]、
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 315
function(declare、_TemplatedMixin、_WidgetsInTemplateMixin、StackContainer、BorderContaine
r、ContentPane、BaseLayout、Banner、LoginPane、 特徴 、 テンプレート) {
return declare( "layoutPluginDojo.ContentListLayout"、[BaseLayout、_TemplatedMixin、_WidgetsInTem
plateMixin]、{
templateString:テンプレート、widgets
InTemplate:true、
getAvailableFeatures: 関数() {
戻る[
新着 特徴({
id: "お気に入り"、名前: "お
気に入り"、
featureClass: "ecm.widget.layout.FavoritesPane"、})]; }、}); });
を実装することをお勧めします getAvailableFeatures 機能を使用しない場合でも機能します。そうしないと、管理
デスクトップの[外観]タブで[表示される機能]セクションが正しく表示されません。
コードは、一般的なDojoテンプレートメカニズムを使用してレイアウトを定義します。対応するテンプレートファイ
ルが定義されます。
dojo / text!./ templates / ContentListLayout.html
ウィザードは、次のようなStackContainerでレイアウトを生成しました
ecm / widget / layout / templates / MainLayout.html; 317ページの例9-9を参照してください。これは、複雑なアプリケ
ーションを構築する場合の出発点として最適です。ここにコンテンツリストウィジェットを配置するだけです。つま
り、基本的にはすべてを削除して、1つから始めることができます。 DIV。 StackContainerを保持する理由は、IBM
Content Navigatorがフォーカスを設定しようとするためです。 mainStackContainer、 で定義された
data-dojo-attach-point。 また、削除するとエラーになります。したがって、StackContainerを保持し、トップ
バナー定義のみを削除します。
316 IBM Content Navigatorのカスタマイズと拡張
StackContainerのコンテンツ領域に配置する唯一のアイテムは、プラグインをデプロイするときにすべてが正し
く機能していることを確認するためのマーカーです。
例9-9 ContentListLayout.html
<div class = "ecmLayout">
<div data-dojo-type = "dijit / layout / BorderContainer" data-dojo-attach-point = "mainContainer"
data-dojo-props = "gutters:false" class = "contentPane">
<div data-dojo-type = "dijit / layout / StackContainer"
data-dojo-attach-point = "mainStackContainer" data-dojo-props =
"region: 'center'" class = "stackContainer">
<div data-dojo-type = "ecm / widget / LoginPane" data-dojo-attach-point =
"loginPane" id = "$ {id} _LoginPane"> </ div>
<div data-dojo-type = "dijit / layout / BorderContainer" data-dojo-attach-point = "mainPane"
data-dojo-props = "gutters:false">
<!-ここにメインアプリケーションレイアウトを追加->
ここにコンテンツウィジェットが表示されます。
</ div> </
div> </ div> </ div>
反復的な方法論を採用しているため、新しいプラグインはすでにデプロイされています。図9-10を参照してくだ
さい。現時点では、プラグイン用のJARファイルは作成せず、クラスファイルパスを構成します。これにより、
実装の効果を確認するたびにJARファイルを再構築する必要なく、コードを直接拡張できます。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 317
図9-10 LayoutPluginの構成
新しいレイアウトがどのように見えるかを知るには、それをデスクトップに割り当てる必要があります。管理ビュー
機能で次の手順を実行します。
1.選択したデスクトップにレイアウトを割り当てることができます。[管理]ビューから、次を選択して新しいデス
クトップを作成します デスクトップ → 新しいデスクトップ そして入る ContentListDesktop 次の構成のデスク
トップの名前として:
–
一般タブ:
•
名前とID:ContentListDesktop
•
認証:ContentListウィジェットにリストするフォルダーのリポジトリーを選択します。
–
[リポジトリ]タブ:このリポジトリを再度割り当てます。
–
「外観」タブ(319ページの図9-11を参照):
•
レイアウト:ドロップダウンボックスでContentListLayoutを割り当てます。
•
表示される機能:基本的に、機能は必要ありません。ただし、デフォルト機能の指定は必須である
ため、少なくとも1つは提供する必要があります
318 IBM Content Navigatorのカスタマイズと拡張
機能なので、 お気に入り 以前に指定した機能 ContentListLayout.js。
•
デフォルトの機能:お気に入り。
•
デフォルトリポジトリ:お気に入り機能をリポジトリで初期化する必要がないため、これを無効に
します。
2.デスクトップを保存します。[保存]ボタンが有効になっていない場合は、[保存]ボタンの状態を次のように更新します
。
a。選択する お気に入り [選択した機能]領域。
b。[お気に入り]を[利用可能な機能]領域に移動します。
c。[お気に入り]をもう一度[選択された機能]領域に移動します。
図9-11 ContentListLayoutを新しいデスクトップに割り当てる
次の例のURLを使用するなど、このデスクトップでIBM Content Navigatorを開始すると、空のページが表示され
、 ここにコンテンツウィジェットが表示されます マーカー:
http:// server:port / navigator?desktop = ContentListDesktop
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 319
9.6.3 ContentListウィジェットをレイアウトに追加する
テンプレートHTMLファイルに、ContentListウィジェットを追加します。例9-10を参照してください。
例9-10 ContentListLayout.htmlへのContentListの追加
<div class = "ecmLayout">
<div data-dojo-type = "dijit / layout / BorderContainer" data-dojo-attach-point = "mainContainer"
data-dojo-props = "gutters:false" class = "contentPane">
<div data-dojo-type = "dijit / layout / StackContainer"
data-dojo-attach-point = "mainStackContainer" data-dojo-props =
"region: 'center'" class = "stackContainer"> <div data-dojo-type
= "ecm / widget / LoginPane"
data-dojo-attach-point = "loginPane" id = "$ {id} _LoginPane"> </ div>
<div data-dojo-type = "dijit / layout / BorderContainer"
data-dojo-attach-point = "mainPane" data-dojo-props = "gutters:false"> <!-ここにメインアプリケーションレイアウトを
追加->
<div data-dojo-attach-point = "contentList"
data-dojo-type = "ecm / widget / listView / ContentList" data-dojo-props = "region: 'center'">
</ div>
</ div> </
div> </ div>
Dojoフレームワークは、 ecm / widget / listView / ContentList
ウィジェット this.contentList プロパティ(data-dojo-attach-point属性で指定) ContentListLayout.js ファイル。例
9-11は、ContentListウィジェットを初期化するためにオーバーライドするpostCreate関数を示しています。Dijitラ
イフサイクルでは、このメソッドは多くの場合、初期化タスクを実行するのに適した場所です。
ContentListModulesとContentListGridModulesを設定し、displayRootメソッドを呼び出してリポジトリのルート
フォルダーのコンテンツを取得し、ResultSetでContentListウィジェットを初期化します。
例9-11 ContentListLayout.jsのpostCreateメソッドでのContentListの初期化
postCreate:function(){
this.inherited(arguments);
this.contentList.setContentListModules(
this.getContentListModules());
this.contentList.setGridExtensionModules(
this.getContentListGridModules()); this.displayR
oot(); }、
322ページの例9-12にヘルパーメソッドを示します。
320 IBM Content Navigatorのカスタマイズと拡張
コンテンツリストモジュールを構成する最初の2つの方法とモジュール自体については、225ページの6.5、「C
ontentListウィジェットへの追加モジュールの構成」で説明しています。
の displayRoot メソッドは、デスクトップからデフォルトのリポジトリを取得します。レイアウトも管理機能の構
成目的で読み込まれるため、リポジトリが定義されていることの確認が必要です。その時点では、デスクトップ
はロードされていないため、リポジトリは定義されていません。リポジトリからルートアイテムを取得し、その
コールバック関数でフォルダーの内容を取得します。retrieveFolderContentsメソッドにもコールバック関数があ
り、resultSetパラメーターにフォルダーの内容が入力されています。最後に、contentListはこのresultSetで初期
化されます。
例9-12 ContentListLayout.js内のpostCreateのヘルパーメソッド
getContentListGridModules:function(){
var array = []; array.push( DndRowMoveCopy);
array.push( DndFromDesktopAddDoc);
array.push( RowContextMenu);
配列を返す; }、
getContentListModules:function(){
var viewModules = []; viewModules.push( 詳細
を表示);
viewModules.push( ViewMagazine);
var array = [];
array.push({
moduleClass: バー、
上:[[[{
moduleClass: ツールバー
}、{
moduleClasses:viewModules、 "className":
"BarViewModules"}]]、[[{
moduleClass: ブレッドクラム
}]]]}); array.push( DocInfo);
配列を返す; }、
displayRoot:function(){
var repository = ecm.model.desktop.getDefaultRepository(); if(リポジトリ){
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 321
repository.retrieveItem( "/"、
lang。 hitch(this、function(rootItem){
rootItem.retrieveFolderContents(false、
lang。 hitch(this、function(resultSet){
this.contentList.setResultSet(resultSet、rootItem); })); })); }}
次に、ヘルパーメソッドで必要なDojoモジュールを定義する必要があります。これらはコード内で強
調表示されています(例9-13)。の初めに
ContentListLayout.js、 宣言を追加します。
例9-13 ContentListLayout.jsの依存モジュール
define([
「dojo / _base / declare」、「dijit / _TemplatedMix
in」、「dijit / _WidgetsInTemplateMixin」、「dijit /
layout / StackContainer」、「dijit / layout / BorderC
ontainer」、「dijit / layout / ContentPane」、「ecm
/ widget / layout / BaseLayout "、" ecm / model / F
eature "、
「ecm / widget / listView / gridModules / RowContextMenu」、「ecm / widget / listView /
modules / Breadcrumb」、「ecm / widget / listView / modules / Bar」、「ecm / widget /
listView / modules / Toolbar」、「ecm / widget / listView / modules / DocInfo "、" ecm /
widget / listView / gridModules / DndRowMoveCopy "、" ecm / widget / listView / gridMo
dules / DndFromDesktopAddDoc "、" ecm / widget / listView / modules / ViewDetail "、
" ecm / widget / listView / modules / ViewMagazine "、" ecm / widget / listView / ContentL
ist "、" ecm / model / Desktop "、" dojo / _base / lang "、
"dojo / text!./ templates / ContentListLayout.html"]、
function(declare、_TemplatedMixin、_WidgetsInTemplateMixin、StackContainer、BorderContainer
、ContentPane、BaseLayout、Feature、
RowContextMenu、Breadcrumb、Bar、Toolbar、DocInfo、DndRowMoveCopy、DndFromDesktopAd
dDoc、ViewDetail、ViewMagazine、ContentList、Desktop、lang、 テンプレート) {
322 IBM Content Navigatorのカスタマイズと拡張
IBM Content Navigatorの管理ペインでプラグイン構成をロードして保存した場合、次のURLでIBM Navigatorを呼
び出すと、ContentListウィジェットが表示されます。
http:// server:port / navigator?desktop = ContentListDesktop
統合はURL呼び出しを使用して行われるため、まだバインドされていない統合です。したがって、Container S
imulationアプリケーションへの統合は、
iframe src 例9-14による属性。
例9-14ナビゲーターとContentListウィジェットを統合した後のindex.html
<div id = "icnIntegration">
<iframe class = "icnIntegrationFrame"
src = " http:// w2008r2p85:9080 / navigator /?desktop = ContentListDesktop name = "IBM
Content Navigator" seamless = "true"> </ iframe> </ div>
ブラウザでContainer Simulationアプリケーションを呼び出すと、結果は図9-12のようになります。
図9-12 ContentListウィジェットとカスタムレイアウトのコンテナへの統合
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 323
9.7 Content Navigatorの特定のウィジェットの統合
このセクションでは、最も柔軟なアプローチを示します。必要な初期化を最小限に抑えて、必要なIBM Content
Navigatorウィジェットのみを外部化します。
以前のアプローチとの主な違いは、IBM Content Navigatorの通常のスタートページを呼び出さないことです。
これにより、指定されたデスクトップが完全な機能と機能で初期化されます。むしろ、統合に必要なIBM Co
ntent Navigatorの特定の部分のみをセットアップします。
IBM Content Navigatorのアーキテクチャーは柔軟で拡張可能なフレームワークとして構築されているため、そのコンポ
ーネントの多くを使用できます。IBM Content Navigator JavaScriptモデルとIBM Content Navigatorビジュアルウィジェ
ットライブラリは、独自のユーザーインターフェースを作成するためのビルディングブロックを提供します。
このモデルは、クライアント側コンポーネントの中間層サービスへのアクセスを容易にし、ビジュアルウィジェ
ットのデータを保持する共通の場所を1つ持つことで、すべてのウィジェットが同じ日付を保持するのを防ぎます
。一般に、モデルは、複数のビジュアルウィジェットで共有される非ビジュアルビジネスロジックとデータを提
供するクラスで構成されます。
IBM Content Navigatorユーザー・インターフェースは、ビジュアル・ウィジェット上に構築され、レイアウトに配置され、イベントを介して
一緒に配線されます。モデルウィジェットとビジュアルウィジェットは、ビジュアルコンポーネントへのアクションと変更をトリガーするた
めに使用できるイベントをパブリッシュしてリッスンします。
このセクションでは、単一のWebページでIBM Content Navigatorウィジェットを初期化します。このアプローチを使
用すると、非拘束と拘束の両方の統合を実現できます。
非バインド統合の場合、このページをIBM Content Navigatorデプロイメント、またはIBM Content Navigato
rのアプリケーションサーバー内の独自のWebアプリケーションにデプロイできます。いずれの場合も、外部
アプリケーションでこのWebページのURLを呼び出します。外部アプリケーションがWebアプリケーション
の場合、IBM Content NavigatorウィジェットはおそらくiFrame内で実行されます。
このWebページをスタンドアロンアプリケーションとして使用することもできます。このページを実装する
手順は、IBM Content Navigatorウィジェットを使用するカスタムアプリケーションを作成する場合とほぼ同
じです。バインドされた統合の場合、そのような単一のWebページの実装は、開始点にすぎません。実際の
統合では、そのページを外部アプリケーションまたはコンテナーに転送する必要があります。例えば、Micr
osoft SharePointのようなコンテナーの場合、IBM Content Navigatorウィジェットを実行するWebパーツを作
成し、IBM WebSphere Portalサーバーのようなポートレットコンテナーで、IBM Content Navigatorウィジェ
ットを利用するポートレットを作成する必要があります。
324 IBM Content Navigatorのカスタマイズと拡張
以下のタスクを実行して、IBM Content Navigatorウィジェットを使用するアプリケーションをセットアップします。
1. DojoおよびIBM Content Navigatorライブラリーを初期化します
2.ビジュアルウィジェットライブラリから適切なウィジェットを選択します。
3.必要なモデルクラスを選択して初期化する
4.イベント登録を介してウィジェットを一緒に配線します。
5.外部アプリケーションに外部化されたウィジェットを統合する
最後のステップは、2つのタイプの統合で異なります。
バインドされていない統合の場合、外部化されたウィジェットをデプロイして、外部アプリケーションによって呼び出す
必要があります。
バインドされた統合の場合、ここで、外部アプリケーションのコンテナー内に外部化されたウィジェッ
トをセットアップして実行します。
IBM Content Navigatorウィジェットをセットアップできるようにするには、IBM Content Navigatorがどのように初期化さ
れるかを理解することが役立ちます。これが、IBM Content Navigatorの初期化フェーズの最初の調査を支援する理由です
。
次に、手順に従って、IBM Content Navigatorウィジェットの外部化を実装します。サンプルコードは次の
タスクを実行します。
1.デスクトップと設定されたデフォルトのリポジトリにアクセスします。
2.ユーザーが資格情報を入力するログインダイアログを表示します。
3. ContentListウィジェットの特定のフォルダーまたはルートフォルダーを読み込みます。
9.7.1 Content Navigatorの初期化フェーズ
外部化するウィジェットを初期化する方法を決定するには、IBM Content Navigator Webアプリケーションの初期
化フェーズを理解します。概要については、20ページの1.3.2、「通信フロー」を参照してください。その後、こ
こに戻って詳細を確認してください。
ノート:
この初期化プロセスは、リリースごとに同じとは限りません。IBM Content Navigatorウィジェットを初
期化する方法の基本的な方法論または戦略を理解している場合、IBM Content Navigatorの将来のバージ
ョンでは、一部の詳細が多少異なっていても、原則としてプロセスは同じになる同じアプローチをとるこ
とができます。この説明は概要を説明するだけであり、多くの詳細を省略していることに注意してくださ
い。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 325
図9-13に、IBM Content Navigatorの初期化プロセスの概要を示します。
図9-13 IBM Content Navigatorの初期化
図9-13に関する次の情報を考慮してください。
web.xml: このデプロイメント記述子は、 WEB-INF ディレクトリ; すべてのJava Webアプリケーションにはデ
プロイメント記述子があります。< ようこそファイル> タグは開始ページを定義します。 aunch.jsp
launch.jsp:
–
含まれています header.jsp ヘッダー・ファイルは、ロケールなどのアプリケーションのパラメーターを読み取り、C
SSファイルをロードし、Dojoライブラリーをロードして初期化します。
–
ルートを提供します< DIV> タグ。IBMContent NavigatorのDOMツリー全体が構築されます。IBM Con
tent Navigatorは、 デスクトップペイン
ウィジェット:
326 IBM Content Navigatorのカスタマイズと拡張
<div dojoType = " ecm.widget.DesktopPane」 id = "ECMWebUI" style = "width:100%; height:100%"
browserLocale = "<%= htmlLocale%>"> </ div> DesktopPane.js( 1 of 2):IBM Content Navigatorウィジェ
ットを定義します。postCreate():利用可能なデスクトップ構成の特定のデスクトップが読み込まれます
。
Desktop.loadDesktop( this.desktopId、lang.hitch(this、 "desktopLoaded")); Desktop.js: IBM
Content Navigatorのデスクトップのモデルを定義します。
–
loadDesktop()は、IBM Content Navigatorデータベースから中間層サービスを介してデスクトッ
プの構成をロードします。
Request.invokeService( "getDesktop"、null、{...}、function(response){s
elf._ desktopLoaded( 応答、コールバック); }、false、同期);
–
_desktopLoaded()は、デスクトップが読み込まれた後に呼び出されます。これは、IBM Content Navig
atorの多くの主要な側面を初期化するための主な方法です。
•
フィーチャーモデルを初期化する
•
リポジトリモデルを初期化する
•
プラグインモデルを初期化します。
•
-
プラグインCSSファイルを読み込む
-
プラグインDojoモジュールをロードする
-
プラグインスクリプトファイルをロードしてスクリプトを実行する
アクションとメニューモデルの初期化
•
ビューアとビューアマッピングを初期化する
•
構成済みラベルを設定する
•
モバイル機能モデルを初期化する
DesktopPane.js( 2/2):
desktopLoaded()は、デスクトップモデルがロードされ、他のモデルが初期化された後に呼び出されます。こ
れは主にレイアウトをロードして初期化し、デスクトップのウィジェットを_handleLayout()に配置します。
this.layout.setFeatures(Desktop.features、Desktop.defaultFeature); this.domNode.appendChild(this
.layout.domNode); this.layout.startup(); BaseLayout.js( に ecm.widget.layoutパッケージ):
IBM Content Navigatorのレイアウトを実装する各レイアウトには、親クラスとしてBaseLayoutが必要で
す。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 327
特に、BaseLayoutのpostCreate()メソッドは、IBM Content Navigatorを初めて起動したとき、およびセッ
ションが期限切れになったときに呼び出されるLoginDialogを処理します。
NavigatorMainLayout.js に基づいています MainLayout.js( に ecm.widget.layout
パッケージ):
これは、デフォルトのIBM Content Navigatorレイアウトであり、使用可能な機能を調整し、デフォルト(または指定
された)機能で表示されます。前のセクションでは、このデフォルトのレイアウトを、ContentViewウィジェットの
みをレンダリングするカスタムレイアウトプラグインに置き換えました。
IBM Content Navigatorのデフォルトのレイアウトの実装方法の詳細は、この本の範囲外であり、この章の目
的には必要ありません。
IBM Content Navigatorのモデルとウィジェットのセットアップ方法を理解したい場合は、IBM Content Navigato
rが起動フェーズでそれ自体を初期化するときにそれがどのように行われるかを確認すると役立ちます。
9.7.2ステップ1:DojoおよびContent Navigatorライブラリーを初期化する
Dojoウィジェットを選択して統合する前に、HTMLページをセットアップし、初期化を行ってDojoを有効にし、
そのページでIBM Content Navigatorウィジェットを使用できるようにする必要があります。
注意: 外部アプリケーションへのバインドされた統合の場合、おそらく、外部アプリケーションの既存のHT
MLページのどこかでこれを初期化する必要があります。
ここでは、バインドされていない統合に直接使用できる別のHTMLページから始めます。
私たちはページを呼びます External_ICN.html、 次のセクションで実装します。前のセクション(325ページの
9.9.7、「Content Navigatorの初期化フェーズ」)は、ページの設定時に「コンパス」として機能します。
例9-15は最初のステップを示しています。
例9-15 External_ICN.htmlの実装:ステップ1
<!DOCTYPE HTML>
<html lang = "en">
<ヘッド>
<meta charset = "utf-8"> <title> ICN統合</ title>
328 IBM Content Navigatorのカスタマイズと拡張
<link rel = "stylesheet"
href = "/ navigator / ecm / widget / resources / dojo.css.jgz" media = "screen">
<link rel = "stylesheet"
href = "/ navigator / ecm / widget / resources / ecm.css.jgz" media = "screen">
<link rel = "stylesheet"
href = "/ navigator / ecm / themes / oneui / dojo.css.jgz" media = "screen">
<link rel = "stylesheet"
href = "/ navigator / ecm / themes / oneui / oneui.css.jgz" media = "screen">
<スクリプト>
dojoConfig = {
async:true、パッケ
ージ:
[{名前: "dojo"、location: "/ navigator / dojo"}、
{名前: "ecm"、場所: "/ navigator / ecm"}]、
isDebug:true、parseOnLoad:
false、}; </ script>
<script src = "/ navigator / dojo / dojo.js.jgz"> </ script> <script src = "/ navigator /
ecm / ecm.js.jgz"> </ script> </ head>
<body class = "ecm oneui">
<div id = "icnWidget">
ここにICNウィジェットがあります。</ div>
<スクリプト>
require(["dojo / parser"、 "dojo / domReady!"]、function(pars
er){
parser.parse(); });
</ script> </ body> </ html>
に関する次の情報を考慮してください External_ICN.html ファイル:
<!DOCTYPE HTML>: HTML5ページを定義します。HTMLページのヘッダーは
、次の項目を定義します。
–
DojoおよびIBM Content Navigatorウィジェットで使用されるカスケードスタイルシート(CSS)への4
つの参照
–
dojoConfig:
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 329
Dojoフレームワークの構成オブジェクトには、以下の項目が含まれています。
•
非同期: 非同期モジュール定義(AMD)を使用する新しいローダーを使用してDojoアプリケーショ
ンを開発するため、trueに設定されています。
•
パッケージ: 必要なパッケージの場所を定義します。
•
isDebug:デバッグモードを設定します。
•
parseOnLoad: フルコントロールが必要で、Dojo要素を明示的に解析するため、falseに設
定されています。
–
DojoおよびIBM Content Navigator JavaScriptライブラリーのソース。
<body class = "ecm oneui"> IBM Content NavigatorウィジェットのCSSスタイルを定義します。
HTMLページの本文は1つを定義します DIV 外部化するIBM Content Navigatorウィジェットを保持するタグ
。最後の< スクリプト> elementがこのページのコアになります。require()関数は、JavaScriptコードのク
ロージャーを作成し、そのコードの実行に必要なDojoモジュールを提供します。2つのモジュールを宣言し
ます。
– パーサー モジュールは関数内で呼び出されます
– domReady! モジュールは、DOM構造全体が作成されたときにのみコードが呼び出されることを保証する
特別なメカニズムです。感嘆符は、このモジュールが特別であることを示します。また、関数に対応す
るパラメーターも必要ありません。の domReady! パーサーがDOM構造を解析し、非同期モードである
ため、モジュールは重要です。
関数では、ページに必要なモデルとウィジェットを初期化する実際のコードを提供します。ここでは、Dojo
パーサーのみをセットアップします。これにより、後で追加する宣言型Dojoウィジェットが解析されます。
現在、パーサーは何もしません。
ページのデプロイについては、344ページの9.8、「外部化されたウィジェットの統合(ステップ5)」でのみ説
明されていますが、各ステップの後で現在の状態をテストし、できるだけ早くエラーを検出することをお勧めし
ます。
つまり、ページをテストする最も簡単な方法は、ページをIBM Content Navigatorデプロイメントにコピーし
て、Webブラウザーでページを直接呼び出すことです。
IBM WebSphereをアプリケーションサーバーとして使用すると、場所は次の場所のようになります。
。。。WebSphere
/ AppServer / profiles / <profileName> / installedApps / <cellName> / ContentNavigator.ear /
navigator.war / External_ICN.html
330 IBM Content Navigatorのカスタマイズと拡張
次のURLからブラウザを起動できます。
http:// <サーバー名>:<ポート> /navigator/External_ICN.html
ページには、次のマーカーテキストのみが表示されます。
ここにICNウィジェットがあります。
ページのデプロイの詳細については、346ページの9.8.1、「外部化されたウィジェットのデプロイ
(非バインド統合)」を参照してください。
9.7.3ステップ2:適切なビジュアルウィジェットを選択する
次のステップでは、使用可能なウィジェットのカタログを参照し、ビジュアルウィジェットライブラリ
から適切な候補を選択して、要件を満たします。
ウィジェットは、機能に応じて、パッケージごとにグループ化されます。たとえば、リポジトリのツリービュー
を表示するビジュアルコンポーネントをアプリケーションに追加する場合は、 フォルダツリー ドキュメントおよ
びフォルダウィジェットグループのベースウィジェットパッケージから。
重要なIBM Content Navigatorウィジェットの概要とJavaScriptモデルライブラリの概要は、47ページの1.4.4、
「Content Navigator JavaScript API」にあります。使用可能なビジュアルウィジェットの完全なリストは、IB
M Knowledge Centerにあります。
http://publib.boulder.ibm.com/infocenter/cmgmt/v8r4m0/topic/com.ibm.dev elopingeuc.doc / eucrf002.htm
サンプルでは、​​もう一度選択します ContentList ウィジェット。このパッケージは172ページの5.2、「ContentListウィ
ジェットでの結果の表示」で導入され、以下から知られています。
327ページの9.7.2、「ステップ1:DojoおよびContent Navigatorライブラリを初期化する」。これにより、さまざ
まなアプローチがより比較可能になります。そして、別のウィジェットを導入することなく、それを行うことに
集中できます。ただし、別のウィジェットを選択した場合の手順での一般的な考慮事項は同様です。最後に、小
さな拡張を行い、ウィジェットを構成可能にします。URLパラメーターを使用して、ContentListウィジェットで
開くフォルダーを渡すことができます。
例9-16は、 External_ICN.html ContentListウィジェットを追加した後。
例9-16 ContentListウィジェットをExternal_ICN.htmlに追加する:ステップ2
<body class = "ecm oneui">
<div id = "contentList"
data-dojo-type = "ecm / widget / listView / ContentList"
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 331
data-dojo-props = "plugins: '{dnd:true}'、isExternalDND: 'true'、isResultSetS orted: 'true'、copyOn
ly: 'true'" role = "region" aria-label = "コンテンツリスト">
</ div>
<スクリプト>
require(["dojo / parser"、 " dijit /レジストリ "、
"ecm /ウィジェット/リストビュー/コンテンツリスト"、 " dojo / domReady! "]、function(p
arser、 レジストリ、ContentList){
parser.parse();
var contentList = registry.byId( "contentList"); }); </ script> </ body>
トップレベルを入れ替えました DIV HTML5のdata-dojo-type属性で指定されるContentListウィジェットを保持する
タグ。この宣言的アプローチを使用してDojoウィジェットを指定するため、Dojoパーサーは次の作業を行う必要
があります。特別なDojo属性で装飾されたDOMおよび解析ノードを読み取る必要があります。この例では、Con
tentListウィジェットがインスタンス化されます。
注意: require()の匿名コールバック関数でContentListを直接参照することはありませんが、それでもCont
entListウィジェット宣言のdata-dojo-type属性で宣言されています。ウィジェットを宣言しなくてもコードは
機能する可能性がありますが、Dojoパーサーはモジュールを自動的に要求できるため、ベストプラクティスは
、パーサーが必要なすべてのモジュールを事前にロードしていることを明示的に確認することです。
すべてのウィジェットが登録され、registry.byId()メソッドを使用して参照をフェッチできます。 この手法
を使用して、ContentListウィジェットのインスタンス化への参照を取得します。これは、後でコンテンツリ
ストモジュールとリストに表示する項目を設定するために必要になります。
コンテンツリストウィジェットを調整するために、いくつかのプロパティを指定できます。
plugins =” {dnd:true}”
このプロパティは、コンテンツリスト内で「ドラッグアンドドロップ」(DND)をサポートすることを示します。
たとえば、行を選択し、それらをフォルダ行にドラッグできるようにしたいとします。
注意: リポジトリー・タイプがOD(IBM Content Manager OnDemandリポジトリー)の場合、このパラメーターは
無視されます。
isExternalDND
332 IBM Content Navigatorのカスタマイズと拡張
このプロパティは、IBM Content Navigatorデスクトップからコンテンツリストへのドラッグをサポートします。次の
条件がすべて当てはまる場合、[追加されたドキュメント]ダイアログボックスが開きます。
–
このプロパティ値はtrueに設定されています。
–
デスクトップからフォルダ行にファイルをドラッグします。
–
フォルダにドキュメントを追加する権限があります。isResultSetSorted
プロパティ値がtrueに設定されている場合、サーバーはソートされた結果を返します。copyOnly
このプロパティ値はドラッグアンドドロップに使用され、次の状況でのみ使用されます。
plugins =” {dnd:true}”
言葉 写す このコンテキスト(copyOnly)では、アイテムの新しいコピーを作成することを意味しません。むしろ、別
の参照を作成することを意味します。プロパティには2つの値があります。
–
False(デフォルト):コンテンツリストフォルダーにアイテムをドラッグすると、デフォルトのドロップアクションは行
をフォルダーに移動することです。
Ctrlキー: ユーザーは、「ドラッグアンドドロップ」操作中にいつでもCtrlを押すことができます。ド
ロップ中にCtrlキーが押された場合、移動は行われません。代わりに、新しいリンクが作成されます。
–
True:フォルダ行にドロップするためのデフォルトのアクションは、このフォルダへの新しいリンクを作成することです。
注意: 値がtrueに設定されている場合、ユーザーは行を移動できません。
の呼び出し External_ICN.html ブラウザのファイルに空のページが表示されるようになりました。これは、適切なモデ
ルがresultSetとして設定されている場合にのみ、ContentListがコンテンツリストをレンダリングするためです。それ
でも、エラーが発生した場合はすぐに修正できるため、これを行うことをお勧めします。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 333
ContentListウィジェットをレンダリングして明確に定義するために、必要なものに小さな「ダミー」実装を提供
します ecm /モデル/ ResultSet 例9-17に示すモデル。
例9-17 External_ICN.htmlのResultSetモデルのダミー実装
<スクリプト>
require(["dojo / parser"、 "dijit / registry"、
"ecm / widget / listView / ContentList"、
"ecm / model / ContentItem"、 "ecm / model / ResultSet"、 " dojo / domReady! "]、function(par
ser、registry、ContentList、 ContentItem、ResultSet){
parser.parse();
var contentList = registry.byId( "contentList");
var itemProperties = {
属性:{"{NAME}": "DummyFolder"}、id: "1"、};
var contentItem = new ContentItem(itemProperties);
var resultSetProps = {
アイテム:[contentItem]、構造:
{
セル:[[{フィールド: '{NAME}'、名前: '名前'、幅: '20em'}]]、}、};
var dummyResultSet = new ResultSet(resultSetProps);
contentList.setResultSet(dummyResultSet); }); </ script>
まず、ContentListウィジェットに表示する模擬ContentItemを作成します。必要なプロパティIDと属性
のみを設定します。
ResultSetモデルは、モックアイテムで初期化されるアイテムの配列を取得します。構造は、列のレンダリング方
法に関する情報を提供します。構造オブジェクトは、それが理解できるように構造化されている必要があります
。
gridx.Grid 結果リストを表示するためにContentListウィジェットで使用されるdijit。
最後に、作成されたダミーのResultSetでcontentListを初期化します。次に、ブラウザーでページを再度呼び出し
ます。結果は、335ページの図9-14のようになります。
334 IBM Content Navigatorのカスタマイズと拡張
図9-14ダミーのResultSetモデルを含むContentListウィジェット
ContentListウィジェットはDojoを使用するため gridx.Grid ウィジェット、それは同様のモジュール式の方法で構造
化されています。現時点では、標準モジュールのみがContentListにロードされます。IBM Content Navigatorには、
サンプルに追加して完全に機能させるための、さらに多くのモジュールが用意されています。例9-18を参照してく
ださい。
例9-18 External_ICN.htmlでのContentListウィジェットのモジュールの定義
require(["dojo / parser"、 "dijit / registry"、
"ecm / widget / listView / ContentList"、 "ecm / model / ContentItem"、 "e
cm / model / ResultSet"、
「ecm / widget / listView / modules / ViewDetail」、「ecm / widget / listView / modules / ViewMagazine
」、「ecm / widget / listView / modules / ViewFilmStrip」、「ecm / widget / listView / modules / DocInfo
」、「ecm / widget / listView / modules / Bar "、" ecm / widget / listView / modules / Toolbar "、" ecm / w
idget / listView / modules / Breadcrumb "、" ecm / widget / listView / gridModules / DndRowMoveCopy "、
" ecm / widget / listView / gridModules / DndFromDesktopAddDoc "、" ecm / widget / listView / gridModu
les / RowContextMenu "、" dojo / domReady! "]、function(parser、registry、ContentList、ContentItem、Re
sultSet、
ViewDetail、ViewMagazine、ViewFilmStrip、DocInfo、Bar、Toolbar、Breadcrumb、DndRowMoveC
opy、DndFromDesktopAddDoc、RowContextMenu){
parser.parse(); 関数 getContentListModules(){
var viewModules = []; viewModules.push(ViewDetail);
viewModules.push(ViewMagazine);
if(ecm.model.desktop.showViewFilmstrip){
viewModules.push(ViewFilmStrip);
} var array = [];
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 335
array.push(DocInfo);
array.push({
moduleClass:バー、
トップ:[[[{moduleClass:Toolbar}、
{moduleClasses:viewModules、
"className": "BarViewModules"}]]、
[[{moduleClass:Breadcrumb}
]]]}); 配列を返す; }; 関数 getContentListGridModules(){
var array = []; array.push(DndRowMoveCopy); arr
ay.push(DndFromDesktopAddDoc); array.push(R
owContextMenu); 配列を返す; };
var contentList = registry.byId( "contentList");
contentList.setContentListModules(getContentListModules());
contentList.setGridExtensionModules(getContentListGridModules());
var itemProperties = {
属性:{"{NAME}": "DummyFolder"}、id: "1"、};
。。。
あなたが定義したが itemProperties 前の例の構造は、コードスニペットを配置する場所を見つけるのに役立つよ
うに、ここに示されています。
336 IBM Content Navigatorのカスタマイズと拡張
最初に必要なDojoのコールバック関数で、必要なモジュールの配列と対応するパラメーターを確認してくださ
い。必要なすべてのモジュールをコードで宣言する必要があります。
注意: 必要なモジュールの順序とコールバック関数の対応するパラメーターに注意してください。モジュー
ルとパラメーターの位置は非常に重要であり、一致する必要があります。たとえば、「 dijit /レジストリ」 配列
の位置2にあり、 レジストリ パラメータは、コールバック関数の位置2にもあります。
ページを再度呼び出すと、図9-15のような結果になります。右上にモジュールのアイコンが表示されます。結果
リストのダミー項目には、すべてのビューに必要なすべての属性がないため、すぐにモードを切り替えないでく
ださい。まず、実際のResultSetモデルを提供します。
図9-15ダミーのResultSetモデルとさまざまなモジュールを含むContentListウィジェット
9.7.4ステップ3:必要なモデルクラスを選択して初期化する
このステップの主なタスクは、ContentListウィジェットの実際のデータを取得することです。このウィジェットは、実際のデータが
ResultSetモデルとして構造化されることを期待しています。フォルダのコンテンツは、このようなResultSetモデルとして取得でき
ます。
注意: 外部アプリケーションでビジュアルコンポーネントを使用するには、使用するウィジェットに必要なI
BM Content Navigator JavaScriptモデルコンポーネントを準備する必要があります。JavaScriptモデリングラ
イブラリを48ページの図1-16に示します。
リポジトリー・モデルは、構成済みのIBM Content Navigatorリポジトリーを表し、リポジトリー・オブジェクト
にアクセスしてアクションを実行する機能を提供します。
フォルダーとそのコンテンツを取得してContentListウィジェットに表示するには、適切な ecm.model.Repository
モデル。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 337
デスクトップモデルは、モデルの他のすべてのクラスを包含し、このデスクトップインスタンスに対して構成
されているリポジトリ、機能、アクション、およびビューアを指定します。そのため、最初に初期化します ec
m.model.Desktop、 これにより、リポジトリモデルを取得できます。例9-19を参照してください。
例9-19 External_ICN.htmlで実際のResultSetを取得する:ステップ3
require([...、 "ecm / widget / dialog / LoginDialog"、 "dojo / domReady!"]、
function(...、LoginDialog){
。。。
var contentList = registry.byId( "contentList");
contentList.setContentListModules(getContentListModules());
contentList.setGridExtensionModules(getContentListGridModules());
ecm.model.desktop。 loadDesktop( null、function(){
var repository = ecm.model.desktop.getDefaultRepository(); var retrieveFolder =
function(){
repository.retrieveItem( "/"、function(folder){
folder.retrieveFolderContents(false、function(resultSet){
contentList.setResultSet(resultSet、folder); }); });
} if(!repository.connected){
var initialLoginDialog = LoginDialog.getLoginDialog(); initialLoginDialog.connectToRepository
(repository、retrieveFolder);
} そうしないと {
retrieveFolder(); }}、false
); }); </ script>
例について次の情報を検討してください。
loadDesktop(< デスクトップID>、...)
<desktop id>をnullに設定すると、デフォルトのデスクトップがロードされます。別のデスクトップを使用
する場合は、nullを選択したデスクトップIDに置き換えます。匿名関数:これは、デスクトップがロード
されたときに実行されるloadDesktopのコールバック関数です。
–
デフォルトのリポジトリを取得する
–
retrieveFolder
この関数定義は、表示するフォルダーのコンテンツを取得します。具体的には、リポジトリからフ
ォルダを取得し、
338 IBM Content Navigatorのカスタマイズと拡張
コールバック関数からのフォルダーの内容。現在、後で構成可能にするルートフォルダーを指定します
。retrieveFolderContents関数には、resultSetパラメーターにフォルダーの内容を含むコールバック関数
があります。resultSetパラメータは ecm / model / ResultSet。 最後に、contentListはこのresultSetで初期
化されます。
–
if(!repository.connected)
リポジトリに接続していない場合( 接続された リポジトリがロードされ、ユーザーが認証されることを
意味します)、 LoginDialog、 これを最初に宣言します 必要とする ステートメント。
–
connectToRepository
このメソッドは、シングルサインオン(SSO)が可能な場合、リポジトリへの直接ログオンを実行しよ
うとします。それ以外の場合は、ログインウィンドウが開きます(この場合、LoginDialogのshowメソッ
ドが暗黙的に呼び出されます)。コールバック関数には、リポジトリが接続された後に呼び出されるre
trieveFolder関数を提供します。
- そうしないと { retrieveFolder()...
接続されている場合は、フォルダーを直接取得できます。
これで、ページをもう一度呼び出すと、ContentListウィジェットが機能します。図9-16を参照してください。
図9-16ルートフォルダーを示すContentListウィジェット
デスクトップを読み込んでデフォルトのリポジトリにログインすると、ルートフォルダーが読み込まれ、そのコンテ
ンツがコンテンツリストウィジェットに表示されます。より深いレベルのフォルダーを参照するオプションとして、
コンテンツリストウィジェットにはブレッドクラムウィジェットが含まれています。このウィジェットは、フォルダ
ー構造の実際の深さを示し、パス上の任意のフォルダーに戻る機能を提供します。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 339
1つの小さなアイテムがまだありません。ドキュメントを開いたりプレビューしようとしたりすると表示されます。つまり、ビュー
アオブジェクトがnullであるというエラーが発生します。
バックグラウンド: IBM Content Navigatorは、ビューアー用の遅延ロードパターンを実装しています。実装
は、従来のDojoモードで行われました。しかし、このページでは、 async = true Dojo構成オブジェクトで、新
しいAMDローダーを使用するようにフレームワークに指示するため、遅延ロードを機能させるために、ビュ
ーアーモジュールを明示的に指定します。
例9-20に示す宣言を追加する必要があります。
例9-20 Viewerモジュール宣言の追加
require(["dojo / parser"、 "dijit / registry"、
"ecm / widget / listView / ContentList"、 "ecm / model / ContentItem"、 "ecm / model / R
esultSet"、 "ecm / widget / listView / modules / ViewDetail"、 "ecm / widget / listView / m
odules / ViewMagazine"、 「ecm / widget / listView / modules / ViewFilmStrip」、「ecm
/ widget / listView / modules / DocInfo」、「ecm / widget / listView / modules / Bar」、
「ecm / widget / listView / modules / Toolbar」、「ecm / widget / listView / modules / B
readcrumb "、" ecm / widget / listView / gridModules / DndRowMoveCopy "、" ecm / wid
get / listView / gridModules / DndFromDesktopAddDoc "、" ecm / widget / listView / grid
Modules / RowContextMenu "、" ecm / widget / dialog / LoginDialog "、
"ecm / widget / viewer / FilenetViewer"、 "ecm / widget / viewer / BrowserViewer"、 "ecm / wid
get / dialog / ContentViewerWindow"、 " dojo / domReady! "]、function(parser、registry、Conten
tList、ContentItem、ResultSet、ViewDetail、ViewMagazine、ViewFilmStrip、DocInfo、Bar、Toolbar、
Breadcrumb、DndRowMoveCopy、DndFromDesktopAddDoc、RowContextMenu、LoginDialog、 File
netViewer、BrowserViewer、ContentViewerWindow){
これで、提供されたビューアでドキュメントを表示またはプレビューできます。別のビューアを使用する場合は
、同じ方法で追加します。
最後に、最初にContentListウィジェットに表示されるフォルダーを、URLパラメーターを介して構成可能にしま
す。
335ページの例9-21は、フォルダーのパスをから変更するための変更後のretrieveFolder関数の定義を示してい
ます。 道 URLパラメータ。
340 IBM Content Navigatorのカスタマイズと拡張
例9-21設定可能なフォルダを使用したExternal_ICN.htmlの実装
必要とする([...、" dojo / io-query "、" dojo / domReady! "]、
関数(...、 ioQuery){
。。。
var retrieveFolder = function(){
var path = "/";
if(window.location.search!== ''){
var urlparams =
ioQuery。 queryToObject(window.location.search.substring(1)); if(urlparams.path)
パス= urlparams.path;
} repository.retrieveItem( 道、 function(folder){
folder.retrieveFolderContents(false、function(resultSet){
contentList.setResultSet(resultSet、folder); }); }); }
例について次の情報を検討してください。
追加 " dojo / io-query」 そして ioQuery へ 必要とする 署名。デフォルトのパスは「/」で、ルートフォルダー
を指定します。の window.location.search 疑問符で始まるURLパラメータを提供します。
たとえば、/でフォルダのコンテンツを取得するには Customers / L / L_Customer
パスでは、次の情報を指定します。
server:port / navigator / External_ICN.html?path = / Customers / L / L_Customer
どこ window.location.search に設定されますか? path = / Customers / L / L_Customer
の ioQuery.queryToObject 検索文字列をJavaScriptオブジェクトに変換します。に if(urlparams.path)、 パ
スパラメータが設定されているかどうかを確認し、それを retrieveItem 関数。
これで、ブラウザーで次のURLを使用すると、指定したフォルダーの内容を確認できます。
http:// server:port / navigator / External_ICN.html?path = / CustomerDossiers / J ohn%20Smith
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 341
この場合、パスは、117ページの第4章「基本的な拡張ポイントを使用したプラグインの開発」で作成する一式
文書を指します。図9-17を参照してください。
図9-17 URLパラメータによる特定のフォルダのコンテンツの表示
9.7.5ステップ4:イベント登録を介してウィジェットをワイヤリングする
モデルクラスのロードと初期化に加えて、ウィジェットはイベント登録を通じて相互に接続する必要があります
。サンプルでは、​​ほとんどの配線はContentListウィジェット自体の内部で行われます。したがって、Breadcrum
bウィジェットなどのすべてのContentListモジュールは、フォルダーを開くなどのイベントに反応できるように
すでに配線されています。
サンプルを改善する1つの側面は、セッションが期限切れになった場合にハンドラールーチンを追加することです。例9-22は、ワ
イヤリングするコードスニペットを示しています。 onSessionExpired
イベント:セッションが期限切れになると、IBM Content NavigatorはデスクトップモデルのonSessionExpiredメ
ソッドを呼び出します。インナー付き dojo.connect 呼び出されるLoginDialogのsessionExpiredHandlerメソッドを
登録すると、 LoginDialog ユーザーに再度資格情報を提供するように要求します。
例9-22期限切れのセッションのハンドラーの接続
if(!repository.connected){
var initialLoginDialog = LoginDialog.getLoginDialog(); initialLoginDialog.connectToRepository(re
pository、retrieveFolder); dojo.connect(initialLoginDialog、 "onConnected"、function(){
dojo.connect(ecm.model.desktop、 "onSessionExpired"、
initialLoginDialog、 "sessionExpiredHandler");
}); }
そうしないと {
retrieveFolder(リポジトリ); }
342 IBM Content Navigatorのカスタマイズと拡張
期限切れのセッションでこのページを呼び出すと、2つのログインウィンドウが表示される可能性があるため、
このハンドラをすぐに登録することは望ましくありません。そのため、外側のdojo.connectが必要です(最初の
LoginDialogがユーザーをリポジトリに正常に認証した後、onConnectedメソッドを呼び出します)。外側のdoj
o.connectを使用して、このイベントに、内側のdojo.connectを呼び出すコールバック関数を登録します。
それをテストするには、ページを呼び出し、ブラウザの現在のCookieを削除します。まだ開いていないフォルダ
ーを次に開こうとすると、LoginDialogが開きます。図9-18を参照してください。
図9-18期限切れのセッションとログインダイアログ
もう1つの便利なアドオンは、エラーメッセージの表示です。これは、中間層のサービス呼び出しが失敗した場合に特に
役立ちます。例えば、IBM Content Navigatorアプリケーションで構成されていないデスクトップIDを指定すると、意味
のあるエラーメッセージが表示されます。そのためには、エラーメッセージを表示するためにErrorDialogをワイヤリング
する必要があります。例9-23を参照してください。
例9-23 ErrorDialogの追加
必要とする([...、" ecm / widget / dialog / ErrorDialog "、" dojo / domReady! "]、
function(...、ErrorDialog){
parser.parse();
var errorDialog = new ErrorDialog();
dojo.connect(ecm.model.desktop、 "onMessageAdded"、errorDialog、 "messageAddedHan
dler");
。。。
この行に存在しないデスクトップを一時的に指定すると、これをテストできます。
ecm.model.desktop.loadDesktop( " no-desk-id "、 関数() {..}
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 343
ページをリロードすると、図9-19に示すようなエラーダイアログが表示されます。
図9-19エラーダイアログ
9.8外部化されたウィジェットの統合(ステップ5)
これは、統合の最終ステップであり、外部アプリケーションによって異なります。2つの主要なタイプの統合につ
いて説明する前に、次のリストでいくつかの一般的な側面を要約します。
統合のレベル:
–
非結合統合:
•
IBM Content Navigatorの準備済みURLを直接呼び出します。これにより、IBM Content Navigat
orパーツがレンダリングされる新しいウィンドウが開きます。
•
準備されたIBM Content NavigatorのURLをiFrame内で呼び出します。これにより、IBM Content Navigato
rがページの一部としてレンダリングされます。
–
バインドされた統合:
ポートレットコンテナーなどの単純なWebコンテナーとは異なるランタイム環境のコンテナーがあり、
バインドされた統合を行うには、IBM Content Navigatorの外部化されたウィジェットのURLを呼び出す
だけではありません。IBM Content Navigatorを本格的なパーツとしてその環境に統合するには、ターゲ
ット環境の特定の成果物(例えば、ポートレットやWebパーツ)を作成する必要があります。認証:
いずれの場合も、統合されたIBM Content Navigatorと対話するユーザーは認証される必要があります。した
がって、準備されたURLのみをそのまま呼び出す場合、ログインウィンドウが開き、ユーザーは資格情報を
提供する必要があります。通常の場合、ユーザーは既に外部システムに対して認証されているため、このユ
ーザーを別のログインウィンドウで煩わせたくない場合があります。あれは
344 IBM Content Navigatorのカスタマイズと拡張
シングルサインオン(SSO)ソリューションを検討する理由。IBM Content NavigatorはSSOに対応し
ています。統合については、同じ手順に従うことができます。詳細については、次の場所にアクセスし
てください。
http://pic.dhe.ibm.com/infocenter/cmgmt/v8r4m0/index.jsp?topic=%2Fco
m.ibm.installingeuc.doc%2Feucpl012.htm
ルックアンドフィール:
IBM Content Navigatorには、IBM Content Navigatorのレンダリング方法を定義する独自のカスケードスタイル
シート(CSS)が含まれています。統合されたIBM Content Navigatorの「ルックアンドフィール」を調整した
い場合は、次のようにします。
–
IBM Content Navigatorの管理機能を使用すると、アイコンマッピングパーツのアイコンなどのいくつ
かの要素や、デスクトップ構成の[外観]タブのロゴ、バナー、アプリケーション名などの一般的な要素
を適応させることができます。61ページの第2章「デスクトップの外観をカスタマイズする」を参照し
てください。
–
適切なカスケードスタイルシート(CSS)を採用することで、ほぼすべてのスキンを変更したり、デフ
ォルト設定の一部をオーバーライドする独自のCSSを提供したりできます。ただし、Content Navigatorの
ルールはAPIとして公開されておらず、将来のリリースで変更される可能性があることに注意してくださ
い。セキュリティ:
外部アプリケーションとIBM Content Navigatorが異なるサーバーで実行されている場合、同一生成元ポ
リシーの課題に直面します。次の例のように、この問題に対処するためのいくつかの戦略があります。
–
HTTPサーバーでリバースプロキシを構成すると、クロスサイトスクリプティングの問題を回避するために
、同じドメイン(IP)を介して外部化されたウィジェットとIBM Content Navigatorにアクセスできます。
この手法については、347ページの9.8.3、「HTTPサーバーでのリバースプロキシの定義」で説明していま
す。
- をセットする document.domain プロパティは2つのウィンドウで同じ値に設定されているため、相互に対
話できます。これは、2つの異なるサーバーが同じサブドメインで実行されている場合に機能します。
document.domain 両方のサーバーが共有する同じ基本ドメインのプロパティ。
– window.postMessage メソッドは、クロスオリジン通信を安全に有効にするメカニズムを提供します。次
のWebページを参照してください。
https://developer.mozilla.org/en-US/docs/Web/API/window.postMessa ge?redirectlocale =
en-US&redirectslug = DOM%2Fwindow.postMessage
–
たとえば、両方のサーバーのドメインが非常に信頼できるゾーンにある場合、たとえば両方が企業ドメイン
である場合、Internet Explorerは同じ生成元の制限をバイパスします。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 345
9.8.1外部化されたウィジェットのデプロイ(非バインド統合)
図9-20は、バインドされていない統合のシナリオを示しています。外部アプリケーション(別のWebアプリケー
ション、ファットクライアント、Microsoft SharePointのようなコンテナーなど)が何であれ、アンバインドさ
れた統合は、準備されたWebページのURL呼び出しになります(ここでは External_ICN.html)、 IBM Content N
avigatorウィジェットを外部化します。
図9-20 External_ICN.htmlのバインドされていない統合
サンプルページでは、デプロイおよび構成されたIBM Content NavigatorインスタンスからJavaScriptクラスを読み
込みます。同じ生成元のポリシーに違反せずにブラウザーで実行できるようにするには、ほとんどの最新のブラウ
ザーに、同じアプリケーションサーバーまたはHTTPサーバーに展開する必要のあるサンプルがあります。したが
って、それを war / WebContent これを機能させるためのIBM Content Navigatorのディレクトリー。または、別のW
ebプロジェクトを使用して独自のWARファイルを生成し、ナビゲーターが実行されているのと同じアプリケーショ
ンサーバーにデプロイすることもできます。
このタイプの統合の実装例を次のセクションに示します。
356ページの9.9、「スタンドアロンウィジェットのMicrosoft SharePointページへの統合」
391ページの9.10、 『スタンドアロン・ウィジェットをWebSphere Portalのポートレットとして統合する』
346 IBM Content Navigatorのカスタマイズと拡張
9.8.2コンテナでの外部ウィジェットの設定(バインドされた統合)
図9-21は、バインドされた統合の一般的なシナリオを示しています。IBM Content Navigatorウィジェットのコー
ドは、外部アプリケーション内で直接実行されます。
図9-21 IBM Content Navigatorウィジェットのバインドされた統合
<< 統合>> ボックスは、ターゲットコンテナで実行するために実装する必要があるアーティファクトを表します。
このコンテキストでは、IBM Content Navigatorウィジェットを、 External_ICN.html ウェブページ。
IBM Content Navigatorのコードは、IBM Content NavigatorのWebサーバーに対してリモートである可能性が高
い外部アプリケーションで実行されるため、同一生成元ポリシーなどのセキュリティ問題に対処する必要があり
ます。次のセクションでは、1つの一般的なソリューションについて説明し、実装します。
9.8.3 HTTPサーバーでのリバースプロキシの定義
新しいカスタムWebアプリケーションは、クロスサイトスクリプティングに関するブラウザーの問題を回避するために、IBM Co
ntent Navigatorと同じアプリケーションサーバーで実行する必要があります。ただし、これは、外部アプリケーションがIBM Con
tent NavigatorのWebサーバーとは異なるサーバーで実行されている場合、バインドされた統合では実現できません。
強力な手法の1つは、図9-22に示すように、プロキシ定義を逆にすることにより、外部化されたContent Navigat
orウィジェットをローカル配置として扱うことです。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 347
図9-22リバースプロキシ定義を使用したバインドされた統合
外部化されたアプリケーションのサーバーに、Apache HTTPサーバーなどの追加のWebサーバーをインストール
して構成する必要があります。IBM Content Navigatorのリモートインストールをローカルインストールとして表
示するには、追加のHTTPサーバーでリバースプロキシを定義する必要があります。
リバースプロキシは、Webサーバー構成で定義され、コンテキストとターゲットURLを含みます。要求が指定さ
れたコンテキストでHTTPサーバーに到達すると、リバースプロキシは、要求をルーティングする必要があるター
ゲットURLを確認し、クライアントに応答を送信します。クライアントの場合、応答は要求と同じ名前空間(コ
ンテキスト)に表示されます。これは、呼び出されたWebサイトまたはアプリケーションの元の場所から独立し
ています。
本番環境では、外部アプリケーションは通常、専用サーバーで実行されます。追加のHTTPサーバー構成で定義さ
れたリバースプロキシは、統合されたIBM Content NavigatorウィジェットからのリクエストをリモートのIBM C
ontent Navigatorデプロイメントにルーティングし、IBM Content Navigatorアプリケーションと外部化されたウィ
ジェットが同じサーバー環境で実行されていることをシミュレートします。
外部化されたIBM Content Navigatorウィジェットは、次の例のように、同じコンテキストからすべてのリソ
ースをロードします。
<script src = "/ ナビゲーター/ dojo / dojo.js.jgz "....>
したがって、リバースプロキシは/ ナビゲーター デプロイされたIBM Content Navigatorアプリケーションのターゲッ
トURLへのコンテキスト。
348 IBM Content Navigatorのカスタマイズと拡張
リバースプロキシを定義するには、HTTPサーバーの構成を次のように変更する必要があります。
1.を開きます httpd.conf の下のHTTPサーバーディレクトリにあるファイル
<HTTP_Server_InstallPath> /conf/httpd.conf ロケーション。
2.次の行がコメント化されている場合は、コメントを外してアクティブにします。
LoadModule proxy_module modules / mod_proxy.so LoadModule proxy_http_module
modules / mod_proxy_http.so
3.次の行を httpd.conf ファイルと置換< server_name> と
IBM Content Navigatorサーバーのホスト名(例えば、
contentnavigator.com) 必要に応じて、URLにポート番号を含めます。
ProxyRequests Off <Proxy
*>注文拒否、すべてからの
許可</ Proxy>
ProxyPass / navigator http:// <server_name> / navigator ProxyPassReverse / navigator
http:// <server_name> / navigator
4. HTTPサーバーを再始動し、以下のアドレスを使用してIBM Content Navigatorスタートページにアクセスして
みます。交換< ポート> サーバーのポート番号(通常は80)に置き換え、< server_name> HTTPサーバーのホ
スト名。
http:// <server_name>:<port> / navigator
IBM Content Navigatorに正常に到達できる場合、HTTPサーバーのリバースプロキシはローカルURL(外部
アプリケーションに対してローカル)をリモートIBM Content Navigatorにバイパスしています。
厳密な同一生成元ポリシーは、同じ生成元が同じスキーム、ホスト名、およびポート番号を持つように定義しま
す。これに準拠するには、外部アプリケーションを同じHTTPサーバーで実行する必要があります。JavaScriptと
HTMLコンポーネントのみが含まれている場合、これは可能です。それ以外の場合は、この追加のHTTPサーバー
を使用するように外部アプリケーションのアプリケーションサーバーを構成するか、アプリケーションサーバー
自体でリバースプロキシを定義する必要があります。
9.8.4バインドされた統合の概要
次のセクションで示す具体的なサンプルの統合は、バインドされた統合が実現不可能であったため、バインドさ
れていない統合です。ただし、このセクションでは、バインドされた統合サンプルを提供して、統合がどのよう
に見えるかを理解できるようにします。さらに、このサンプルはリバースプロキシの使用方法を示しています。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 349
以前のアプローチでの非バインド統合の大きな欠点の1つは、外部化されたIBM Content Navigatorウィジェットの
URLを呼び出すたびに、重い初期化フェーズを含むデスクトップモデルがリロードされることでした。
このサンプルでは、​​デスクトップモデルを1回だけ初期化する方法を示します。その後、ユーザーは外部アプ
リケーション内のContentListウィジェットを制御できます。ユーザーがフォルダーパスを提供し、ボタンで
検索をトリガーできる入力フィールドが存在します。フォルダーのコンテンツは、外部化されたContentList
ウィジェットに表示されます。
開始点として、305ページの例9-2のコンテナシミュレーションアプリケーションのウェルカムページを取り上げ
ます。このWebページは非バインド統合をシミュレートしており、外部化されたContentListウィジェットのバイ
ンド統合がどのように見えるかを示すように変更されます。 。
例9-24は、外部アプリケーションのアーティファクトをエミュレートし、ContentListウィジェットのバイン
ドされた統合を持つWebページのコードを示しています。
例9-24 boundIntegration.html内のContentListウィジェットのバインドされた統合
<!DOCTYPE html>
<html> <head>
<title> IBM Content Navigator統合のためのコンテナー</ title> <link rel = "stylesheet" href = "ContainerSimulatio
n.css" media = "screen"> <link rel = "stylesheet" href = "/ navigator / ecm / widget / resources / dojo.css.jgz
"media =" screen ">
<link rel = "stylesheet" href = "/ navigator / ecm / widget / resources / ecm.css.jgz" media = "screen">
<link rel = "stylesheet" href = "/ navigator / ecm / themes / oneui / dojo.css.jgz" media = "screen">
<link rel = "stylesheet" href = "/ navigator / ecm / themes / oneui / oneui.css.jgz" media = "screen">
<スクリプト>
dojoConfig = {
パッケージ:[
{name: "dojo"、location: "/ navigator / dojo"}、{name: "ecm"、
location: "/ navigator / ecm"}]、isDebug:true、}; </ script>
<script src = "/ navigator / dojo / dojo.js.jgz"> </ script> <script src = "/
navigator / ecm / ecm.js.jgz"> </ script> </ head>
<body class = "ecm oneui"> <div class =
"externalAppContent">
350 IBM Content Navigatorのカスタマイズと拡張
<input id = "folderToShow" type = "text" value = "/">
<input id = "showFolderButton" type = "button" disabled = "disabled" value = "show Folder">
</ div>
<div id = "icnIntegration">
<div id = "contentList" data-dojo-type = "ecm.widget.listView.ContentList" data-dojo-props = "plugins: '{dnd:t
rue}'、isExternalDND: 'true'、isResultSetSorted: 'true'
、copyOnly:
'true' "role =" contentinfo "aria-label =" Content List "style =" width:100%; 高さ:100%; ">
</ div>
</ div>
<div class = "externalAppContent">
コンテナからの情報です</ div>
<スクリプト>
require(["dojo / parser"、 "ecm / widget / listView / ContentList"、
「ecm / widget / listView / modules / ViewDetail」、「ecm / widget / listView / modules / ViewMagazine」、「ecm
/ widget / listView / modules / ViewFilmStrip」、「ecm / widget / listView / modules / DocInfo」、「ecm / widget / lis
tView / modules / Bar "、" ecm / widget / listView / modules / Toolbar "、" ecm / widget / listView / modules / Breadcr
umb "、" ecm / widget / listView / gridModules / DndRowMoveCopy "、" ecm / widget / listView / gridModules / DndF
romDesktopAddDoc "、" ecm / widget / listView / gridModules / RowContextMenu "、" ecm / widget / dialog / LoginD
ialog "、" dijit / registry "、" dojo / io-query "、" ecm / widget / viewer / FilenetViewer "、" ecm / widget / viewer / Brow
serViewer "、" ecm / widget / dialog / ContentViewerWindow "、" ecm / widget / dialog / ErrorDialog "、" dojo / on "、
"dojo / dom "、" dojo / dom-attr "、" dojo / domReady! "]、function(parser、ContentList、ViewDetail、ViewMaga
zine、ViewFilmStrip、DocInfo、Bar、Toolbar、Breadcrumb、DndRowMoveCopy、DndFromDesktopAddDoc、Row
ContextMenu、LoginDialog、registry 、ioQuery、FilenetViewer、BrowserViewer、ContentViewerWindow、ErrorDi
alog、on、dom、domAttr){
parser.parse();
var errorDialog = new ErrorDialog();
dojo.connect(ecm.model.desktop、 "onMessageAdded"、errorDialog、 "messageAddedHand
ler");
function getContentListModules(){
var viewModules = []; viewModules.push(ViewDetail);
viewModules.push(ViewMagazine);
if(ecm.model.desktop.showViewFilmstrip){
viewModules.push(ViewFilmStrip); }
var array = [];
array.push(DocInfo);
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 351
array.push({
moduleClass:Bar、top:
[
[
[
{moduleClass:ツールバー}、{
moduleClasses:viewModules、 "classNam
e": "BarViewModules"}]]、[
[
{
moduleClass:ブレッドクラム}]]]})
; 配列を返す; };
function getContentListGridModules(){
var array = []; array.push(DndRowMoveCopy); a
rray.push(DndFromDesktopAddDoc); array.push
(RowContextMenu); 配列を返す; };
var contentList = registry.byId( "contentList");
contentList.setContentListModules(getContentListModules());
contentList.setGridExtensionModules(getContentListGridModules());
ecm.model.desktop.loadDesktop(null、function(desktop){
var repository = desktop.getDefaultRepository();
var retrieveFolder = 関数 ( 道) {
if(!path){
path = "/"; }
repository.retrieveItem(path、function(rootFolder){
console.log( "取得したフォルダ:" + rootFolder); rootFolder.retrieveFolderContents(fals
e、function(resultSet){
contentList.setResultSet(resultSet、rootFolder); }); }); }
var initialLoginDialog = LoginDialog.getLoginDialog();
352 IBM Content Navigatorのカスタマイズと拡張
var doConnections = function(){
myButton = dom.byId( "showFolderButton"); on(myButto
n、 "click"、function(evt){
textInput = dom.byId( "folderToShow");
if(textInput.value){
retrieveFolder(textInput.value); }});
domAttr.remove(myButton、 "disabled");
dojo.connect(ecm.model.desktop、 "onSessionExpired"、initialLoginDialog、
"sessionExpiredHandler");
};
if(!repository.connected){
initialLoginDialog.connectToRepository(repository); dojo.connect(initialLoginDialog、
"onConnected"、function(){
doConnections();
}); }
そうしないと {
alert( "Desktop reloaded!");
doConnections();
}}、false)
; }); </ script>
</ body> </
html>
主な変更点 index.html 以下の通り:
最初にテキスト入力フィールドとボタンを定義します DIV。
2番目にContentListウィジェットを定義します DIV。
すべてのJavaScriptコードを挿入して、ContentListウィジェットをセットアップします。これは主に、324ペ
ージの9.7、「コンテンツナビゲーターの特定のウィジェットの統合」で開発したコードです。 External_ICN.html
以下の通り:
–
–
retrieveFolder関数を適合させて、 道 引数。
イベントの関連付けを行うdoConnections関数を追加します。イベントのワイヤリングをセットアップするに
は、以下の手順を実行します。
私。クリック showFolderButton、 これは、retrieveFolderメソッドをトリガーします
ユーザー入力をフォルダーパスとして渡します。このボタンは、ユーザーがリポジトリに接続す
ると有効になります。
ii。期限切れのセッションのハンドラーを追加します。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 353
–
アラートを追加して、ページがリロードされるかどうかを確認します。ページがリロードされると、す
でにリポジトリに接続されており、elseブランチが実行されます。これは、URL呼び出しやページ全体
の再読み込みではなく、ワイヤードボタンを使用してContentListウィジェットを制御するためです。
適応する ContainerSimulation.css 例9-25に示すファイル。
例9-25バインドされた統合用に適応されたContainerSimulation.css
。externalAppContent
{
background-color:#ddddff; 高さ:50px
; text-align:中央; font-size:24px;
} #icnIntegration {
幅:800px; 高さ:600px; background-co
lor:#ddddff; マージン:0自動; text-align
:中央; }
エラーが存在しないことを確認するには、Container Simulationアプリケーションを新しい boundIntegration.html
IBM Content Navigatorのアプリケーションサーバー内の変更されたCSSファイル。(2つのファイルをIBM Cont
ent Navigatorデプロイメントに直接コピーすることもできます。) boundIntegration.html ブラウザでは、図9-23の
ようになります。
図9-23外部WebページへのContentListウィジェットのバインドされた統合
354 IBM Content Navigatorのカスタマイズと拡張
これはいくつかの理由で簡単でした:
この場合の外部アプリケーションは、単純なWebアプリケーションであるシミュレーションコンテナーアプ
リケーションです。これは、アプリケーションのランタイム環境やライフサイクルが異なるコンテナーでは
ありません。Microsoft SharePointとIBM WebSphere Portal Serverはどちらも、Dojoフレームワークをセッ
トアップしてContentListウィジェットを初期化する必要がある独自のランタイム環境に関係しています。
統合のWebページ全体を完全に制御しました。一部の外部コンテナーでは、コードを統合できる複雑なWeb
ページ内の特定の場所しか取得できないため、Dojoと外部化されたウィジェットを設定するのがはるかに困
難になります。これは、たとえば、Microsoft SharePoint Webパーツに統合する場合です。
他のDojoバージョンが外部アプリケーションに存在しないため、Dojoバージョンの競合はありません。こ
れは、IBM WebSphere Portalサーバーとのバインドされた統合の課題です。
より現実的なシナリオにするために、リモートサーバーでコードを実行し、リバースプロキシでクロスス
クリプトの問題を回避する方法を示します。
追加のHTTPサーバーをインストールして構成するための手順(347ページの9.8.3、「HTTPサーバーでのリバー
スプロキシの定義」)に従ってください。
次に、 boundIntegration.html ファイルと適応バージョン
ContainerSimulation.css にファイル htdocs HTTPサーバーのディレクトリ。図9-24を参照してください。
図9-24結果のhtdocsディレクトリ
次のURLでブラウザを起動すると、354ページの図9-23に示すように、バインドされた統合のサンプルページ
が再び表示されます。
http:// <server> /boundIntegration.html
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 355
このサンプル統合により、具体的な外部アプリケーションとのバインドされた統合を実現するための十分な
理解が得られます。
9.9 Microsoft SharePointページへのスタンドアロンウィジェットの統合
スタンドアロンウィジェットは、いくつかのサードパーティのソフトウェアと統合できます。このセクションでは
、スタンドアロンウィジェットをMicrosoft SharePointページに統合する方法を例として示します。
9.9.1例の概要
架空の会社Bが複数のECMリポジトリを使用しています。同社は、ドキュメントに直接アクセスして管理するた
めに、IBM Content Navigatorをインストール、カスタマイズ、および拡張しました。前の章では、IBM Conten
t Navigatorをカスタマイズおよび拡張する方法を示しました。現在、この会社は、Microsoft SharePointユーザー
が、会社のECMリポジトリの1つに現在保存されているドキュメントにアクセスできるようにしたいと考えてい
ます。
Microsoft SharePointユーザーがECM文書にアクセスできるようにするために、IBM Content Navigatorの機能を活
用して、IBM Content Navigatorユーザー・インターフェースの一部を外部システムに統合したいと考えています
。この例に示されているアプローチは、リポジトリーの参照用に提供されているIBM Content Navigatorビジュア
ル・ウィジェットをMicrosoft SharePointページに取り込むことです。
9.9.2 Microsoft SharePoint統合の実装
前のセクションでは、Microsoft SharePointなどのコンテナーに統合する部分を正確に表示するためにIBM Conte
nt Navigatorを準備する方法について説明しました。
IBM Content Navigatorをそのまま表示します。IBM Content Navigator開始ページのURLを呼び出します
。
IBM Content Navigatorの特別な部分を呼び出します。API URLは、特定のデスクトップ、特定の機能、フォ
ルダーのコンテンツ、またはドキュメントのコンテンツなど、IBM Content Navigatorの特定の部分を表示す
るディープリンク機能を提供します。
特定の機能とsideChrome URLパラメーターを使用してIBM Content Navigatorを呼び出し、上部にバーや
バナーがない1つの機能のみを表示します。
356 IBM Content Navigatorのカスタマイズと拡張
統合するウィジェットを正確にレンダリングするために使用できるカスタムレイアウトでIBM Content Navi
gatorを起動します。
統合するIBM Content Navigatorウィジェットを初期化するWebページを呼び出します。
各IBM Content Navigator統合に関する主な考慮事項の1つは、それがバインドされた統合として行われるか、アンバイ
ンドされた統合として実行できるかです。 バウンド このシナリオでの統合とは、外部化されたIBM Content Navigato
rウィジェットをWebパーツWebページで直接初期化し、DojoコードをWebパーツ内で実行することを意味します。
アンバウンド 統合では、外部アプリケーションが実行されるWebパーツでiFrameを使用します。
このセクションでは、後者のオプションについて説明し、324ページの9.7「コンテンツナビゲーターの特定のウィジェ
ットの統合」で作成された外部化されたContentListウィジェットを呼び出します。
そのセクションを完了しておらず、Microsoft SharePoint統合の実装をすぐに開始したい場合は、この本に関連す
るWebページをダウンロードしてください。ダウンロード手順については、535ページの付録D「その他の資料
」を参照してください。ただし、使用する前に展開する必要があります。手順については、346ページの9.8.1、
「外部化ウィジェットのデプロイ(非バインド統合)」を参照してください。
ここでは、HTMLページ( External_ICN.html) これは、IBM Content Navigatorデプロイメント内にデプロイされ
、IBM Content NavigatorのContentListウィジェットを外部化します。この仮定を確認するには、次のURLを使用
してブラウザーでページを直接呼び出します。
http:// <サーバー>:<ポート> /navigator/External_ICN.html
IBM Content NavigatorウィジェットをMicrosoft SharePointページに統合できます。MicrosoftSharePointに固有の
ソースコードを作成する必要はありません。統合を行うには、ページビューアーと呼ばれる既存のWebパーツを
使用して、コンテンツリストウィジェットを含むサンプルWebページをMicrosoft SharePointページに表示します
。内部的にMicrosoft SharePointは、IBM Content Navigatorウィジェットが表示されるWebパーツにiFrameを埋め
込みます。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 357
IBM Content Navigatorのブラウジング機能を追加するページのみを編集するか、ブラウジング機能を使用してペ
ージを作成する必要があるため、構成は単純です。
1.を選択します ページ タブをクリックして 編集。
ウィンドウ表示が編集モードに変換され、リボンバーの上部に新しいタブが表示されます。
2.選択 インサート → Webパーツ [編集ツール]セクションから。新しいリボン
開いたメニューには、ページに追加できるSharePoint Webパーツのリストが表示されます。
Webパーツは、検索結果や別のWebページなど、他のソースからのデータを表示できます。
3.を選択します ページビューア 使用可能なWebパーツのリストからWebパーツを選択して、
追加 ウィンドウの右下から。
4.ページに追加されます。追加されたWebパーツの右上隅には、メニューを下にスライドする小さな矢印があり
ます。選択する Webパーツを編集します。
5.ページビューアから、 ウェブページ ラジオボタンをクリックして、
3つのドット。URLを入力するウィンドウが開きます。指定したURLをテストすることもできます。この例で
は、次のURLを入力します。
http:// < サーバー>:<ポート> / navigator / External_ICN.html
6. [外観]セクションを展開し、次のようなタイトルを入力します リポジトリを参照します。
高さを500ピクセルの固定値に設定します。
7.クリック 申し込む 構成の結果を確認します。すべてが大丈夫なら
ContentListウィジェットが表示されます。クリックします OK。
8.クリック セーブ。 図9-25を参照してください。
図9-25 Webパーツの保存
358 IBM Content Navigatorのカスタマイズと拡張
変更が行われた後、ページはすぐに読み込まれます。デフォルトのリポジトリへのログインダイアログが表示されます
(アクセスされたデフォルトのデスクトップで構成されます)。ログインすると、編集したSharePointページ内にIBM
Content Navigatorウィジェットが表示されます。図9-26はウィンドウを示しています。
図9-26 Microsoft SharePointページのコンテンツリストウィジェット
左側のナビゲーションバーと上部のバーはMicrosoft SharePointに属しています。メインペインには、統合されたIBM C
ontent Navigatorウィジェットが表示されます。この図は、統合ウィジェットをページ上の単一のWebパーツとして示し
ています。たとえば、リストビューにドキュメントライブラリを表示する既存のページにこのWebパーツを追加し、統
合されたIBM Content Navigatorウィジェットを介して、このドキュメントライブラリリストビューをリポジトリのリス
トビューと組み合わせることができます。
9.10スタンドアロンのウィジェットをWebSphere Portalのポートレットとして統合
する
IBM Content NavigatorをWebSphere Portalに統合するには、iFrameを使用する必要があります。IBM Content Naviga
torで使用されるJavaScriptライブラリー(ウィジェットとモデル)は、Dojoバージョン1.8.4に依存しています。これ
は、WebSphereポータルで使用されるDojoバージョンと互換性がありません。JavaScriptモデルライブラリは基本的
なDojo関数を使用しており、Dojoの古いポータルバージョンでも実行できますが、IBM Content Navigatorに同梱され
ているバージョンとは異なるバージョンのDojoの使用はサポートされていません。iFrameを使用すると、このDojo互
換性の問題が回避され、1つのページでさまざまなバージョンのDojoを使用できるようになります。WebSphereポー
タルは、iFrameを使用して特定のURLをレンダリングするWebサイトディスプレイポートレットにバンドルされてお
り、コーディングせずにIBM Content NavigatorをWebSphereポータルにシームレスに統合できます。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 359
IBM Content Navigator URL APIを使用して、デスクトップ、機能、フォルダーのコンテンツ、ドキュメント、または検索
テンプレートをWebサイトディスプレイポートレットにレンダリングできます。このセクションでは、324ページの9.7
「コンテンツナビゲーターの特定のウィジェットの統合」で作成したコンテンツリストウィジェットを含むHTMLページを
統合する方法を示します。
1.コンテンツリストウィジェットを追加するページを開き、 編集する
モード、 図9-27に示すように。
図9-27ポータルページ編集モード
新しいセクションがページにレンダリングされ、さまざまな編集オプションを備えたタブが表示されます。
2.をクリックします コンテンツ タブして入力 ウェブサイト 検索フィールドに入力して、
図9-28に示すように、WebサイトDisplayerポートレット。
図9-28フィルタリングされたポートレットリスト
360 IBM Content Navigatorのカスタマイズと拡張
3. Webサイトディスプレイポートレットの横にあるプラス記号をクリックして、ポートレットをページに追加します。次にクリック
セーブ ページを保存して、ポートレットの構成を可能にします。図9-29を参照してください。
図9-29ページに追加されたWebサイトディスプレイポートレット
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 361
4.ページが保存されると、ポートレットを構成できます。ポートレットの右上隅にある小さな矢印をクリックし
て、 共有設定の編集、 図9-30に示すように。
図9-30ポートレット設定メニュー
362 IBM Content Navigatorのカスタマイズと拡張
5.ポートレット(図9-31)で、コンテンツリストのHTMLページのURLと、コンテンツがレンダリングされるiF
rameの高さを指定します。たとえば、次のURLを使用します。
http:// localhost:9080 / navigator / External_ICN.html
図9-31ポートレット構成
6.設定を保存して戻ります ビューモード。
IBM Content NavigatorとWeb sphere Portalのアプリケーションサーバー間にシングルサインオン(SSO)を構成
した場合、ログインせずにコンテンツリストウィジェットが表示されます。図9-32は、ポータルに統合されたコ
ンテンツリストウィジェットを示しています。ここでは、パンくずリストナビゲーション、ビューモジュール、
コンテキストメニューなど、ContentListウィジェット用に構成したモジュールのすべての機能を使用できます。
第9章Content Navigatorウィジェットを他のアプリケーションで使用する 363
図9-32 WebSphere Portalに統合されたコンテンツリストウィジェット
デフォルトのWebサイトディスプレイポートレットでは、ページ上の他のウィジェットとワイヤリングできます。URLク
エリ文字列からURL全体またはパラメータのみを受け取ることができます。このようにして、IBM Content NavigatorのU
RL APIを使用してWebサイトディスプレイに接続されたドキュメントのリストを表示するカスタムポートレットを作成で
きます。
9.11結論
この章では、IBM Content Navigatorウィジェットを他のアプリケーションで外部的に使用する方法について説明
します。また、IBM Content Navigatorまたはその一部を外部化する方法も示します。これには、IBM Content Na
vigatorのレイアウト拡張ポイントを介したカスタムレイアウトの開発、およびIBM Content Navigatorウィジェッ
トのゼロからの設定が含まれます。バインドされた統合とバインドされていない統合の違いについて説明し、サ
ンプル実装を提供します。IBM Content Navigatorウィジェットのコンテナーへの統合は、Microsoft SharePointお
よびIBM WebSphere Portal Serverで例示されています。
364 IBM Content Navigatorのカスタマイズと拡張
10
チャプター10。
組み込みのカスタマイズ
ビューアとサードパーティビューア
の統合
IBM Content Navigatorには、複数の強力で構成可能なドキュメントビューアが含まれています。さまざまな組み
込みビューアを使用して、組織のコンテンツストアに格納されている可能性のあるドキュメントタイプとフォー
マットの拡張リストをシームレスに表示できます。IBM Content Navigator内のプラグインアーキテクチャを通じ
て、市販のビューアの統合も可能です。組織は、これを行って、特殊なファイル形式を表示したり、追加の表示
機能を提供したり、独自の優先ビューアを使用したりできます。
この章では、IBM Content Navigatorに組み込まれているドキュメントビューアの概要について説明します。組み
込みのビューアーの1つで使用可能な拡張構成オプションを探索し、サード・パーティーのビューアーをIBM Co
ntent Navigatorに統合する方法を検討します。
この章では、次のトピックについて説明します。
組み込みビューアの概要例の概要FileNetビュ
ーアのカスタマイズビューアの拡張性の調査
サード・パーティーのビューアーをIBM Content Navigatorに統合する
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
365
10.1組み込みビューアの概要
IBM Content Navigator内では、ネイティブアプリケーションを介してドキュメントを起動せずにドキュメントを
表示する機能が、複数の異なるビューアを環境に埋め込むことでサポートされています。これらのビューアーは
、IBM Content Navigatorのユーザーに、ソースファイルを危険にさらすことなくコンテンツを読み取り、注釈を
追加することのみを目的としてドキュメントにアクセスする機能を提供します。
さまざまなコンテンツタイプをサポートする特定のドキュメントビューアは、ユーザーが 開いた 文書に関連する
IBM Content Navigatorデスクトップからのコマンド。IBM Content Navigatorデスクトップは、ドキュメントの登
録済みMIMEタイプに関連付けられた適切な表示アプリケーションを起動します。そのMIMEタイプが特定のビュ
ーアーを起動するように構成されているか、MIMEタイプが構成で識別されていないため、システムがその場合デ
フォルトは、一般的な「キャッチオール」Webブラウザビューアです。
IBM Content Navigatorデスクトップでは、さまざまなビューアーを使用できます。これらのビューアーには、AFP to PDFビューアー、
AFPビューアープラグインプラスビューアー、アプレットビューアー、FileNetビューアー、ブラウザービューアー、およびICCビューア
ーが含まれます。
AFPからPDFビューア
AFP to PDFビューアーは、IBM Content Navigatorデスクトップからアクセスするように構成されたIBM Cont
ent Manager OnDemandリポジトリーからアクセスできるAFPファイルのビューアーサポートを提供します。
AFP Viewer Plugin-Plus Viewer
AFP Viewer Plugin-Plusは、Content Manager OnDemand Web Enablement KitからAFP Viewerプラグインを起動す
るビューアーです。このビューアを使用できるようにするには、プラグインをクライアントワークステーションに
インストールする必要があります。の
AFPViewerPlugin.jar ファイルはプラグインの登録に使用されます。プラグインがクライアントワークステーションにインス
トールされていない場合、Content Navigatorは代わりにAFP to PDF Viewerを使用します。
アプレットビューア
アプレットビューアは、MODCA形式のIBMImagePlus®ドキュメントのオーバーレイサポートを提供し、IBM C
ontent Managementライブラリに保存されます。
366 IBM Content Navigatorのカスタマイズと拡張
FileNetビューア
FileNet Viewerは、このドキュメントのリリース時点でのDaeja ViewONE Pro 4.0.42です。Daeja Viewerを使用
すると、さまざまなドキュメント形式を表示できます。また、注釈、編集、ドキュメントのマークアップなど
、その他の表示機能も提供します。
ブラウザビューア
Browser Viewerマッピングは、多くのファイルタイプとフォーマットをサポートし、コンテンツへの読み取り専
用アクセスに使用できます。マークアップや注釈などの他のビューア機能は必要ありません。
ICCビューア
ICCビューアーは、メールメッセージなどのIBM Content Collectorを介してアーカイブされたアイテムや、Microso
ft SharePointなどの環境を介して送信される可能性のあるさまざまなドキュメントタイプを対象としています。
概要の概要
これらのビューアーはすべて、デフォルトのリポジトリーおよびMIMEタイプのマッピングを介してIBM Cont
ent Navigator内で配信され、デフォルトのビューアーマップを介してContent Navigatorデスクトップ内で構成
されます。システム構成のデフォルトビューアーマップは、ビューアーとコンテンツタイプ間の最も一般的な
使用法とマッピングをサポートするように設定されています。IBM Content Navigatorのデフォルトビューアー
マップには、管理デスクトップからアクセスできます。リポジトリとMIMEタイプのマッピングで事前設定され
ているため、編集できません。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 367
図10-1は デフォルトのビューアマップ Content Navigator設定の[Viewer Maps]セクションで選択されています。
図10-1デフォルトのビューアマップ
デフォルトのビューアマップはコンテンツナビゲータ構成の編集不可能な部分であるため、デフォルトのMIMEタ
イプマッピングを参照固有のビューアに変更する場合は、マップをコピーする必要があります。
369ページの表10-1に、IBM Content Navigator環境内で設定されるデフォルトのビューアマッピングを示します
。
これらのマッピングを変更することにより、たとえば、組織に特定のビューアパッケージまたはプラットフォー
ムに対するエンタープライズライセンスがあり、コンテンツ管理環境のユニバーサルビューアとして使用したい
場合に、システム内のデフォルトビューアマッピングを上書きできます。
368 IBM Content Navigatorのカスタマイズと拡張
変更する可能性のあるマッピングを判別するには、表10-1を参照してください。
表10-1デフォルトのリポジトリビューアのMIMEタイプマッピング
リポジトリタイプ
閲覧者
対象となるMIMEタイプ
Content Manager
AFP2PDF変換ラインデータアプ
AFPラインpdf
OnDemand
レットAdobe
Readerアプレットビューア
bmp、gif、jpeg、png、pcx、tif、x-dcx、xpng、v
nd.ibm.modcap
コンテンツマネージャ
ウェブブラウザ
すべてのMIMEタイプ
Adobe
pdf
Readerアプレットビューア
bmp、gif、jpeg、png、pcx、tif、x-dcx、xpng、v
nd.ibm.modcap
ウェブブラウザ
FileNetコンテンツマネージャー
FileNetビューア
すべてのMIMEタイプ
pjpeg、jpg、jpeg、bmp、gif、tiff、pdf、png、x
-cold、vnd.filenet.image、vnd.filenet.im-cold、v
nd.filenet.im-other
コンテンツ管理相互運用サー
ウェブブラウザ
すべてのMIMEタイプ
アプレットビューア
bmp、gif、jpeg、png、pcx、tif、x-dcx、xpng、v
ビス(CMIS)
nd.ibm.modcap
ウェブブラウザ
すべてのMIMEタイプ
たとえば、一般的なドキュメントタイプ(ドキュメント形式(。 doc) 文書)表示中にマークアップと注釈を作成
できるビューアへ。これらの注釈をドキュメントと共にコンテンツ管理ライブラリに保存する必要がある場合が
あります。
MIMEタイプのマッピングで指定されているように、Webブラウザービューアーは、ドキュメント形式(。 doc)
IBM FileNet Content Managerシステムに保管されている文書。Webブラウザーでは注釈が許可されていないため
、をマップすることができます。 文書 注釈をサポートおよび保存するビューアへのMIMEタイプ:FileNetビュー
アなどのビューア。
370ページの図10-2は、MIMEタイプ(。 doc、 .xls、 と。 ppt) カスタムビューアーマップのFileNetビューアーに
関連付けられたMIMEタイプマッピングに追加されます。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 369
図10-2 FileNet ViewerのカスタムMIMEタイプマッピング
デフォルトのMIMEタイプビューアの関連付けを変更するには、デフォルトのビューアマップのコピーを作成し、
新しく作成したビューアマップをIBM Content Navigatorデスクトップで使用する必要があります。特定のMIME
タイプがデスクトップの複数のビューアにマップされている場合、ビューアマップにリストされているビューア
の順序により、起動するビューアの決定に違いが生じます。Content Navigatorは、その特定のMIMEタイプにリス
トされている最初のビューアを起動します。
10.2例の概要
この章に含まれる例は、次の2つのカテゴリに分かれています。
FileNetビューアのカスタマイズを通じて行われるものサードパーティのビューアの統
合を処理するもの
FileNetビューアーをカスタマイズすることにより、以下の例を示します。
ブランディングと機密保持要件のためにドキュメントにヘッダーとフッターを追加する
注釈を匿名にするドキュメントのストリーミ
ングを無効にする
サード・パーティーのビューアーとIBM Content Navigatorの統合では、以下のサード・パーティーのビューアーを示
します。
Snowbound VirtualViewer
有益なグラフィックスブラバ!エンタープライズビューア
10.3 FileNetビューアのカスタマイズ
このセクションでは、IBM Content Navigatorのユーザーが使用できる機能を拡張するために、組み込みのFileN
etビューアーであるDaeja ViewONE Proビューアーで使用可能なオプションについて説明します。
370 IBM Content Navigatorのカスタマイズと拡張
10.3.1ブランディングおよび機密性要件のためのドキュメントへのヘッダーとフッターの追加
Daeja Viewerには、役立つが見過ごされがちな機能が含まれており、それによってレンダリングされたドキュ
メントにヘッダーとフッターを追加できます。技術的には、これらの追加はドキュメントページの上部と下
部にある注釈です。ヘッダーとフッターの内容はカスタマイズ可能で、プログラムで設定できます。ヘッダ
ーとフッターは、ユーザーが移動または削除できないように座標を使用してドキュメントに配置できます。
このヘッダーとフッターを追加する1つの用途は、印刷と配布に対する法的警告の一部として、会社からの免責事
項を(IBM Content Navigatorデスクトップで表示される)ドキュメントに提供することです。IBM Content Nav
igatorでこれを行うには、 filenetViewer_properties.jsp これは、デプロイされたWARファイルのルートの直下にあ
るアプレットサブフォルダーにあります。このファイルはDaeja Viewerをブートストラップするので、そこに追
加の設定を追加できます。
ヘッダーとフッターを有効にするには、ビューアーAPIからannotationTemplateディレクティブを使用し、注釈に
対するFileNet P8 ACL許可サポートも無効にします。FileNet P8ドキュメントの注釈を引き続き表示および編集す
ることはできますが、それらの注釈に対する権限を変更することはできません。この方法は、この特定のデスクト
ップにのみ適用され、すべてのIBM Content Navigatorには適用されません。
ヘッダーとフッターを追加するには、次の手順を実行します。
1. WARファイルのルートフォルダーの下に、ヘッダーとフッターのコンテンツを含む新しいファイルを作成しま
す。それに名前を付けます headerfooter.txt ファイル。293ページの例9-1のテキストは、構成内で使用できま
す。 txt ファイル。サンプルもダウンロードできます(535ページの付録D「その他の資料」を参照)。
例10-1ヘッダーとフッターの定義例
[テキスト] FONTTYPE = arial
FONTHEIGHT = 20
SEMITRANSPARENT = 0
BORDER = 0
テキスト=公式コピーではありませんX = 0
Y = 0ページ= -1透明= 1ラベル=テキスト1編
集= 0
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 371
[テキスト] FONTTYPE = arial
FONTHEIGHT = 20
SEMITRANSPARENT = 0
BORDER = 0
TEXT =これは、X社が所有する著作物です。配布しないでください。X = 0 Y = 10.5ページ= -1透明=
1ラベル=テキスト1編集= 0
2. 370ページの図10-2に示すテキストを
filenetViewer_properties.jsp filenetViewerParametersが初期化されていることを確認するチェックの直下にあ
るファイル。の編集されたサンプル
filenetViewer_properties.jsp ファイルが利用可能です(535ページの付録D「その他の資料」を参照)。
例10-2ドキュメントのヘッダーとフッターを有効にする
annotationTemplate: "/navigator/headerfooter.txt?noCache=" + Math.random()、
annotationSubstitution1: "1:<DOCNAME> =" + new Date()、annotationSubstitu
tion2: "-1:<DOCNAME> = <EMPTY>"、
customAnnotationToolTip: "作成日:<作成日>"、alwaysShowCustomAnnotationT
ooltip: "true"、filenet: "false"、
注意: に割り当てられた乱数を使用します noCache 変数。理由は headerfooter.txt fileは静的ファイルであ
り、アプリケーションサーバーはそれをキャッシュするため、ファイルがフェッチされたときに変更がす
ばやく反映されるのを確認するのは困難です。この乱数の使用はオプションです。コンテンツファイルで
は、<などの変数を使用します。 DOCNAME>。 現在表示されているドキュメントの値に置き換えます。
この場合、 annotationSubstitution タグを実際のドキュメントの名前に置き換えるディレクティブ。これは
最初のページで行います。残りの部分では、特別な< 空> タグを付けて、フィールドを空白のままにしま
す。これは基本的にはプロセスですが、この機能をさらにカスタマイズするために利用できる詳細は他に
もたくさんあります。たとえば、ビューアで静的ファイルを使用する代わりに、ヘッダーとフッターを返
すサーブレットを指定して、この機能をはるかに強力にすることができます。
372 IBM Content Navigatorのカスタマイズと拡張
図10-3と図10-4は、この例の結果を示しています。
図10-3表示されたヘッダー
図10-4表示されたフッター
10.3.2注釈を匿名にする
の filenetViewer_properties.jsp 構成ファイルは、注釈に表示されるホバーヒントも定義します。デフォルトでは、
ユーザーは注釈にカーソルを合わせると、注釈を作成したユーザーの名前を確認できます。この動作は予想され
ますが、常に望ましいとは限りません。時々、要件はユーザーのためかもしれません ない 誰が注釈を作成したか
を知る。たとえば、特定のエントリには説明が必要であるというローン申請に関するメモがローン申請者に表示
されたとします。申請者がその注釈に注釈注釈を作成したユーザーの名前と電子メールアドレスも表示する場合
、申請者はカスタマーサービスの電子メールアドレスではなく、直接その人に電子メールを送信する可能性があ
ります。適切な通信チャネルのこのバイパスは、プロセスの低下を引き起こします。セキュリティ上の理由から
、それが発生することは望ましくありません。したがって、すべてのユーザーがプロキシアカウントでログイン
して、匿名のプロキシユーザーが作成したすべての注釈が表示されるようにする必要があります。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 373
図10-5は、注釈にカーソルを合わせると、注釈の名前(P8Admin)と注釈の作成日時を示すツールチップを示
しています。
図10-5アノテーターの名前を示すドキュメント '
アノテーター名を匿名にするために、組み込みのDaeja Viewerは、ツールチップのフォーマットをプログラム
で変更する方法を提供します。つまり、この機能の範囲を特定のデスクトップまたは特定のオブジェクトスト
ア、あるいは特定のドキュメントクラスにまで絞り込むことができます。
アノテーターの名前を匿名にするには、以下の手順を実行します。
1.を見つけます filenetViewer_Properties.jsp アプレットにあるファイル
デプロイされたIBM Content NavigatorのWARパスのディレクトリー。
2.構造に、アノテーターの名前なしで、必要なタグを追加します。Daeja Viewerのドキュメントには、コンテキ
スト対応情報をツールチップに挿入するために使用する特別なタグに関する情報があります。
この例では、注釈のツールチップとして作成日のみを使用しました。例10-3は、filenetViewerParameters構
造の変更を示しています。
例10-3注釈のツールチップの変更
filenetViewerParameters.customAnnotationToolTip = '作成日:<作成日>';
filenetViewerParameters.alwaysShowCustomAnnotationToolTip = 'true';
374 IBM Content Navigatorのカスタマイズと拡張
これで、ユーザーが注釈の上にマウスを置いたときに、アノテーターの名前がツールチップに表示されなく
なりました。図10-6を参照してください。
図10-6アノテーターの名前のないアノテーション
10.3.3ドキュメントのストリーミングを無効にする
システムでは、TIFおよびPDFファイルのドキュメントストリーミングがデフォルトで有効になっています。ドキ
ュメントをストリーミングする機能は、ユーザーが大きなファイルのコンテンツにできるだけ早くアクセスし、
ドキュメント全体がダウンロードされる前に情報の表示または読み取りを開始できる貴重な機能です。
IBM Content Navigator環境内にプロキシー・サーバーとロード・バランサーがデプロイされている場合、組織は
ドキュメント・ストリーミングを無効にして、プロキシーとロード・バランサーのアーキテクチャー内で発生す
る可能性があり、資料。
IBM Content Navigatorでは、必要に応じてドキュメントのストリーミングを無効にすることができます。
1.を見つける filenetViewer.jsファイル のWARパスのjsディレクトリに
IBM Content Navigatorをデプロイしました。
2.編集 navigator / js / filenetViewer.js ファイル。
3.次のテキストを filenetViewer.js ファイルの50行目付近のファイル:
this.useStreamer =(contentType.indexOf( "tiff")!= -1 || contentType.indexOf(
"pdf")!= -1);
4.行を変更します this.useStreamer = false 次のように:
this.useStreamer = false; //(contentType.indexOf( "tiff")!= -1 || contentType.indexOf( "pdf")!=
-1);
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 375
ファイルを保存すると、IBM Content Navigator環境のTIFおよびPDFファイルのドキュメントストリーミングが無
効になります。
10.4ビューアの拡張性の調査
このセクションでは、IBM Content Navigatorが表示ソリューションを統合するために開発者に公開する内容について説明
します。
10.4.1ビューアのアーキテクチャ
表示ソリューションはさまざまな方法で構築されていますが、2つのモデルが普及しています。クライアント側から直接リポジ
トリにアクセスするビューアと、サーバー側コンポーネントに依存するビューアです。図10-7は、両方のアーキテクチャスタ
イルを反映しています。Viewer1はクライアント側のアーキテクチャのみを示しています。Viewer2はサーバー側コンポーネン
トに依存しています。
JEEアプリケーションサーバー
コンテンツナビゲーター
XmlHttp
クライアント側
サーバ側
リクエスト/レスポンスJAVA
JAVAスクリプトAPI
ビューア1
ビューアサーブレット
API
JAVA
API
HttpServletリクエスト/レスポンス
ビューア2
図10-7クライアント側のビューア(Viewer1)とサーバー側のビューア(Viewer2)のアーキテクチャ
IBM Content Navigatorは両方のモデルをサポートしています。ビューアがサーバー側コンポーネントに依存し
ている場合、サーブレットに情報を渡し、次にリポジトリAPI(たとえば、IBM FileNet Content Managerまたは
IBM Content Manager OnDemandの場合)を使用してコンテンツをフェッチし、それをクライアントに返しま
す。同様に、ビューアがクライアント側で完全に動作している場合は、
376 IBM Content Navigatorのカスタマイズと拡張
IBM Content Navigator JavaScriptモデリング層。ナビゲーターを介してリポジトリーからコンテン
ツをフェッチし、クライアントに戻します。
どちらのモデルでも、ビューアーをIBM Content Navigatorに統合する作業は似ています。クライアント側のビューアの
場合、開発者はJavaScriptモデリングレイヤーを使用してコンテンツをフェッチする方法を理解するために、IBMから提
供されているAPIドキュメントを参照する必要があります。このセクションでは、アーキテクチャに関係なく、ビュー
ア用のプラグインを開発する方法に焦点を当てます。
10.4.2拡張ポイント
IBM Viewerで新しいビューアーを登録するには、3つのクラスを拡張する必要があります。
com.ibm.ecm.extension.Plugin
com.ibm.ecm.extension.PluginService
com.ibm.ecm.extension.PluginViewerDef
これらのクラスでは、IBM Content Navigator、ビヘイビアーの動作特性、および機能と通信し、起動方法も指定
します。
注意: プラグイン開発を可能にするように開発環境とプロジェクトを設定するには、73ページの第3章「開発
環境の設定」を参照してください。
システムを機能させるためにシステムに追加する必要がある、または追加する可能性のあるその他のファイルは次のとおりです。
ConfigurationPane.html
ConfigurationPane.js
MANIFEST.MF
必要なコンポーネント
このセクションのクラスは、新しいビューアを登録するために拡張する必要があります。
com.ibm.ecm.extension.Pluginクラス
このクラスを拡張することにより、プラグインの名前(つまり、ビューアーの名前)、そのバージョン、およ
びその構成ユーザー・インターフェースに対応するDojoクラスを指定できます。これについては、387ページ
の10.5「サードパーティビューアをIBM Content Navigatorに統合する」で説明しています。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 377
例10-4は、プラグインを拡張するクラスシグネチャを示しています。
例10-4プラグインを拡張するクラスシグネチャ
パブリッククラスMyViewerPlugin extends com.ibm.ecm.extension.Plugin
プラグインにビューア機能が含まれ、サーバー側コンポーネントもプラグインにあることを宣言するには、例
10-5に示すコードを追加します。
例10-5プラグインでビューア機能を宣言する
public PluginViewerDef [] getViewers(){
return new PluginViewerDef [] {new MyViewerPluginViewerDef()}; }
public PluginService [] getServices(){
return new PluginService [] {new MyViewerPluginService()}; }
このプラグインとペアになっているウィジェットの名前を指定するには、例10-6に示すメソッドを指定する必要
があります。
例10-6プラグインをウィジェットUI構成コンポーネントにバインドする
public String getDojoModule(){
「myViewerPluginDojo」を返します。}
public String getConfigurationDijitClass(){
「myViewerPluginDojo.ConfigurationPane」を返します。}
com.ibm.ecm.extension.PluginServiceクラス
このクラスは、ブートストラップして最終的にビューアを実行するように拡張する必要があります。このク
ラスは、構成の保存も処理します。例10-7は、PluginServiceクラスを拡張するクラスシグネチャを示してい
ます。
例10-7 PluginServiceを拡張するクラスシグネチャ
パブリッククラスMyViewerPluginService extends
com.ibm.ecm.extension.PluginService
メインメソッドのexecuteを実装する必要があります。このメソッドでは、クラスの責任を、構成の取得と保存、
およびビューアーのオープンに分けることができます(例10-8(ページ379))。
378 IBM Content Navigatorのカスタマイズと拡張
例10-8基本的な使用法のためのexecute()メソッドの拡張
public void execute(PluginServiceCallbacks callbacks、
HttpServletRequestリクエスト、HttpServletResponseレスポンス)が例外{
文字列api = request.getParameter( "api"); if(api.equals( "ge
tConfiguration"))
executeGetConfiguration(callbacks、request、response); else if(api.equals( "se
tConfiguration"))
executeSetConfiguration(callbacks、request、response); else if(api.equals( "op
enViewer"))
executeOpenViewer(callbacks、request、response); }
390ページの 『このビューアー用のIBM Content Navigatorプラグインの開発』では、このクラスの完全に機能
する例を示しています。そのセクションでは、ビューアーのブートストラップを支援するために、execute()
メソッドで利用できる情報の種類について説明します。
まず、メソッドの仮パラメーターから、全体が
HttpServletRequest クラスが利用可能です。つまり、セッションIDやサーバー名などの情報を取得できます。ビュ
ーアに固有なのは、リクエストパラメータの情報です。これは、 request.getParameterMap()
方法。そのマップには、開かれるドキュメントIDや、ドキュメントが存在するリポジトリの名前などの情報が含
まれています。マップでは次の情報を利用できます。
docId:ドキュメントの一意の識別子。docName:ドキュメント
の名前。
repositoryId:このドキュメントが存在するリポジトリの名前。この名前は、IBM Content Navigatorで構成さ
れている名前であり、基礎となるアーカイブ内のリポジトリーの名前ではありません。mimeType:ドキュメ
ントのMIMEタイプ。serverType:基になるアーカイブのタイプ(p8、cm、od)。vsId:ドキュメントのバ
ージョンシリーズのID。replicationGroup:IBM FileNet Content ManagerとIBM FileNet Image Services間の
双方向サポートのために、IBM Content Federation Services(CFS)を介してセットアップされたreplicatio
nGroupの名前。objectStoreName:ドキュメントが配置されている基になるアーカイブの名前。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 379
docUrl:IBM Content NavigatorのgetDocument機能を使用するドキュメントを取得するために必要な正確な
パラメーターを含むストリング。同じ情報(vsIdなど)の一部と新しい情報が含まれています。例10-9を参
照してください。
例10-9 docUrlに含まれる情報
/navigator/p8/getDocument.do?docid=Contract%2C%7B62275E2C-AC20-4071A57D-9948FB3EE3C3%7D%2C%7B827AC031-8AF3-4FCC-82FC-3F2C9C551F5B%7D&te mplate_name =
Contract&VanyRepository7RepositoryId = RetractoryIdRepositoryIdRepositoryId = RetractoryIdRepositoryIdRepositoryId
7637-4F07-93D3-8AE0C908FC86%7D&objectStoreName = MyObjectStore&secu rity_token = -5225665686370023147
privs:視聴者が尊重する必要がある特権。ドキュメントの性質に基づいて、次の権限がビューアに渡されま
す。
–
printDoc:ドキュメントを印刷する機能。ブラウザから印刷を呼び出すことは防止できない場合が
ありますが、完全に印刷されたドキュメントにはなりません。
–
exportDoc:ドキュメントをローカルディスクストレージに保存する機能。
–
editDoc:PDFのページを再配置するなど、ドキュメントを編集する機能。
–
viewAnnotations:ドキュメントの注釈を表示する機能。
–
editAnnotations:ドキュメントの注釈を追加、編集、または削除する機能。
例10-10は、実際のドキュメントのこれらすべてのパラメータを示しています。
例10-10ビューアプラグインに渡されるパラメータの完全な例
キー:editDoc値:false
キー:objectStoreName値:MyObjectStoreキー:replicationG
roup値:未定義のキー:プラグイン値:MyViewerPluginキー:
mimeType値:application / pdfキー:editAnnotations値:false
キー:serverType値:p8キー:api値:openViewerキー:view
Annotations値:falseキー:アクション値:MyViewerServiceキ
ー:docId値:
契約書、{62275E2C-AC20-4071-A57D-9948FB3EE3C3}、{827AC031-8AF3-4FCC-82FC-3F2C9C551F 5B}
キー:security_token値:-5225665686370023147キー:repositoryId値
:MyCompanyRepositoryキー:exportDoc値:trueキー:contentType値
:application / pdfキー:printDoc値:true
380 IBM Content Navigatorのカスタマイズと拡張
キー:vsId値:{08F39ADF-7637-4F07-93D3-8AE0C908FC86}キー:docUrl値:
/navigator/p8/getDocument.do?docid=Contract%2C%7B62275E2C-AC20-4071-A57D-9948FB3EE3
C3%7D%2C%7B827AC031-8AF3-4FCC-82FC-3F2C9C551F5B%7D&template_name =
Contract&repositorIdApo39%Bid7CompanyRepositorIdBid7CompanyRepositorIdBid7B7
7637-4F07-93D3-8AE0C908FC86%7D&objectStore Name = MyObjectStore&security_token = -5225665686370023147
key:docName value:Agreement.pdf
ご覧のとおり、docUrlはほとんどの場合、他のパラメーターで既に提供されているピースの構成です。docIdパラ
メータは3つのタプルで構成されています。ドキュメントのドキュメントクラスのシンボル名、オブジェクトスト
アの識別子、ドキュメント自体の識別子です。
ヒント: 次の方法を使用して、プラグインのコードをデバッグできます。
com.ibm.ecm.serviceability.Logger.logDebug(...)
デバッグステートメントは、 system.out アプリケーションサーバーのログファイル。
com.ibm.ecm.extension.PluginViewerDefクラス
このクラスは2つの関数を提供します:
ビューアーがサポートするリポジトリー・タイプ(IBM Content Navigatorがそれを実施する)と、最適化す
るドキュメントMIMEタイプを指定します。起動URLパターンを指定して、ビューアを起動する方法を定義し
ます。
例10-11は、PluginViewerDefクラスを拡張するクラスシグネチャを示しています。
例10-11 PluginViewerDefを拡張するクラスシグネチャ
パブリッククラスMyViewerPluginViewerDef extends com.ibm.ecm.extension.PluginViewerDef
ビューアでサポートされるリポジトリとMIMEタイプを指定するには、例10-12に示すように、getSupportedCon
tentTypes()メソッドとgetSupportedServerTypes()メソッドを使用できます。
例10-12ビューアによるリポジトリとMIMEタイプのサポートを指定するコードスニペット
public String [] getSupportedContentTypes(){
新しいString [] {“ image / tiff”、“ image / png”};を返します。}
public String [] getSupportedServerTypes(){
新しいString [] {「p8」、「cm」}を返す; }
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 381
オプションのコンポーネント
必要に応じて、ユーザーインターフェイスをレンダリングし、ビューアのすべての構成情報を収集するウィジェ
ットを指定することもできます。たとえば、ビューアがシステム全体のスコープに注釈をレンダリングするかど
うかを指定する場合は、2つのファイルを作成します。
ConfigurationPane.html
ConfigurationPane.js
マニフェストファイルも作成します。
ConfigurationPane.htmlファイル
このHTMLファイルでは、構成ユーザーインターフェイスのプレゼンテーションレイヤーコンポーネントを指定し
ます。例10-13を参照してください。
例10-13 HTMLで指定された構成ユーザー・インターフェース
<div>
<table class = "propertyTable" role = "presentation">
<tr>
<td class = "propertyRowLabel"> <span class = "required"> * </ span> <label
for = "annotationsEnabled">注釈
有効:</ label>  </ td>
<td class = "propertyRowValue">
<div id = "annotationsEnabled"
dojoAttachPoint = "_ annotationsEnabled」
dojoAttachEvent = "onKeyUp:_onParamChange" maxLength = "5" dojoType =
"ecm.widget.ValidationTextBox" required = "true"
trim = "true"
propercase = "false"> </ div> </ td> </
tr> </ table> </ div>
ConfigurationPane.jsファイル
このJavaScriptファイルでは、構成パラメーターの検証ロジックを指定します。例10-14を参照してくだ
さい。
例10-14 JavaScriptで定義された検証ロジック
dojo.provide( "myViewerPluginDojo.ConfigurationPane");
dojo.require( "ecm.widget.admin.PluginConfigurationPane"); dojo.require(
"ecm.LoggerMixin");
382 IBM Content Navigatorのカスタマイズと拡張
dojo.require( "dijit._Templated");
/ **
* @name myViewerPluginDojo.ConfigurationPane
* @クラス
* @augments ecm.widget.admin.PluginConfigurationPane
*/
dojo .declare(
"myViewerPluginDojo.ConfigurationPane"、[ecm.widget.admin.PluginConfigurationPan
e、dijit._Templated、
ecm.LoggerMixin]、
{templateString:dojo.cache( "myViewerPluginDojo"、
"templates / ConfigurationPane.html")、widgetsInT
emplate:true、設定:null、
コンストラクター:function(){}、
postCreate:function(){
this.inherited(arguments);
this._annotationsEnabled.invalidMesssage = "設定してください
trueまたはfalseの値 "; s
this._annotationsEnabled.isValid = dojo
。ヒッチ(これ、
function(isFocused){
これを返す
。_validateAnnotationsEnabled(isFocused);
});
}、
loadConfigurationString:function(configurationString){
this.configuration = eval( "(" + configurationString
+ ")");
if(!this.configuration.annotationsEnabled){
this.configuration.annotationsEnabled = ""; }}、
load:function(callback){
var methodName = "load";
this.logEntry(methodName);
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 383
if(this.configurationString){
この
。loadConfigurationString(this.configurationString);
this._annotationsEnabled.set( 'value'、
this.configuration.annotationsEnabled); } そうしないと {
//デフォルト
this._annotationsEnabled.set( 'value'、 'false'); }
this.logExit(methodName); }、
_onParamChange:function(){
var methodName = "_onParamChange";
this.logEntry(methodName);
if(this.configuration == null)
this.configuration = new Object();
this.configuration.annotationsEnabled =
this._annotationsEnabled.get( 'value');
this._annotationsEnabled.validate();
this.configurationString =
JSON.stringify(this.configuration);
this.onSaveNeeded(true); this.logEx
it(methodName); }、
_validateAnnotationsEnabled:function(isFocused){
var methodName = "_validateAnnotationsEnabled";
this.logEntry(methodName);
var valid = true;
var annotationsEnabled = this._annotationsEnabled
。get( '値');
if(annotationsEnabled.length <= 0){
有効= false; } そうしない
と{
if(annotationsEnabled == 'true'
|| annotationsEnabled == 'false'){有効= true; } そう
しないと {
有効= false; }
384 IBM Content Navigatorのカスタマイズと拡張
}
this.logExit(methodName);
戻り値(有効); }、
検証:function(){
var methodName = "validate";
this.logEntry(methodName);
var valid = this._annotationsEnabled.isValid();
this.logExit(methodName);
有効な戻り値。}});
図10-8は、この例に基づいてレンダリングされた構成を示しています。
図10-8レンダリングされた構成UI
ここで概念を検討することが重要です。他の製品では、構成のためにプロパティの名前と値のペアを指定でき、
ユーザーが許可されていないものを入力しないことを望んでいます。ただし、IBM Content Navigatorを使用する
と、構成ユーザー・インターフェースにどのように表示させ、そのユーザー・インターフェースを制御するロジ
ックをプログラムするかを正確に指定できます。この機能は強力です。
IBM Content Navigatorは、シンプルなテキストボックス用の検証ウィジェットを提供します。
ecm.widget.ValidaionTextBox( 306ページの例9-16で使用)。コンボボックスやスライダーなどのより複雑なユ
ーザーインターフェイスを作成するには、Dojoフレームワークで使用できるフォームウィジェットを拡張する必
要があります。たとえば、コンボボックスの例を概説します。という名前の新しいウィジェットを作成します m
ycompany.widget.ValidationComboBox。 概要を提示し、既存の ecm.widget.ValidationTextBox 参考として。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 385
例10-15は、JavaScriptのコードスニペットを示しています。
例10-15 ValidationComboBox.js
dojo.provide( "mycompany.widget.ValidationComboBox");
dojo.require( "dijit.form.ComboBox"); dojo.require(
"ecm.widget._HoverHelpMixin"); dojo.require(
"mycompany.Messages");
dojo.declare( "mycompany.widget.ValidationComboBox"、[dijit.form.ComboBox、ec
m.widget._HoverHelpMixin]、{/ *ここに説明の詳細を記入* /});
付随するHTMLファイルを指定する必要はありません。ウィジェットは、元のウィジェットのHTMLファイ
ルを使用して自身をレンダリングします。実装が完了したら、新しく作成したウィジェットを
ConfigurationPane.html 例10-16に示すファイル。
例10-16コンボボックスを含むConfigurationPane.htmlのスニペット
<div id = "annotationsEnabled" dojoAttachPoint = "_ annotationsEnabled"
dojoAttachEvent = "onChange:_onParamChange" dojoType =
"mycompany.widget.ValidationComboBox" required = "true" </ div>
コントロールを検証レイヤーに正しくワイヤリングできるように、拡張するウィジェットで使用可能なイベント
を必ず確認してください。たとえば、例10-16では、ユーザーがコンボボックスから値を選択したときに通知され
るようにonChangeイベントを使用しています。
386 IBM Content Navigatorのカスタマイズと拡張
MANIFEST.MFファイル
JARファイルを作成するときに使用するマニフェストファイルを作成します。最小構成タグを例10-17に示
します。
例10-17 MANIFEST.MF
マニフェストバージョン:1.0 Antバージョン:
Apache Ant 1.7.0作成者:2.4(MyCompany)
プラグインクラス:com.mycompany.viewerplugin.MyViewerPlugin
名前:build Built-By:develope
r Build:$ {TODAY}
ヒント: この例には示されていませんが、本番環境プラグインの場合は、HTMLタグのすべてのID属性に
一意の識別子を付加することをお勧めします。このようにして、プラグインに他のプラグインと同じIDの
タグが含まれないようにします。これにより、多くの問題が発生する可能性があります。
10.5サード・パーティーのビューアーをIBM Content Navigatorに統合する
このセクションでは、2つの別個のサード・パーティー・ビューアーをIBM Content Navigatorと統合することを検討し
ます。どちらのビューアも、組み込みビューアのリストに拡張機能を提供し、IBM Content Navigatorのユーザーが使用
できるツールを充実させることができます。
通常、IBM Content Navigatorに組み込まれていないサード・パーティーのビューアーを実装する場合、メーカーの
指示に基づいてサード・パーティーのビューアーをインストールまたはデプロイする必要があります。サード・パ
ーティーのビューアーをナビゲーター環境に統合するアプローチには、サード・パーティーのビューアーを呼び出
すためにIBM Content Navigatorアーキテクチャー内で使用できるプラグインが必要です。ビューアプラグインまた
はコネクタは、外部ビューアの呼び出しを担当します。
10.5.1 Snowbound VirtualViewer
最初に確認するビューアは、Ajaxに基づくSnowbound VirtualViewerです。ビューアーは、クライアント側のイ
ンストールや、Webブラウザー以外のユーザーマシンで実行されているソフトウェア(JREバージョンなど)
に関する前提条件を必要としません。ビューアはサーバー側サーブレットに依存するように構築されています
。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 387
クライアント側での表示を最適化するドキュメントコンテンツを配信します。このビューアには、ページの
並べ替え、注釈の操作、編集などの機能が含まれています。
このセクションでは、Snowbound VirtualViewer環境のセットアップに必要な前提条件の概要と、VirtualViewe
rコンテンツナビゲーターコネクターのセットアップに必要な詳細について説明します。Snowboundが提供する
Content Navigator Connectorは、仮想ビューアのメーカーであるSnowboundが開発した市販のプラグインです
。このセクションでは、例としてSnowboundを使用したコネクタの開発の詳細についても説明します。
前提条件
始める前に、特定の準備作業を完了する必要があります。Snowbound VirtualViewerには、製品のインストール
方法の説明が含まれています。次の仮定があります。
Snowbound VirtualViewerは、ナビゲーターWARフォルダーの直下のサブディレクトリーにインストールされます。私たちのセッ
トアップでは、このフォルダーは次のとおりです。
C:\ < WAS_INSTALL> \ AppServer \ profiles \ AppSrv01 \ installedApps \ P8Node01C ell \ navigator.ear \
navigator.war
このフォルダーの下に、Snowbound VirtualViewerファイルを含むフォルダーを追加します。この
フォルダに名前を付けました VirtualViewer。
Snowboundのインストール手順に基づいて、必要なエントリが web.xml ファイル。この設定では、次の場所
にあります。
C:\ < WAS_INSTALL> \ AppServer \ profiles \ AppSrv01 \ config \ cells \ P8Node01Ce ll \ applications \
navigator.ear \ deployments \ navigator \ navigator.war \ WE B-INF
388 IBM Content Navigatorのカスタマイズと拡張
例10-18に示すパラメータに細心の注意を払ってください。太字のテキストをサーバーのホスト名またはIP
に置き換えてください。
例10-18 Snowboundのサーブレット構成
<サーブレット>
<servlet-name> AjaxServlet </ servlet-name> <servlet-class>
com.snowbound.ajax.servlet.AjaxServlet </ servlet-class> <init-param>
<param-name> contentHandlerClass </ param-name>
<param-value> com.snowbound.snapserv.servlet.NavigatorContentHandler
</ param-value> </
init-param> <init-param>
<param-name> codebase </ param-name> <param-value> http:// < ip /ホスト名> / ナビゲーター/
VirtualViewer </ param-value> </ init-param> <init-param>
<param-name> servletURL </ param-name> <param-value> http:// < ip /ホスト名> / ナビゲーター/
VirtualViewer </ param-value> </ init-param> </ servlet>
<サーブレットマッピング>
<servlet-name> AjaxServlet </ servlet-name> <url-pattern> / VirtualViewer /
AjaxServlet </ url-pattern> </ servlet-mapping>
の VirtualViewer / config.js ファイルは、正しいサーブレットパスを反映するように変更されます。例10-19
に設定を示します。
例10-19 config.jsファイルの変更
var servletPath = "/ navigator / VirtualViewer / AjaxServlet";
ヒント: インストールに問題がある場合、有益なステップは、提供されている正確な指示に従ってWorkplac
eXTのビューアーをインストールすることです。この手順は、インストールプロセスに慣れるのに役立ちます
。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 389
このビューアー用のIBM Content Navigatorプラグインの開発
このビューア用のプラグインの開発は、前の例と大差ありません。このセクションでは、プラグインレベルの
構成をあまり行う必要がないため、同じJavaScriptファイルを使用します。
Eclipse(またはRational Application Developer)でJavaプロジェクトを作成し、ビルドパスに次のJARファイル
を追加します。
navigator.ja r
JSON4J.jar
j2ee.jar
次に、次のソースコードファイルを追加します。
MyViewerPlugin
MyViewerPluginService
MyViewerPluginViewerDef
launchViewer.jsp Configuration.html
MANIFEST.MF
MyViewerPluginクラス
この例では、例10-20に示すように、MyViewerPluginクラスはPluginクラスを拡張します。
例10-20 MyViewerPlugin.java
パッケージcom.mycompany.viewerplugin;
import java.util.Locale;
import com.ibm.ecm.extension.Plugin; import
com.ibm.ecm.extension.PluginService; import
com.ibm.ecm.extension.PluginViewerDef; import
com.ibm.ecm.util.MessageUtil;
パブリッククラスMyViewerPluginはプラグインを拡張します{
public String getId(){
「MyViewerPlugin」を返します。}
public String getName(){
getName(Locale.getDefault());を返します。}
public String getName(Locale locale){
文字列名= MessageUtil.getMessage(locale、
"plugins.myViewerPlugin.name");
390 IBM Content Navigatorのカスタマイズと拡張
if((name == null)||(name.equals( "plugins.myViewerPlugin.name"))){
name = "MyViewer"; }
名前を返す; }
public String getVersion(){
「1.3」を返します。}
public String getDojoModule(){
「myViewerPluginDojo」を返します。}
public PluginViewerDef [] getViewers(){
return new PluginViewerDef [] {new MyViewerPluginViewerDef()}; }
public PluginService [] getServices(){
return new PluginService [] {new MyViewerPluginService()}; }
public String getConfigurationDijitClass(){
「myViewerPluginDojo.ConfigurationPane」を返します。}}
パッケージを置き換えます。 の com.mycompany。* ここでは、製品と共に提供されるSamplePluginで使用さ
れるパッケージは、プラグインを正常に開発するために従う必要がないことを示すために使用されています。
ほとんどの組織は、使用する標準化されたパッケージをすでに持っています。交換する
com.mycompany あなたの組織からのパッケージで。
MyViewerPluginServiceクラス
この例では、例10-21に示すように、MyViewerPluginServiceクラスはPluginServiceクラスを拡張します。
例10-21 MyViewerPluginService.java
パッケージcom.mycompany.viewerplugin;
import java.io.IOException; import
java.io.Writer; import
java.net.URLDecoder; import
java.net.URLEncoder;
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 391
import java.util.HashSet; import
java.util.Map; import java.util.Set;
import javax.servlet.http.HttpServletRequest; import
javax.servlet.http.HttpServletResponse;
import com.ibm.ecm.P8ParamConstants; import
com.ibm.ecm.extension.PluginService; import
com.ibm.ecm.extension.PluginServiceCallbacks; import
com.ibm.ecm.serviceability.Logger; import com.ibm.ecm.util.Util; import
com.ibm.ecm.util.p8.P8DocID; import com.ibm.json.java.JSONObject;
パブリッククラスMyViewerPluginServiceはPluginService {
public static final String GET_CONFIGURATION = "getConfiguration"; public static final String
SET_CONFIGURATION = "setConfiguration"; public static final String OPEN_VIEWER = "ope
nViewer"; プライベート静的Set <String> serverTypes = new HashSet();
public String getId(){
「MyViewerService」を返します。}
public void execute(PluginServiceCallbacks callbacks、
HttpServletRequestリクエスト、HttpServletResponseレスポンス)が例外{
文字列api = request.getParameter( "api"); if(api.equals
( "getConfiguration"))
executeGetConfiguration(callbacks、request、response); else if(api.equ
als( "setConfiguration"))
executeSetConfiguration(callbacks、request、response); else if(api.equa
ls( "openViewer"))
executeOpenViewer(callbacks、request、response); }
private void executeGetConfiguration(PluginServiceCallbacks callbacks、
HttpServletRequestリクエスト、HttpServletResponseレスポンス)が例外{
System.out.println( "MyViewerPluginService.executeGetConfiguration");
文字列構成= callbacks.loadConfiguration(); ライターw = response.getWr
iter();
w.write(構成);
w.flush();
}
private void executeSetConfiguration(PluginServiceCallbacks callbacks、
392 IBM Content Navigatorのカスタマイズと拡張
HttpServletRequestリクエスト、HttpServletResponseレスポンス)が例外{
文字列構成= request.getParameter( "configuration");
if(設定== null){
構成= ""; }
System.out
。println(
"MyViewerPluginService.executeGetConfiguration-
構成: "
+ 構成);
callbacks.saveConfiguration(configuration); }
private void executeOpenViewer(PluginServiceCallbacks callbacks、
HttpServletRequestリクエスト、HttpServletResponseレスポンス)が例外{
String serverType = request.getParameter( "serverType");
if(serverTypes.contains(serverType.toLowerCase())){
構成構成=新しい構成(
callbacks.loadConfiguration());
if(configuration.configured){
StringBuffer urlBuf = new StringBuffer(
"VirtualViewer / launchViewer.jsp?");
文字列docUrl = request.getParameter( "docUrl");
マップdocUrlMap = Util.getParameterMap(docUrl);
String objectStoreName =(String)docUrlMap
。get(
"objectStoreName");
文字列docId =(文字列)docUrlMap.get( "docid"); docId =(docId!= null)?URLD
ecoder.decode(docId、 "UTF-8")
: ヌル;
文字列vsId =(文字列)docUrlMap.get( "vsId"); vsId =(vsId!= null)?URLDecoder.de
code(vsId、 "UTF-8"):null;
P8DocID p8DocID = new P8DocID(docId); 文字列p8O
bjectStore = objectStoreName; 文字列reposID = p8DocID
.getObjectID();
String repositoryId =(String)docUrlMap
。get(P8ParamConstants.PARM_REPOSITORY_ID);
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 393
urlBuf.append( "p8ObjectStore =")。append(
URLEncoder.encode(p8ObjectStore、 "UTF-8")); urlBuf.append
( "&reposID =")。append(
URLEncoder.encode(reposID、 "UTF-8")); urlBuf.appen
d( "&vsId =")
。append(URLEncoder.encode(vsId、 "UTF-8")); urlBuf.appen
d( "&repositoryId =")。append(
URLEncoder.encode(repositoryId、 "UTF-8")); urlBuf.append
( "&docid =")。append(
URLEncoder.encode(docId、 "UTF-8"));
Logger.logInfo(MyViewerPluginService.class、
"executeOpenViewer"、request.getSession()、urlBuf.toStrin
g());
response.sendRedirect(urlBuf.toString()); } そうしないと {
新しい例外をスローします( "MyViewerが構成されていません。"); } } そうしないと {
新しいException( "Unsupported server type:" + serverType); }}
静的{
serverTypes.add( "p8"); }
プライベートクラスの構成{
boolean configured = false; boolean
annotationsEnabled;
public Configuration(String configuration)はIOException {をスローします
JSONObject jsonConfig;
System.out.println( "Configuration.ctor-configuration:"
+ 構成);
if(設定!= null){
jsonConfig = JSONObject.parse(configuration);
String annotationsEnabled =((String)jsonConfig
。get(
"annotationsEnabled"));
this.configured =(annotationsEnabled!= null);
this.annotationsEnabled =ブール値
。parseBoolean(annotationsEnabled);
394 IBM Content Navigatorのカスタマイズと拡張
}}
public String serialize()はIOException {をスローします
JSONObject jsonConfig = new JSONObject();
System.out.println(
"Configuration.serialize-this.annotationsEnabled:"
+ this.annotationsEnabled);
jsonConfig.put( "annotationsEnabled"、this.annotationsEnabled);
jsonConfig.serialize();を返します。}}}
MyViewerPluginViewerDefクラス
この例では、例10-22に示すように、MyViewerPluginViewerDefクラスはPluginviewerDefクラ
スを拡張します。
例10-22 MyViewerPluginViewerDef.java
パッケージcom.mycompany.viewerplugin;
import com.ibm.ecm.extension.PluginViewerDef; import
java.util.Locale;
パブリッククラスMyViewerPluginViewerDefはPluginViewerDef {
private static final String [] SUPPORTED_SERVER_TYPES = {"p8"};
private static final String [] SUPPORTED_MIME_TYPES = {"application / pdf"};
public String getId(){
「myViewer」を返します。}
public String getName(Locale locale){
「MyViewer」を返します。}
public String getLaunchUrlPattern(){
帰る
"servicesUrl + '/ plugin?plugin = MyViewerPlugin&action = MyViewerService&api = openView er&docUrl =' +
encodeURIComponent(docUrl)+ '&contentType =' + mimeType + '&serverType =' + serverType + privs";
}
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 395
public String [] getSupportedContentTypes(){
SUPPORTED_MIME_TYPESを返します。}
public String [] getSupportedServerTypes(){
SUPPORTED_SERVER_TYPESを返します。}}
launchViewer.jspファイル
この例では、ビューアにロードしてリダイレクトするためのJSPファイルも必要です。プロジェクトの任意の場
所に追加して名前を付けることができます launchViewer.jsp ファイル。この例では、それを VirtualViewer ディレク
トリ。例10-23は、JSPファイルを示しています。
例10-23ビューアにリダイレクトするJSPファイル(launchViewer.jsp)
<%@ page import = "java.net.URLDecoder、java.net.URLEncoder"%>
<%request.setCharacterEncoding( "UTF-8");
文字列clientInstanceId = request.getSession()。getId();
String objectStoreName = request.getParameter( "p8ObjectStore");
objectStoreName =(objectStoreName!= null?URLDecoder.decode
(objectStoreName、 "UTF-8"):null);
文字列vsId = request.getParameter( "vsId");
vsId =(vsId!= null?URLDecoder.decode(vsId、 "UTF-8"):null);
String repositoryId = request.getParameter( "repositoryId");
repositoryId =(repositoryId!= null?URLDecoder.decode(repositoryId、 "UTF-8"):null);
文字列docId = request.getParameter( "docid");
docId =(docId!= null?URLDecoder.decode(docId、 "UTF-8"):null);
文字列documentId = "objectStoreName =" + objectStoreName
+ "&folderId =" + "null" + "&objectType =" + "ドキュメント"
+ "&vsId =" + vsId + "&id =" + docId + "&repositoryId ="
+ repositoryId;
文字列encodingDocumentId = URLEncoder.encode(documentId); %>
396 IBM Content Navigatorのカスタマイズと拡張
<html>
<head>
<title>ビューアへのリダイレクト</ title> <meta
http-equiv = "REFRESH"
content = "0; url = / navigator / VirtualViewer / ajaxClient.html?documentId = <%= encodedDo
cumentId%>&clientInstanceId = <%= clientInstanceId%>"> </ head> </ html>
Configuration.htmlファイル
私たちは Configuration.html 382ページの「ConfigurationPane.htmlファイル」からファイルを作成し、次のパッ
ケージに追加します。
com.mycompany.viewerplugin.WebContent.myViewerPluginDojo.templates
Configuration.jsファイル
私たちは Configuration.js 382ページの「ConfigurationPane.jsファイル」からファイルを作成し、次のパ
ッケージに追加します。
com.mycompany.viewerplugin.WebContent.myViewerPluginDojo
MANIFEST.MFファイル
私たちは MANIFEST.MF 387ページの「MANIFEST.MFファイル」からファイルを作成し、プロジェクトのルート
に追加します。このマニフェストファイルは、JARファイル( build.xml ファイルはあなたのためにそれを処理し
ます。の
build.xml 390ページの「プラグインのデプロイと設定」に示されています)。
プラグインのデプロイとセットアップ
重要な導入戦略: このチュートリアルでは、IBM Content Navigatorのデプロイ済みパスに多くのファイルを
配置します。製品を再デプロイすると、これらのファイルが削除される可能性があります。プラグインの適
切な展開戦略があることを確認してください。
プラグインをデプロイするには、以下の手順を実行します。
1.単純なANTファイルを作成してJARファイルを作成します。ビルドファイルを例10-24に示します。この
ビルドファイルはコードをコンパイルし、JARファイルを ビルド。 このファイルは、Eclipseで直接実
行するか、コマンドラインから実行できます。
例10-24プラグインをデプロイするためのビルドファイル(build.xml)
<?xml version = '1.0' encoding = 'UTF-8'?> <プロジェクト
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 397
name = "myViewerPlugin" based
ir = "。" default = "all">
<ターゲット
name = "all"
depend = "clean、compile、jar" />
<path id = "classpath">
<ファイルセット
id = "lib.jars" dir =
"lib">
<include name = "*。jar" /> </ filese
t> </ path>
<ターゲット名= "クリーン">
<delete dir = "build / temp" /> </
target>
<ターゲット名= "コンパイル">
<mkdir dir = "build / temp" />
<javac
debug = "true" destdir =
"build / temp" source = "1.5"
srcdir = "src" target = "1.5">
<classpath refid = "classpath" />
<include name = "** / *。java" /> </ javac>
</ target>
<ターゲット名= "jar">
<copy todir = "build / temp">
<ファイルセットdir = "src">
<include name = "** / WebContent / **" /> </ fileset>
</ copy>
398 IBM Content Navigatorのカスタマイズと拡張
<jar jarfile = "build / MyCompanyViewer.jar">
<ファイルセット
dir = "./ build / temp"
include = "** / *" />
<マニフェスト>
<属性
name = "プラグインクラス"
value = "com.mycompany.viewerplugin.MyViewerPlugin" />
<セクション名= "ビルド">
<属性
name = "Built-By" value = "$
{user.name}" />
<属性
name = "Build" value = "$
{TODAY}" /> </ section> </ manifest> </
jar>
<delete dir = "./ build / temp" /> </ target>
</プロジェクト>
2.プロジェクトがビルドされたら、ソリューションをデプロイします。この例では、次の手順を使用します。
–
JARファイルをプラグインディレクトリに配置します。このセットアップでは、次のパスを使用します。
C:\ < WAS_INSTALL> \ AppServer \ profiles \ AppSrv01 \ installedApps \ P8Node 01Cell \
navigator.ear \ navigator.war \ plugins
- 場所 launchViewer.jsp VirtualViewerサブディレクトリ内のファイル。このセットアップでは、次のパスを
使用します。
C:\ < WAS_INSTALL> \ AppServer \ profiles \ AppSrv01 \ installedApps \ P8Node 01Cell \
navigator.ear \ navigator.war \ VirtualViewer
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 399
3.展開が完了したら、新しいプラグインを登録します。IBM Content Navigator管理デスクトップで次の手順を使
用します。
a。を開く プラグイン タブ。
b。デプロイされたJARファイルを指すURLを使用してファイルを指定します。次のURLを使用します。
http:// < ip / host> / navigator / plugins / MyCompanyViewerPlugin.jar
プラグイン登録ページを図10-9に示します。
図10-9プラグイン登録ページ
JARファイルには、よりわかりやすい名前を使用できます。この例では、 SnowboundViewerPlugin.jar フ
ァイル。ただし、Snowboundで使用できるようになるものと、サンプルを完成させるために私たちが作
成する必要があるものには違いがあります。構成を指定する必要はありません。の annotationsEnabled
構成設定は、構成の詳細を構築する方法の例です。
400 IBM Content Navigatorのカスタマイズと拡張
c。クリック 保存して閉じます。 プラグインが登録され、
その他、図10-10に示すとおり。
図10-10登録済みプラグインのリスト
4. 1つ以上のMIMEタイプを新しいビューアーに関連付けて、ユーザーがクリックして文書を開いたときにIBM Content Navigatorがそ
れを呼び出すことができるようにします。次の2つの方法のいずれかで行います。
–
ビューアマップを作成し、そこでMIMEタイプを設定します。
–
使用するデスクトップに既に関連付けられているマップを変更し、そこに新しいMIMEタイプのマッ
ピングを追加します。
この例では、2番目の方法を使用します。使用するデスクトップに定義されているマップは、My Viewer Ma
pという名前です。次に、次の手順を使用して、新しいMIMEタイプを新しいビューアに関連付けます。
a。に行く ビューアマップ 管理デスクトップ。
b。クリック 新しいマッピング このビューアマップに。
c。サポートされる構成をセットアップします。IBM Content Navigatorユーザー・インターフェースは、新しい
ビューアーがサポートするMIMEタイプおよびリポジトリー・タイプをすでに認識しているため、サポート
される構成のみのセットアップをガイドします。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 401
特定の設定を図10-11に示します。
図10-11ビューアのマッピング構成ページ
d。ビューアマップの優先ルールが設定を上書きしないことを確認してください。例えば、PDFをサポートす
る別のビューアーが定義されていて、構成済みのビューアーの前にリストされている場合、IBM Conten
t Navigatorはリストされている最初のビューアーを使用します。
402 IBM Content Navigatorのカスタマイズと拡張
この例では、 上に移動( 図10-12)ビューアが他のビューアよりも優先されることを確認します。これ
は、ビューアがマッピングのリストの最初にあることを意味します。
図10-12ビューアマップの優先ルールの監視
e。ビューアをテストする前に、ブラウザを更新して、変更が有効であることを確認します。
5.ビューアをテストするには、リポジトリに移動し、ドキュメントを見つけて開きます。この例では、IBM FileNe
t P8リポジトリに移動し、PDFドキュメントを見つけてクリックして開きます。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 403
図10-13に示すように、Snowbound VirtualViewerが呼び出され、ドキュメントをレンダリングします
。
図10-13ビューアが起動されました
Snowbound VirtualViewer ICNコネクタの使用
VirtualViewerを呼び出すために独自のプラグインを開発する必要を回避するために、Snowboundが提供する利用
可能なプラグインパッケージを使用できます。ここで使用するプラグインは、VirtualViewer ICNコネクタです。
このプラグインの評価版をダウンロードしました。これは、Snowbound SoftwareのWebサイトまたは次の場所か
ら入手できます。
http://downloads.snowbound.com/evaluate/73jG0CvaZ910k2/vvRedbook.php
プラグインの登録
Snowbound VirtualViewerプラグインは、コンテンツナビゲーター環境内でプラグインとして登録する必要
があります。VirtualViewerプラグインの名前は
SnowboundVirtualViewerPlugin.jar また、このファイルをContent Navigator環境で使用できるようにする必
要があります。
404 IBM Content Navigatorのカスタマイズと拡張
プラグインを登録するには、Content Navigator管理デスクトップを開きます。
1.選択 プラグイン 構成オプションから選択します 新しいプラグイン。
2. JARファイルオプションを選択し、ファイルの場所を入力します
SnowboundVirtualViewerPlugin.jar ファイル。
3.クリック 負荷。 すべてが正しい場合、ウィンドウは構成で自動補完されます
VirtualViewerプラグインに固有のオプション。409ページの図10-16を参照してください。
4.前提条件の一部として構成したVirtualViewerURLの場所を入力します。
/ navigator / VirtualViewerHTML5
5. VirtualViewerサーブレットパスの場所を入力します。
/ navigator / AJAXServlet
6.プラグイン構成を保存して閉じます。
図10-14 Snowbound VirtualViewerプラグインの登録
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 405
IBM Content Navigatorデスクトップで仮想ビューアを構成する
プラグインが登録された後、プラグインをContent Navigatorデスクトップ構成の一部として使用できます。デス
クトップ構成でプラグインを有効にするには、いくつかの手順が必要です。
1.ビューアーマップを構成します。
ビューアマップの構成により、特定のMIMEタイプまたはタイプと識別されたビューアの間の関連付けが決
まります。この機能により、関連するファイルタイプに基づいてシステムが起動するビューアを決定できま
す。このようにして、VirtualViewerで起動するファイルタイプを事前に決定できます。
ビューアマップは、管理者デスクトップ内で次のように構成されます。
a。選択する ビューアマップ 構成オプションから選択します 新着
ビューアマップ。
b。ビューアーマップ構成に名前を付けます。
c。クリック リポジトリタイプ そして選択 FileNet Content Manager。
d。ビューアの横にあるドロップダウンメニューから、 VirtualViewer。
e。このビューアマップ設定に関連付けるMIMEタイプを選択します。
407ページの図10-15は、Snowbound VirtualViewer MIMEタイプマッピングのセットアップを示しています。
406 IBM Content Navigatorのカスタマイズと拡張
図10-15ビューアのMIMEタイプのマッピング
2.ビューアーマップを使用するようにデスクトップを構成します。
a。デスクトップ設定で、新しく作成したビューアマップを使用するデスクトップを選択します。
b。セットする ビューアマップ 新しく作成された VirtualViewer HTML5マップ。
3. Webサーバーを実行しているサーバーを再起動して、VirtualViewerがIBM Content Navigator環境で正しく
機能していることを確認します。
10.5.2有益なグラフィックスBrava!エンタープライズビューア
ブラバ!IBM Content Navigatorのプラグインは、ナビゲーター環境のプラグインアーキテクチャを利用します。
Bravaは、IBM Content Navigatorエクスペリエンス内から無料の表示、注釈、編集、および発行機能を提供しま
す。
IBM Content NavigatorにBravaを追加します!ナビゲーター環境の機能を拡張して、追加のファイル形式のサポー
ト、ドキュメントのマージ機能、補足検索のサポート、およびその他の多くの操作を含めることができます。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 407
ブラバ!ビューアプラグインは、組織の要件とサポート環境に応じて、HTMLベースまたはActive-Xベースの
ビューアを使用するオプションを提供します。
この例では、Brava!を使用するようにIBM Content Navigatorを構成します。ドキュメント比較およびドキュ
メントマージ機能を提供するビューア。ドキュメントのマージ操作により、コンテンツナビゲーターのユーザ
ーは、ナビゲーターデスクトップ内で1つ以上のドキュメントまたはドキュメントバージョンを選択し、Brav
a!内のページを再配置できます。ビューアまたは新しいドキュメントを作成します。document-compareコマ
ンドを使用すると、ユーザーは同じドキュメントの2つのバージョン、または2つの異なるドキュメントを同時
に比較できます。
前提条件
始める前に、特定の準備作業を完了する必要があります。Brava Enterprise管理者ガイドには、ソフトウェアの
インストールと構成の手順が記載されています。Bravaを使用するようにIBM Content Navigatorクライアント
を構成する前に!ビューア、インストールと展開のプロセス全体を完了する必要があります。
の brava.properties ファイルはContent Navigatorサーバーに配置する必要があり、ローカルのBravaを含めるように
更新する必要があります。プロパティ:
server.brava: Bravaサーバーの場所へのURLを含める必要があります
application.url: クライアントがContent Navigatorアプリケーションへのアクセスに使用するURLを参照する必要
があります
server.viewer.files: クライアントインストールファイルへの正確なパスを含める必要があります
compare.client: ドキュメント比較操作(HTMLまたはactiveX)で起動するビューアを示す必要がありま
す
プラグインの登録
ブラバ!ビューアープラグインは、コンテンツナビゲーター環境内でプラグインとして登録する必要があります
。ブラバ!ViewerにはIGCPluginという名前のContent Navigatorプラグインが含まれています。このプラグイン
は、コンテンツナビゲーター環境にアクセスできるWebサーバーまたはドライブを介してデプロイする必要があ
ります。プラグインを登録するには、Content Navigator管理デスクトップを開き、以下の手順を実行します。
1.選択 プラグイン 構成オプションから選択します 新しいプラグイン。
2. JARファイルオプションを選択し、ファイルの場所を入力します IGCPlugin.jar ファイル。
3.クリック 負荷。 これが正しく行われると、ウィンドウは
Bravaに固有の構成オプション!プラグイン。409ページの図10-16を参照してください。
408 IBM Content Navigatorのカスタマイズと拡張
4.の場所を入力します brava.properties の一部として構成したファイル
前提条件。このファイルはContent Navigatorサーバーに対してローカルである必要があります。
5.プラグイン構成を保存します。
図10-16 IGCビューアプラグインの構成
IBM Content Navigatorデスクトップの構成
プラグインが登録されたら、これをContent Navigatorデスクトップ構成の一部として使用できます。デスクトッ
プ構成でプラグインを有効にするには、いくつかの手順が必要です。
1.ビューアーマップを構成します。
ビューアマップの構成により、特定のMIMEタイプまたはタイプと識別されたビューアの間の関連付けが決
まります。この機能を使用すると、関連付けられているファイルタイプに基づいて、システムが起動するビ
ューアを決定できます。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 409
このようにして、Bravaで起動するファイルタイプを事前に決定できます。ビューア。
次のように、管理者デスクトップ内でビューアマップを設定します。
a。選択する ビューアマップ 構成オプションから選択します 新着
ビューアマップ。
b。ビューアーマップ構成に名前を付けます。
c。クリック 新しいマッピング リポジトリタイプ(IBM Content
ManagerまたはFileNet Content Manager)。
d。HTMLまたはActiveXを選択します。この本を執筆している時点で、HTMLビューアはInternet Explorer 9(Wi
ndows)、Firefox(MacおよびWindows)、およびSafari(MacおよびWindows)で認定されています。Act
iveXビューアは、Internet Explorer 8および9(Windows)で認定されています。
e。このビューアマップ設定に関連付けるMIMEタイプを選択します。
図10-17は、IGC ActiveXビューアのセットアップを示しています。
図10-17ビューアのマッピング
2.コンテキストメニューを構成します。
コンテンツメニューを構成することで、特定のブラバを追加できます。ビューアはデフォルトのアプリケーシ
ョンメニューに機能します。この場合、Compare関数とDocMerge関数をメニューに追加します。
410 IBM Content Navigatorのカスタマイズと拡張
管理者デスクトップのコンテキストメニューを次のように設定します。
a。選択する メニュー 構成オプションから。
b。既定のドキュメントコンテキストメニューのコピーを作成し、名前を変更します。
c。を選択 比較する そして DocMerge 利用可能なリストのアクション
上矢印と下矢印を使用して、アクションをメニューリスト内の目的の場所に配置します。
3.ビューアーマップとメニューを使用するようにナビゲーターデスクトップを構成します。ビューアーマップとメニュー
をデスクトップに追加すると、指定したコンテンツナビゲーターデスクトップ内にそれらのアイテムが表示されます
。次のように、管理者デスクトップでナビゲーターデスクトップを構成します。
a。選択する デスクトップ 構成オプションから。
b。Bravaを使用するデスクトップ構成を選択してください!ビューア。
c。クリック 編集。
d。の中に 一般的な タブで、設定したビューアマップを選択します。
デスクトップ構成セクション。
e。の中に メニュー タブで、ドキュメントで構成したばかりのメニューを選択します
コンテキストメニューセクションのコンテンツメニューフィールド。
4. IGC Extensions AddOnをIBM FileNet Content Managerにインストールします。FileNet Enterprise Manager管
理アプリケーション内で、環境にIGC拡張機能をインストールします。
a。FileNet Enterprise Manager内で右クリック アドオン そして選択 新着
拡張機能。
b。を選択 IGC_CoreExtensions.xml ブラバからファイル!企業
インストールアーカイブ。
c。クリック OK 次に、必要なオブジェクトストアにAddOnを追加します。
d。目的のオブジェクトストアを選択し、右クリックして選択します。 すべて
タスク → AddOnをインストールします。
e。環境にインポートしたアドオンを選択します。
第10章組み込みのビューアのカスタマイズとサードパーティのビューアの統合 411
10.6結論
この章では、IBM Content Navigator内の組み込みビューアの概要について説明します。組み込みのビューアー関
数ではカスタマイズのニーズが満たされない場合は、ナビゲーターAPIを介したクライアント側またはサーバー
側の拡張機能開発を通じて表示機能を拡張できます。
さらに、さまざまなサードパーティのビューアが、ドキュメントのマージと比較、拡張形式の表示などの拡張表
示機能を提供します。この章では、サードパーティの2つのビューアをContent Navigatorプラグインアーキテク
チャで使用するために簡単に設定する方法を示します。
412 IBM Content Navigatorのカスタマイズと拡張
11
チャプター11。
ソリューションの拡張
モバイルプラットフォーム
この章では、IBM Content Navigatorに基づくソリューションをモバイルプラットフォームに拡張するために使用
できるシナリオについて説明します。製品に含まれているIBM Worklightサンプルの概要を示し、このサンプルの
カスタマイズを示します。さらに、この章では、このサンプルに使用できる配備シナリオについて説明します。
この章では、次のトピックについて説明します。
IBM Content Navigatorモバイルソリューションの例の概
要
IBM Worklightサンプルのカスタマイズ
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
413
11.1 IBM Content Navigatorモバイルソリューション
企業コンテンツへのモバイルアクセスが真のニーズになりつつあります。この必要性は、モバイルアプリケーシ
ョンに精通していて、常に動いているクレームアジャスターなどのナレッジワーカーに限定されなくなりました
。企業は、従業員やクライアントがモバイルプラットフォームを使用して作業効率を高め、情報の配信を加速し
て利益を得ることを迫られています。現在、ECMシステムはパブリックインターネットに公開されており、外部
の顧客がコンテンツに直接アクセスして使用し、いつでもどこからでもコンテンツにアクセスできます。この新
しいアプローチは、ドキュメントの複製や印刷を回避するのに役立ち、ユーザーは常に最新バージョンの必要な
ドキュメントを入手できます。さらに、メタデータやコンテンツベースの検索など、より多くのECM機能を活用
できます。これをコンテンツベースの機能のみに限定する必要はありません。
ソリューションがIBM Content Navigatorの拡張機能として構築されているシナリオでは、そのアーキテクチャー
が提供するモジュール性から利点を得ることができます。モバイルクライアントは、標準のWebクライアントが
通常提供する機能のサブセットを提供するのが一般的です。IBM Content Navigator JavaScriptモデルを使用して
モバイルアプリケーションを開発すると、既存のコンポーネントの再利用が簡単になります。EDS、要求/応答フ
ィルター、サービスプラグインなどのサーバー側コンポーネントのすべての拡張機能は、モバイルクライアント
から直接使用することもできます。
11.1.1モバイル開発オプション
モバイルデバイスは、ユーザーがWebページを操作する方法に固有です。タッチスクリーンによる制御では、コ
ンピューターのマウスポインターと人間の指の精度の違いに対処するために、ユーザーがタッチできるより広い
領域が必要です。左右のマウスクリックの代わりに、特徴的な機能はスワイプ、タップ、ピンチ、またはデバイ
スの回転です。デバイスは解像度も異なり、ズーム、カメラ、ジャイロスコープ、またはGPSを使用したユーザ
ーの位置の検出などの機能に簡単にアクセスできます。インターネットアクセスの速度は、利用可能なネットワ
ークまたはWiFiのタイプによって制限されることがよくあります。モバイルアプリケーションを開発する際、ソ
リューションに採用するモバイル仕様のレベルを決定することが重要です。
注意: このセクションでは、すべての可能なオプションが含まれているわけではなく、最も頻繁に使用されるオプションのみに焦点が
当てられています。
414 IBM Content Navigatorのカスタマイズと拡張
モバイルWebアプリケーション
ネイティブアプリと同様のウェブアプリケーションを作成するには、モバイルプラットフォームをサポートするウェブフレーム
ワークの1つを使用して、そのルックアンドフィールを模倣できます。そのようなフレームワークの1つがDojo Mobileです。
http://dojotoolkit.org/features/mobile
このフレームワークはDojoフレームワークの拡張であるため、同じベースを使用するIBM Content Navigatorとの
統合を簡素化します。このフレームワークは、優れたユーザーエクスペリエンスを提供し、タッチ、スクロール
、タップなどの指の動きを使用した簡単な制御をサポートするウィジェットの大規模なスイートを提供します。
Dojoモバイル・ウィジェットを、IBM Content Navigatorが提供する標準のdijitと混合することもできます。このア
プローチにより、標準のWebアプリケーションまたは製品に含まれているものだけにすでにある開発済みのUI要
素を再利用できます。IBM Content Navigator JavaScriptを使用して、カスタムサービスプラグインを呼び出すこ
ともできます。この組み合わせにより、高度なコンポーネントの再利用が可能になります。
Dojo Mobileは引き続き、ローカルデバイスへのアクセスが制限されたHTML5およびJava Script Webアプリケーショ
ンを生成することに注意してください。HTML5では、新しい仕様の開発が進行中です。例には、カメラなどの外部デ
バイスデータを操作できるgetUserMedia / Stream APIが含まれます。ただし、すべてのモバイルブラウザーで完全に
サポートされているわけではありません。ローカルデバイスにアクセスする場合は、416ページの「ハイブリッドモ
バイルアプリケーション」を参照してください。
IBM Content Navigatorのモバイル向けに最適化されたレイアウト
もう1つの重要な注意事項は、IBM Content NavigatorはHTML5を使用して記述されており、モバイルデバイス上の最
新のブラウザーで直接表示できることです。デバイス画面の幅が広がると、ユーザーエクスペリエンスの快適さが向
上します。マルチチャネルレイアウトまたはdijitを作成することで、これをさらに改善できます。Dojoはまた提供しま
す 道場/あり
そして dojo / sniff ユーザーエージェントのテストに使用できるモジュール。レイアウトまたはカスタム機能
で、ターゲットプラットフォームに基づいてdijitの構成を変更できます。クライアント環境に基づいて、条件
付きモジュールのロードを使用することもできます。Dojoローダーは、条件付きモジュールのロードに使用で
きる3項式をサポートしているため、モバイルデバイスからのネットワークトラフィックを削減できます。
第11章ソリューションをモバイルプラットフォームに拡張する 415
ネイティブiOSクライアントの拡張
IBM Content Navigatorは、Apple AppStoreからダウンロードできるネイティブiOSクライアントに含まれています
。ネイティブクライアントのユーザーインターフェイスは、ネイティブアプリケーションの可能性を最大限に活
用し、強力なユーザーエクスペリエンスを提供します。このクライアントは、モバイルユーザーに機能の標準セ
ットを提供する必要があるシナリオに適しています。このクライアントは中間層サービスと通信します。これに
より、応答/要求フィルターを使用して、標準機能の動作を部分的にカスタマイズすることが可能になります。さ
らに、このクライアントは、UI要素なしでデータのみを転送するため、ネットワーク帯域幅への要求も低くなり
ます。これは、iOSクライアントが提供する別のカスタマイズオプションには当てはまりません。ここでは、ネイ
ティブクライアント内で指定されたURLを直接開くカスタム機能を追加できます。このようにして、ネイティブ
クライアントを他のWebアプリケーションと簡単に統合できます。この2番目のオプションを使用して、IBM Co
ntent Navigatorベースのアプリケーションを開くこともできます。アプリケーションがネイティブクライアントか
ら開いたデスクトップと同じサーバー上にあり、ユーザーが再度ログインする必要がない場合は、セッションCo
okieをネイティブクライアントと共有することでメリットを得られます。
ハイブリッドモバイルアプリケーション
ネイティブアプリケーションは、高性能とデバイスAPIへのアクセスを提供し、ネットワークの需要を減らしま
すが、開発プラットフォームの特定の知識が必要です。ただし、Webアプリケーションは、ある程度の移植性と
開発の簡素化を提供しますが、デバイスAPIへのアクセスは制限されます。両方のアプローチの利点を組み合わ
せることは、 ハイブリッドアプリケーション これらの部分で構成されています:
ネイティブ部分:これは、デバイスに直接デプロイされたネイティブアプリケーションです。これは、コンテンツ
を保存できる拡張されたWebブラウザーとコンテナーを提供します。WebコンテンツをHTML、JavaScript、およ
び画像としてデバイスに直接保存できるため、繰り返しダウンロードしたり、キャッシュに依存したりする必要は
ありません。これにより、Webアプリケーションの速度が向上します。 アパッチコルドバ は、ネイティブのシェ
ルラッピングWebコンテンツを提供するフレームワークの1つです。また、ネイティブコードを記述したり、プラ
ットフォームの詳細を理解したりすることなく、物理デバイスAPIにアクセスするために使用できる統合されたク
ロスプラットフォームのJavaスクリプトAPIも提供します。
Webパーツ:これは、ネイティブパーツによって表示されるWebコンテンツです。Webブラウザー内で実行
されるため、Webアプリケーションが使用できるものに制限はありません。使用できます Dojo Mobile また
は必要なその他のフレームワーク。さらに、前の項目で説明したJavaScript APIを使用できます。
開発に使用できるいくつかのフレームワークについて説明しました。エンタープライズレベルの開発では、 IBM
Worklight ハイブリッド、Web、およびネイティブモバイル開発向けの強力なツールを提供します。私たちが言及
したフレームワークを使用し、追加の機能を単一の環境に統合します。
416 IBM Content Navigatorのカスタマイズと拡張
開発とテストにIDEを使用できます。これは、デバッグ、デバイスSDKとの統合、複数のターゲットプラットフォーム用の単
一ビルド、ネイティブアクセス用のJavaScript API、およびブラウザーベースのシミュレーターの機能を提供します。このア
プローチを使用すると、実動で使用するためのIBM Worklightランタイム・インフラストラクチャーを必要としないものより
も、Webまたはハイブリッド・アプリケーションを生成できます。ただし、IBM Worklight APIを使用することでメリットを
得ることができます。
アプリケーションを拡張して、ターゲットデバイスへの管理された展開、バージョン管理、ユーザーとアプリケ
ーションの動作のインテリジェントな分析追跡、カスタムイベントと監査ログ、プッシュ通知、または幅広いア
ダプターなどのエンタープライズレベルの機能を構成することもできます。このようなシナリオでは、Workligh
t Serverなどの追加のインフラストラクチャーも必要になります。詳細については、製品のドキュメントを参照し
てください。
http://pic.dhe.ibm.com/infocenter/wrklight/v6r0m0/topic/com.ibm.help.do c / wl_home.html
11.2例の概要
次に、IBM Content Navigatorで提供されるモバイルサンプルを紹介し、IBM WorklightおよびDojoモバイルを
使用したカスタマイズを示します。
IBM Content Navigatorは、IBM Worklight Studioで作成されたモバイルサンプルプロジェクトを提供します。この
サンプルは、お気に入り、検索、Datacap、またはiPhone用に最適化されたリポジトリー・ブラウザーなどの標準
的なコンテンツ管理機能の使用法を示しています クライアント。プロジェクトには、環境にインポートして独自の
モバイルソリューションのベースとして使用できるソースコードが含まれています。
カスタマイズする前に、少なくともサンプルおよび展開シナリオの高レベルのアーキテクチャを理解しているこ
とを確認してください。418ページの図11-1に示すように、ハイブリッドアプリケーションの配備に焦点を当てま
す。
後で、カスタマイズの例で、サンプルをパッケージ化する別の方法を示します。サンプルは、サーバーに直接I
BM Content Navigatorプラグインとしてパッケージ化およびデプロイされます。詳細については、438ページの
11.3.7「パッケージ化と配備」を参照してください。
第11章ソリューションをモバイルプラットフォームに拡張する 417
プラグイン
アプリケーション・サーバー
EDS
IBM Content Navigator中間層サービス
XmlHttpRequest / Response
モバイル機器
ハイブリッドアプリケーション
Webコンテンツ– HTML / JS / CSS / ..
見る
コントローラ
MILayer
遷移
Dojo Mobile
他のアプリ
ICNモデルAPI
Worklight API
…
JS / Native Bridge
ネイティブコード/デバイスAPI
図11-1モバイルサンプルのアーキテクチャ
ハイブリッドアプリケーションとしてパッケージ化すると、デバイスのWebコンテンツがネイティブシェル内に
表示されます。ほとんどのWebコンテンツはローカルデバイスから読み込まれますが、ハイブリッドアプリケー
ションはモデル関連の操作をサーバー側に依存しています。中間層サービスと通信するIBM Content Navigatorモ
デルAPIを使用します。サンプルでは モデルビューコントローラー
パターン。の モデル APIはアプリケーションから直接アクセスされませんが、次のように呼ばれるシングルトンファサードレイ
ヤーを使用します MILayer。
プレゼンテーションデータモデルを含むユーザーインターフェイス全体は、Dojo Mobileウィジェットを使用して
実現されます。で作業する ビュー、 サポートAPIを使用することができます。これらには、たとえば 遷移 ビュー
間のセグエを実行するAPI、または処理に時間がかかる可能性があるアクティブな操作についてユーザーに通知す
る進行状況インジケーター。
418 IBM Content Navigatorのカスタマイズと拡張
の コントローラ モデルデータに基づいてビューを準備します。ほとんどの場合、更新に基づいてユーザーイベントも
処理します。また、Worklight JavaScript APIと対話します(たとえば、Cordova APIを使用してカメラまたはフォトア
ルバムにアクセスします)。ドキュメントのプレビューや他のアプリケーションとの相互作用などの高度な機能を使用
するために、コントローラーはネイティブコードの一部を呼び出すことができます。
サンプルがハイブリッドアプリケーションとして実行されていることを検出すると、IBM Worklight API( JSONStore)
アプリケーションのパスワードを保存します。このストアはAES-256暗号化できます。
アーキテクチャを十分に理解した上で、カスタマイズに焦点を当てます。
11.3 IBM Worklightサンプルのカスタマイズ
このセクションでは、IBM Worklightサンプルに新しいWork機能を追加するプロセスについて説明します。
省略表記: 次のパスを< 共通フォルダー>:mobileHybrid / apps / mobileHybridApp / common
第11章ソリューションをモバイルプラットフォームに拡張する 419
11.3.1例の概要
カスタマイズ性を説明するために、このサンプルを拡張して、420ページの図11-2に示すような新しいWork機能
を提供します。IBMContent Navigatorでは、デスクトップ内で使用されるモバイル機能を構成できます。このオ
プションに従い、デスクトップ管理者が特定のデスクトップにこの機能を表示するかどうかを決定できるように
します。ユースケースにおけるIBM FileNet P8とIBM Content Managerのワークフロー機能の違いにもかかわらず
、IBM Content Navigatorは、最小限の変更で両方をサポートできるようにする抽象化のレベルを提供します。違
いの1つは、作業項目コンテナーの別の階層です。
図11-2カスタム作業機能
420 IBM Content Navigatorのカスタマイズと拡張
このサンプルでは、​​最初の適切なワークアイテムコンテナーを見つけ、これらのワークアイテムを421ページ
の図11-3に示すようにiPhoneの解像度用に最適化されたUIの形式で表示します。
図11-3ワークアイテムリスト
ユーザーが作業項目をロックして、ユーザーが作業していることを示すことができます。この場合、作業項目の
右側にロックアイコンを表示します。私たちの新機能は読み取り専用であり、ユーザーが作業項目を変更するこ
とを許可しないため、この例では作業項目をロックしません。ただし、ロックされたアイテムの表示は制限され
ません。
第11章ソリューションをモバイルプラットフォームに拡張する 421
422ページの図11-4に示すように、任意の作業項目を選択して、定義されたすべての属性のリストを取得できま
す。
図11-4作業項目のプロパティ
標準シナリオでは、ステッププロセッサがステップに割り当てられていることがわかります。これには、この
本の範囲を超える多くの追加のカスタマイズが必要です。この例の目的は、サンプルをカスタマイズする方法
を示すことであり、完全なワークフローサポートを追加する方法ではないことを思い出してください。
11.3.2環境の準備
カスタマイズのための環境を準備するには、次の手順が必要です。
1. 421ページの 『IBM Content Navigatorの構成』
2. 424ページの 『開発環境の準備』
3. 438ページの「パッケージ化と配備」
422 IBM Content Navigatorのカスタマイズと拡張
IBM Content Navigatorの構成
ワークフロー関連の機能を追加するため、ワークフローサポートと少なくとも1つのリポジトリを準備
する必要があります。 ワークバスケット。
このサンプルでは、​​次の名前の新しいデスクトップを準備します SampleMobileDesktop 次の構成で:
一般タブ:
–
名前とID:SampleMobileDesktop
–
認証:準備されたリポジトリの[モバイル]タブを選択します。
–
モバイルアプリケーションへのアクセス:有効
–
[機能]セクションで、 新機能 次の情報を入力してください:
•
名前:仕事
•
アイコンファイル:ネイティブiOSクライアントからデスクトップにアクセスする場合に表示する
アイコンにアドレスを入力します。
•
URL:ネイティブiOSクライアントからデスクトップにアクセスする場合に表示するアドレスを指
定します。ここで使用されるURLアドレスは、サンプルに影響を与えません。
–
クリックして確認 OK そして、必ず選択してください 表示 図11-5に示すように、新しい機能のチェッ
クボックス。それ以外の場合、サンプルはこの機能を無視します。
図11-5モバイル機能の構成
リポジトリタブ:
–
前述のように、ワークフローをサポートするリポジトリを選択します。
第11章ソリューションをモバイルプラットフォームに拡張する 423
外観タブ:
–
デフォルトのリポジトリ:デスクトップに割り当てたばかりのリポジトリを選択します。
「ワークフロー」タブ(IBM FileNet P8システムのみ):
–
リポジトリ:デスクトップに割り当てたリポジトリを選択します。
–
アプリケーションスペース:少なくとも1つのアプリケーションスペースを選択します。
クリック セーブ そして 閉じる 新しいデスクトップ構成を保存します。
開発環境の準備
次に、この章の後半で使用する開発環境を準備します。あなたは必要です sampleMobileApp.zip そして SampleMobilePlugin.jar
あなたの中にあるファイル
ECMClient_installdir \ samples IBM Content Navigatorディレクトリー。
注意: 少なくともIBM Content Navigator 2.0.2フィックスパック1を使用してください。
開発環境のセットアップ方法を説明している製品ドキュメントの指示に従ってください。このWebページから手
順をダウンロードします。
http://www.ibm.com/support/docview.wss?uid=swg27038925
設定中に アドレス プロパティには、例11-1に示すように、以前に作成された新しいデスクトップの識別子も
含まれます。
例11-1デスクトップ構成
daddress: "http:// <ip>:<port> / navigator /?desktop = SampleMobileDesktop"、
ドキュメントの手順を実行した後、サンプルをビルドしてシミュレータ内で実行できます。開発環境が設定され
、開発の準備が整いました。
注意: 開発環境からIBM Content Navigatorサーバーに接続すると、 same-origin-policy。 JavaScriptは、ネ
ットワーク呼び出しを行っている別の場所から読み込まれます。これらのセキュリティチェックを無効にして
開発とテストを許可するようにブラウザを設定できます。 そうでない場合、サンプルはWebシミュレー
ターで機能しません。 詳細については、ブラウザのドキュメントを参照してください。実稼働環境では、
2つのオプションがあります。ハイブリッドアプリケーションとしてデバイスにデプロイするか、IBM Conte
nt Navigatorを実行しているサーバーにデプロイして、そこからサンプルを実行します。
424 IBM Content Navigatorのカスタマイズと拡張
11.3.3モデルレイヤーの更新
このセクションでは、IBM Content NavigatorモデルAPIを使用してサンプルのファサードレイヤーを更新します
。ワークアイテムを含む最初に利用可能なワークバスケットを取得するretrieveWorkItemsメソッドを追加します
。作業項目コンテナーの階層はFileNet P8とIBM Content Managerで異なります。したがって、_retrieveWorkIte
ms再帰関数を使用して、最初に使用可能なものを見つけます。
次の手順を使用します。
1. 424ページの 『開発環境の準備』で準備したEclipseプロジェクトを開きます。
2. <を開きます 共通フォルダー> /mila/MILayer.js ファイルを作成して新しいメソッドを追加
例11-2にリストされています。
例11-2ワークアイテムを取得する
_retrieveWorkItems: function(item、finalCallback){
if(item.isInstanceOf &&(item.isInstanceOf(ecm.model.WorklistFolder)/ *コンテナですか?* /
|| item.isInstanceOf(ecm.model.ProcessRole)||
item.isInstanceOf(ecm.model.ProcessApplicationSpace))){
item.retrieveWorklists(dojo.hitch(this、function(wBasketList){
item = wBasketList [0];
this._retrieveWorkItems(item、finalCallback); })); } そうしないと
{
item.retrieveWorkItems(dojo.hitch(this、function(wItems){if(finalCallback)
{
finalCallback(wItems); }})、nul
l、null、true、null);
} return true; }、
retrieveWorkItems: function(callback){
var repository = this.getCurrentRepository();
if(リポジトリ== null){
falseを返します。
} repository.retrieveWorklistContainers(dojo.hitch(this、function(wlContain
ers){
item = wlContainers [0]; this._retrieveWorkItems(item、c
allback); })); trueを返します。}、
第11章ソリューションをモバイルプラットフォームに拡張する 425
11.3.4ビューの作成
Dojo Mobileでは、ビューは他のユーザーインターフェイスコントロールのコンテナーです。新しいビューのサ
ンプルテンプレートは、次の場所にあります。
<共通フォルダ> /view/TEMPLATE_NAME.html
サンプルのビューは通常、[戻る]ボタンと[アクション]ボタンのある見出しで構成され、その後に通常は垂直方向にスクロ
ール可能なリストであるコンテンツが続きます。
dojox.mobile.EdgeToEdgeList
このサンプルでは、​​次のビューをカスタマイズまたは追加します。
WorkView:作業項目のリストを表示するために使用されます。
propertiesView:選択された作業項目のプロパティを表示するために使用されます。
Dojo Mobileウィジェットは継承しない dijit / _TemplateMixin、 デフォルトでは、標準として ディジット; 使用
してそれらを参照します dijit / registry モジュール。このため、標準のDojo接続点メカニズムを使用してそれら
を参照することはありません。
WorkViewの追加
このビューには、MainMenuビューに移動する[戻る]ボタンが含まれます。として識別されたリスト workItems 作業項
目のリストを表示するために使用されます。次の手順に従って、このビューを追加します。
1. <を右クリックします 共通フォルダ> / view フォルダ、選択 新着 → ファイル、 それに名前を付けます
WorkView.html。
2.例11-3の内容を新しく作成したHTMLファイルに貼り付けて保存します。
例11-3 WorkView HTMLコード
<div id = "WorkView" data-dojo-type = "dojox.mobile.ScrollableView"
data-dojo-props = "controller: 'WorkView'">
<div data-dojo-type = "dojox.mobile.Heading" data-dojo-props = "fixed: 'top'、back: ' バック
'、 へ引っ越す:' MainMenu '">
<div id = "WorkView_PIID" data-dojo-type = "dojox.mobile.Pane"> </ div> </ div> <ul id = " wor
kItems」 data-dojo-type = "dojox.mobile.EdgeToEdgeList" data-dojo-props = 'stateful:true' class =
"unselectable"> </ ul> </ div>
426 IBM Content Navigatorのカスタマイズと拡張
propertiesViewのカスタマイズ
propertiesViewを再利用して、選択した作業項目の属性を表示します。ただし、使用しない[編集]ボタンが含ま
れているため、この場合は非表示にします。
1. <を開く 共通フォルダー> /view/mainMenu.html そして見つける div 要素
の id =” propertiesView” 属性。
2.ネストされた div 編集ボタンの要素を追加し、次を追加します
ボタンの非表示を簡略化するための情報:
id = "editPropertiesButton"
427ページの例11-4では、変更されたコードが 大胆な。
例11-4 [編集]ボタンへの参照の追加
<div data-dojo-type = "dojox.mobile.ScrollableView" id = "propertiesView">
<div data-dojo-type = "dojox.mobile.Heading" id = "propertiesHeading" style = "margin-right:0
px; margin-left:0px; top:0px;" data-dojo-props = "back: 'Back'、moveTo: 'BrowseListView'">
<div id = "editPropertiesButton"
data-dojo-type = "dojox.mobile.ToolBarButton" data-dojo-props = 'label: "Edit"、defau
ltColor: "mblColorBlue"' onClick = "getBrowse()。editProperties();" style = "float
:right;"> </ div>
。。。
3.ファイルを保存します。
11.3.5 WorkViewのコントローラーの追加
このセクションでは、426ページの「WorkViewの追加」で作成したWorkViewのコントローラーを追加します。
コントローラーは、MILayerからモデルオブジェクトを取得し、ビューを変更して作業項目を表示します。また
、既存のpropertiesViewを再利用して、作業項目のプロパティを表示します。
1. <を右クリックします 共通フォルダ> / js / controller フォルダと選択 新着 →
フォルダ それに名前を付けます ワークビュー。
2.を右クリック ワークビュー フォルダと選択 新着 → ファイル それに名前を付けます
WorkViewController.js。
3.例11-5に示すように、コントローラのスケルトンを貼り付けます。次の手順で実装を追加します。
第11章ソリューションをモバイルプラットフォームに拡張する 427
例11-5コントローラのスケルトン
define(["dojo / _base / declare"、 "dojo / _base / lang"、 "dojo / dom-style"、 "dojo / aspect"、 "dijit / re
gistry"、 "controller / BaseController"]、function(declare、 lang、domStyle、aspect、registry){
declare( "WorkView"、[
BaseController]、{/ * ここにメソッドを配
置* /
}); }
);
4.デスクトップの機能リストで機能を選択したときにセグエを実行するloadWorkitemsメソッドを追加します。
例11-6セグエを実行する
。。
// / *ここにメソッドを配置* /
loadWorkitems:function(listItem){
getTransitionManager()。performSegue(listItem、 " WorkView "、
」 view / WorkView.html "、 null、getCtrlInstance( 'WorkView'));
}、
。。
5.これで、セグエが実行されると、フレームワークはビューのコンテンツの表示を担当するonAfterTransitionメソ
ッドを呼び出します(この場合は、作業項目を取得し、addItemメソッドを使用してビューに追加します)。
ワークアイテムがロックされている場合は、ロックアイコンも表示されます。以前に挿入したコードの後に
​、例11-7にリストされているメソッドを追加します。
例11-7ビューの開始
。。。
addItem: function(item、view){
var listItem = new dojox.mobile.ListItem({
ラベル:item.name、クリック可
能:「true」、
rightIcon:(item.locked)?'images / CheckedOut.png':null
});
aspect.after(listItem、 "onClick"、lang.hitch(this、 "showProperties"、item、
listItem));
listItem.placeAt(view.containerNode); }、
428 IBM Content Navigatorのカスタマイズと拡張
onAfterTransition: function(view、moveTo、direction、transition、context、method){
var destinationView = registry.byId( 'workItems');
destinationView.destroyDescendants(); commonMIlayer = getMILA();
if(commonMIlayer.currentRepository.repositoryId!=
ecm.model.desktop.defaultRepositoryId){
commonMIlayer.setCurrentRepository(ecm.model.desktop.defaultReposito ryId);
} startProgressIndicator(null、false);
commonMIlayer.retrieveWorkItems( lang.hitch(this、function(wItems){
for(var i in wItems.items){
この。 addItem( wItems.items [i]、destinationView);
} stopProgressIndicator(true); })); }、
。。。
6.以前は、アスペクト指向のアプローチを使用して、workViewを使用するshowPropertiesメソッドと作業項目の
クリックイベントを関連付け、作業項目の属性を表示していました。このビューは他のビューから再利用さ
れるため、プログラムで[戻る]ボタンの動作を変更してビューに戻り、システムプロパティセクションと[編
集]ボタンを非表示にします。この目的のために、例11-8に示すコードを追加します。
例11-8プロパティの表示
。。。
showProperties: function(wItem、listItem){
var sysProps = registry.byId( "SystemPropertiesList"); var propHeading =
registry.byId( 'propertiesHeading'); var propsView = registry.byId(
"propertiesView"); var labelString = wItem.name;
if(labelString!= null && labelString.length> 13){
labelString = labelString.substr(0,13)+ "...";
} propHeading.set( 'label'、labelString);
propHeading.backButton.set( "moveTo"、 "WorkView");
propHeading.backButton.onClick = function(){domStyle.set(registry.byId( "SystemPropert
iesList")。domNode、 'visibility'、 'visible');
第11章ソリューションをモバイルプラットフォームに拡張する 429
domStyle.set(registry.byId( 'editPropertiesButton')。domNode、 'visibility'、 'visible'); };
domStyle.set(registry.byId( 'editPropertiesButton')。domNode、 'visibili ty'、 'hidden');
domStyle.set(registry.byId( 'systemPropertiesTitle')。domNode、 'visibility'、 'hidden');
domStyle.set(sysProps.domNode、 'visibility'、 'hidden');
sysProps.destroyDescendants();
registry.byId( "PropertiesList")。destroyDescendants();
for(var Key in wItem.attributes){
if(wItem.attributes [key]){
addPropertyListItem([ key、wItem.attributes [key]]、 'user'); }
}/*トップにスクロールします*/
dojo.setStyle(propsView.containerNode、{
webkitTransform: ''、上:0、左
:0});
listItem.transitionTo( 'propertiesView');
} ...
注意: リストされている順序でメソッドを追加しない場合は、JSON構文が壊れていないことを確認してくだ
さい。他のメソッドとは異なり、最後のメソッドはコンマで終了してはなりません。
11.3.6サンプルへの統合
機能を開発した後、それを残りのアプリケーションに統合します。この統合は、次のタスクで構成されてい
ます。
WorkViewコントローラーの登録新しいモバイル機能のハンドラーの登
録作業機能アイコンの追加
430 IBM Content Navigatorのカスタマイズと拡張
次の手順を実行します。
1. < 共通フォルダー> /js/controller/menu/MenuController.js ファイル。
2.のコンストラクタを見つけます MenuController。 例11-9の内容を貼り付けます
前のセクションで参照されたメソッドの最後。
例11-9 WorkViewコントローラの登録
コンストラクター:function(){
setBrowse(browse);
getControllersManager()。register( 'browse'、browse); / *コントローラの読
み込み* /
dojo.require( 'controller / favoritesview / FavoritesViewController'); dojo.require( 'controller /
searchview / SearchViewController'); dojo.require( 'controller / searchtemplateview /
SearchTemplateViewContro ller');
dojo.require( 'controller / workview / WorkViewController');
}、
3.を見つけます onAfterTransition メソッド、次の行を見つけて、
例11-10に示すように、その前に作業機能を登録します。
if(labelText == '参照'){
例11-10デスクトップリストへのWork機能の登録
。。。
if(labelText == 'Work'){
knownMenu = true;
onClickFunction = function(){
getCtrlInstance( 'WorkView')。loadWorkitems(this); }; } if(labelText =
= '参照'){
。。。
4.図11-6のように、作業機能のアイコン(32x32ピクセル)を作成します。名前をつけて Work.png アイコン
に。
図11-6作業機能
5.このファイルを次のフォルダーに配置します。
mobileHybrid \ apps \ mobileHybridApp \ common \ images
第11章ソリューションをモバイルプラットフォームに拡張する 431
これでカスタマイズが完了し、テストおよび展開できます。438ページの11.3.7、「パッケージ化と配備」を参
照してください。
11.3.7パッケージ化とデプロイメント
シミュレータでアプリケーションをテストするには、424ページの「開発環境の準備」で参照されているドキュ
メントを参照してください。
アプリケーションがシミュレーターで期待どおりに機能する場合は、サンプルをハイブリッドiPhoneアプリケーショ
ンとしてビルドできます。もう1つのオプション、モバイルデバイスにデプロイされていないIBM Content Navigatorプ
ラグインとしてサンプルをビルドする方法を示します。
433ページの図11-7は、IBM Content Navigatorプラグインとしてのサンプルビルドのデプロイメントアーキテク
チャを示しています。ご覧のとおり、サンプルコードはすべて、IBM Content NavigatorにデプロイされたSampl
eMobilePluginに格納されています。プラグインには、デスクトップに割り当てる必要のあるサンプルのMobileL
ayoutが含まれています。クライアントがデバイスブラウザーからデスクトップを開くと、IBM Content Navigato
rはレイアウトのロードを開始し、ブラウザーから送信されたユーザーエージェントヘッダーを確認します。iPh
oneデバイスの場合、レイアウトはブラウザーをサンプルの最初のWebページにリダイレクトします。このページ
は プラグインリソース アクション。ご覧のとおり、このタイプのデプロイメントでも、中間層サービスを操作
できます。Webアプリケーションの潜在能力はまだ完全に残っていますが、コードはWorklight APIを使用して、
例えば、ネイティブデバイスにアクセスできません。また、同一オリジンポリシー違反を防止する必要がありま
す。ただし、サンプルはそれがプラグインとして実行され、アクセスしているデスクトップを自動的に使用し、
ログインを要求するため、中間層サービスにアクセスするときにこれを処理する必要はありません。あなたの< common>
/js/controller/desktop/common.js ファイルのenablePluginModeプロパティが 本当。
432 IBM Content Navigatorのカスタマイズと拡張
SampleMobilePlugin
HTML、JS、CSSコンテンツ
MobileLayout
Dojo Mobile
プラグインリソース
プラグイン
ミッドティアサービスアプリケーションサーバー
デスクトップ
HTTP(S)GET
端末
ウェブブラウザ
XmlHttpRequest / Response
図11-7プラグインとしてパッケージ化されたモバイルクライアント
サンプルをプラグインとしてビルドするには、以下の手順を実行します。
1. 424ページの「開発環境の準備」で準備したEclipseプロジェクトを開きます。
2.を右クリック 置き場 直下にあるフォルダ mobileHybrid フォルダと
選択する プロパティ。 Eclipse外のファイルブラウザーからこのフォルダーを開きます。あなたはパスを見つけることが
できます 資源 → ロケーション。
3. binフォルダーに、次の名前のフォルダーを作成します。 プラグイン。
4.探します SampleMobilePlugin.jar ファイルと名前を変更します
SampleMobilePlugin.zip。
5.を抽出します com ZIPファイルから プラグイン フォルダ。最終的なパスは
続く:
mobileHybrid \ bin \ plugin \ com。
6. Eclipseに戻り、右クリックします mobileHybrid \ bin 再びフォルダ。選択する
新着 → ファイル それに名前を付けます build.xml。 例11-11にリストされているAntビルドファイルをこのファイ
ルに配置して保存します。
第11章ソリューションをモバイルプラットフォームに拡張する 433
例11-11プラグインAntビルド
<?xml version = '1.0' encoding = 'UTF-8'?>
<プロジェクト名= "samplePlugin" default = "plugin" basedir = "。">
<target name = "plugin" depend = ""
description = "generate plugin"> <delete file = "../ apps /
SampleMobilePlugin.jar" /> <delete
dir = "./ plugin / com / ibm / ecm / extension / sample / WebContent / mobile" />
<mkdir
dir = "./ plugin / com / ibm / ecm / extension / sample / WebContent / mobile" />
<コピー
todir = "./ plugin / com / ibm / ecm / extension / sample / WebContent / mobile">
<fileset dir = "../ apps / mobileHybridApp / common" /> </ copy> <copy
todir = "./ plugin / com / ibm / ecm / extension / sample / WebContent / mobile / dojo"
> <fileset dir = "../ dojo / dojo" /> </ copy>
<jar destfile = "../ build / SampleMobilePlugin.jar"
basedir = "./ plugin">
<マニフェスト>
<属性名= "プラグインクラス"
value = "com.ibm.ecm.extension.sample.SamplePlugin" /> </ manifest> </ jar>
<copyfile src = "../ build / SampleMobilePlugin.jar" dest = "../ apps /
SampleMobilePlugin.jar" forceoverwrite = "true" />
</ target> </
project>
7.右クリック build.xml そして選択 として実行 → Antビルド。
8.新しいプラグインJARファイルは、次の場所にあります。
mobileHybrid \ apps \ SampleMobilePlugin.jar
9. 424ページの「開発環境の準備」で参照されている製品ドキュメント(「サンプルレイアウトプラグイ
ンのインストールとデプロイ」トピック)の手順に従います。
注意: このタイプの導入シナリオでは、ユーザーは
common.js シミュレーターでのテストに使用したパスワードを含むことができるファイル。セキュリティ上の理由から
、パスワードを別のパスワードに変更してください。サンプルは、プラグインとしてデプロイされるときにこのパスワ
ードを使用しません。
434 IBM Content Navigatorのカスタマイズと拡張
11.4結論
この章では、モバイル開発のオプションについて説明し、IBM Content Navigator製品に含まれているIBM Workli
ghtサンプルプロジェクトのアーキテクチャを示します。また、このサンプルのカスタマイズを示し、展開シナリ
オについても説明します。この章では、サンプルをさらに拡張するのに役立つ情報を提供します。
第11章ソリューションをモバイルプラットフォームに拡張する 435
436 IBM Content Navigatorのカスタマイズと拡張
12
第12章
のプロファイルプラグインの拡張
Microsoft Lyncサーバー
この章では、IBM Connectionsプロファイルプラグインを拡張してMicrosoft Lync Serverと連携する方法について
説明します。IBM Content Navigator 2.0.2は、IBM Connections and Profileプラグインを提供します。プラグイン
は、IBM Connections ServiceおよびIBMSametime®サーバーで動作します。IBM Content Navigator(ICN)UIで
ユーザーに名刺とSametime認識を提供します。IBM Content NavigatorとMicrosoft Lync Serverを使用している場
合、IBM Content Navigator内からオンラインで他のユーザーの状況を確認できるようにしたい場合があります。
これを行うには、IBM Content Navigatorプラグインを開発してIBM Content Navigatorを拡張し、ユーザーのオン
ライン情報を表示できます。
この章では、次のトピックについて説明します。
IBM Content Navigator 2.0.2で利用可能な機能Microsoft Lync Server
およびUCWA例の概要高レベルの設計JavaおよびJavaScript用のLyn
cプラグインオブジェクト指向設計の実装セットアップ、インストー
ル、および機能拡張
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
437
この章では参照と区別を容易にするために、次の規則を使用します。
既存のIBM接続とプロファイルプラグインを
プロファイルプラグイン。
Microsoft Lync Serverの新しいプラグインは、 Lyncプラグイン。
12.1 IBM Content Navigator 2.0.2で利用可能な機能
IBM Content Navigator 2.0.2は、IBM ConnectionsサーバーおよびIBM Sametime認識のためのサンプルプラ
グインを提供します。通常、次のインストールパスがあります。
C:\ IBM \ ECMClient \ plugins \ ProfilePlugin.jar
プロファイルプラグインはサンプルのIBM Connectionsサービスと連携し、ビジネスカード機能を提供します。こ
れにより、マウスを使用して[参照]ビューでユーザー名にカーソルを合わせると、そのユーザーのビジネスカード
にIBM Connectionsサービスからのユーザー情報が表示されます。 。この機能の例を図12-1に示します。
図12-1 IBM Content Navigator 2.0.2の既存の名刺機能
IBM Connections ProfileプラグインはIBM Sametimeサーバーとも連携するため、ユーザーのオンラインステータ
スをユーザー名とともに表示でき、そのユーザーとのSametime会話を開始できます。
Sametimeの機能は、IBM Content Navigatorをユーザーインターフェースプラットフォームとして活用する製品
であるIBM Case Managerで拡張およびサポートされています。
438 IBM Content Navigatorのカスタマイズと拡張
図12-2と図12-3は、サンプルのCase Managerユーザーインターフェイスの[ドキュメント]タブと[履歴]タブを示して
います。
図12-2サンプルIBM Case Managerユーザーインターフェイス:[ドキュメント]タブ
図12-3サンプルのIBM Case Managerユーザー・インターフェース:「履歴」タブ
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
439
12.2 Microsoft Lync ServerおよびUCWA
IBM Sametimeサーバーと同様に、MicrosoftもMicrosoft Lyncという名前のオンライン通信プラット
フォームを提供しています。
Microsoft Lync Serverはエンタープライズリアルタイムコミュニケーションサーバーソフトウェアであり、エンター
プライズインスタントメッセージング、プレゼンス、Voice over IP、オーディオ、ビデオ、Web会議、およびサード
パーティのゲートウェイまたはSIPトランクを介したPSTN接続のためのインフラストラクチャを提供します。これ
らの機能は、組織内、組織間、およびパブリックインターネット上の外部ユーザーやスマートフォンで利用できます
。
Microsoft Lync で使用されるインスタントメッセージングクライアントです。 Microsoft Lync Server。
企業環境を対象としたエンタープライズソフトウェアです。
Microsoft Lync Serverは、IBM ConnectionsサーバーとIBM Sametimeサーバーが同等です。Microsof
t Lync Serverは次のAPIを提供します。
ユニファイドコミュニケーションマネージAPI(UCMA)ユニファイドコミュニケーションWeb
API(UCWA)
12.2.1 UCMA
MicrosoftユニファイドコミュニケーションマネージAPI 4.0を使用すると、開発者はMicrosoft Lync Server 2013プラ
ットフォームの全機能を活用するアプリケーションを構築できます。UCMA 4.0で構築されたアプリケーションには
、プレゼンス、通話、会話、会議などのユニファイドコミュニケーションの概念が組み込まれています。
UCMAは、開発コンポーネントとランタイムコンポーネントを含むC#APIです。UCMAは、企業向けの通信ソリュー
ションを開発するために開発者によって使用されます。UCMAには、Session Initiation Protocol(SIP)に基づくマネ
ージコードエンドポイントAPIが含まれています。現在のバージョンはUCMA 4.0です。
12.2.2 UCWA
ユニファイドコミュニケーションWeb APIは、Microsoft Lync Serverと通信するためのMicrosoft Web APIです
。UCWA 1.0は、Microsoft Lync Server 2013インスタントメッセージング(IM)およびプレゼンス機能を公開
するREST APIです。UCWA 1.0を使用すると、開発者はエンタープライズアプリケーションとイントラネット
をより活発にして、ビジネスの連絡先に接続できます。
UCWA 1.0は言語に依存しません。開発者は、C / C ++やJavaなどのプログラミング言語を使用できます。APIは
Web開発者向けに微調整されています
440 IBM Content Navigatorのカスタマイズと拡張
HTTP、OAuth、JSON、JavaScriptなどの通常のウェブ技術に精通している人。
UCWA 1.0は、Microsoft Lync Serverがインストールされているお客様のみが利用できます。
注意: UCWA Webアプリケーションの開発に関心がある場合は、 UCWA 次の場所:
http://msdn.microsoft.com/library/office/gg455051%28v=office.14%29
12.3例の概要
以下の機能を備えた新しいIBM Content Navigatorプラグインを作成します。
ユーザーの連絡先カードとオンラインステータスを表示します。変更後のユーザ
ーのオンラインステータスを反映します。
シンプルでわかりやすいように、本番用の本格的なプラグインは開発していません。むしろ、新しいプラ
グインは、次の前提条件と制限を使用して開発されています。
仮定:
–
プラグインはMicrosoft Lyncサンドボックスで動作します。
–
Microsoft Lync Serverのインストールは必要ありません。制限:
–
プラグインではチャット会話の開始はサポートされていません。
–
ユーザーのオンラインステータスの更新は、プラグインの範囲外です。
–
プラグインでは、会議、電話、ビデオチャット機能はサポートされていません。
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
441
12.4高レベルの設計
Microsoft Lyncとの統合には、IBM Content Navigatorプラグインを使用します。プラグインでは、Microsoft Lync
連絡先カードとステータスサービスを構築します。
12.4.1新しいプラグインの目標
新しいプラグインを設計および構築するときは、次の設計目標を考慮してください。
Microsoft Lync Serverで動作するプラグインを作成します。現在のプロファイルプラグイン
に基づいてプラグインをビルドします。ロジックを可能な限り再利用します。既存のロジ
ックの重複を避けます。コードを保守しやすくします。後で2つのプロファイルプラグイン
をマージする必要がなくなります。プラグインをデバッグしやすくします。
2つのプラグイン、プロファイルプラグインとLyncプラグインは、目的、構造、およびコードが類似しています。1つのプラ
グインがIBM ConnectionsおよびSametimeサーバーを扱います。他のプラグインは、Microsoft Lync Serverで動作します。
どちらも名刺を表示します。どちらもコンテンツリストグリッドのフィールドにデコレーターを追加する必要があります。
あ 迅速なアプローチ 既存のプロファイルプラグインのコピーを作成し、新しいプラグインのニーズに合わせて
上書きします。これは良い出発点かもしれませんが、このアプローチの問題は、各プラグインにさらに多くの機
能が追加されたときに、同じバグ修正を他のプラグインに適用することを忘れないでください。このアプローチ
を採用すると、コードは将来維持するのが困難になる可能性があります。
新しいプラグインを機能させるための迅速なアプローチから始めることをお勧めします。次に、2つのプラ
グインをマージして、重複コードを排除します。
あ より良いアプローチ 再利用を念頭に置いて設計することから始めます。同じプロジェクトに2つのプラグイ
ンを収容します。既存のコードを再利用し、Microsoft Lync Serverで機能するように拡張します。
この章で実装の詳細をすべて説明することはできません。したがって、この章では、主要な概念と領域のみを取
り上げています。
2つのプラグインの正確な相互関係は、含まれている圧縮プロジェクトのソースファイルからよりよく理解でき
ます。この本に関連する追加資料のダウンロードについては、535ページの付録D「追加資料」を参照してくだ
さい。
442 IBM Content Navigatorのカスタマイズと拡張
Lyncプラグインは、応答フィルター(3ページの第1章「拡張ポイントとカスタマイズオプション」で紹介)を使
用して、リポジトリソースへのサービス要求をフィルター処理します。次に、応答の特定のフィールドにカスタ
ムフォーマッタを導入します。IBM Content Navigatorは、リポジトリーへのサービス要求に対してこの応答フィ
ルターを呼び出します。
Lyncプラグインサービスは、新しいサーバー側アクションをIBM Content Navigatorに追加するために使用されます。
12.4.2連絡先カードまたは名刺機能
連絡先カードには、次の情報が含まれています。
プレゼンスロケーションノート
UCWA 1.0を使用すると、ユーザーはプレゼンス、場所、メモに関する情報を公開および表示できます。現在のリ
リースでは、APIはオンライン、ビジー、退席中などのプレゼンス状態の標準セットをサポートしています。カス
タムプレゼンスは、このAPIを介してのみ表示できます。場所は、他の連絡先と共有するために設定または表示で
きるユーザー指定の文字列です。メモについては、APIは、個人メモの発行と、個人メモまたは不在メモの表示を
サポートしています。ノート情報は、サーバー側のロジックとユーザーのカレンダーによって駆動されます。
これらの3つの情報は、APIのすべての連絡先で表示できます。
12.4.3 Microsoft Lync連絡先カードおよびステータスサービス
Microsoft Lync連絡先カードとステータスサービスは、Lyncプラグイン内に構築されます。このサービスは、UC
WAを介してMicrosoft Lync Serverと通信するプラグインサービスで構成されます。
444ページの図12-4は、IBM Content Navigator、プラグイン、およびMicrosoft Lync Serverの関係を示してい
ます。
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
443
図12-4高レベルのコンポーネント
12.5 Lyncプラグインの実装
このセクションでは、Lyncプラグインの実装の詳細について説明します。プラグインの構成、ユーザーインター
フェイス、エラー処理、ログインプロセス、連絡先情報の取得、応答フィルターの追加について見ていきます。
12.5.1 Lyncプラグインの構成
プラグインには、以下のパラメーターを受け入れる構成ページがあります。
Microsoft LyncサービスのURL
これは、次の例のようなMicrosoft LyncサービスへのURLです。
https://ocsrp.gotuc.net/ucwa/oauth/v1/applications
Microsoft LyncサービスからのOAuthトークン
これは、Microsoft Lyncサービスからのトークンです。サンドボックスにログインした後、Microsoft Lyncサ
ンドボックスからOAuthトークンを取得できます。表示名を表示するかどうかのチェックボックス(オプシ
ョン)。このオプションパラメータは、プロファイルプラグインから再利用されます。選択すると、ユーザ
ー名が表示される場所に、短い名前ではなく表示名が表示されます。
444 IBM Content Navigatorのカスタマイズと拡張
図12-5は、Lyncプラグインの構成を示しています。
図12-5 IBM Content Navigator Lyncプラグインの構成
12.5.2 Microsoft Lyncサービスのユーザーインターフェイス
ListViewのフィールドの上にマウスを置くと、名前の横に名刺が表示され、ユーザーの連絡先とオンライン情報
が示されます。
このフィールドは、ListViewのグリッド内のデータフィールドです。詳細ビューまたは雑誌ビューのいずれかです。
IBM Content Navigatorデコレーターがユーザー名フィールドに追加されます。デコレータは、ホバー中に名刺を
表示するJavaScriptコードです。次のフィールドがデコレーターに追加され、追加のJavaScript機能が追加されま
した。
最終変更者によって作成
されました
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
445
図12-6は、マウスがユーザーの名前の上にあるときのユーザーインターフェイスを示しています。
図12-6 Microsoft Lyncでの名刺機能
12.5.3エラー処理
取得したOAuthトークンは通常、8時間などの特定の期間のみ有効です。その後、期限切れとなりました。プラグ
インは、エラー状況が発生したときにメッセージを表示するように設計されています。連絡先カードは引き続き
表示されますが、エラーメッセージも表示されます(利用可能な場合はエラーコード、ユーザーへのアドバイス
、たとえばOAuthトークンやMicrosoft LyncサービスのURLを確認するなど)。図12-7に、OAuthトークンの有効
期限が切れたときのエラーメッセージの例を示します。
図12-7トークンの有効期限が切れたときのエラー処理
446 IBM Content Navigatorのカスタマイズと拡張
12.5.4 Microsoft Lyncサービスにログイン
Lyncプラグインは、ユーザーのメールアドレスを入力として受け取り、Microsoft Lync Serverに連絡して、ユーザーの
連絡先とオンライン情報を出力として返します。それが行う最初のステップは、Microsoft Lync Serverにログインする
ことです。
プラグインサービスは、LyncSessionオブジェクトを維持します。プラグインサービスは、すべての電子メールルックアッ
プ要求で、最初に内部Microsoft Lyncセッションが存在するかどうかを判断します。存在しない場合、プラグインはMicroso
ft Lync Serverへのログインを試みます。
ログインには、次の情報の提出が必要です。
カルチャ:これは通常、ブラウザのロケールです。エンドポイント:これ
はユーザーを識別するGUIDです。
OAuthトークンがないか無効な場合、Microsoft Lync ServerはHTTP 401応答で応答します。OAuthトークンが有
効な場合、サーバーはユーザーの基本情報で応答します。例12-1は、OAuthトークンが有効で、ログインが成功
した場合のサーバーの応答を示しています。
例12-1ログイン成功後のMicrosoft Lync Serverの応答
{"culture": "en-US"、 "userAgent": "UCWA Samples"、 "_links":{
"self":{"href": "/ ucwa / oauth / v1 / applications / 105"}、 "policies":{"href": "/ ucwa /
oauth / v1 / applications / 105 / policies"}、
"batch":{"href": "/ ucwa / oauth / v1 / applications / 105 / batch"}、 "events":{"href": "/ u
cwa / oauth / v1 / applications / 105 / events?ack = 1 "}}、
"_embedded":{"自分
":{
"name": "Lene Aaling"、 "uri": "sip:lenea@
contoso.com "、 "_links":{
"自己":{"href": "/ ucwa / oauth / v1 / applications / 105 / me"}、
"makeMeAvailable":{"href": "/ ucwa / oauth / v1 / applications / 105 / me / makeMeAvailable"}
、
"電話":{"href": "/ ucwa / oauth / v1 / applications / 105 / me / phones"}、
"写真":{"href": "/ ucwa / oauth / v1 / applications / 105 / photos / lenea@contoso.com "}
}、 "rel": "me"}
、 "people":{"_li
nks":{
"自己":{"href": "/ ucwa / oauth / v1 / applications / 105 / people"}、
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
447
"presenceSubscriptions":{"href": "/ ucwa / oauth / v1 / applications / 105 / people / presenc eSubscriptions"}、
"subscribedContacts":{"href": "/ ucwa / oauth / v1 / applications / 105 / people / subscribed Contacts"}、
"presenceSubscriptionMemberships":{"href": "/ ucwa / oauth / v1 / applications / 105 / peop le / presenceSubscriptio
nMemberships"}、
。。。
}、
"rel": "people"}、
。。。}
12.5.5 Microsoft Lync Serverから連絡先情報を取得する
Microsoft Lync Serverからユーザーの情報を取得するには、2つの方法があります。
検索APIを使用します。連絡先AP
Iを使用します。
検索APIは、クエリ文字列に関連するユーザー情報を返します。複数の結果が返される場合があります。たと
えば、クエリが amya1、 以下を含むいくつかの連絡先が返される場合があります amya1@gotuc.net 、 または
amya100@gotus.net。
連絡先APIはユーザーのメールを必要とし、ユーザーの連絡先情報に対して1つの結果のみを返します。連絡メカ
ニズムは完全な電子メールアドレスを必要とし、あいまいさを減らすためにユーザー情報を検索する好ましい方
法です。
例12-2は、Microsoft Lync Serverから検索APIを使用してユーザー情報が要求されたときのMicrosoft Lync Se
rverからの応答を示しています。
例12-2メールアドレスに基づいてユーザー情報を取得する
https://ocsrp.gotuc.net/ucwa/oauth/v1/applications/102902378342/search?query=am ya1@gotuc.net
{"moreResultsAvailable":false、
"_links":{
"自己":{
「href」:
「/ ucwa / oauth / v1 / applications / 102902378342 / people / search?query=amya1@gotuc.net \ u 0026limit = 50」
}
"_embedded":{
}、
"連絡先": [{
"uri": "sip:amya1@gotuc.net "、
「sourceNetwork」:
"SameEnterprise"、
"department": "Engineering"、 "title": "Software Develop
ment Engineer"、
448 IBM Content Navigatorのカスタマイズと拡張
" emailAddresses ":[" amya1@gotuc.net "]、 "workPhon
eNumber": "tel:+1001"、 "type": "User"、
"名前": "エイミーEアルバーツ"、
"_links":{
"自己":{
「href」:
"/ ucwa / oauth / v1 / applications / 102902378342 / people / amya1@gotuc.net "}、
"contactPhoto":{
「href」:
"/ ucwa / oauth / v1 / applications / 102902378342 / photos / amya1@gotuc.net "}、
"contactPresence":{
「href」:
"/ ucwa / oauth / v1 / applications / 102902378342 / people / amya1@gotuc.net / presence"}、
"contactLocation":{
「href」:
"/ ucwa / oauth / v1 / applications / 102902378342 / people / amya1@gotuc.net / location"}、
"contactNote":{
「href」:
"/ ucwa / oauth / v1 / applications / 102902378342 / people / amya1@gotuc.net / note"}、
"contactSupportedModalities":{
「href」:
"/ ucwa / oauth / v1 / applications / 102902378342 / people / amya1@gotuc.net / supportedMedia"
}、
"contactPrivacyRelationship":{
「href」:
「/ ucwa / oauth / v1 / applications / 102902378342 / people / amya1@gotuc.net / privacyRelatio nship」
}}、
"rel": "連絡先"、
"etag": "78185271"
}]}、
"rel": "検索"}
ヒント: 現在、電話番号や部門​​など、多くの属性が表示されない場合があります。これは、プログラミングエ
ラーではありません。これは、Microsoft Lyncサンドボックスがすべてのアカウントに対して適切に設定され
ていないためです。例として、エイミーの場合のみ amya1@gotuc.net すべての情報があります。他のエイミ
ーにはこの情報が入力されていません。
ユーザーに関する情報は、表示できるようにMicrosoft Lync Serverで設定する必要があります。Microsoftサンドボ
ックスサーバーを使用すると、一部の情報が返されない場合があります。独自のMicrosoft Lync Serverを使用する
場合は、workPhoneNumberなどのフィールドに入力してください。
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
449
12.5.6ユーザー名フィールドへの応答フィルターの追加
ユーザー名の上に名刺を表示するには、まずサーバー応答の特定のフィールドに応答フィルターを追加します。
応答フィルターは、サービス応答の特定の列にデコレーターを追加します。デコレータはJavaクラスで指定され
、JavaScriptクラスで定義されます。
で応答フィルターを設定しました ProfilePluginResponseFilters.java。 例12-3を参照してください。また、EDSサ
ービスの代わりに応答フィルターと応答フィルターを使用する最良の状況については、3ページの第1章「拡張ポ
イントとカスタマイズオプション」および233ページの第7章「要求および応答フィルターと外部データサービス
の実装」も参照してください。
名刺機能は、応答フィルターを使用する良い例です。FileNet P8サービス呼び出しから返されたフィールドを装飾
する特別なJavaScriptメカニズムを追加します。
例12-3 ProfilePluginResponseFilter.javaでの応答フィルタの指定
public String [] getFilteredServices(){
return new String [] {"/ p8 / search"、 "/ cm / search"、 "/ cmis / search"、 "/ p8 / openFolder"、 "/ c
m / openFolder"、 "/ cmis / openFolder"}; }
public void filter(String serverType、PluginServiceCallbacks callbacks、HttpServletRequest request、JSON
Object jsonResponse)が例外をスローします{
JSONObject構造=(JSONObject)jsonResponse.get( "columns"); JSONArrayセル=(JSONA
rray)structure.get( "cells"); if(cells.get(0)instanceof JSONArray){
cells =(JSONArray)cells.get(0); }
int i = 0;
for(i = 0; i <cells.size(); i ++){
JSONObject column =(JSONObject)cells.get(i); String columnName
=(String)column.get( "field");
if(columnName!= null &&
ProfilePlugin.profileSupportedFieldList.contains(columnName)){// P8、CM、およびCMISプロパティに一致させる
column.put( "decorator"、 "businessHoverCardDecorator"); column.put( "widg
etsInCell"、true);
column.put( "setCellValue"、 "businessHoverCardCellValue"); column.put( "width
"、 "8.0em"); }}
。。。
}
450 IBM Content Navigatorのカスタマイズと拡張
450ページの例12-3では、 businessHoverCardDecorator の列へ profileSupportedFieldList。 デコレータは、
businessHoverCardCellValue 関数。
JavaScriptモジュールでは、フィールドのデコレーターを定義します。例12-4を参照してください。ページ上でセ
ルを置き換えるときに、適切なガベージコレクションを実行する必要があります。これにより、アプリケーション
がブラウザにメモリリークを引き起こさないことが保証されます。
例12-4 PersonCardDecorator.jsで定義されたフィールドデコレータ
lang.setObject( "businessHoverCardDecorator"、function(){
var entry = '<span data-dojo-attach-point = "entry"> </ span>'; 戻りエントリ; });
lang.setObject( "businessHoverCardCellValue"、function(gridData、storeData、cellWidget){
//列がソートされるとメモリのクリーンアップとデコレータの値がリセットされるcellWidget.uninitializ
e(); cellWidget.entry.innerHTML = "";
var rowId = cellWidget.cell.row.id; var item =
this.grid.row(rowId).item();
var valueNode = profilePlugin._getValueNode(gridData、cellWidget、null、item);
domConstruct.place(valueNode、cellWidget.entry);
// cellWidgetが破棄されたときにホバーカードを破棄します。そうしないと、DOMノードがリークします
cellWidget.uninitialize = function(){
var objsToDestroy = cellWidget.objectsToDestroy; if(objsToDestroy){
for(var i in objsToDestroy){
objsToDestroy [i] .destroy(); } cellWidget.objsToDestroy
= null; }}; });
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
451
12.6 JavaおよびJavaScriptのオブジェクト指向設計
プロジェクトが成功し、保守が容易になるようにするには、オブジェクト指向の原則を使用してプロジェクトを設
計します。新しいプラグインの設計には、Javaの中間層とJavaScriptのフロントエンドの両方が含まれます。
12.6.1 LyncプラグインのJavaオブジェクト
プラグインのJavaオブジェクトは、IBM Content Navigatorのサーバー側拡張機能を表します。Microsoft Lync St
atus Lookup Serviceは、JavaのContent Navigatorプラグインに実装されています。オブジェクト指向にするいく
つかのJavaパッケージとして設計されています。パッケージは次のとおりです。
com.ibm.ecm.extension.lync.serviceパッケージ
–
LyncService:Microsoft Lyncに情報を取得するためのサービスを提供する基本クラス
–
UserEmail:メールアドレス処理のためのクラス
–
UserMedia:ユーザーのメディア設定を取得するためのクラス
–
UserName:ユーザー名処理のためのクラス
–
UserNote:ユーザーのメモ情報を取得するためのクラス
–
UserPresence:ユーザーのプレゼンス情報を取得するためのクラスcom.ibm.ecm.exte
nsion.lyncパッケージ:
–
–
定数:システムのグローバル定数を定義します
LyncSession:Microsoft Lync Serverへのセッションを確立し、セッション情報を作成/維持
します
–
UserInfo:メールアドレスに基づいてユーザーの連絡先とオンラインカードを組み立てるためのクラス
–
Util:SSL処理用のユーティリティクラスcom.ibm.ecm.extensio
n.lync.exceptionパッケージ
–
LyncException:Exceptionクラスを拡張し、サーバーからの応答コードとエラーをJSON形式で提供しま
す
12.6.2既存のJavaクラスの拡張
オブジェクト指向プログラミングでは、Microsoft Lync関連のJavaクラスをグループ化するために、別個のパ
ッケージcom.ibm.ecm.extension.lyncを導入します。
452 IBM Content Navigatorのカスタマイズと拡張
図12-8は、プロジェクトのJavaおよびJavaScriptクラス構造を示しています。
図12-8プロジェクトのJavaおよびJavaScriptクラス構造
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
453
Lyncプラグインでは、2つのJavaクラスに注目する価値があります。
LyncStatusService:これは、ユーザーの連絡先カード情報とオンライン情報を提供するプラグインサービス
です。
–入力:
•
OAuthトークン
•
アプリケーションのURL
•
電子メールアドレス
–出力:
•
ユーザーの連絡先情報(利用可能な場合、およびMicrosoft Lync Serverで設定されている場
合)
•
ユーザーが設定および提供するときのメモ、プレゼンス、および場所のオンライン情報
LyncPlugin:次の項目を定義するプラグイン定義クラス:
–
プラグイン名
–
プラグインスクリプト:ProfilePlugin.js
–
構成クラス:profilePlugin.configurationPane
–
DojoModule:profilePlugin
–
サービスと応答フィルター
プラグインJavaクラスは LyncPlugin.java。 既存のものを拡張します
ProfilePlugin.java。 互換性のために、同じプラグインIDを使用しているため、既存のロジックを壊すことなくコ
ードを再利用できます。
Lyncプラグインは1つの主要なサービスを定義します。 LyncStatusService、 これは、Microsoft Lync Serverとの
通信に使用されています。例12-5を参照してください。
例12-5 既存のプロファイルプラグインを拡張するLyncPlugin Javaクラス
パブリッククラスLyncPluginはProfilePlugin {を拡張します。
public String getName(Locale locale){
「Microsoft Lync ServerプラグインのICN」を返します。}
public String getConfigurationDijitClass(){
「profilePlugin.LyncConfigurationPane」を返します。}
public PluginService [] getServices(){
新しいPluginService []を返す{
新しいProfilePluginService()、新しいLync
StatusService()、
454 IBM Content Navigatorのカスタマイズと拡張
新しいProfilePluginLookupService()}; }
public String getScript(){
「LyncPlugin.js」を返します。}
public String getVersion(){
「2.0.2.1」を返します。}}
12.6.3 JavaScriptクラスの拡張
でも LyncStatusService サーバー側の拡張機能を追加します。クライアント側にも拡張機能を追加する必要があり
ます。継承、ポリモーフィズム、オブジェクトのカプセル化など、Javaでオブジェクト指向プログラミングを行
う方法は確立されています。JavaScriptでは、JavaScriptの型が厳密ではないため、オブジェクト指向プログラミ
ングは困難でした。ただし、オブジェクト指向プログラミングをJavaScriptに組み込むこともできます。継承とオ
ブジェクトのカプセル化の原則は、JavaScriptにも適用できます。
JavaScriptクラスは、Lyncプラグインの構成とプレゼンテーションを提供します。
ConfigurationPane.js:プラグインの構成オプションを提供します。HoverCard.js:ユーザーがヘルプインジ
ケーターの上にマウスポインターを置いたときに表示されるポップアップ情報を提供します。TooltipDialogク
ラスを実装します。Messages.js:プラグインアプリケーションのローカライズ可能なメッセージを表します
。PersonCard.js:ユーザー名の上にマウスポインターを置いたときにポップアップカードを提供します。こ
のクラスは、プラグインのlyncStatusServiceを呼び出して、連絡先カード情報を取得してレンダリングします
。IDX PersonCardクラスを実装します。
PersonCardDecorator.js:ListViewの詳細ビューと雑誌ビューのデコレータクラスを定義します。これは、構
成設定に基づいて、IBM ConnectionsまたはMicrosoft Lync、またはSametime対応のビジネスカードを作成し
ます。SametimeAwareness.js:これは、IBM Sametime機能の確立と相互作用のためのJavaScriptクラスです
。Lyncプラグインには適用されません。
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
455
12.6.4構成ペインの拡張
新しいLyncプラグインには、プロファイルプラグインとは異なるパラメーターセットがあります。構成では、L
yncプラグインは独自の構成ペインとテンプレートを使用します。 LyncConfiguration.js そして LyncConfiguratio
nPane.html。
Lyncプラグイン定義では、Dojoモジュールクラスを次のように定義します
profilePlugin.LyncConfigurationPane。
初期の設計の1つは、LyncConfigurationPaneでプロファイルプラグインのConfigurationPaneを拡張することで
した。次に、ラジオボタンを使用して、IBM Connections設定とMicrosoft Lync設定の間でモードを切り替えま
した。ただし、これにより各プラグインの依存関係が生じます。
ユーザーインターフェイスとモジュールの独立性を明確に分離するために、Microsoft Lync独自のテンプレートと
Microsoft Lyncの構成ペインを使用することを選択します。
12.6.5 Microsoft Lync UCWAサービスを使用したプログラミングに関する注意
Microsoft Lync UCWAサービスを使用したプログラミングには、いくつかの課題があります。
サンドボックス使用時のWebサービスの無効なセキュリティ証明書サンドボックスは、権限のない機関によ
って署名されたSSL証明書を使用しています。実際のMicrosoft Lync Serverを使用している場合、これは発
生しません。したがって、回避策は必要ありません。
ヒント: この例外は、開発、テスト、または本番環境のSSL証明書が自己署名されている
場合にも発生する可能性があります。
アプリケーションエンドポイントの変更たとえば、次のURLでは、 123456 OAuthトークンの有効期限が
8時間後に切れると、常に変更されます。
https:// server / v1 / application / 123456
ユーザーエンドポイントの変更次の例では、 2345 一定時間後に変化する:
Sarahj2345@gotuc.net
ユーザーの写真を取得するためにも承認が必要
456 IBM Content Navigatorのカスタマイズと拡張
12.6.6名刺の表示
プロファイルプラグインは、JSONPを使用してユーザープロファイル情報を取得します。Lyncプラグインは別のアプロ
ーチを使用します。1つの可能性は、同様の方法でそれを行い、LyncプラグインでJSPサービスまたは外部サービスを呼
び出して電子メールの検索を行うことです。より良い方法は、サーバー側でサービスを構築し、そのサービスをプラグ
インサービスにすることです。
に ない プロファイルプラグインの既存のロジックを中断します。プロファイルプラグインを拡張しますが、_ setQueryString
の方法 PersonCard JSONPサービスを使用する代わりに、Lyncプラグインのプラグインサービスを使用します。
例12-6を参照してください。
例12-6 LyncPluginInit.jsのLyncプラグインでの_setQueryStringメソッドの上書き
profilePlugin.PersonCard.prototype._setQueryAttr = function(query){
console.log( "LyncPlugin PersonCard _setQueryAttr"); this.containerNode.inne
rHTML = ""; //内容をクリアthis._load =(this._load || dojo_lang.hitch(this、this._se
tValueAttr));
ecm.model.Request.invokePluginService( "ProfilePlugin"、 "lyncStatusService"、{
backgroundRequest:true、requestPa
rams:{
appUrl:profilePlugin.configuration.lync_server、oAuth:profilePlugin.config
uration.oAuth、email:query.email}、
requestCompleteCallback:dojo_lang.hitch(this、function(response){//
成功
console.log( "リクエスト成功:"); this._load(re
sponse); })、
requestFailedCallback:dojo_lang.hitch(this、function(response){//失敗しました console.log(
"lync request failed:" + response);
this._load(response); })}); }
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
457
ロジックを再利用するには、ロードします profilePlugin.js から LyncPlugin.js、 プロファイルプラグインのメソッドをLyncプ
ラグインのメソッドで上書きします。例12-7を参照してください。
例12-7 LyncPlugin.jsからProfilePlugin.jsをロードする
必要とする([
"dojo / _base / xhr"、
"profilePlugin / LyncPluginInit"]、
function(xhr){
var response = {id: "ProfilePlugin"、script: "profilePlugin.js"}; var scriptUrl = ecm.model.Request.getPlug
inResourceUrl(response.id、response.script);
{を試す
var scriptText;
xhr.get({
url:scriptUrl、sync:true、load:f
unction(text){
scriptText =テキスト; }});
eval(scriptText);
}キャッチ(e){
console.log( "_ desktopLoaded"、 "プラグインのJavaScriptの評価エラー" + response.id、e.messa
ge);
ecm.model.desktop.addMessage(ecm.model.Message.createErrorMessage( "plug in_error"、[
response.id]));
}}
);
注意: 別のアプローチは、再配置することかもしれません profilePlugin.js 両方のプラグインで共有できるよう
に、JavaScriptモジュールディレクトリの下に追加します。利点は profilePlugin.js JavaScriptモジュールでは、
Firebugの[スクリプト]タブにリストされ、ブレークポイントを設定することも可能です。
458 IBM Content Navigatorのカスタマイズと拡張
12.7セットアップ、インストール、および拡張
このセクションでは、Lyncプラグインのセットアップとインストールに焦点を当て、将来の機能強化について説明
します。
12.7.1開発環境に関する考慮事項
Microsoft Lync ServerとUCWAを初めて使用する場合、開発環境のセットアップは困難な場合があります。
一部のドキュメントは最新ではない場合があります。Microsoft UCWAのドキュメントについては、次のW
ebページを参照してください。
http://ucwa.lync.com
http://ucwa.lync.com/documentation/Resources-contact
サンドボックスは、必要な属性で完全に構成されていない可能性があります。サンドボックスのテストアカ
ウントには、以下の情報が含まれていない可能性があります。
タイトル会社
事務所
勤務先の電話番号
12.7.2パフォーマンス
UCWAでは通常、個々の情報を取得するためにMicrosoft Lync Serverを個別に呼び出す必要があります。
個々の属性には個別の呼び出しが必要です。
「/ノート」「/場
所」「/存在」
“ / location”(通常は戻ります 空の サンドボックス内。)
注意: UCWAは、複数の要求を1つのバッチに結合するバッチコマンドを提供しています。境界の解析が必要
ですが、パフォーマンスを大幅に向上させることができます。
12.7.3プラグインアプリケーションのデバッグ
デバッグするには、プラグイン開発中にいくつかの手法を使用できます。
対応するJavaScriptクラスのFirebugにブレークポイントを設定します。Firebugの[ネット]タブをチェックし
て、プラグインサービスからのJSON応答を調べます。
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
459
ポスターなどのFirebugプラグインを使用して、Microsoft Lync Serverからの情報応答を実験および観察し
ます。JavaクラスでLogger.logDebug(this、methodName、request、message)ステートメントを使用し
て、デバッグ情報をWebサーバーログに記録します。
12.7.4 Lyncプラグインのインストールと設定
Lyncプラグインをインストールしてセットアップするには、次の手順を実行します。
1.プラグインを解凍します C:\ IBM \ ECMClient \ plugins 以下を作成します
Microsoft LDAPディレクトリのアカウント:
–エイミー
–
フェルナンド
–サラ
2.ステップ1で個々のユーザーとしてIBM Content Navigatorにログインし、各アカウントでフォルダーを作成しま
す。
3. IBM Content NavigatorサーバーがMicrosoft Lyncサンドボックスにアクセスできることを確認します。そうしないと
、ConnectionTimeout例外が発行される可能性があります。
4. Microsoft Liveアカウントを使用してMicrosoft Lyncサンドボックスにログインします。
https://ucwa.lync.com/login
5.インタラクティブデモに進みます。必ずクリックしてください サブスクリプションを開始、 入る
メッセージ、およびエイミーとフェルナンドのオンラインステータスを変更します。
6.クリック 私のOAuthトークン そして、最初のトークン値をコピーします。
7. IBM Content Navigator管理デスクトップから、プロファイルプラグインがすでに存在する場合は削除します。
新しいプラグインを作成します。次のパラメータを入力します。
–
クラスファイルパス: C:\ IBM \ ECMClient \ plugins \ ProfilePlugin
–
クラス名: com.ibm.ecm.extension.profile.ProfilePlugin
8.を選択します クラスファイルのパス 次にラジオボタン。クリック 負荷。 次のように入力します
2つの構成パラメーター:
–
Microsoft LyncサービスのURL:
https://ocsrp.gotuc.net/ucwa/oauth/v1/applications/
–
OAuthトークン:Microsoft Lyncサンドボックスからの値
9.をクリックします セーブ そして 閉じる。
10.IBM Content Navigatorページを更新します。参照機能に移動します。以前に作成したフォルダー名の横に
あるユーザー名の上にマウスを置きます。
460 IBM Content Navigatorのカスタマイズと拡張
Microsoft Live Webサイトにログインすると、次のメッセージが表示される場合があります。
ごめんなさい!現在、ログインに問題があります。後でもう一度やり直してください。
これは、おそらくユーザーまたはセッションが多すぎるために、サンドボックスWebサイトが機能していないことを意味します。後
でもう一度やり直して、OAuthトークンを取得してください。
SSL証明書の例外が発生した場合は、
com.ibm.ecm.extension.lync.util.trustAllSSL 方法。
注意: 次の場所にあるMicrosoft Lyncサンドボックスで、サインインの問題が発生する場合があります。Webサイト
にログインできない場合は、後でテストするためにWebサイトに戻ってください。
https://ucwa.lync.com
12.7.5将来の機能強化
このプラグインは、Microsoft Lync Serverからユーザーの連絡先とオンライン情報を提供するための開始点とな
ることを目的としています。これらの例のように、プラグインに将来の拡張を行うことができます。
プロキシサービスの応答時間を改善します。
参照ビューを更新せずに、ユーザーのオンラインステータスとメッセージを更新します。
ユーザーの写真の横にユーザーステータスアイコンを追加します。
第12章Microsoft Lync Server用のプロファイルプラグインの拡張
461
12.8結論
この章では、ICN 2.0.2の既存のプロファイルプラグインを拡張し、Microsoft Lync Serverで使用できるように適
合させる方法について説明します。Microsoft Lync ServerへのREST API呼び出しを調べて、連絡先情報を取得し
ます。Microsoft Lyncサービスにテストプラットフォームを提供するMicrosoft Lync Serverサンドボックスを確認
します。Microsoft Lync Serverサンドボックスと連携するようにプロファイルプラグインを拡張し、マウスがユー
ザー名フィールドの上にあるときに、参照ビューのICNグリッドにユーザーのオンライン情報とステータスを表
示できます。
オブジェクト指向のアプローチを使用してコードを設計しました。IBM SametimeとConnectionsサービスの両方
、およびMicrosoft Lync Serverでも同じプラグインを使用できるようにプロジェクトを設計しました。この設計
により、メンテナンスコストが削減され、両方のサービスをサポートしなければならないという課題が回避され
ます。オブジェクト指向の設計は、中間層のJavaとフロントエンドJavaScriptの両方に適用されます。このプラ
グインは、Microsoft Lync ServerのICNでユーザーのオンライン認識を統合するためのベースとして使用できます
。
462 IBM Content Navigatorのカスタマイズと拡張
パート3
部
3
展開、デバッグ、トラブ
ルシューティング
このパートでは、ソリューションを運用環境に体系的に展開および更新するための展開に関する考慮事項があり
ます。また、デバッグとトラブルシューティングのトピックについても説明します。このパートには、次の章が
含まれています。
465ページの第13章「コンポーネントの配備」495ページの第14章「デバッグとト
ラブルシューティング」
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
463
464 IBM Content Navigatorのカスタマイズと拡張
13
第13章
コンポーネントの配備
エンタープライズコンテンツ管理(ECM)環境の管理の重要な部分は、ソリューションを開発環境から運用環境
に正常に展開および更新する機能です。文書クラス、カスタムメニュー、デスクトップ構成など、IBM Content
Navigator環境の複雑さと複数のコンポーネントには、システム配備のすべてのレベルでアプリケーションを管理
するための特定の考慮事項が必要です。この章では、このようなソリューションを展開する際の展開に関する考
慮事項について説明します。
この章では、次のトピックについて説明します。
実稼働環境を管理するための戦略アプリケーションのコンポーネントの識別IBM Conten
t Navigatorソリューションの手動デプロイメント環境に一定レベルの予測可能性を注入す
るエクスポートとインポートを使用してContent Navigatorソリューションをデプロイす
る
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
465
13.1本番環境を管理するための戦略
IBMエンタープライズコンテンツ管理(ECM)環境、およびITアプリケーションインフラストラクチャの任意の
部分には、アプリケーションのサポートに使用され、さまざまな目的で使用される複数の環境が存在する可能性
があります。ECM環境には、いくつかのタイプのリポジトリー、バックアップおよび災害復旧用のミラーリング
されたイメージ、および開発、品質保証、テストに使用されるクローン環境が含まれる場合があります。
IBM Content Navigatorデプロイメントの場合、アプリケーション構成または開発は、製品環境で使用する前に
適切にテストおよび検証する必要があります。実稼働環境にデプロイする前に、アプリケーションの開発およ
びテストプロセスを管理するための多くのアプローチが利用可能です。多くの場合、アプリケーションが通常
の操作に依存するコンポーネントが存在します。
アプリケーションをさまざまな環境に展開したり、さまざまな環境から移行したりする前に、アプリケーション内
の依存コンポーネントについて次の領域を確認してください。
データベースのエントリ、テーブル、接続アプリケーションサーバ
ー環境インフラストラクチャまたはハードウェアの依存関係ディレ
クトリサービスとユーザー/グループの識別バックアップと回復の
戦略
運用環境を管理するときは、必ずすべてのアプリケーション、開発環境とテスト環境、およびすべての依存環境
をサポート計画に含めてください。実動IBM Content Navigatorデプロイメントを管理するときは、アプリケーシ
ョンの各コンポーネントと、アプリケーションがIT環境の他の領域とどのように相互作用するかを明確に理解し
てください。
これらの依存関係と相互作用を理解することは、開発、テスト、バックアップとリカバリー、および実稼働での
使用を含む、IBM Content Navigator環境で発生するさまざまなアクティビティーのサポートに役立ちます。また
、ITインフラストラクチャ内のさまざまな環境間でのアプリケーションのシームレスなプロモーションのサポー
トにも役立ちます。
466 IBM Content Navigatorのカスタマイズと拡張
13.2アプリケーションのコンポーネントの特定
ソリューションをある環境から別の環境に昇格させるには、十分に調整され、十分にテストされた手順である必要が
あります。たとえば、スクリプトにバンドルされた多くの自動化されたステップが含まれる場合があります。また、
いくつかの手動ステップが含まれている場合もあります。これらの手順に関係なく、アプリケーションの個別のコン
ポーネントを理解することが重要です。また、これらのコンポーネントが永続性の観点からどのように表現されてい
るか、および各コンポーネントの階層と依存関係を識別することも重要です。
13.2.1コンポーネントの階層
IBM Content Navigatorコンポーネントを使用して、カスタムおよびターゲットアプリケーションを作成し、集中
した要件を満たすことができます。これらのコンポーネントは相互に作用するため、相互の存在に依存します。
さらに、アプリケーションを正しく管理、展開、および機能させるためには、明確な依存関係を守る必要があり
ます。
468ページの図13-1は、IBM Content Navigatorデスクトップの構成におけるいくつかのコンポーネントの依存関
係を示しています。この図は、デスクトップ名や説明、アプリケーション名などの構成の詳細では、追加のコン
ポーネント構成が不要であることを示しています。デスクトップを環境に展開するには、これらの値を展開の一
部として入力するだけです。それにもかかわらず、このデスクトップによって参照される他のコンポーネント、
たとえばビューアマップなどが図にリストされています。VIewerマップは多くのデスクトップ間で共有でき、マ
ップを変更すると、それを参照するすべてのデスクトップの構成が変更されます。この依存関係のため、デスク
トップをデプロイするには、それが参照するビューマップをデプロイする必要があることを必ず理解してくださ
い 前 実際にデスクトップを展開します。このように、デスクトップが展開されると、ビューアマップが利用可能
であることがすでにわかり、既存の参照が使用されます。
第13章コンポーネントのデプロイメント
467
デスクトップ
ビューアマップ
ツールバーとメニュー
ビューアプラグイン
レイアウト
ワークフロー
アクション
リポジトリ資産
ファイルシステムアセットプラグイン
応用
JAR
HTML
リポジトリ
JS
CSS
スペース
ObjectStore
図13-1 IBM Content Navigatorコンポーネントの依存関係グラフ
ヒント: 図13-1は、デスクトップを展開するためにそのことを伝えようとはしていません。たとえば、ビューアマ
ップを展開する必要があります。表示されるのは、展開するデスクトップがカスタムビューアマップに依存してい
る場合(デフォルトでは使用不可)、 しなければならない デスクトップを展開する前に、カスタムビューアマッ
プが存在しない場合は、最初に展開します。
同じ控除メカニズムを使用すると、デプロイメントポリシーを策定するには、ボトムアップアプローチを使用す
る必要があることに気付く場合があります。依存関係のないコンポーネント(図13-1ではこれらのコンポーネン
トはJARファイルなど)のデプロイから始めて、単一の依存関係を持つコンポーネントに進みます。比喩的なル
ープ不変式を使用すると、展開できるのは n番目 直接依存するすべてのn-1レベルコンポーネントが正常にデプロ
イされている場合のレベルコンポーネント。
たとえば、ビューアプラグインのデプロイには多くの手順が含まれる可能性があることに注意してください。た
とえば、プラグインJARをデプロイし、必要なJARを WEB-INF / lib フォルダ。当てはまるのは、コンポーネント
のデプロイメントを複数のステップに分割する場合、これらのステップはまだデプロイされていない別のコンポ
ーネントのデプロイメントに依存してはならないということです。
468 IBM Content Navigatorのカスタマイズと拡張
13.2.2永続性の特性
デプロイメントのもう1つの側面は、永続層です。これは、コンポーネントが格納されている場所を特定すること
を意味します。IBM Content Navigatorベースのアプリケーションでは、コンポーネントが格納されるこの場所は
、IBM FileNet Content Managerリポジトリ内のカスタムオブジェクト、IBMDB2®テーブル内の行、またはサーバ
ーのファイルシステム上のファイルです。要約すると、展開手順を開発するには、何が必要かを知っている必要
があります。 リフト 1つの環境からのコンポーネントのフットプリント 置く 別のそれ。ステップを自動化できな
い場合もあります。したがって、重要なタスクは、それらを識別し、展開手順に必要な手動の手順を提供するこ
とです。
13.2.3データベース層
IBM Content Navigatorは、その固有のオープン性のために、かなり単純化されたデータベーススキーマをレイアウ
トしています。したがって、管理者は、コンポーネントがデータベースにどのように格納され、表現されるかをよ
り簡単に理解できます。その結果、データベーススクリプトを記述して、必要なコンポーネントをプログラムでデ
プロイできます。単純さの一部は、IBM Content NavigatorがユーザーフレンドリーなIDベースのモデルを備えてい
るためです。
IBM Content Navigatorは、1つのデータベース表を使用して状態情報を保管します。この場合、このデータベースは
ICN_DBと呼ばれ、スキーマはnavigatorと呼ばれます。テーブルには、ID(文字列)およびATTRIBUTES(CLOB)
という名前の2つの列が含まれています。ID行の形式は次のとおりです。
[COMPONENT_TYPE] .navigator。[COMPONENT_ID]
たとえば、リポジトリを定義する場合は、次のIDを使用できます。
repository.navigator.MyCompanyP8
最初の部分では、このIDをリポジトリとして定義します。2番目の部分は、ナビゲーターのユーザーインターフェイスに
適用されます。3番目の部分は、リポジトリーのMyCompanyP8のIDです。IDにスペースやその他の文字を含めることは
できませんが、この規則には例外があります。
表の特定のIDは、製品のデフォルトの動作を定義します。例えば、次のIDは、ユーザーが新しいFileNet P8リポ
ジトリーを構成するときのデフォルト値を定義します。
repository.navigator.p8defaultsettings
テーブルの行を調べることは、IBM Content Navigatorの永続化レイヤーに慣れるのに役立ちます。
第13章コンポーネントのデプロイメント
469
テーブルの2番目の列はATTRIBUTESという名前です。この列には、対応するID列で定義されているオブジェク
トの定義が保持されます。形式は次のとおりです。
attributeName1 = attributeValue1; ...; attributeNameN = attributeValueN
キーと値のペアの割り当てのコレクションで構成され、セミコロンで区切られます。以前に定義し始めたリポジ
トリの属性をさらに詳しく見てみましょう。
objectStoreName = MyCompanyP8; type = p8; addAsMajorVersion = true; serverName = i iop:// server /
FileNet / Engine
ご覧のとおり、ユーザーインターフェイスに入力した値はこの方法でフラット化され、データベースに保存され
ます。これにより、正確なアプリケーション展開手順が可能になります。
重要: IBM Content Navigatorは、データベーステーブルに格納されている情報の整合性に依存しています。
データベースを介してコンポーネントをデプロイする場合は注意が必要です。間違いがあると、本番ユーザー
インターフェイスが壊れる可能性があります。常にデプロイメントをステージングし、変更を行う前に必ずデ
ータベースのバックアップを作成してください。
13.3 IBM Content Navigatorソリューションの手動デプロイメント
依存関係グラフを完成させることで、展開を成功させるために調整する必要のあるステップを適切に把握できま
す。展開の詳細を下から順に見ていきます。
このセクションの目的は、IBM Content Navigatorで使用されるさまざまな永続性モデルのすべての単一のコンポーネント
とファイル、行、またはオブジェクトをリストすることではありません。目標は、コンポーネントが格納されている場所を
特定するツール、およびコンポーネントを別の環境に展開するために必要なタスクを特定する方法を提供することです。タ
ーゲット環境でコンポーネントを手動で定義する必要はありません。
13.3.1リポジトリの依存関係
リポジトリーの依存関係はIBM Content Navigatorに直接関係していないため、リポジトリーの依存関係について
はあまり説明しません。ここでの前提は、アプリケーションが依存するリポジトリー・レベルのアセットが何で
あれ、IBM Content Navigatorコンポーネントのデプロイを開始する前にデプロイされたことです。アセットには
、IBM FileNet Content Managerのドキュメントクラス、アイテム
470 IBM Content Navigatorのカスタマイズと拡張
IBM Content Managerのタイプ、フォルダー、検索および入力テンプレートなど。この手順を確実に成功させる
には、それぞれのリポジトリのデプロイメントガイドラインに従ってください。
13.3.2 IBM Content Navigatorデスクトップ
このセクションは製品階層の最上位のコンポーネントであるため、このセクションはデスクトップで使用しま
す。最初に、デスクトップが依存するコンポーネントの展開の詳細について説明し、次にデスクトップの展開
方法を示します。
プラグイン
プラグインのデプロイは、次の2つのステップで構成されています。
1.ビルドされたJARファイルをターゲット環境の正しいフォルダーにデプロイします。この手順は、この
本の複数の場所で説明されています。
2.データベースに適切な行を挿入して、ユーザーインターフェイスを使用せずにプラグインを
プログラムで登録します。
プラグインは一度登録されると、すべてのIBM Content Navigatorで使用できるようになります。これを定義す
るには、データベーステーブルに1行追加します。
次の情報が存在している必要があります。
ID
plugin.navigator.MyPlugin
属性
–
version:からのプラグインのバージョン MANIFEST.MF JARのファイル。
–
filename:IBM Content NavigatorがJARファイルを見つけるために使用するURI。たとえば、 file:///ま
たはhttp://。
–
name:プラグインの説明的な名前。
–
configClass:プラグインの構成ユーザーインターフェイスを含むJARのクラス。
–
configuration:プラグインの構成状態。この情報は、スカラー(単一の文字列値のみ)にすることも、
JSONで表される複雑なデータ構造にすることもできます。
たとえば、EDSプラグインを調べます。次の例は、データベース内の対応する行を示しています。
"plugin.navigator.EDSSupportPlugin"、 "version = 1.0; filename = http:// nexusd emo / navigator / plugins / eds
Plugin.jar; name = External Data Services Support; configClass = edsPlugin.ConfigurationPane; configuration = h
ttp:// ne xusdemo / sampleEDSService」
第13章コンポーネントのデプロイメント
471
ヒント: プラグインの構成パラメーターには、通常、環境固有の値が含まれます(たとえば、環境
ごとに異なるWebサービスエンドポイント)。そのため、元の環境から行をダンプするとき、行を
挿入して更新する前に、テキスト値をターゲット環境で有効な情報に置き換える必要がある場合が
あります。
ターゲット環境でプラグインを定義したら、新しいプラグインが存在することをナビゲーターアプリケーション
に通知する必要があります。この手順を実行するには、プラグイン(この場合はEDSSupportPlugin)のIDを 「a
pplication.navigator」 行。この行はアプリケーションの多くのコンポーネントで使用されるため、ターゲット環
境で更新します。
'application.navigator'、 '...; plugins = ...、 EDSSupportPlugin; ... 」
レイアウト
IBM Content Navigatorには、カスタムレイアウトを開発する方法を示すサンプルコードが含まれています。レイア
ウトはプラグインとして登録され、それが使用されるデスクトップで参照される必要があります。
最初のステップは、プラグインをデプロイすることです。これについては、471ページの「プラグイン」で説明されてい
ます。プラグインを展開する方法の指示に従い、残りの手順についてここに戻ります。
プラグインJARがデプロイされており、プラグインがデータベース(plugin.navigator.SampleLayoutPlugin)に登
録されていると仮定すると、デスクトップにレイアウトを参照する必要があります。
レイアウトは、PluginActionを拡張するクラスのパッケージから名前を取得します。ここでは、提供されている
サンプルに従って、クラスの名前が次のとおりであると想定します。
com.ibm.ecm.extension.sample.SamplePluginLayout
このレイアウトを展開するデスクトップを定義するデータベース内の行を見つけます。これが新しいデス
クトップである場合、基本的には元の環境からプルします。おそらく、デスクトップは次のように定義さ
れています。
desktop.navigator.MyDesktop
ATTRIBUTES値を取得し、次のキーと等しいキーと値のペアを探します レイアウト。 これを次の行に設定します
。
layout = com.ibm.ecm.extension.sample.samplepluginlayout
472 IBM Content Navigatorのカスタマイズと拡張
テーブルの行を更新するか、このデスクトップが新しい場合は行を挿入します。WebSphereでナビゲーターアプリケーション
をリサイクルします。
ビューアマップ
ビューアマップの展開は少し複雑です。ビューアー・マップはアイテムのコレクションで構成され、それぞれが
IBM Content Navigatorで使用可能なビューアーに文書のMIMEタイプをマップします。各デスクトップには、常
に1つのビューアマップのみを割り当てることができます。
プログラムでビューアマップをデプロイするための4つのステップのプロセスを確立します。
1.マッピングを展開します。
マッピングをデプロイするには、マッピングごとに1つの行INSERTステートメントが必要です。たとえ
ば、ビューアーマップのIDが MyViewerMap、 また、AFP IBM Content Manager OnDemandドキュメント
を
afp2pdf ビューアでは、次の情報をデータベースに挿入します。
"viewerMapping.navigator.MyViewerMap0"、 "contentTypes = application / afp; serverType = od; viewerNam
e = afp2pdf; id = MyViewerMap0"
ラインデータとラインデータアプレットビューアについても同様です。
"viewerMapping.navigator.MyViewerMap1"、 "contentTypes = application / lin e; serverType = od; viewerNa
me = lineDataApplet; id = MyViewerMap1"
番号スキームに注意してください。ID列は、次の命名規則に準拠している必要があります。
viewerMapping.navigator。$ {ViewerMapName} [\ d]
したがって、ビューアマップに付ける名前と数字を連結します。数字は、新しいマッピングを追加するたび
に増加します。ビューアマップでのマッピングの順序は重要ですが(優先ルールの場合)、この番号付けス
キームは ではない この順序を決定します。このタスクはステップ2で実行されます。
2.ビューアマップ定義を展開します。
ビューアマッピングを展開した後、次の行をデータベースに追加してビューアマップを定義します。
"viewer.navigator.MyViewerMap"、 "name = MyViewerMap; description = My Viewer Map; mappings
= MyViewerMap1、MyViewerMap0"
使用方法に注意してください MyViewerMap このビューアマップを、前のステップでデプロイしたすべて
のマッピング(MyViewerMap0、MyViewerMap1)に関連付けます。また、 マッピング 属性リスト MyViewerMap1
前 MyViewerMap0。 このようにして優先順位が確立されます。
第13章コンポーネントのデプロイメント
473
3.新しく展開されたビューアーマップを、それを使用するデスクトップから参照します。このステップでは、ビ
ューアマップをデスクトップに割り当てます。この手順を実行するには、既存のデスクトップの行を更新す
るか、デスクトップが初めて展開される場合は新しい行を挿入します。次の例では、デスクトップの名前が
MyDesktop:
"desktop.navigator.MyDesktop"、 "...; viewer = MyViewerMap; ... "
4.デスクトップで参照できるように、IBM Content Navigatorでビューアーマップを宣言します。
他のコンポーネントと同様に、ビューアマップをクリックしたときに管理者デスクトップにビューアマップがリス
トされるようにするには、それをグローバルナビゲータコンポーネントとして宣言します。これを行うには、vie
wer属性に追加してapplication.navigator行を更新します。
"application.navigator"、 "...; viewers = default、 MyViewerMap、...; ... "
ヒント: 複数のビューアーマップが存在する場合、ビューアー属性はコンマで区切られます。
手順を順不同で展開しても、成功する可能性があります。ただし、順不同で実行する場合は、必ずWebSphereで
IBM Content Navigatorアプリケーションを停止し、デプロイメントを(任意の順序で)実行してください。4つの
手順を完了したら、アプリケーションを再起動します。
予約済みビューアとリポジトリタイプID
以前の例では、特定のIDを使用しました。しかし、それらがどのように宣言されているかは、すぐにはわ
かりません。たとえば、 serverType = od そして
viewerName = lineDataApplet。 IBM Content Navigatorは、いくつかのサーバー・タイプとビューアーIDをデフォル
トで使用可能にします。
サーバーの種類:
– od
- CM
– p8
– cmis
ビューアID:
– afp2pdf
–
lineDataApplet
–ブラウザ
–
アドビリーダー
–
appletViewer
–
filenetViewer
–
iccViewer( ICCViewerプラグインがインストールされている場合にのみ使用可能)
474 IBM Content Navigatorのカスタマイズと拡張
各ビューアおよびリポジトリタイプによって提供される機能の詳細については、公式ドキュメントを参照して
ください。
リポジトリ
13.2.3ページの469ページの「データベースレイヤー」で述べたように、各リポジトリはデータベースの1行
を占有します。 application.navigator」 リポジトリを参照できるようにする行。例として、MyRepositoryとい
う名前の架空のP8リポジトリに焦点を当てます。例13-1の情報を使用して定義します。
例13-1定義に関する情報
"repository.navigator.MyRepository"、 "folderNameProp = FolderName; objectSt oreName = P8ObjectStore; type
= p8; searchFilteredFolderProperties =; addAsMajo rVersion = true; objectStore = P8ObjectStore; timeoutInSeco
nds = 0; floatOp =; sta tusDocDeclaredRecord = true; server // <ip / host>:<port> / FileNet / En gine; searchFilte
redDocumentProperties =; statusWorkItemLocked = true; folder DefCols = {NAME}、ContentSize、LastModifier、
DateLastModified、MajorVersionNu mber; matchAll = true; statusDocMinorVersions = true; integerOp = ; idOp =
; statusW orkItemDeadline = true; documentSystemProperties = Creator、DateCreated、LastM odifier、DateLas
tModified、Id、IsReserved、IsCurrentVersion、MajorVersionNum ber、MinorVersionNumber、ContentSize、M
imeType; statusDocCheckedOut = true; pr otocol = Navigator; annotationSecurity = init; DocumentTitle; s tringOp
=; datetimeOp =;folderSystemProperties = Creator、DateCreated、Id、Path Name; booleanOp =; searchDefCo
ls = {NAME}、ContentSize、LastModifier、DateLastM odified、MajorVersionNumber; objectOp =; searchMaxRe
sults = 0; connectionPoint = P8ConnPt1:1; checkinAsMajorVersion = true; name = My Repository 」
リポジトリを正しく定義するには、多くの構成属性が必要です。元の環境でIBM Content Navigatorユーザー・イ
ンターフェースを使用してすべての属性を構成してから、行をエクスポートしてターゲット環境にインポートで
きます。
最後に、IBM Content Navigatorがそれを参照できるようにデスクトップなどの他のコンポーネントで使用できる
ように、リポジトリーを宣言する必要があります(つまり、ドロップダウンメニューにリストを表示して選択で
きるようにします)。次の行を更新して、属性を追加します(または存在する可能性が高いため、追加します)
。
"application.navigator"、 "...; repositories = ...、 MyRepository、...; ... "
データベースの変更がすべて完了したら、WebSphereでナビゲーターアプリケーションをリサイクルする必要があります
。
第13章コンポーネントのデプロイメント
475
ツールバーとメニュー
ツールバーとメニューも機能と配置が似ています。オプションで、ツールバーとメニューには、プラグインから
派生したメニュー項目を含めることができます。この場合、前の章で説明したようにプラグインをデプロイしま
す。そのステップが完了したら、他のコンポーネントと同様の手順に従います。最初にメニューを定義してから
、たとえばデスクトップから参照できるように宣言します。それを定義するために、最初の環境のデータベース
テーブルで行を探します。 menu.navigator 最初に設定したときに割り当てた名前で終わります。この場合、MyM
enuという名前のメニューを使用します。行は次の例のようになります。
"menu.navigator.MyMenu"、 "items = RefreshGrid; typeLabel =コンテンツリストツールバー; name =マイメニュー
; type = ContentListToolbar; description =説明されたメニュー。; id = MyMenu"
あいまいになる可能性がある唯一の部分は、値を入力する値をどのように決定するかです。 アイテム 属性(ある
環境にあるものを取得して別の環境に追加していないと想定)。この属性は、メニュー項目とアクションのコレ
クションです。ユーザーインターフェイスで表示できる項目に使用できる値を確認するには、項目にカーソルを
合わせ、IDとして表示されている値を使用します。図13-2は、前の例の対応するメニュー項目を示しています。
図13-2 [Refresh]メニュー項目はID RefreshGridに対応しています
多くの場合、コンポーネント(この場合はメニュー)を定義した後、参照できるようにするには、アプリケーシ
ョンでそれを宣言する必要があります。このステップは
application.navigator 行:
"application.navigator"、 "...; menus = ...、 MyMenu、...; ... "
デプロイされたメニューをすぐに使用する必要があるかどうかに応じて、最後の手順はオプションです。メニュー
は、デスクトップに割り当てることができるコンポーネントです
476 IBM Content Navigatorのカスタマイズと拡張
ユーザーインターフェイスをさらにカスタマイズします。これまでのところ、メニューを定義して宣言しましたが、デスクトップに
は割り当てませんでした。これは、デスクトップで使用可能なメニューの1つ(たとえば、ContentListToolbar)に割り当てることで
行います。詳細については、477ページの「デスクトップ」を参照してください。
デスクトップ
最後に、すべての依存関係が解決されたら、デスクトップを展開できます。デプロイするには、1つの行を更新
し、別の行を挿入する必要があります。いつものように、最初にデスクトップの定義を含む行を挿入します。
SQLステートメントを例13-2に示します。
例13-2 SQLステートメント
INSERT INTO navigator.CONFIGURATION VALUES( 'desktop.nav
igator.MyCompanyDesktop'、
'SystemItemContextMenu = DefaultSystemItemContextMenu; fileIntoFolder = fals e; BrowseToolbar = DefaultBro
wseToolbar; ContentListToolbar = MobileDesktopco ntentlisttoolbar; SearchTemplateContextMenu = DefaultSea
rchTemplateContext Menu; loginLogoUrl =; showGlobalToolbar = false; FavoritesToolbar = DefaultFavo ritesToo
lbar; culturalCollat​​ion = actionapples = LabelsApplication = LabelApplication = LabelAction = Rulesアプリケーシ
ョン= ecm.widget.layout.CommonActionsHandler; f eatures = browsePane、searchPane; TrackerQueueContex
tMenu = DefaultTrackerQue ueContextMenu; SelectObjectFolderContextMenu = DefaultSelectObjectFolderCo
ntextMenu; ItemContextMenu = MobileDesktopdocumentcontextmenu; repositories = MyCompanyRepository;
name = MyCompany
Desktop; description =; AddFolderAttachmentContextMenu = DefaultAddFolderAtt achmentContextMenu;
ProcessQueueContextMenu = DefaultProcessQueueContextMe nu; TeamspaceContextMenu =
DefaultTeamspaceContextMenu; showThumbnails = true; SelectObjectToolbar = DefaultSelectObjectToolbar;
bannerBackgroundColor =; TeamspaceTemplateContextMenu = DefaultTeamspaceTemplateContextMenu;
banner ApplicationNameColor =; WorkItemDocumentContextMenu = DefaultWorkItemDocume ntContextMenu;
bannerLogoUrl =; showSecurity = false; FavoriteFolderContextMe nu = DefaultFavoriteFolderContextMenu;
bannerMenuColor
=#AttachtextContextFoldTextContextFolderContextContextFolderContextContextFolderContextContextFolderContextContextFolderContextC
.layout.NavigatorMainLayout; TeamspacesListTo olbar = DefaultTeamspacesListToolbar;
第13章コンポーネントのデプロイメント
477
r = DefaultGlobalToolbar; AttachmentFolderContextMenu = DefaultAttachmentFol derContextMenu; loginInformationUrl =;
SearchContextMenu = DefaultSearchCont extMenu; defaultRepository = MyRepository; BannerUserSessionContextMenu = Def
aultBannerUserSessionContextMenu;
SelectObjectItemContextContextAddMenuContextAddMenuContextAddMenuContextAddMenuContextAddMenuContextAddMenuDefaultAddMenuDefaultAddMenuContextAddMe
= DefaultSel ectObjectItemContextMenu; = Defau ltFavoriteItemContextMenu; FavoritesContextMenu = DefaultFavoritesContextM enu;
UserQueueContextMenu = DefaultUserQueueContextMenu; messageSearchUrl =; defaultFeature = browsePane; TeamspaceToolbar =
DefaultTeamspaceToolbar; Inba sketToolbarP8 = DefaultInbasketToolbarP8 ');
注意: この例は、多くのカスタムコンポーネントを持つ複雑なデスクトップ構成に由来しています。 しない
多くのコンポーネントをすでにデプロイしたコンポーネントで置き換えることなく、データベースに挿入しま
す。
また、このプロセスの次のステップを必ず実行する必要があります。これは、新しいデスクトップを宣言して、ナビ
ゲーターがユーザーインターフェイスでユーザーがデスクトップを使用できるようにすることです。私たちは application.navigator
新しいデスクトップ(この場合はMyCompanyDesktop)のIDを次のキーと値のペアに追加して、テーブル内のID:
。。。desktops
= admin、Demo、 MyCompanyDesktop; ...
WebSphereでナビゲーターアプリケーションを再起動し、新しいデスクトップを探します。
ヒント: ATTRIBUTES列は冗長になるため、読みにくい場合があります。それを完全に理解するために、テ
ーブル全体を区切られたファイルにエクスポートし、適切なビューアで開くことができます。ビューアーに
コンマとセミコロンで区切るように指示すると、ビューアーは、IBM Content Navigatorの各コンポーネント
を構成するそれぞれのキーと値のペアを表示します。
13.4環境に予測可能性のレベルを注入する
前のセクションで示したように、IBM Content Navigatorで設計されたアプリケーションを宣伝するためのデプロ
イメント戦略の開発は複雑になる可能性があります。複雑さは、さまざまな要件と使用例に対処するように設計
された多くのコンポーネントを持つことから生じます。それにもかかわらず、そのような配備戦略と手順を作成
することは常にやりがいがあります。
478 IBM Content Navigatorのカスタマイズと拡張
メジャーリリースとマイナーリリースの間では、アプリケーションを何度も再デプロイする必要があります。この
手順により、会社の多くの時間を節約できます。
私たちは多くのソフトウェアで作業していることに注意してください。ここで説明しなければならない多くの落
とし穴があります。それらのすべてが特にIBM Content Navigatorに関連しているわけではありません。問題を迅
速にトラブルシューティングおよび修正できるように、環境に一定の均一性をもたらす必要があります。標準化
を開始できるいくつかのレイヤーは次のとおりです。
ファイルシステムアプリケーションサーバーデータベースコンテンツリポジトリ
ファイルシステム
多くの計画が必要ですが、ある環境を別の環境に一致させるために主要なフォルダーパスを配置すると、将来
的に大きな利点が得られます。次のディレクトリで標準化することをお勧めします。
WebSphere Application
Serverインストール・ディレクトリーJREディレクトリーJDKディレクトリー
オペレーティングシステム固有のライブラリディレクトリ(/など) usr / lib そして
c:\ windows \ system32)
カスタムアプリケーションディレクトリ(たとえば/ opt / MyApp)
このアプローチを使用すると、すべての環境に適用されるデプロイメントスクリプトで特定のグローバル変数を
設定できます。開発環境がWindowsに基づいており、実稼働環境がUNIXのバージョンに基づいている場合、この
ステップはさらに困難になる可能性があります。インストールされたアプリケーションの標準化された場所がな
い場合、次善のアプローチは、サポートを容易にするために、各アプリケーションのデフォルトのインストール
ディレクトリで標準化することです。
アプリケーション・サーバー
アプリケーションサーバーがおそらく最も重要です。アプリケーション・サーバーは、IBM Content Navigatorおよび今
日提供されているエンタープライズ・アプリケーションの大半で主要な役割を果たします。次の名前を標準化すること
を検討してください。
サーバー名(server1)プロファイル
名(AppSvr01)
ノード名(Node01)およびセル名(Node01)デプロイされたアプリ
ケーション名(navigator1)
第13章コンポーネントのデプロイメント
479
提案の理由は、標準化された名前を使用して環境を実装すると予測可能性が確立されるためです。たとえば、サ
ーバーの起動と停止(リサイクル)にスクリプトが必要な場合は、(ファーム環境またはクラスター環境にある
サーバーの数に基づいて)事前定義されたサーバー数をループするスクリプトを作成できます。
また、次の例を使用して、ファーム内の各サーバーで開始操作を呼び出すこともできます。
startServer.bat AppSvr $ num
ポイントは、複数サーバーの開発環境がない場合でも、名前を使用したいという衝動に抵抗する必要がある
ということです。 サーバ サーバーに名前を付ける。代わりに名前を付けて server1 スクリプトが複数の環境
で機能するようにします。
デプロイされたアプリケーション名にも同じ概念が適用されます。1つのアプリケーションサーバーに複数のIBM Content N
avigatorインスタンスがインストールされている場合、スクリプトのベースとなる番号付けスキームを使用できるため、アプ
リケーションのリサイクルを迅速に行うことができます。さらに、プラグインディレクトリにプラグインを展開する必要が
ある場合は、すべてのインスタンスにそのプラグインも必要になる可能性があります。同様のスクリプトを使用して、正し
いJARファイルを正しいフォルダにサイクルコピーできます。 。
データベース
クリーンなデータベースを維持することは重要です。多くの企業は、管理および保守タスクを実行するのに役
立つストアドプロシージャを持っています。新しいテーブルスペースを作成してそれらを保存し、ヘルパーテ
ーブルと一時テーブルをそこに保存することをお勧めします。このようにして、アプリケーションを環境から
環境へと推進している人々にIBM Content Navigatorデータベースへのアクセスを許可する必要はありません。
別のテーブルスペースにあるストアドプロシージャへの実行権限を付与し、IBM Content Navigatorデータベー
スへの永続的な変更への唯一のエントリポイントがそれらのストアドプロシージャになるようにします。前の
セクションの命名規則に基づく標準化は、ここでも適用されます。
コンテンツリポジトリ
IBM FileNet Content Manager(P8)に焦点を当てています。FileNet P8は、すぐに使用できる多数の使用可能な
クラスとともにインストールされます。オブジェクトストアの整合性を維持するために、共通のスーパークラス
の下に顧客からのすべてのドキュメントクラスを作成します。たとえば、Documentの直下に抽象ドキュメントク
ラスを作成し(MyCompanyDocumentを呼び出しています)、すべての顧客ドキュメントクラスをMyCompany
Documentのサブクラスとして作成します。この方法を使用するのは、システム定義のクラスがそのまま維持され
、クラスの昇格が常にMyCompanyDocumentレベルで行われることを保証できるためです。さらに、オブジェク
トストアが多数ある場合は、どこにでも
480 IBM Content Navigatorのカスタマイズと拡張
ドキュメントが保存されている場合、将来の変更をより簡単に管理できるように、ドキュメントクラス階層全体
を複製します。たとえば、この手法により、将来的にマルチオブジェクトストアの検索が容易になるだけでなく
、最小限の労力でコンテンツをあるオブジェクトストアから別のオブジェクトストアに移行することができます
。
繰り返しますが、デプロイメントのテストとステージングを忘れないでください。
13.5エクスポートとインポートを使用してContent Navigatorソリューションをデプロ
イする
IBM Content Navigatorデプロイメントのデプロイメントを管理するためのもう1つのアプローチは、組み込みのエ
クスポートおよびインポート機能を使用して、ある環境から別の環境へのアプリケーションのデプロイメントを
管理することです。このアプローチは手動の移行よりもシームレスであり、他のアプローチで必要な手動の手順
のほとんどを排除します。
エクスポートおよびインポートツール機能を使用すると、移行する特定のデスクトップ定義を制御でき、移行
するコンポーネントとサブコンポーネントを特定できる構成ウィザードを通じてプロセスをサポートします。
エクスポートおよびインポート機能には、デスクトップ定義、リポジトリ、プラグイン、および特定のデスクト
ップ構成に関連付けられたその他の構成済みアイテムの識別が含まれます。お気に入りや最近の検索など、ユー
ザーに関連付けられたアイテムのエクスポートは含まれません。また、プラグインJARファイルなど、特定のIB
M Content Navigatorデプロイメントの制御外にある構成要素のエクスポートまたはインポートは含まれません。
デスクトップ定義をクリーンにインポートおよびエクスポートする機能はIBM Content Navigator環境の一部と
して提供されますが、組織のアプリケーション内のすべての要素を理解することは、アプリケーション管理プ
ロセスにとって重要です。
この章で前述したように、システムのさまざまなコンポーネント内に広範な相互依存関係が存在する場合があり
ます。これらの要素を理解し、移行またはアップグレードプロセス中の管理を計画してください。
第13章コンポーネントのデプロイメント
481
アプリケーションの移動または移行の計画を開始するには、以下の項目を検討して、ソースシステム内の相互依
存要素を特定し、ターゲットシステムでの作成または移行を計画します。
ターゲットリポジトリシステム:このターゲットECMリポジトリは、ソースシステムの構成要素と一致またはミ
ラーリングするように設定されています。ドキュメントクラス(FileNet Content Manager)、アイテムタイプ
(Content Manager 8)、プロパティなどのリポジトリ分類は、IBM Content Navigatorのインポートまたはエク
スポートユーティリティを使用して移行されません。これらの要素を手動で作成するか、リポジトリツールを使
用してソース構成をデプロイまたはコピーします。プラグインまたはサポートコード:IBM Content Navigatorデ
スクトップのインポートまたはエクスポートプロセスの一部として参照されるすべてのプラグインファイルは、
構成をターゲットシステムにインポートする前に、ソースサーバーからターゲットサーバーにコピーする必要が
あります。
画像ファイルまたは特別なグラフィック:IBM Content Navigatorデスクトップ内で使用されるすべての画像フ
ァイルも、ソースサーバーからターゲットサーバーに手動でコピーする必要があります。
インポートおよびエクスポートプロセスの一部として収集されない可能性のある要素を理解すると、IBM Con
tent Navigator環境の移行または移動がより一貫性があり、予測可能になります。
13.5.1管理デスクトップ内のエクスポート機能の使用
IBM Content Navigatorアプリケーションでのデスクトップのエクスポート機能の目的は、1つ以上のIBM Content Navigat
orアプリケーションを移動、マイグレーション、または更新できるようにすることです。483ページの図13-3は、Conten
t Navigatorのデスクトップでエクスポートを開始するためにクリックする[エクスポート]ボタンを示しています。
482 IBM Content Navigatorのカスタマイズと拡張
図13-3デスクトップの[Export]アクションボタン
デスクトップの定義
デスクトップ定義をエクスポートするには、IBM Content Navigator管理デスクトップセッションの管理ビューを
使用する必要があります。管理デスクトップは、IBM Content Navigator定義をエクスポートまたはインポートで
きる唯一のデスクトップです。
設定モードで デスクトップ 選択すると、IBM Content Navigatorシステムで構成されているすべてのデスクトッ
プのリストが表示されます。
デスクトップ定義は、エクスポート時に選択する最初の要素です。リストから単一のデスクトップ定義を選択す
るか、複数の定義を選択できます。エクスポートするデスクトップ定義を選択した後、エクスポート機能を選択
すると、システムはデスクトップのエクスポートウィザードを開きます。484ページの図13-4は、使用可能なオプ
ションを含むウィザードを示しています。
第13章コンポーネントのデプロイメント
483
図13-4 [デスクトップのエクスポート]タブ:デスクトップ
デスクトップのエクスポートウィザードには、次の3つのタブがあります。
デスクトップリポジトリプラグイン
デスクトップタブ
デスクトップのエクスポートウィザードを開くと、デフォルトで[デスクトップ]タブ(図13-4)が表示されます。
エクスポートするデスクトップ定義を再度選択できます。エクスポートのファイル名のフィールドもあります。
デフォルトは
ExportedConfiguration.properties ファイル。
デスクトップのエクスポートウィザードには、エクスポートファイルに名前を付けることができるフィールドもあ
ります。デフォルトのファイル名は ICNExportedConfiguration.properties。 命名規則を使用するか、将来的に異な
るエクスポートファイルを互いに区別できるような方法で、エクスポートファイルに名前を付けることができます
。
を選択した場合 このデスクトップの使用を許可されているユーザーとグループを含める エクスポート、ユーザー
、またはグループの定義のチェックボックスは、異なるLDAP環境間では転送されません。デスクトップのエクス
ポートが許可されている、指定されたユーザーまたはグループのみを識別します。組織は、同じユーザーとグル
ープの定義が別々に含まれていることを確認する責任があります
484 IBM Content Navigatorのカスタマイズと拡張
ソースとターゲットのIBM Content Navigator環境でLDAP環境が異なる場合。
リポジトリタブ
ウィザードの[リポジトリ]タブには、[デスクトップ]タブページで選択したデスクトップ定義に接続されている使
用可能なすべてのリポジトリが一覧表示されます。図13-5は、[リポジトリ]タブのオプションを示しています。
これらのリポジトリーに関する情報は、このタブ内にあり、選択したリポジトリーの違いを識別するのに役立ち
ます。表示名、内部ID、サーバータイプ、サーバー名、ポート番号が表示されます。これらの列は構成可能(変
更可能)ではありませんが、ヘッダー列をクリックするとソートできます。
図13-5 [デスクトップのエクスポート]タブ:リポジトリ
プラグインタブ
ウィザードの「プラグイン」タブには、「デスクトップ」タブで選択したデスクトップ定義用に構成されたす
べてのプラグインが表示されます。485ページの図13-6は、[プラグイン]タブで使用できるオプションを示して
います。
理解しておくべき重要な点は、デスクトップ定義内でのプラグインのエクスポートとインポートのサポートは、
そのプラグインの構成設定にのみ拡張されるということです。アプリケーションサーバーにデプロイされる可能
性のある関連プラグインJARファイルは、このプロセスの一部としてエクスポートまたはインポートされません
。
IBM Content Navigatorアプリケーションの一部として使用しているプラ​​グインがある場合は、プラグインJA
Rファイルを手動でコピーしてデプロイする必要があります。
第13章コンポーネントのデプロイメント
485
エクスポートまたはインポートされたプラグイン構成が正しく機能できるように、ソースサーバーをターゲットサーバー
に追加します。
図13-6 [デスクトップのエクスポート]タブ:プラグイン
.propertiesファイルのエクスポート
デスクトップ、リポジトリ、プラグインの選択が完了したら、クリックしてエクスポートを完了できます。 書
き出す エクスポートウィザードで。この操作の開始時に指定した名前でファイルを開くか保存するように求め
られます。ファイルの保存を選択した場合、ファイルはローカルシステムのデフォルトのダウンロード場所に
保存されます。図13-7に、保存されたの例を示します。 プロパティ ファイル:
RedbkDesktopExportConfiguration.properties
図13-7ファイルのエクスポート
例13-3に、そのファイルの内容の一部が切り捨てられています。
例13-3構成プロパティファイルの内容をエクスポートする
menu.navigator.DefaultICAPluginItemContextMenu = pluginId = ICAPlugin; typeLabel =
ICA Plugin Item Context Menu Type; name = ICAPlugin Item Context
Menu; type = ICAPluginItemContextMenu; description =検索結果のICAプラグインコンテキストメニューmenu.n
avigator.DefaultICAPluginECMItemContextMenu = pluginId = ICAPlugin; typeLabel =
ICAプラグインECMアイテムコンテキストメニュー
486 IBM Content Navigatorのカスタマイズと拡張
タイプ;名前= ICAPlugin ECMアイテムコンテキスト
Menu; type = ICAPluginECMItemContextMenu; description = ICAエンタープライズコンテンツ管理結果のICAプラ
グインコンテキストメニューinterfaceText.navigator.RB.GTreeEX.GTree.CopyReview.favorites = labelKey = Fa
vorites; displayedIn = desktop; type = desktop; desktopId = RB interfaceText.navigator RB.GTreeEX.GTree.Copy
Review.browse = labelKey = Browse; displayedIn = desktop; type = desktop; desktopId = RB interfaceText.navig
ator.RB.GTreeEX.GTree.CopyReview.search = labelKey = Search; displayedIn = desktop; type = desktop ; desk
topId = RB interfaceText.navigator.RB.GTreeEX.GTree.CopyReview.casesearch = labelKey = Case Search; disp
layedIn = desktop; type = desktop; desktopId = RB interfaceText.navigator.RB.GTreeEX.GTree.CopyReview.dat
acap = labelKey = Datacap; displayedIn = desktop; type = desktop; desktopId = RB mobilefeature.navigator.RB.G
TreeEX.GTree.CopyReview。お気に入り= iconFile = / navigator / ecm / widget / resources / images / mobileFav
orites.png; url =; name = Favorites; desktopId = RB; display = false
mobilefeature.navigator.RB.GTreeEX.GTree.CopyReview.browse = iconFile = / navigator / ecm / widget /
resources / images / mobileBrowse.png; url =; n ame = Browse; desktopId = RB; display = false
mobilefeature.navigator.RB.GTreeEX.GTree.CopyReview.search = iconFile = / navigator / ecm / widget /
resources / images / mobileSearch.png; url =; n ame = Search; desktopId = RB; display = true
mobilefeature.navigator.RB.GTreeEX.GTree.CopyReview.casesearch = iconFile = / navigator / ecm / widget /
resources / images / mobileCase.png; url =; nam e = Case Search; desktopId = RB; display = false
mobilefeature.navigator.RB.GTreeEX.GTree.CopyReview.datacap = iconFile = / navigator / ecm / widget /
resources / images / mobileDatacap.png; url =; name = Datacap; desktopId = RB; display = false
desktop.navigator.RB = isDefault = No; bannerMenuColor =#FFFFFF; TeamspacesListToolbar =
DefaultTeams pacesListToolbar; TemplatesListToolbar = DefaultTemplatesListToolbar; helpU rl =; description
=; BannerUserSessionContextMenu =
DefaultBannerUserContextororororContextororContextorContextorContextorContextorContextorContextorContextorContextorContextorConte
; passw ordRulesUrl =; mobileAppAccess = true; promptCloseOffice = true; ObjectStoreFol derContextMenu =
DefaultObjectStoreFolderContextMenu; UserQueueContextMenu = DefaultUserQueueContextMenu;
accessControlEnabled = false; AttachmentItemC ontextMenu = DefaultAttachmentItemContextMenu;
SelectObjectToolbar = Default SelectObjectToolbar; loginLogoUrl2http:// base64
第13章コンポーネントのデプロイメント
487
13.5.2管理デスクトップ内のインポート機能の使用
デスクトップのインポートウィザードには5つのタブがあります。
[デスクトップ]タブ[リポジトリ]
タブ[プラグイン]タブ[メニュー]
タブ[ラベル]タブ[モバイル機能]
タブ
デフォルトでは、[デスクトップ]タブがウィザードで開きます(図13-8)。まず、エクスポートするデスクトップ
定義を選択します。
図13-8デスクトップアクションメニュー:インポート
デスクトップタブ
デスクトップ定義をインポートするには、IBM Content Navigator管理デスクトップセッション内で管理ビューを
開く必要があります。管理デスクトップは、IBM Content Navigator定義をエクスポートまたはインポートできる
唯一のデスクトップです。
管理ビューでは、機能メニューからインポートオプションを利用できます。クリック インポート。 インポートす
るデスクトップ定義ファイルの場所を指定または選択するように求められます。このファイルはです。 プロパティ
エクスポートしたときに作成、名前付け、保存したファイル(485ページの「.propertiesファイルのエクスポート
」を参照)。
インポート中に、インポートファイル内の要素がすでにシステムに存在する場合、[デスクトップのインポート]ウ
ィンドウの上部に警告メッセージが表示されます。競合しているアイテムのデフォルトの動作は、アイテムを更
新しないことです。なので
488 IBM Content Navigatorのカスタマイズと拡張
その結果、図13-9に示すように、インポートするアイテムのリストで競合アイテムのチェックボックスが選択されて
いません。インポートまたは上書きする場合は、競合するアイテムを選択します。
図13-9 [デスクトップのインポート]タブ:インポートするための競合するアイテムを示すデスクトップ
リポジトリタブ
ウィザードの[リポジトリ]タブ(図13-10)には、エクスポートファイルまたはインポートファイル内で定義されているすべての使用可能
なリポジトリが一覧表示されます。
図13-10 [デスクトップのインポート]タブ:リポジトリ
第13章コンポーネントのデプロイメント
489
プラグインタブ
ウィザードの「プラグイン」タブ(図13-11)には、以前に選択したデスクトップ定義用にエクスポートされたす
べてのプラグイン構成が表示されます。
デスクトップ定義内でのプラグインのエクスポートおよびインポートのサポートは、そのプラグインの構成設定
にのみ拡張されます。インポートされた構成が正しく機能できるように、インポートファイルの構成内で指定さ
れている可能性のある関連プラグインJARファイルをアプリケーションサーバーにデプロイする必要があります
。
図13-11デスクトップタブのインポート:プラグイン
490 IBM Content Navigatorのカスタマイズと拡張
メニュータブ
ウィザードの[メニュー]タブ(図13-12)には、インポート可能なすべてのメニューが表示されます。
図13-12 [デスクトップのインポート]タブ:メニュー
ラベルタブ
ウィザードの[ラベル]タブ(図13-13)には、システムにインポートできるラベル構成が一覧表示されます。
図13-13デスクトップタブのインポート:ラベル
第13章コンポーネントのデプロイメント
491
モバイル機能タブ
ウィザードの[モバイル機能]タブ(図13-14)には、システムにインポートできるモバイル機能が表示されます。
図13-14 [デスクトップのインポート]タブ:モバイル機能
13.5.3サマリーとレポートのインポート
インポートアクションには、インポート完了後の概要レポートが含まれます。この概要には、各要素タイプ(デ
スクトップ、リポジトリ、プラグイン、ラベル、モバイル機能)のリストが含まれ、これらの各要素の数と、操
作中にスキップされた要素の数に関する情報が提供されます。概要レポートの下部には、完全なインポートレポ
ートをダウンロードするために使用できるアクションが表示されます。そのレポートには、使用されたエクスポ
ートファイルまたはインポートファイルで利用できた各要素のインポートステータス情報が含まれます。
492 IBM Content Navigatorのカスタマイズと拡張
図13-15に例を示します。
図13-15デスクトップインポートの要約とダウンロードレポート
13.6結論
この章では、IBM Content Navigatorソリューションに適用される本番環境の管理戦略について説明します。この
章では、アプリケーションのコンポーネントを管理する方法について説明します。また、環境を管理し、さまざ
まな環境間でソリューションを移動または促進する場合の予測可能性のレベルを確立するための概要も提供しま
す。
手動によるソリューションの展開など、ソリューションを移行する従来のアプローチは、エンタープライズ環境
を管理するための有効なプロセスを提供しますが、IBM Content Navigator管理デスクトップは、ソリューション
の展開と移行を簡素化するツールとサポートを提供します。
本番環境ソリューションでは、企業環境で一貫性と予測可能性を提供するために、可能な限り展開を自動化する
ことが望ましいアプローチです。IBM Content Navigatorには、デスクトップソリューションを移動、移行、また
は宣伝するためのシンプルなアプローチが含まれています。
第13章コンポーネントのデプロイメント
493
494 IBM Content Navigatorのカスタマイズと拡張
14
第14章
デバッグと
トラブルシューティング
アプリケーションで十分に計画されたトラブルシューティング戦略を使用すると、エラーを特定して修正する時間が短縮
され、ソフトウェアパッケージを拡張する際の学習曲線が緩和されます。この章では、IBM Content Navigatorをカスタ
マイズおよび拡張するときに使用できるトラブルシューティング手法について説明します。さまざまなログファイルを提
示し、トラブルシューティングのヒントを提供します。
トラブルシューティングは、情報を収集し、分析し、分析に基づいてアクションを識別し、修正アクションを実
装するプロセスです。この章の主な焦点は、重要な情報と、トラブルシューティングの目的でそれを収集する方
法を識別することです。この章に記載されている情報を、IBM Content Navigatorのオンライン資料と組み合わせ
て使用​​して、サポートとトラブルシューティングを行ってください。
この章では、次のトピックについて説明します。
クライアントのデバッグクライア
ントのログサーバー側のログログ
とトレースファイルトラブルシューティング
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
495
14.1クライアントのデバッグ
IBM Content Navigatorの拡張機能を開発する場合、統合開発環境(IDE)の選択とランタイム実行の選択は、開
発とテストのプロセスに役立ちます。
73ページの第3章「開発環境のセットアップ」では、IBM Rational Application DeveloperまたはEclipse IDEとWe
bツールプラグインを使用して開発環境をセットアップする方法について説明します。
個々のプラグインコンポーネントをテストするには、デスクトッププロファイルで使用するプラグインを選択して登
録し、有効にする必要があります。
クライアントモジュールをテストするときは、ブラウザーの開発者ツールオプションを使用してコンソールにログインします。ブラウザコ
ンソールのログ記録の詳細については、498ページの14.2、「クライアントのログ記録」を参照してください。コンポーネントのサーバー
側またはビジネスロジックをテストするには、500ページの14.3「サーバー側のログ」を参照してください。
Webアプリケーションクライアントのデバッグに使用できる多くのツールがあります。次のセクションで
いくつか紹介します。
14.1.1 Firefox
Firebugは、Firefox用の強力なクライアントデバッグツールです。このアドオンをインストールしたら、F12キーを押してブ
ラウザーで起動します。Firebugオプションは、ブラウザの任意の場所に設定することも、個別のウィンドウで個別に設定
することもできます。
Firebugには、さまざまな目的で使用されるいくつかのパネルがあります。
コンソール:ログとすべてのリクエストおよび応答コンテンツを表示します。HTML:ページのHT
MLソースを表示します。CSS:現在のページのCSSを表示します。
スクリプト:スクリプトを表示します。ここでJavaScriptコードをデバッグできます。ブレークポイントを設
定し、変数値を監視し、スタック全体を表示できます。DOM:DOM情報を表示します。
ネット:URL、ステータス、サイズ、タイムラインなどのネットワーク転送情報を表示します。
Cookie:すべてのCookie情報を表示します。
Firebugの詳細については、次のWebページを参照してください。
http://addons.mozilla.org/en-US/firefox/addon/firebug
496 IBM Content Navigatorのカスタマイズと拡張
14.1.2クロム
Chromeにはさまざまな統合開発ツールがあります。F12キーを押して表示します。をクリックする 別のウィンドウに
ロック解除 ボタンはそれを個別のウィンドウとして分離できます。
Chromeツールでは、いくつかのパネルがさまざまな機能と情報を提供します。
要素:Webページの構造全体を示します。すべてのDOMノードはここで表示できます。
ネットワーク:ネットワーク送信情報を表示します。
ソース:スクリプトを表示します。ここでJavaScriptコードをデバッグできます。このパネルでJavaScriptを変更するこ
ともできます。Chromeは変更されたバージョンを実行します。これは開発に便利です。タイムライン:パフォーマンス
のタイムラインを表示します。プロファイル:プロファイルを表示します。
リソース:現在のページで使用されているすべてのリソースを表示します。監査:選択したコードの監査を実
行します。潜在的な問題に関するアドバイスを提供します。
コンソール:ログを表示します。リクエストとレスポンスのコンテンツはコンソールに表示されません。
Chromeの詳細については、次のWebサイトを参照してください。
http://www.google.com/chrome
14.1.3フィドラー
フルネームはFiddler Web Debuggerです。ブラウザのすべての要求と応答を監視できます。Fiddlerを設定し
て、1つのブラウザープロセスのみを監視できます。機能パネルは、要求、応答、およびネットワーク送信の
詳細を提供します。
Fiddler用のJSONビューアプラグインがあります。JSONデータを構造化ツリーで表示できます。IBM Content Nav
igatorの場合、すべてのJSON応答には次のヘッダーがあります。
{} &&
JSONビューアでJSONを表示するには、この見出しを削除する必要があります。Fiddlerをスタンドアロンモードで実行
して、JSON文字列のみを表示できます。
Fiddlerの詳細については、次のWebサイトを参照してください。
http://fiddler2.com
Chapter 14.デバッグとトラブルシューティング 497
14.2クライアントのロギング
すべてのブラウザーは、ログに記録されたメッセージをブラウザーコンソールに表示します。デフォルトでは、すべてのJavaScr
iptおよびシステムエラーがログに記録されます。すべてのブラウザーは、エラーの原因を見つけるためのJavaScriptファイルのオ
ープンをサポートしています。ただし、このタイプのロギングでは、データまたはロジックに関連するエラーの解決に十分でない
場合があります。
14.2.1ロギングレベルとブラウザタイプ
IBM Content Navigatorは、 ecm.logger プラグインの開発に使用するロギングクラス。ロギングクラスは、5
つのレベルでメッセージを選択的にログに記録するために使用されます。
レベル0:なし(このレベルはロギングがないことを示します。)レベル1:エラー
レベル2:警告(このレベルはデフォルトのロギングレベルです。)レベル3:情
報レベル4:デバッグ
debugパラメータを使用してデスクトップを呼び出すには、次の行を使用します。
http:// < server_name>:<port> / ナビゲーター/?debug = true
以下の意味があります。
< server_name> ナビゲーションWebクライアントアプリケーションをホストするWebアプリケーションサーバーのD
NS解決可能な名前です。
< ポート> アプリケーションサーバーのポート番号です。WebSphere Application Serverのデフ
ォルトは9080です。
パフォーマンス: デバッグメッセージのロギングはパフォーマンスに影響します。ただし、新しいバージョンのブラウザ
ーは一般的に効率が高いため、このオプションは、新しいバージョンのブラウザーで使用した場合のロード時間への影響
が少なくなります。
コンソールをWebブラウザーで表示するには、F12ファンクションキーを押します。ただし、Safariブラウザーでは、F12キーは
JavaScriptコンソールを呼び出すためのショートカットです。Safariを使用する場合は、Ctrl + Alt + Cを押します。
Firefoxを使用していて、Firebugなどのデバッグツールがインストールされていない場合は、次のコマンドを使用し
て、ログメッセージをポップアップウィンドウにリダイレクトできます。
http:// < server_name>:<port> / navigator?debug = true&useConsole = false
498 IBM Content Navigatorのカスタマイズと拡張
を使用して debug = true パラメータは、ログレベルを4に設定することと同等です。ログレベルを下げる場
合は、logLevelパラメータを使用します。たとえば、エラーをログに記録するには、次のURLを使用します
。
http:// < server_name>:<port> / navigator?logLevel = 1&useConsole = false
エラーをポップアップウィンドウに記録できるようになりました。
14.2.2 JavaScriptファイルでのロギングの有効化
JavaScriptでECMロガーを有効にするには、次のステートメントを含めます。
dojo.require(“ ecm.LoggerMixin”);
AMDロードを使用する場合は、次のステートメントを含めます。
ready(["ecm / LoggingMixin"、 "必要なウィジェット"、function yourFunction
(){
//ここにコードを入力します});
ecm.LoggerMixinクラスは、ECMロガークラスを提供し、さまざまなメッセージレベルをログに記録するための
関数を提供します。LoggerMixinクラスが提供する関数の1つを使用してメッセージをログに記録するには、次の
形式を使用します。
this.logInfo(yourfunctionname、message、extra);
LoggerMixinは、以下の機能を提供します。
logInfo:情報メッセージをログに記録します。logWarning:警告メッ
セージをログに記録します。logError:エラーメッセージをログに記
録します。logDebug:デバッグメッセージをログに記録します。
さらに2つのメッセージタイプを使用できます。
logEntry(関数名、メッセージ):関数へのエントリポイントを記録します。logExit(関数名、メッセー
ジ):関数の出口点を記録します。
入り口と出口のロギング関数は、2つのパラメーターのみを使用します。
チップ: サポートされているすべてのブラウザには、デバッグツールが含まれています。JavaScriptコードをデバッグするのが
初めての場合は、各ブラウザーに、開発者ツールの使用に関するオンラインヘルプが用意されています。クライアントコードの
デバッグに開発者ツールを使用する方法については、適切なブラウザのヘルプページを参照してください。
Chapter 14.デバッグとトラブルシューティング 499
14.3サーバー側のログ
73ページの第3章「開発環境のセットアップ」では、Rational Application Developer for WebSphereとEclipse開発
環境の両方でサーバー側のデバッグ手法を有効にする方法について説明します。
デバッグの1つの側面は、ロギングを使用してコードの実行パスを記録およびトレースすることです。クライアントの
ログ記録を開始する方法の説明については、498ページの14.2、「クライアントのログ記録」を参照してください。
サーバーの実行をログに記録するには、デスクトップの管理機能または管理デスクトップを使用してログを有効にす
る必要があります。
クライアントレベルのロギングの影響と適切なレベルでの推奨されるロギングについては、498ページの14.2、「ク
ライアントのロギング」で説明します。クライアントレベルのロギングの影響は、ロギングされる個々のデスクトッ
プに固有です。ただし、サーバー側のロギングはすべてのユーザーに影響を与える可能性があるため、可能な限り影
響を最小限に抑えることをお勧めします。
このセクションでは、プラグインの例のロギングを有効にする方法について説明し、サーバーへの影響を最小
限に抑える手法を示します。
注意: この章では、IBMソフトウェアの使用に重点を置いています。アプリケーションサーバーとしてWebLogicを
使用する場合、システムログファイルの形式とパスは少し異なります。WebLogicサーバーのログファイルの説明
については、次のアドレスにアクセスしてください。
http://docs.oracle.com/cd/E13222_01/wls/docs81/ConsoleHelp/logging.h tml#1032324
WebLogicのログ形式は少し異なりますが、IBM Content Navigatorからのログメッセージには、
500ページの14.3「サーバー側のログ」。
サーバーロギングを使用して、サンプルプラグインのメインJavaクラスであるCustomSearchPl
uginの実行を追跡します。
IBM Content Navigatorでサーバー・サイドのロギングを有効にするには、以下のステップを使用します。
1.管理者としてIBM Content Navigatorに接続するか、管理デスクトップを使用します。
1.選択 設定 機能パネルから。
2.を選択します ロギング タブ。
3.入力 デバッグ アプリケーションレベルのロギング用。
500 IBM Content Navigatorのカスタマイズと拡張
4.選択 クラスレベルのロギング固有のクラス。
5.次の情報を入力します。
com.ibm.ecm.extension.customsearch。*
ログは、特定のユーザーまたは特定のクライアントデバイスに対して有効にできます。IBM Content Navigatorの実動イ
ンスタンスでデバッグを使用する必要がある場合は、このオプションを使用してください。特定のクラスに対してロギ
ングを有効にすることもできます。このオプションを使用して、開発中にクラスをデバッグします。クラスを指定し、
オプションで特定のクラスを除外できます。
ログの範囲を制限すると、パフォーマンスへの影響が軽減され、トラブルシューティングとデバッグが容易に
なります。
チップ: ログのサーバー側の負荷を最小限に抑えるには、特定のクラスのログを有効にします。すべてのク
ラスのロギングを有効にすると、次の方法で影響を軽減できます。
クラスを除外します。ロギングリストから除外するクラスのカンマ区切りリストを入力します。
ログに記録されるクライアントワークステーションのIPアドレスを入力して、特定のユーザーワークステーションに対して
のみログを記録します。特定のユーザーのロギングを有効にします。
502ページの図14-1に、プラグインクラスのサーバーログ設定を示します。この例は、1つのクラスおよび1つの
特定のIPアドレスに対するロギングの制限を示しています。
Chapter 14.デバッグとトラブルシューティング 501
図14-1特定のクラスおよび特定のクライアントマシンへのサーバーロギングを有効にする
サーバーのログは、Webアプリケーションサーバーのログファイルに書き込まれます。たとえば、WebSphere Applic
ation Server、バージョン7のログファイル、 SystemOut.log、 次の場所にあります:
C:\ Program \ Files \ IBM \ WebSphere \ AppServer \ profiles \ AppSrv01 \ logs \ server1
情報は、これらの行で区切られた一連の要求としてログに記録されます。 nnn 昇順で記録された数値です。
開始要求nnn終了要求nnn
502 IBM Content Navigatorのカスタマイズと拡張
例14-1は、 SystemOut.log WebSphere Application Serverバージョン7でホストされているIBM Content Navigato
rシステムからのファイル。これは、 com.ibm.ecm.extension.customsearch。* Javaクラス。
例14-1プラグインの例でロギングを有効にしたSystemOut.logの抽出
[10/30/13 16:46:44:194 CST] 00000012 SystemOut O CIWEB.CustomSearchPluginエントリー
:[Administrator @ 127.0.0.1] com.ibm.ecm.extension.customsearch.SearchService.execute()[10
/30 / 13 16:46:44:195 CST] 00000012 SystemOut O CIWEBエントリ:[管理者@ 127.0.0.1]
com.ibm.ecm.extension.customsearch.SamplePluginSearchServiceP8.executeP 8Search()クエリ文字列:この
* INFOLDER {B3BB3B22-EB21-4997-ACF8-87DAE91966AA} OPTIONS(COUNT_LIMIT 2147483647)[10/30/1
3 16: 46:44:256 CST] 00000012 SystemOut O CIWEB.CustomSearchPlugin出口:[管理者@ 127.0.0.1] com
.ibm.ecm.extension.customsearch.SearchService.execute()
最初のエントリは、カスタムツリーのフォルダノードをクリックして起動された検索サービスの詳細を記録しま
す。例14-2に示すように、ログエントリは次のようにフォーマットされます。
[date tz]スレッドストリームCIWEB loggingLevel:[userId @ hostNameOrIP]
package.class.method()メッセージ
例14-2ログエントリメッセージ
[13/10/30 16:46:44:195 CST] 00000012 SystemOut O CIWEBエントリ:[管理者@ 127.0.0.1]
com.ibm.ecm.extension.customsearch.SamplePluginSearchServiceP8.executeP 8Search()クエリ文字列:この
* INFOLDER {B3BB3B22-EB21-4997-ACF8-87DAE91966AA} OPTIONS(COUNT_LIMIT 2147483647)であるD
OCUMENTから*を選択します。
ログに記録されたメッセージは、2013年10月30日16:46、スレッド 00000012
次の行を使用しました:
com.ibm.ecm.extension.customsearch.SamplePluginSearchServiceP8.executeP8Search
その行を使用して、次のクエリ文字列でIBM FileNet Content Managerに対してカスタム検索を実行しました。
このINFOLDERがあるドキュメントから*を選択します
{B3BB3B22-EB21-4997-ACF8-87DAE91966AA}オプション(COUNT_LIMIT 2147483647)
ログ・エントリーを読み取ると、実行されるIBM Content Navigator機能、使用されるパラメーター、および返
されるメッセージが表示されます。この情報を使用して、障害のあるコンポーネントと主な症状を特定できま
す。
Chapter 14.デバッグとトラブルシューティング 503
ログファイルには、ログに記録されたクラスの実行を追跡する多くのエントリが含まれます。テキストエディタ
を使用して、情報を参照および検索します。ログファイルのコピーを作成して、必要なアクションを実行した後
で結果を比較できるようにします。
14.4ログおよびトレースファイル
498ページの14.2、「クライアントロギング」で説明されているコンソールログと500ページの14.3、「サーバ
ー側のロギング」で説明されているシステムログに加えて、他のいくつかのログファイルが重要な情報ソース
です。
14.4.1 IBM Content Navigatorログファイル
トラブルシューティングを行うときは、次のファイルを確認してください。また、問題(PMR)を記録する場合は、IBM
サポートグループに提供してください。505ページの14.5「トラブルシューティング」で説明されているIBM Support Ass
istance Data Collectorは、IBM Content Navigatorのログファイルを自動的に収集します。
インストールログファイルバ
ージョンファイル展開プロフ
ァイル一時ファイル構成ファ
イル
以下のアドレスのいずれかを使用して、IBM Knowledge CenterのIBM Content Navigatorを参照してください。
IBM Content Managerで使用する場合:
http://publib.boulder.ibm.com/infocenter/cmgmt/v8r5m0
IBM Content Manager OnDemandの場合:
http://publib.boulder.ibm.com/infocenter/cmod/v9r0m0
IBM FileNet Content Managerの場合:
http://publib.boulder.ibm.com/infocenter/p8docs/v5r2m0
IBM Content Navigatorクライアントは、ブラウザーのJavaコンソールにログを記録します。デフォルトでは、この情報は
ディスクに書き込まれません。したがって、分析と確認のためにログファイルの内容をテキストファイルにコピーするこ
とが重要です。
504 IBM Content Navigatorのカスタマイズと拡張
IBM Content Navigatorは、さまざまなファイル・タイプの表示機能を提供します。ビューア固有の問題をデバッグするには
、ログファイルを確認します。FileNet Viewerには、次のいずれかの場所にログファイルが含まれています。
/ opt / IBM / FileNet / WebClient / ImageViewerPro / streamer C:\ Program
Files(x86)IBM \ ECMClient \ config \ streamer.log
このファイルには、IBM FileNet Content Managerリポジトリからデータをストリーミングするエラーに関する情報が
含まれています。
14.4.2アプリケーションサーバーのログファイル
IBM Content Navigatorは、WebSphere Application Serverの次のファイルにログを記録します。
c:\ Program Files \ IBM \ WebSphere \ Appserver \ profiles \ Appsrvr01 \ logs \ System.out
WebLogicの場合、IBM Content Navigatorは次のファイルにログを記録します。
C:\ mydomain \ servers \ myserver \ logs \ myserver.log
WebLogicは、WebLogicサーバーのすべてのインスタンスのログエントリをドメインログファイルに転送します。デフォルト
では、デバッグメッセージは転送されません。
14.5トラブルシューティング
IBM Content NavigatorのIBM Knowledge Centerには、IBM Content Navigatorのインストール、構成、デプロイ、および実行時
に発生する可能性のあるエラーをトラブルシューティングするための構造化アプローチが含まれています。インフォメーショ
ン・センターへのリンクについては、514ページの14.4.1「IBM Content Navigatorログ・ファイル」を参照してください。
IBM Knowledge Centerは、各コンテンツリポジトリのインフォメーションセンター内にあります。各インフォメ
ーションセンターには、リポジトリに固有のトラブルシューティング情報があります。この情報は、公開時の既
知の一連の問題に対するアクションに対応しています。IBMサポートは、報告された現在の問題と解決策の知識
ベースも維持します。問題をトラブルシューティングするときは、インフォメーションセンターとナレッジベー
スの両方を使用してください。
ナレッジベースを検索するには、次の手順に従います。
1. IBMサポートポータルにアクセスします。
http://ibm.com/SupportPortal
2.製品検索フィールドでコンテンツナビゲーターを使用して検索します。
3.を選択します トラブルシューティングのドキュメント リンク。
Chapter 14.デバッグとトラブルシューティング 505
図14-2に、IBM Content NavigatorのIBMサポートのトラブルシューティングウィンドウを示します。
図14-2 IBMサポートポータル
14.5.1 IBM Content Navigatorトラブルシューティングツール
IBM Content Navigatorには、問題のトラブルシューティングまたはIBMへの報告に役立つ3つのツールが含まれていま
す。
IBM Content Navigatorのpingページビューアー
の構成は構成のエクスポートを確認します
IBM Content NavigatorのPingページ
IBM Content Navigatorには、インストールされているソフトウェアと現在のステータスに関する情報を表示する
pingページが含まれています。pingページを表示するには、Webブラウザに次のURLを入力します。
http:// < server_name>:<port> / ナビゲーター/ Ping
506 IBM Content Navigatorのカスタマイズと拡張
図14-3は、pingページの結果を示しています。
図14-3 IBM Content NavigatorのPingページ
Chapter 14.デバッグとトラブルシューティング 507
ビューア構成確認
IBM Content Navigatorは、豊富な表示機能セットを提供します。さまざまな表示オプションの構成を確認し
ます。次のWebページを使用してください。
http:// < server_name>:<port> / navigator / viewers / verify.jsp
例14-3は、 verify.jsp ページ。
例14-3 /navigator/viewers/verify.jspページ
<%@ page import = "java.io.File、java.util.Properties、java.io.FileInputStream、ja
va.io.PrintWriter、
javax.xml.transform.TransformerFactory、com.ibm.ecm.configuration。*、com。ibm.ecm。*、com.ibm.ecm.ext
ension.Plugin、com.ibm.ecm.util.PluginUtil、java.util。* "%> <%
ブール値ENABLE_VERIFY = false;
//このページを有効にするには、以下の行のコメントを外します。ENABLE_VER
IFY = true; //
の verify.jsp ページは、システムにインストールされているIBM Content Navigatorビューの存在と有効性
を確認します。実行する前に、次の行からコメントを削除してください。
ENABLE_VERIFY = true
509ページの図14-4のようなビューア検証ページが開きます。
確認後、コメントを再適用してページを無効にしてください
ENABLE_VERIFY = true。
508 IBM Content Navigatorのカスタマイズと拡張
図14-4ビューアの検証
Chapter 14.デバッグとトラブルシューティング 509
14.6結論
この章では、デバッグとロギングについて説明します。重要な情報を特定する方法と、トラブルシューティン
グのために収集する方法に焦点を当てています。
510 IBM Content Navigatorのカスタマイズと拡張
パート4
部
4
付録
この部分には、アクションを作成するときに必要な特権がリストされています。このドキュメントのサンプ
ルプラグインが使用するサンプルドキュメントクラスのクラスとプロパティについて説明します。また、こ
の本で提供される追加の資料を見つけて使用する方法についても説明します。このパートには、以下の付録
セクションが含まれています。
515ページの付録A「アクション権限」付録B、515ページの「ドキュメントクラス定義」付録C、519ペー
ジの「カスタム検索プラグインプロジェクトのコアコード」付録D、535ページの「追加資料」
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
511
512 IBM Content Navigatorのカスタマイズと拡張
あ
付録A
アクション権限
アクションを作成するときに、アクションを実行するために必要な特権を指定できます。このタスクは、表A-1か
ら特権の1つを返すことによって実行されます。アクションは、ユーザーが現在選択されているすべてのオブジェ
クトに対して指定されたすべての特権を持っている場合にのみ有効になります。アクションの実行に特別な権限
が必要ない場合、getPrivileges()メソッドは空の文字列を返します。
表A-1の権限はリポジトリに依存せず、現在のリポジトリからの適切な基本的な権限にマップされます。たとえば
、FileNet P8リポジトリで作業していて、アクションがprivEditProperties特権に関連付けられている場合、現在選
択されているすべてのオブジェクトのプロパティを編集するための適切なFileNet P8特権が現在のユーザーにある
場合にのみ、アクションが有効になります。 。
表A-1 Acton権限
特権
説明文
privEditProperties
ユーザーには、選択したオブジェクトのプロパティを変更する権限が必要です。
privEditDoc
ユーザーには、選択したドキュメントを編集する権限が必要です。
privViewNotes
ユーザーには、オブジェクトに添付されたメモを表示する権限が必要です。
privAddDoc
ユーザーには、ドキュメントを追加する権限が必要です。
プライバシー
ユーザーは、アイテムを追加する特権を持っている必要があります。
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
513
特権
説明文
ユーザーには、ドキュメントをメールで送信する権限が必要です。
privExport
ユーザーには、オブジェクトをエクスポートする権限が必要です。
privAddToFolder
ユーザーは、ドキュメントをフォルダーに追加する特権を持っている必要があります。
privRemoveFromFolder
ユーザーは、フォルダーからドキュメントを削除する権限を持っている必要があります。
privAddLink
ユーザーはリンクを追加する特権を持っている必要があります。
privRemoveLink
ユーザーはリンクを削除する権限を持っている必要があります。
privAddNotes
ユーザーには、メモを追加する権限が必要です。
privPrintNotes
ユーザーには、メモを印刷する権限が必要です。
privPrintDoc
ユーザーには、ドキュメントを印刷する権限が必要です。
privCheckInOutDoc
ユーザーは、ドキュメントをチェックインおよびチェックアウトする権限を持っている必要があります。
privCheckInDoc
ユーザーはドキュメントをチェックインする権限を持っている必要があります
privCheckOutDoc
ユーザーには、選択したドキュメントをチェックアウトする権限が必要です。
privCancelCheckOutDoc
ユーザーには、選択したドキュメントのチェックアウトをキャンセルする権限が必要です。
privViewAnnotations
ユーザーには、選択したドキュメントの注釈を表示する権限が必要です。
privEditAnnotations
ユーザーには、選択したドキュメントの注釈を編集する権限が必要です。
privDelete
ユーザーには、選択したオブジェクトを削除する権限が必要です。
privStartWorkflow
ユーザーはワークフローを開始する権限を持っている必要があります。
privHold
ユーザーは、保留を行う特権を持っている必要があります。
privMoveToFolder
ユーザーには、選択したフォルダを移動する権限が必要です。
privChangeClass
ユーザーには、選択したドキュメントのクラスを変更する権限が必要です。
privMajorVersion
ユーザーには、選択したドキュメントのメジャーバージョンを作成する権限が必要です。
privMinorVersion
ユーザーには、選択したドキュメントのマイナーバージョンを作成する権限が必要です。
514 IBM Content Navigator privEmailDocのカスタマイズと拡張
B
付録B.
文書クラス定義
この本のサンプルプラグインでは、サンプルドキュメントクラスを使用しています。この付録では、クラスとプロ
パティについて説明します。FileNet Content ManagerまたはIBM Content Managerシステムのいずれかで使用でき
る定義をコピーする方法の詳細については、535ページの 『付録D.追加資料』を参照してください。
クラスの目的は、サンプルプラグインが正しく機能できるようにすることです。実動システムでのサンプルとし
ての使用は意図されていません。
ただし、サンプルを変更して、独自のドキュメントクラスまたはアイテムタイプを使用することもできます。
ここで説明するダウンロード可能なファイルについては、535ページの付録D「その他の資料」を参照してください
。
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
515
IBM FileNet Content Managerにサンプルクラスを追加する
IBM FileNet Enterprise Managerを使用して独自のドキュメントクラスを作成するか、ダウンロード可能なファイ
ルで提供されるエクスポートマニフェストを使用できます。
ドキュメントクラスをインポートするには、次の手順を実行します。
1.サンプルのIBM FileNet P8ドキュメントクラスエクスポートをダウンロードして、 C: ドライブ。
2. FileNet Enterprise Managerを起動します。
3.ドキュメントクラスを作成するターゲットオブジェクトストアを選択します。
4.右クリックして選択します すべてのタスク → すべてインポート。
5.次のテキストを入力します。
インポートマニフェストファイルとしてのC:\ Temp \ P8NavigatorExample_DocumetClass \
NavigatorExample_CEExport_Ma nifest.xml
6.を選択します インポート 図B-1に示す標準オプション。
7.クリック インポート。
図B-1 P8ドキュメントクラスのインポート
516 IBM Content Navigatorのカスタマイズと拡張
IBM Content Managerにサンプルクラスを追加する
IBM Content Managerシステム管理クライアントを使用して独自のドキュメントクラスを作成するか、
ダウンロード可能なファイルで提供されるXSDファイルを使用できます。
サンプルのアイテムタイプを追加するには、次の手順を実行します。
1.サンプルのIBM Content ManagerアイテムタイプXSDファイルを C:
ドライブ。
2. IBM Content Managerシステム管理クライアントを起動します。
3.選択 ツール → XMLをインポートします。
4.入力 C:\ InsuranceDocuments.XSD に示すように、データモデルファイルとして
図B-2。
5.選択 インタラクティブに処理します。
6.クリック インポート。
図B-2 Content Managerアイテムタイプのインポート例
付録B.ドキュメントクラスの定義 517
518 IBM Content Navigatorのカスタマイズと拡張
C
付録C
カスタムのコアコード
検索プラグインプロジェクト
Webサイトからダウンロードする追加資料として、この本を使用して、カスタム検索プラグインプロジェクトか
らすべてのコードを取得できます。
参考までに、2つのコアファイルのコードを次に示します。
VirtualFolderBrowsePane.js
拡張されたSamplePluginSearchServiceP8.java
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
519
VirtualFolderBrowsePane.js
VirtualFolderBrowserPane.jsの完全なコードを例C-1に示します。
例C-1 VirtualFolderBrowsePane.js
define([
"dojo / _base / declare"、 "dojo / _base / lang"、 "dojo / dom-construct"、 "idx / layout
/ BorderContainer"、 "dijit / layout / ContentPane"、 "dojo / json"、 "dojo / store / Mem
ory "、" dijit / tree / ObjectStoreModel "、" dijit / Tree "、" ecm / model / Request "、
" ecm / model / ResultSet "、" ecm / widget / layout / _LaunchBarPane "、" ecm / widg
et / layout / _RepositorySelectorMixin "、" ecm / widget / listView / ContentList "、" ec
m / widget / listView / gridModules / RowContextMenu "、" ecm / widget / listView / mo
dules / Toolbar "、" ecm / widget / listView / modules / Breadcrumb "、 "ecm / widget
/ listView / modules / InlineMessage"、 "ecm / widget / listView / modules / TotalCoun
t"、 "ecm / widget / listView / modules / FilterData"、 "ecm / widget / listView / module
s / DocInfo "、" ecm / widget / listView / gridModules / DndRowMoveCopy "、" ecm / w
idget / listView / gridModules / DndFromDesktopAddDoc "、" ecm / widget / listView /
modules / Bar "、" ecm / widget / listView / modules / ViewDetail "、" ecm / widget / li
stView / modules / ViewMagazine "、" ecm / widget / listView / modules / ViewFilmStr
ip "、" dojo / text!./ templates / VirtualFolderBrowsePane.html "]、
function(declare、
lang、domConstruct、idxBorderContain
er、ContentPane、json、Memory、Ob
jectStoreModel、Tree、Request、Resu
ltSet、_LaunchBarPane、_RepositoryS
electorMixin、
520 IBM Content Navigatorのカスタマイズと拡張
ContentList、RowContextMenu、
Toolbar、Breadcrumb、InlineMes
sage、TotalCount、FilterData、D
ocInfo、DndRowMoveCopy、Dnd
FromDesktopAddDoc、Bar、View
Detail、ViewMagazine、ViewFilm
Strip、template){
/ **
* @name customSearchPluginDojo.VirtualFolderBrowsePane
* @クラス
* @augments ecm.widget.layout._LaunchBarPane
*/
戻りdeclare( "customSearchPluginDojo.VirtualFolderBrowsePane"、[
_LaunchBarPane、_RepositorySelec
torMixin]、{
/ ** @lends customSearchPluginDojo.VirtualFolderBrowsePane.prototype * /
templateString:テンプレート、widge
tsInTemplate:true、classnames:[]、
mainfolders:[]、createdTreeItems:fa
lse、
postCreate:function(){
this.logEntry( "postCreate");
this.inherited(arguments);
this.defaultLayoutRepositoryComponent = "others"; this.setRepositoryType
s( "cm、p8"); this.createRepositorySelector(); this.doRepositorySele
ctorConnections();
//リストに複数のリポジトリがある場合は、セレクタを表示して
ユーザー。
if(this.repositorySelector.getNumRepositories()> 1){
domConstruct.place(this.repositorySelector.domNode、
this.repositorySelectorArea、 "only");
}
this.logExit( "postCreate"); }、
/ **
付録C.カスタム検索プラグインプロジェクトのコアコード
521
* このビューで使用されるコンテンツリストグリッドモジュールを返します。
*
* @returnグリッドモジュールの配列。
*/
getContentListGridModules:function(){
var array = []; array.push(DndRowMoveCopy); a
rray.push(DndFromDesktopAddDoc); array.push
(RowContextMenu); 配列を返す; }、
/ **
* このビューで使用されるコンテンツリストモジュールを返します。
*
* @returnコンテンツリストモジュールの配列。
*/
getContentListModules:function(){
var viewModules = []; viewModules.push(ViewDetail);
viewModules.push(ViewMagazine);
if(ecm.model.desktop.showViewFilmstrip){
viewModules.push(ViewFilmStrip); }
var array = [];
array.push(DocInfo);
array.push({
moduleClass:Bar、top:
[
[
[
{
moduleClass:ツールバー}、{
moduleClass:FilterData}、{
moduleClasses:viewModules、 "classNam
e": "BarViewModules"}]]、[
[
{
moduleClass:パンくずリスト、rootPrefix:
"仮想フォルダ"}]
522 IBM Content Navigatorのカスタマイズと拡張
]、[
[
{
moduleClass:InlineMessage、 "classNam
e": "inlineMessage"}]]]、下部:[
[
[
{
moduleClass:TotalCount}]]]}); 配
列を返す; }、
/ **
* ペインのコンテンツをロードします。これは、ペインをLaunchBarContainerに挿入するために必要なメソッドで
す。
*/
loadContent:function(){
this.logEntry( "loadContent");
if(!this.repository){
this.setPaneDefaultLayoutRepository(); }
var data = "{\" name \ ":\" Multiple Demension Tree \ "、\" id \ ":
\ "root \"、\ "children \":[{\ "name \":\ "My Navigator \"、\ "id \":\ "my_navigator \"、\ "children \":[]}]} ";
this.TreeStore = new Memory({
データ:[json.parse(data)]、getChildren:lang.hitch(this、functio
n(object){
object.children;を返します。})});
this._resetTree();
this.navTree.placeAt(dijit.byId( "navTreePane")。containerNode); var callbackGetFolder
s = lang.hitch(this、function(resultset){
this.mainfolders = [];
for(resultet.itemsの行){
var element = {
値:resultset.items [row] .id、label:resultset.item
s [row] .name、
付録C.カスタム検索プラグインプロジェクトのコアコード
523
name: "フォルダ:" + resultset.items [row] .name、id:results
et.items [row] .id、criteriaType: "Folder"、children:[]}
this.mainfolders.push(element); }
this.setupNavTree(); });
var callbackGetClasses = lang.hitch(this、function(contentClasses){
this.classnames = []; for(docclass in
contentClasses){
var element = {
value:contentClasses [docclass] .id、label:contentClasses [doccla
ss] .name、name: "Class:" + contentClasses [docclass] .name、id:
contentClasses [docclass] .id、criteriaType: "Class"、子:[ ]}
this.classnames.push(element); }});
if(this.repository && this.repository.canListFolders()){
var rootItemId = this.repository.rootFolderId || "/"; var _this = this;
this.repository.retrieveContentClasses(callbackGetClasses); this.repository.retrieveItem
(rootItemId、lang.hitch(this、
function(rootFolder){
this.repository.rootFolder = rootFolder; rootFolder.retrieveFolderContents(true、callbackGetFolder
s); })、null、null、null、this._objectStore?this._objectStore.id: ""); }
this.isLoaded = true; this.needReset = false
; this.logExit( "loadContent"); }、
_resetTree:function(){
if(this.navTree)
this.navTree.destroy(); TreeModel = new
ObjectStoreModel({
ストア:this.TreeStore、クエリ:{id: 'root'}、m
ayHaveChildren:function(item){
アイテムに「子供」を返します。}});
524 IBM Content Navigatorのカスタマイズと拡張
this.navTree = new Tree({
モデル:TreeModel、onOpe
nClick:true、永続化:false
、
getIconClass:lang.hitch(this、function(item、opened)
{
if(item.id!= "root" && item.id!= "my_navigator")
return(opened? "searchFolderOpenIcon":
"searchFolderCloseIcon");
そうしないと
return(opened? "dijitFolderOpened":
"dijitFolderClosed");
})}、 "divT
ree");
this.navTree.domNode.style.height = "100%"; this.navTree.placeAt(dijit.byId( "navTreePane
")。containerNode); this.createdTreeItems = false;
this.connect(this.navTree、 "onClick"、lang.hitch(this、function(item){
if(item.id!= "root" && item.id!= "my_navigator"){
this.executeSearch(item); }})); }、
setupNavTree:function(){
if(!this.createdTreeItems){
var firstLayer = this.mainfolders; var
secondlayer = this.classnames;
if(secondlayer.length> 0){
for(j in firstLayer){
firstLayer [j] .children = secondlayer; }}
this.TreeStore.data [0] .children [0] .children = firstLayer; //それはパスです
「私のナビゲーター」の;
this.createdTreeItems = true; }}、
executeSearch:function(item){
var node = this.navTree.getNodesByItem(item); var path = node
[0] .tree.path; var docClassName = ""; var mainFolderID = ""; for(i
= 2; path [i]!= undefined; i ++){
if(path [i] .criterionType == "Class"){
付録C.カスタム検索プラグインプロジェクトのコアコード
525
docClassName = path [i] .value; } else if(path [i]
.criterionType == "Folder"){
mainFolderID = path [i] .value; }}
this.runSearch(docClassName、mainFolderID); }、/ **
* 検索に使用されるリポジトリを設定します。
*
* @paramリポジトリ
*
{@link ecm.model.Repository}のインスタンス
*/
setRepository:function(repository){
this.repository =リポジトリ;
if(this.repositorySelector && this.repository){
this.repositorySelector.getDropdown()。set( "value"、
this.repository.id);
}
this.navResult.reset(); this.loadC
ontent(); }、
runSearch:function(docClassName、mainFolderID、attributeName、attributeValue){
var requestParams = {};
requestParams.repositoryId = this.repository.id;
requestParams.repositoryType = this.repository.type; if(this.repository.type
== "cm"){
var scoperule = "/ *";
var baserulestart = '[(@ SEMANTICTYPE IN(1))'; var ruleEnd
= "]"
var folderrule = 'INBOUNDLINK [@LINKTYPE = "DKFolder"] / @ SOURCEITEMREF =
';
var attributerule = "";
if(docClassName!= "")
scoperule = '/' + docClassName + ""; var query = scoperule +
baserulestart; if(attributeName!= "" && attributeName!= undefined){
attributerule = '((@' + attributeName + "=" + attributeValue + '))' query = query +
"AND" + attributerule; }
if(mainFolderID!= ""){
itemid = mainFolderID.split( "")[6]; mainFolderID = itemid.substr(0、it
emid.length-2); folderrule = folderrule + '"' + mainFolderID + '"'; query =
query + "AND" + folderrule; }
クエリ+ = ruleEnd; requestParams.query
= query;
526 IBM Content Navigatorのカスタマイズと拡張
} else if(this.repository.type == "p8"){
var query = "Select * from"; if(docClassName &&
docClassName.length> 0){
クエリ+ = docClassName;
}そうしないと{
クエリ+ = "DOCUMENT"; }
if(mainFolderID ||(attributeName && attributeValue)){
query + = "where"}
if(mainFolderID && mainFolderID.length> 0){
var folderID = mainFolderID.substr(mainFolderID.length-38、
mainFolderID.length);
query + = "this INFOLDER" + folderID; }
requestParams.query = query; }
Request.invokePluginService( "CustomSearchPlugin"、 "SearchService"、
{
requestParams:requestParams、
requestCompleteCallback:lang.hitch(this、function(response){//
成功
response.repository = this.repository; var resultSet = new
ResultSet(response);
this.navResult.setContentListModules(this.getContentListModules());
this.navResult.setGridExtensionModules(this.getContentListGridModules());
this.navResult.setResultSet(resultSet);
var inlineMessageModule = this.navResult.getContentListModule(
"inlineMessage");
if(inlineMessageModule){
inlineMessageModule.clearMessage();
inlineMessageModule.setMessage( "結果セットアイテムの長さは次のとおりです:
"+ resultSet.items.length、" info ");
}})}
);
}}); });
付録C.カスタム検索プラグインプロジェクトのコアコード
527
拡張されたSamplePluginSearchServiceP8.javaコード
拡張されたSamplePluginSearchServiceP8.javaの完全なコードを例C-2に示します。
例C-2 SamplePluginSearchServiceP8.java
パッケージcom.ibm.ecm.extension.customsearch;
import java.util.ArrayList; import
java.util.HashMap; import java.util.List;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.util.MessageResources;
import com.filenet.api.collection.IndependentObjectSet; import
com.filenet.api.collection.PageIterator; import com.filenet.api.core.Document;
import com.filenet.api.core.ObjectStore; import
com.filenet.api.property.PropertyFilter; import com.filenet.api.query.SearchSQL;
import com.filenet.api.query.SearchScope;
import com.ibm.ecm.configuration.Config; import
com.ibm.ecm.configuration.RepositoryConfig; import
com.ibm.ecm.extension.PluginServiceCallbacks; import
com.ibm.ecm.json.JSONResultSetColumn; import
com.ibm.ecm.json.JSONResultSetResponse; import
com.ibm.ecm.json.JSONResultSetRow; import com.ibm.json.java.JSONArray;
import com.ibm.json.java.JSONObject;
/ **
* このクラスには、サンプルプラグイン検索サービス用のP8固有のロジックが含まれています。これは、
* P8 APIとJSONResultSetResponseオブジェクトへの入力。これは、ecm.model.ResultSetの入力に使用されます。
* JavaScriptモデルクラス。このクラスは、ecm.widget.listView.ContentList DOJOの構造と行を提供します
*ウィジェット。
*/
パブリッククラスSamplePluginSearchServiceP8 {
public static final int pageSize = 50; public static int
totalCount = 0;
/ **
* P8検索SQLを実行します
528 IBM Content Navigatorのカスタマイズと拡張
*
* @param objectStore
*
ObjectStoreへのハンドル
* @paramクエリ
*
実行するクエリ
* @paramコールバック
*
PluginServiceCallbacksオブジェクト
* @param jsonResultSet
*
JSONResultSetResponseを使用してグリッド構造と行を構築します。
* @param clientLocale
*
クライアントのロケール
*/
public static void executeP8Search(HttpServletRequest request、String repositoryId、String query、PluginServiceCallb
acks callbacks、JSONResultSetResponse jsonResultSet、Locale clientLocale)throws Exception {
ObjectStore objectStore = callbacks.getP8ObjectStore(repositoryId);
buildP8ResultStructure(request、jsonResultSet、callbacks.getResources()、clientLocale);
//クエリ文字列にオプションがないと仮定します。if(ifCE52O
rAbove(objectStore)){
query + = "OPTIONS(COUNT_LIMIT" + Integer.MAX_VALUE + ")"; }
Logger.logEntry(SamplePluginSearchServiceP8.class、 "executeP8Search"、request、 "Query String:
" + query);
SearchSQL searchSQL = new SearchSQL(query); SearchScope searchScope =
new SearchScope(objectStore);
//フォルダーの結果にはcallbacks.getP8FolderResultsPropertyFilter()を使用します。PropertyFilter filter =
callbacks.getP8DocumentResultsPropertyFilter();
//最初のpageSizeの結果を取得します。
List <Object> searchResults = new ArrayList <Object>(pageSize); IndependentObjectSet resultsObjectSet = sea
rchScope.fetchObjects(searchSQL、pageSize、filter、true);
PageIterator pageIterator = resultsObjectSet.pageIterator();
int itemCount = 0;
if(pageIterator.nextPage()){
for(Object obj:pageIterator.getCurrentPage()){
searchResults.add(obj);
itemCount ++; }
}
if(itemCount <pageSize){
totalCount = itemCount; }そうしないと{
付録C.カスタム検索プラグインプロジェクトのコアコード
529
//これはCE 5.2以降でのみ機能します
if(pageIterator!= null && ifCE52OrAbove(objectStore)){
Integer totalCountInteger = pageIterator.getTotalCount();
System.out.println(totalCountInteger); if(totalCountInteger!= null){
totalCount = totalCountInteger.intValue(); if(totalCount <0)totalCount = -totalCount; //平均が
CEに到達する
敷居
}}}
//検索結果の特権マスクを取得します。HashMap <Object、Long> privMasks = call
backs.getP8PrivilegeMasks(repositoryId、searchResults);
for(オブジェクトsearchResult:searchResults){
ドキュメントdoc =(ドキュメント)searchResult; / *
*
IDは次の形式を使用します。
*
<オブジェクトクラス名>、<オブジェクトストアID>、<オブジェクトID>
*/
StringBuffer sbId = new StringBuffer();
sbId.append(doc.getClassName())。append( "、")。append(objectStore.get_Id()。toString())
。append( "、")。append(doc.get_Id()。toString());
長い特権=(privMasks!= null)?privMasks.get(doc):0L;
JSONResultSetRow行=新しいJSONResultSetRow(sbId.toString()、
doc.get_Name()、doc.get_MimeType()、特権);
//ロックされたユーザー情報を追加します(ある場合)
row.addAttribute( "locked"、doc.isLocked()、JSONResultSetRow.TYPE_BOOLEAN、
null、(new Boolean(doc.isLocked()))。toString());
row.addAttribute( "lockedUser"、doc.get_LockOwner()、
JSONResultSetRow.TYPE_STRING、null、doc.get_LockOwner());
row.addAttribute( "currentVersion"、doc.get_IsCurrentVersion()、
JSONResultSetRow.TYPE_BOOLEAN、null、(new Boolean(doc.get_IsCurr
entVersion()))。toString());
//属性を追加します
row.addAttribute( "ID"、doc.get_Id()。toString()、
JSONResultSetRow.TYPE_STRING、null、doc.get_Id()。toString());
row.addAttribute( "className"、doc.getClassName()、
JSONResultSetRow.TYPE_STRING、null、doc.getClassName());
row.addAttribute( "ModifiedBy"、doc.get_LastModifier()、
JSONResultSetRow.TYPE_STRING、null、doc.get_LastModifier());
row.addAttribute( "LastModified"、doc.get_DateLastModified()。toString()、
JSONResultSetRow.TYPE_TIMESTAMP、null、doc.get_DateLastModified()。toString());
530 IBM Content Navigatorのカスタマイズと拡張
row.addAttribute( "Version"、doc.get_MajorVersionNumber()+ "。" +
doc.get_MinorVersionNumber()、JSONResultSetRow.TYPE_STRING、null、doc.get_MajorVersion
Number()+ "。" + doc.get_MinorVersionNumber());
row.addAttribute( "{NAME}"、doc.get_Name()、JSONResultSetRow.TYPE_STRING、
null、doc.get_Name());
row.addAttribute( "ContentSize"、doc.get_ContentSize()、
JSONResultSetRow.TYPE_INTEGER、null、null);
jsonResultSet.addRow(row); }
String sessionKey = "pagerIterator"; request.getSession()。removeAttrib
ute(sessionKey); if(itemCount == pageSize){
jsonResultSet.put( "continuationData"、sessionKey); //これにはCEバージョ
ン5.0以上が必要です
request.getSession()。setAttribute(sessionKey、pageIterator); }
if(totalCount> 0){
jsonResultSet.put( "totalCount"、totalCount); jsonResultSet.put
( "totalCountType"、 "total"); }
}
/ **
* P8の詳細と雑誌の構造を構築します。このメソッドは、事前定義された列とフィールドのセットを使用します
* すべてのP8オブジェクトに常に存在します。
*
* @param jsonResultSet
*
構造を取り込むJSONResultSetResponseオブジェクト
* @param messageResources
*
デフォルトの列名を取得するためのリソースバンドル
* @param clientLocale
*
クライアントのロケール
*/
private static void buildP8ResultStructure(HttpServletRequest request、JSONResultSetResponse jsonRes
ultSet、MessageResources resources、Locale clientLocale){
RepositoryConfig repoConf = Config.getRepositoryConfig(request); String [] folderColumns =
repoConf.getSearchDefaultColumns();
String []状態=新しい文字列[1]; states [0] = JSONResultSetColumn.S
TATE_LOCKED;
jsonResultSet.addColumn(new JSONResultSetColumn( " "、 "multiStateIcon"、false、states));
jsonResultSet.addColumn(new JSONResultSetColumn( " "、 "17px"、 "mimeTypeIcon"、n
ull、false));
付録C.カスタム検索プラグインプロジェクトのコアコード
531
//jsonResultSet.addColumn(new
JSONResultSetColumn(resources.getMessage(clientLocale、 "search.results.header.id")、 "200px"、 "ID"、null、false))
;
//jsonResultSet.addColumn(new JSONResultSetColumn( "Class Name"、 "125px"、 "className"、null、fals
e));
for(String columnString:folderColumns){
if(columnString.equals( "LastModifier"))
jsonResultSet.addColumn(new
JSONResultSetColumn(resources.getMessage(clientLocale、
"search.results.header.lastModifiedByUser")、 "125px"、 "ModifiedBy"、null、false));
else if(columnString.equals( "DateLastModified"))
jsonResultSet.addColumn(new
JSONResultSetColumn(resources.getMessage(clientLocale、
"search.results.header.lastModifiedTimestamp")、 "175px"、 "LastModified"、null、false));
else if(columnString.equals( "MajorVersionNumber"))
jsonResultSet.addColumn(new
JSONResultSetColumn(resources.getMessage(clientLocale、 "search.results.header.version")、
"50px"、 "Version"、null、false));
else if(columnString.equals( "{NAME}"))
jsonResultSet.addColumn(new JSONResultSetColumn( "Name"、 "200px"、
columnString、null、false));
そうしないと {
jsonResultSet.addColumn(new JSONResultSetColumn(columnString、 "80px"、
columnString、null、true));
}}
//マガジンビュー
jsonResultSet.addMagazineColumn(new JSONResultSetColumn( "thumbnail"、 "60px"、 "thumbnail"、null、null
));
JSONArray fieldsToDisplay = new JSONArray(); JSONObject jso
nObj = new JSONObject(); jsonObj.put( "フィールド"、 "クラス
名"); jsonObj.put( "displayName"、 "Class"); fieldsToDisplay.ad
d(jsonObj);
jsonObj = new JSONObject(); jsonObj.put( "field
"、 "ModifiedBy");
jsonObj.put( "displayName"、resources.getMessage(clientLocale、 "search.results.header
.lastModifiedByUser"));
fieldsToDisplay.add(jsonObj);
jsonObj = new JSONObject(); jsonObj.put( "field"、
"LastModified");
jsonObj.put( "displayName"、resources.getMessage(clientLocale、 "search.results.header
.lastModifiedTimestamp"));
fieldsToDisplay.add(jsonObj);
jsonObj = new JSONObject(); jsonObj.put( "フィー
ルド"、 "バージョン");
532 IBM Content Navigatorのカスタマイズと拡張
jsonObj.put( "displayName"、resources.getMessage(clientLocale、 "search.results.header
.lastModifiedTimestamp"));
fieldsToDisplay.add(jsonObj);
jsonResultSet.addMagazineColumn(new JSONResultSetColumn( "content"、 "100%"、 "content"、fieldsToDi
splay、null));
}
public static boolean ifCE52OrAbove(ObjectStore os){
ブール結果= false; if(os!= null)
{
文字列スキーマ= os.getProperties()。getStringValue( "SchemaVersion"); int index = schema.ind
exOf( "。"); if(index <0){
index = schema.length(); }
文字列mainNumber = schema.substring(0、index); if(Integer.parse
Int(mainNumber)> = 18){
結果= true; }}
結果を返す; }
付録C.カスタム検索プラグインプロジェクトのコアコード
533
534 IBM Content Navigatorのカスタマイズと拡張
D
付録D
追加資料
この本は、以下のセクションで説明するように、インターネットからダウンロードできる追加の資料に言及して
います。
ウェブ素材を見つける
この本に関連するWeb資料は、インターネット上のIBM Redbooks Webサーバーからソフトコピーで入
手できます。Webブラウザーを次の場所に向けます。
ftp://www.redbooks.ibm.com/redbooks/SG248055
または、次のIBM Redbooks Webサイトにアクセスすることもできます。
ibm.com/ レッドブック
を選択 追加資料 IBM Redbooksフォーム番号SG24-8055に対応するディレクトリを開きます。
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
535
ウェブ素材を使う
この本に付属する追加のWeb資料には、以下のファイルが含まれています。
ファイル名
説明文
SG248055.zip
圧縮コードのサンプル
SG24-8055-00.pdf
このIBM Redbooks資料の以前のバージョン
ウェブ素材をダウンロードするためのシステム要件
Webマテリアルには、次のシステム構成が必要です。
ハードディスク容量:
最小20 MB
Web素材のダウンロードと抽出
ワークステーションにサブディレクトリ(フォルダ)を作成し、Webマテリアルのコンテンツをから抽出します。 zip こ
のフォルダーにファイル。
536 IBM Content Navigatorのカスタマイズと拡張
関連出版物
このセクションにリストされている出版物は、この本で取り上げられているトピックのより詳細な議論に特に
適していると考えられています。
IBMレッドブック
以下のIBM Redbooks資料には、このドキュメントのトピックに関する追加情報が記載されています。このリスト
で参照されている一部の資料は、ソフトコピーでのみ入手できる場合があることに注意してください。
IBM Case Managerによる高度なケース管理、 SG24-7929
IBM Content Analyticsバージョン2.2:コンテンツから実用的な洞察を発見 SG24-7877
IBM FileNet Content Manager実装のベストプラクティスと推奨事項 SG24-7547
IBM FileNet P8プラットフォームとアーキテクチャ、 SG24-7667
IBM FileNet Records Managerについて SG24-7623(現在、IBM FileNet Records ManagerはIBM Ente
rprise Recordsとして知られています)
これらのドキュメント、およびその他のレッドブック、レッドペーパー、ウェブドキュメント、ドラフト、および追加の資料は
、次のウェブサイトで検索、表示、ダウンロード、または注文できます。
ibm.com/ レッドブック
オンライン資料
これらのウェブサイトは、さらなる情報源としても関連しています。
IBM Content Navigatorを備えたIBM Content Manager:
http://publib.boulder.ibm.com/infocenter/cmgmt/v8r5m0
IBM Content Manager OnDemandとIBM Content Navigator:
http://pic.dhe.ibm.com/infocenter/cmod/v9r0m0
IBM Content Navigatorを備えたIBM FileNet Content Manager:
http://publib.boulder.ibm.com/infocenter/p8docs/v5r2m0
©Copyright IBM Corp. 2012、2014。すべての権利は留保されています。
537
IBM Content Navigatorのハードウェアおよびソフトウェア要件:
http://www.ibm.com/support/docview.wss?uid=swg27024958
IBM Content Navigatorパブリックフォーラム:
http://www.ibm.com/developerworks/forums/forum.jspa?forumID=2869&cat=19
IBM Content Navigatorパブリケーションライブラリ:
http://www.ibm.com/support/docview.wss?uid=swg27025015
完全なJava APIリファレンス:
http://pic.dhe.ibm.com/infocenter/p8docs/v5r2m0/topic/com.ibm.javaeu
c.doc / overview-summary.html
完全なJavaScript APIリファレンス:
http://pic.dhe.ibm.com/infocenter/p8docs/v5r2m0/topic/com.ibm.develo pingeuc.doc / doc / JavaScriptdoc /
index.html
Rational Application Developerバージョン9:
http://publib.boulder.ibm.com/infocenter/radhelp/v9/index.jsp
WebSphere Application Serverバージョン8:
http://pic.dhe.ibm.com/infocenter/wasinfo/v8r0
WebSphere Application Serverバージョン8.5:
http://pic.dhe.ibm.com/infocenter/wasinfo/v8r5
IBM Worklightバージョン6.0.0:
http://pic.dhe.ibm.com/infocenter/wrklight/v6r0m0
IBMからの支援
IBMサポートとダウンロード
ibm.com/ サポート
IBMグローバルサービス
ibm.com/ サービス
538 IBM Content Navigatorのカスタマイズと拡張
IBM Content Navigatorのカスタ
マイズと拡張
(1.0インチスパイン)
0.875インチ<->
1.498インチ460 <-> 788ページ
裏表紙
®
IBM Content Navigatorのカスタ
マイズと拡張
®
理解する
IBM Content Navigatorは、エンタープライズコンテンツ管理(ECM)ソリューションに統合さ
拡張ポイントとカスタマイ
れたユーザーインターフェースを提供します。また、堅牢な開発プラットフォームを提供するた
ズオプション
め、カスタマイズされたユーザーインターフェイスとアプリケーションを構築して、価値とイン
国際技術サポート組織
テリジェントなビジネス中心のエクスペリエンスを提供できます。このIBM Redbooks資料は、
Content Navigatorプラットフォーム、そのアーキテクチャー、および使用可能なプログラミン
アクション、サービス、機能、およ
びカスタムステッププロセッサを作
成する
グインターフェースについて説明しています。提供されている管理ツールを使用してユーザーイ
ンターフェイスを構成およびカスタマイズする方法と、サンプルコードで利用可能な開発オプシ
ョンを使用してContent Navigatorをカスタマイズおよび拡張する方法について説明します。具
体的には、この本は、開発環境をセットアップし、アクション、サービス、および機能をユーザ
実践的な経験に基づく技術情報
ー・インターフェースに追加するプラグインを開発する方法を示しています。カスタマイズのト
の構築
ピックには、要求および応答フィルターの実装、外部データサービス(EDS)、カスタムステ
アプリやモバイル開発などで
ッププロセッサの作成、他のアプリケーションでのコンテンツナビゲーターウィジェットの使用
ウィジェットを使用する
が含まれます。この本では、モバイル開発、ビューアのカスタマイズ、コンポーネントの配備、
デバッグとトラブルシューティングについても説明しています。この本は、IBM Content Navig
atorおよびIBM ECM製品を使用するITアーキテクト、アプリケーション設計者、および開発者を
対象としています。IBM Content Navigatorを拡張およびカスタマイズする方法の概要と、サン
プルコードを使用して実装を行う方法の技術的な詳細を提供します。デバッグとトラブルシュー
ティング。この本は、IBM Content NavigatorおよびIBM ECM製品を使用するITアーキテクト、
アプリケーション設計者、および開発者を対象としています。IBM Content Navigatorを拡張お
IBM Redbooksは、IBM International T
echnical Support Organizationによって
開発されました。世界中のIBM、お客様
、パートナーの専門家が、現実的なシ
ナリオに基づいてタイムリーな技術情
報を作成します。環境にITソリューシ
ョンをより効果的に実装するのに役立
つ具体的な推奨事項が提供されます。
よびカスタマイズする方法の概要と、サンプルコードを使用して実装を行う方法の技術的な詳細
を提供します。デバッグとトラブルシューティング。この本は、IBM Content Navigatorおよび
IBM ECM製品を使用するITアーキテクト、アプリケーション設計者、および開発者を対象とし
ています。IBM Content Navigatorを拡張およびカスタマイズする方法の概要と、サンプルコー
ドを使用して実装を行う方法の技術的な詳細を提供します。
詳細:ibm.com/ レッドブック
SG24-8055-01
ISBN 0738439215
Related documents
Download