はじめに
マーケットプレイス版Oracle WebCenter Content For OCI(以降WCC For OCI)は、Oracle Cloud Infrastructure上のVMベースのソリューションとして提供されます。マーケットプレイス版のOracle WebCenter Contentを使用すると、顧客は数回クリックするだけで環境をプロビジョニング/セットアップでき、クラウド上でコンテンツ・ソリューションを提供できるようになります。
詳細は製品ドキュメントおよび概要紹介資料をご確認ください
製品ドキュメント
概要紹介資料(SpeakerDeck)
この記事で説明すること、しないこと
この記事では、先日リリースされた25.2.1 - February 2025より利用可能になったApplinkを利用し、カスタムアプリケーションにWCCのフォルダUIを連携(埋め込み表示)する方法について説明します
なお、WCC For OCIのプロビジョニング手順の詳細は割愛します。具体的なプロビジョニング手順は、上記の製品ドキュメントやあとの章で紹介するQiita記事を参考にしてください
Applinkとは
説明
- ApplinkはREST APIとして提供されます
- カスタムアプリケーションから
このユーザーがこのアクセス権限でこのフォルダ(もしくはファイル)にアクセスしますとREST APIにリクエストを送信すると、WCCはアクセスに必要な アクセストークン と 埋め込み用URL などを払い出します - WCCから払い出された埋め込み用URLとアクセストークンを利用し、カスタムアプリケーションはWCCのフォルダ(もしくはファイル)を自身のUIに埋め込み表示します
- (WCCのユーザーアカウントを持たない)カスタムアプリケーションのユーザーは、埋め込み表示されたWCCのフォルダ(もしくはファイル)を許可されたアクセス権限で操作することができます
- 払い出された埋め込み用URLは、ブラウザのアドレスバーに直接入力して使用することはできません。
- Applinkは本質的に開発者中心の機能であり、カスタムアプリケーション側でのプログラム開発が必要です
関連ドキュメントおよび記事
1. 構築する環境の説明と準備
1.1 説明
今回は以下のような環境を準備します
1.2 カスタムアプリケーション(Apache)
ローカルPC(ここではMacOS)にApache HTTP Serverを構成し、ブラウザからhttp://localhostでアクセスできるようにします。
私は以下の記事を参考に、MacOSにApacheをローカルのWebサーバとしてセットアップしました
ブラウザでhttp://localhostにアクセスし、いつもの It Works! が表示されればOKです

1.3 WCC For OCIインスタンス
WCC For OCIの環境を作成し、起動します。以下のQiita記事などを参考にしてください
なお、過去にWCC For OCI環境を作成済で、最新バージョン(25.2.1以上)を利用していない場合は、以下の製品ドキュメントを参考にWCC環境へのパッチ適用を実施してください
ブラウザでWCCのネイティブUIhttps://<ロードバランサのパブリックIPアドレス>:16200/cs/にアクセスし、以下の画面が表示されればOKです

