コンテンツ・ピッカー
Oracle Content Managementでは統合の2つのメカニズムがサポートされているため、ユーザーはコンテンツおよびアセットを参照して選択し、Oracle Content Managementに取り込むことができます。
コンテンツ・コネクタのコンテンツ・ピッカーは、共通のコンテンツ・ピッカーまたはカスタム・コンテンツ・ピッカーのいずれかになります:
-
共通のコンテンツ・ピッカーは、Oracle Content Managementによって提供されます。
汎用の共通ピッカーにより、Oracle Content Managementはコンテンツの閲覧と選択を構築するための基本的なフレームワークと機能を提供します。 これは、コネクタ・フレームワークSDKおよび定義されたAPIとシームレスに機能します。
-
カスタム・ピッカーは、コンテンツ・コネクタによって構築される必要があり、JSテクノロジを使用して構築できます。
カスタム・ピッカーは、通常、コンテンツ・コネクタがリモート・ストアのコンテンツにアクセスするために独自のエクスペリエンスをビルドする場合に使用されます。 一部のストアには独自のネイティブ・ピッカーがあり、これは、コンテンツ・コネクタがアセット・リポジトリと統合するために再利用できます(Google Drive、Microsoft、OneDrive、Dropboxなど)。 また、コンテンツ・コネクタは、Oracle Content Managementで規定されている事前定義済インタフェースおよびコールバック・メカニズムに従って独自のピッカーUIを開発できます。
コンテンツ・コネクタが共通ピッカーを使用する場合、コネクタはサーバー実装でpickerTypeを定義する必要があります:
intradoc.connectorcommon.server.ServerResource implementation
serverInfo.pickerType = PickerType.COMMON;
コンテンツ・コネクタは、intradoc.connectorcommon.server.FilesystemResourceインタフェースも実装する必要があります。 実装は、filesystem REST実装で、次のガイドラインに従う必要があります:
-
コンテンツ・コネクタは、
fileSystemのレスポンス内の各フォルダに対して、uri, parentUri内に"fFolderGUID:"を追加する必要があります。 -
共通UIを問題なく動作させるために、
FileSystemResourceに設定するすべてのフォルダおよびファイルにはいくつかのフィールドが必須です:uri、parentUri、およびname。parentUriが該当しない場合は、fFolderGUID:nullに設定できます。 -
返される結果セットのサイズを把握しておく必要があります。つまり、
totalItemsCountを設定する必要があります。
共通UIの使用
コンテンツ・コネクタが共通ピッカーを使用している場合、eserverの実装でpickerTypeを定義する必要があります:
intradoc.connectorcommon.server.ServerResource implementation
serverInfo.pickerType = PickerType.COMMON;
コンテンツ・コネクタは、intradoc.connectorcommon.server.FilesystemResourceインタフェースも実装する必要があります。 実装は、filesystem REST実装で、次のガイドラインに従う必要があります:
-
コンテンツ・コネクタは、
fileSystemのレスポンス内の各フォルダに対して、uri, parentUri内に"fFolderGUID:"を追加する必要があります。 -
共通UIを問題なく動作させるために、
FileSystemResourceに設定するすべてのフォルダおよびファイルにはいくつかのフィールドが必須です:uri、parentUri、およびname。parentUriが該当しない場合は、fFolderGUID:nullに設定できます。 -
返される結果セットのサイズを把握しておく必要があります。つまり、
totalItemsCountを設定する必要があります。
共通UIはカスタマイズをサポートしており、このカスタマイズはコネクタ構成で定義できます。 次の表では、コネクタServerResource実装で渡すことができる追加設定について説明しています。
| プロパティ | 値 | 説明 |
|---|---|---|
hide_breadcrumbs |
|
ブレッドクラムを表示する、または非表示にするには |
nextPrevPaginationEnabled |
|
ページ区切りのための次および前ボタンを含むページを表示するには ページ区切りの番号を付ける場合は、このプロパティを |
CommonPickerShowVideoView |
|
各カードに次のアイテムが含まれるカード・レイアウトが表示されます:
|
CommonPickerShowImageView |
|
各カードに次のアイテムが含まれるカード・レイアウトが表示されます:
|
show_termsOfUse |
|
用語および条件リンクを表示するには |
termsOfUse_link |
文字列 |
|
show_privacyPolicy |
|
プライバシ・ポリシー・リンクを表示する手順 |
privacyPolicy_link |
文字列 |
|
show_view_action |
|
アイテムの選択時に表示アクションを表示するには |
| page_size |
文字列
|
1ページのサイズ。 結果が特定のページ・サイズよりも大きい場合、結果はページ区切りになります。 |
設定はServerInfoに設定する必要のあるマップの形式になります。 次に例を示します:
//Add UI Settings for the connector that will be read by the common
picker
Map<String,Object> additionalSettingsMap = new HashMap<String,Object>();
Map<String,String> uiSettingsMap = new HashMap<String,String>();
uiSettingsMap.put("CommonPickerShowImageView", "true");
uiSettingsMap.put("hide_breadcrumbs", "true");
uiSettingsMap.put("show_termsOfUse","true");
uiSettingsMap.put("show_privacyPolicy","true");
uiSettingsMap.put("termsOfUse_link","https://unsplash.com/terms");
uiSettingsMap.put("privacyPolicy_link","https://unsplash.com/privacy");
uiSettingsMap.put("show_view_action","true");
additionalSettingsMap.put("UISettings", uiSettingsMap);
serverInfo.addtionalSettings = additionalSettingsMap;
結果のJSON構造は次のようになります:
"addtionalSettings": {
"UISettings": {
"hide_breadcrumbs": "true",
"show_view_action": "true",
"CommonPickerShowImageView": "true",
"termsOfUse_link": "https://unsplash.com/terms",
"privacyPolicy_link": "https://unsplash.com/privacy",
"show_privacyPolicy": "true",
"show_termsOfUse": "true",
"page_size": "30"
}
}
カスタムUIの使用
コンテンツ・コネクタは、そのピッカーのカスタムUIを実装できます。 これは、任意のJSテクノロジを使用して構築できます。 ただし、コネクタ構成の取得および選択の引渡しを行うには、Oracle Content Managementの事前定義されたメソッドを起動する必要があります。 カスタム・ピッカーは、独自のOKボタンおよび「取消」ボタンを公開するために構築でき、その場合は適切なハンドラを起動する必要があります。 ピッカーが独自のOKおよび「取消」ボタンを表示しない場合、Oracle Content Managementによってこれが提供されます。
pickerTypeは、サーバー実装でCUSTOMとして定義する必要があります:
intradoc.connectorcommon.server.ServerResource implementation
serverInfo.pickerType = PickerType.CUSTOM;カスタム実装では、ライブラリに次のJSファイルを含める必要があります:
oracle-oce-custompicker.js
/*global window:true*/
(function() {
'use strict';
var name = window.name; // name set on iframe element to uniquely identify the instance
var receiver = window.opener || window.parent;
var origin = "*";
function _postMessage(msg) {
msg.name = name;
receiver.postMessage(msg, origin);
}
var namespace = "OCE"; //todo: allow passing in data attribute
if (!window[namespace]) {
window[namespace] = {};
}
var OCE = window[namespace];
if (!OCE.CustomPicker) {
OCE.CustomPicker = {
selection: [],
addItem: function(id, name, type, size) {
var item = {id: id, name: name, type: type, size: size};
this.selection.push(item);
this.onChange();
},
removeItem: function(id) {
this.selection = this.selection.filter(function(item) {
return item.id !== id;
});
this.onChange();
},
onInit: function(cbInit) {
var msg = {
message: 'init',
needAuthToken: true
};
_postMessage(msg);
this.messageListener = this.onPostMessage.bind(this);
window.addEventListener('message', this.messageListener, false);
this.cbInit = cbInit;
},
onClose: function() {
window.removeEventListener('message', this.messageListener, false);
},
onPostMessage: function(event) {
if (event.data && event.data.message === "init") {
if (this.cbInit) {
this.cbInit(event.data);
}
}
},
onChange: function() {
var msg = {
message: 'change',
selection: this.selection
};
_postMessage(msg);
},
onOk: function(selection) {
selection = selection || this.selection;
var msg = {
message: 'ok',
selection: this.selection
};
_postMessage(msg);
},
onCancel: function() {
var msg = {
message: 'cancel'
};
_postMessage(msg);
}
};
}
})();
このJSファイルは、コンテンツ・コネクタでパッケージ化する必要があります。
このライブラリは、JS postMessagingパラダイムに従って、情報を渡します。 次のメソッドが重要です。
onInit
カスタム・ピッカーは、初期化時にこのメソッドを起動する必要があります。 ここでは、カスタム・ピッカーがクライアントIDやアクセス・トークンなどのコネクタ構成情報を取得できます。 コネクタ構成(/rest/api/v1/server)で定義される属性は、このメソッドを介して渡されます。
OCE.CustomPicker.onInit(function(data) {
{
if (data != null) {
self.clientId = data.ClientID;
//If connector uses OAuth
self.AccessToken = data.AccessToken;
//If connector uses BASIC auth
self.user = data.UserName;
self.password = Base64.decode(data.UserPwd);
}
//Use client id and access token to fetch data from back end.
}
})
onOk
カスタム・ピッカーが独自のOKボタンを公開する場合、このメソッドを起動してイベントをOracle Content Managementに渡す必要があります。
function pickerCallback(data) {
if (data[google.picker.Response.ACTION] === google.picker.Action.PICKED) {
data[google.picker.Response.DOCUMENTS].forEach(function(doc) {
OCE.CustomPicker.addItem(doc.id, doc.name, "file", doc.sizeBytes);
});
OCE.CustomPicker.onOk();
}
else if (data[google.picker.Response.ACTION] === google.picker.Action.CANCEL) {
OCE.CustomPicker.onCancel();
}
}
onCancel
カスタム・ピッカーが独自の「取消」ボタンを公開している場合、このメソッドを起動して、前述のスニペットのOKボタンに対するonOkメソッドと同様に、イベントをOracle Content Managementに渡す必要があります。
addItem
このメソッドは、カスタム・ピッカーからOracle Content Managementに選択アイテムを渡すために、「リポジトリに追加」ダイアログで選択したアイテムのリストを表示するために起動する必要があります。 ここに渡されるIDは、アセット・リポジトリにアイテムを追加する際に/rest/api/v1/contentを使用してコンテンツをフェッチするために使用されます。
addImage(selectedImages: Image[]) {
selectedImages.forEach(o => {
var name = "PexelsImages_" + o.uri;
OCE.CustomPicker.addItem(o.uri, name, o.thumbnail, o.size);
});
}
removeItem
addItemコールで渡されたIDと同じです。 removeImage(image: Image) {
OCE.CustomPicker.removeItem(image);
}
コネクタにカスタム・ピッカーをパッケージ化します。 コンテンツ・コネクタの登録中に、次の値を指定します:
-
カスタム・ピッカーURL :
http://host:port/pexels-picker/webなど(これは、コンテンツ・コネクタにパッケージ化されたカスタム・ピッカーです。) -
カスタム・ピッカーでは、独自のOKまたは取消ボタンが使用されます: 選択解除したままにします。 (これは、Oracle Content Managementでピッカーをダイアログに埋め込むことを示します。)
カスタム・ピッカーで独自のOKボタンおよび「取消」ボタンを実装している場合は、これを選択します。