1.4 カスタムアプリケーションのドメインへの埋込み表示を許可する
WCC For OCIのconfig.cfgにRedwoodUIFrameAncestorsパラメータを追加し、指定ドメイン(今回はhttp://localhost)に対してWCCのUIを埋め込み表示することを許可します
-
WCC For OCIのネイティブUIにシステム管理者でサインインします
-
管理→管理サーバー→一般構成を開きます
-
追加の構成変数: に
RedwoodUIFrameAncestors=http://localhostパラメータを追加し、保存をクリックします

-
UCMサーバー(UCM_server1)を再起動します
1.5 埋め込み用フォルダを作成する
WCC For OCIのRedwood UIにWebブラウザでアクセスし、埋め込み表示するフォルダを作成します
- WCC For OCIのRedwood UIにサインインします
-
参照を開き、任意のライブラリ配下にフォルダを作成します(ここでは
TESTLibraryの下にテストフォルダを作成)

- 作成したフォルダ選択し、プロパティを開きます
-
フォルダIDをメモします
2. カスタムアプリケーションの開発
2.1 REST APIの確認
今回は以下のREST APIを利用し、フォルダのApplinkを作成します
PostmanなどのRESTクライアントからこのREST APIを実行し、その動作を確認します
レスポンスのBodyを確認すると、以下のようなJSONデータを受信します
{
"dAppLinkID":"LFVODdd9lvUc1NO9gW6kEY24aR5yh...",
"dAppLinkAccessToken":"RrDcdPJp30-gsTpvaOo8DVhJnK1vufxkkdpK_Fcw...",
"dAppLinkRefreshToken":"9FaB_48sSWe_ekfQi6OvcV...",
"dEmbedUrl":"https://<LoadBalancer Public IP>:16200/cs/idcplg?IdcService=REDWOODUI_FOLDER_VIEWER&fFolderGUID=80E6A267BFBFA519665D6F96DD13FC7F&dAppLinkID=LFVODdd9lvUc1NO9gW6kEY24aR5yh...&ActAsAnonymous=1"
}
カスタムアプリケーションはこれらレスポンスデータを利用して、WCCのフォルダUIを埋め込み表示するプログラムを実装します
2.2 カスタムアプリケーションの開発
製品ドキュメントにサンプルコードがありますので、まずはご確認ください
では、実際に開発していきます。Webサーバに配置するHTMLファイルapplink.htmlとJavaScriptファイルapplink.jsを作成します。以下サンプルです
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Applink Sample</title>
</head>
<body>
<p>Embed WCC Redwood UI using Applink API</p>
<iframe id="applink_frame" name="applink" src="" width="1024" height="640"></iframe>
<script src="./applink.js"></script>
</body>
</html>
async function callApi() {
// WCC Access User info
const username = "weblogic"; // ユーザー名
const password = "xxxxxxxx"; // パスワード
const auth = btoa(username + ":" + password); // Base64でエンコード
// REST API - Create an applink to a Folder
const base = "https://<Load Balancer Public IP>:16200/documents/wcc/api/v1.1/applinks/.by.folder/";
const folderid = "<Folder ID>";
const callurl = new URL(folderid, base);
try {
const res = await fetch(callurl, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Basic " + auth
},
body: JSON.stringify({
"dAssignedUser": "AppUser1",
"dLinkPrivilege": "RW",
"dUserLocale": "ja-JP",
"dUserTimeZone": "Asia/Tokyo"
})
})
const createApplinkResponse = await res.json();
const wccOrigin = new URL(createApplinkResponse.dEmbedUrl).origin;
const iframe = document.getElementById('applink_frame');
window.addEventListener('message', (event) => {
if (event.origin !== wccOrigin) return; // ensure message is from WCC
if (event.data?.message === 'appLinkReady') {
var iframewindow = iframe.contentWindow ? iframe.contentWindow : iframe.contentDocument.defaultView;
iframewindow.postMessage({
message: 'setAppLinkTokens',
dAppLinkID: createApplinkResponse.dAppLinkID,
dAppLinkAccessToken: createApplinkResponse.dAppLinkAccessToken,
dAppLinkRefreshToken: createApplinkResponse.dAppLinkRefreshToken,
}, '*');
}
}, false);
iframe.src = createApplinkResponse.dEmbedUrl;
} catch {
console.error(error.message);
}
};
callApi();
作成したhtmlとjsをWebサーバのドキュメントルートに配置します。今回(MacOS)の場合は、/Library/WebServer/Documents/です
説明
WCCのフォルダにアクセスできるユーザー名とパスワードを指定します
// WCC Access User info
const username = "weblogic"; // ユーザー名
const password = "xxxxxxxx"; // パスワード
const auth = btoa(username + ":" + password); // Base64でエンコード
<Load Balancer Public IP>は、WCC For OCIインスタンスのロードバランサのパブリックIPアドレスを指定します
<Folder ID>は、準備時にメモしたフォルダIDを指定します
// REST API - Create an applink to a Folder
const base = "https://<Load Balancer Public IP>:16200/documents/wcc/api/v1.1/applinks/.by.folder/";
const folderid = "<Folder ID>";
const callurl = new URL(folderid, base);
作成するApplinkの定義(条件)を指定します。dAssignedUserのみ必須で、その他はオプションです
-
dAssignedUser: 埋め込みリンクを利用するユーザー名を指定します。埋め込みUIからフォルダやファイルを作成すると、作成者として記録されます -
dLinkPrivilege: 埋め込みリンクのアクセス権限を指定します。R/RW/RWD/RWDAから選択。デフォルトはR -
dUserLocale: 埋め込みリンクで表示されるUIのロケール(言語)を指定します。選択するロケールは、事前にWCC側で有効化されている必要があります -
dUserTimeZone: 埋め込みリンクで表示されるUIのタイムゾーンを指定します
body: JSON.stringify({
"dAssignedUser": "AppUser1",
"dLinkPrivilege": "RW",
"dUserLocale": "ja-JP",
"dUserTimeZone": "Asia/Tokyo"
})
3. 確認
-
ブラウザを開き、
http://localhost/applink.htmlを開きます。WCCのフォルダが埋め込み表示されます

-
作成したフォルダ(ここではサブフォルダ)を開きます
-
ファイルを選択すると、RW権限で利用できる表示やダウンロード、チェックインなどの操作ができることを確認します。また、削除のメニューは表示されないこともあわせて確認します

-
WCCのRedwood UIに戻り、テストフォルダを開きます。カスタムアプリケーションの埋め込み用UIから作成したサブフォルダとアップロードしたファイルを確認します

-
ファイルを選択し、プロパティを開きます。Applink作成時に
dAssignedUserに指定したAppUser1が、作成者として記録されていることを確認します

おわりに
Applink機能をつかって、カスタムアプリケーションにWCCのフォルダUIを埋め込み表示する方法を説明しました。皆さまのお役に立てば幸いです








