[Oracle Cloud] Oracle Content Management で作成したWebサイトにGoogleフォームで作成したお問い合わせフォームを配置する

# はじめに

Oracle Content Management(以降OCM) で作成・公開されたWebサイトに、外部アプリケーションを埋め込み表示することができます。

ここでは、OCM の**リモートコンポーネント(Remote Component)**を利用して、Googleフォームで作成したお問い合わせフォームを部品化したカスタムコンポーネントを作成し、Webサイト上にドラッグ＆ドロップで配置できるようにします。

::: note info
この記事は、2022年1月時点でのOCMの最新バージョン(22.1.1)を元に作成されてます
:::

# 説明

## コンポーネント

コンポーネントは、OCMで作成されるWebサイトに配置できる部品です。OCMには、製品標準のコンポーネント（シードコンポーネント）として、タイトル(`Title`)、段落(`Paragraph`)、ボタン(`Button`)、イメージ(`Image`)などが提供されます。また、OCMのフォルダ内のファイルを一覧表示するファイルリスト(`File List`)や、フォルダ内のファイルを複数ページの文書をスライド表示するドキュメント(`Document`)などもシードコンポーネントとして提供されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/6aef2c37-2e41-7fe8-3e1d-dd020221acc6.png)

さらに、Webサイトの要件にあわせてコンポーネントを開発し、ページ上に配置できます。開発されたコンポーネントは、**カスタムコンポーネント**と言います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/c18879b4-66f1-58bc-d322-e99c7f3434e8.png)


コンポーネント・タイプは2つあります。この記事では**リモートコンポーネント**を利用します

- **ローカルコンポーネント**
    - コンポーネントで表示するコンテンツは、OCMインスタンスの**中**に存在
    - OCMのWebサイトで直接レンダリングして表示、もしくはインラインフレーム(iframe)でレンダリングして表示
- **リモートコンポーネント**
    - コンポーネントで表示するコンテンツは、OCMの**外**にある
    - 外部のアプリケーションをリモート・コンポーネントとして登録し、インラインフレーム(iframe)でレンダリングして表示


# 1. 事前準備

## 1.1 OCM 環境の準備

OCM環境を準備します。以下の記事を参考に、**OCM - Starter Edition** 環境を作成し、アセットの登録、Webサイトの作成・公開を実施します

https://qiita.com/nakasato310/items/9457a61d9d27db6ce4f0

最終的には以下のようなWebサイト(`firstSite`)が作成・公開された状態になります。

![画像](https://camo.qiitausercontent.com/ec094d43a2d6cd9b1e14710322f35717f326bc70/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3132303131302f61646130383634322d633730622d303939382d613137622d6362636535396263653038332e706e67)


## 1.2 Googleフォームの作成と埋め込み表示用のHTMLコードのコピー

Googleフォームを利用し、上記`firstSite`に埋め込み表示するお問い合わせフォームを作成します。詳しい作成方法は、以下のGoogleフォームのサイトをご確認ください。

https://www.google.com/intl/ja_jp/forms/about/

今回は以下のようなシンプルなお問い合わせフォームを作成しました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/8f732d60-3bd2-82e3-e945-188dd195c6d4.png)

右上の**送信**ボタンをクリックし、**送信方法**で `< >`（HTMLを埋め込む）を選択します。埋め込み表示用のHTMLコードをコピーし、メモ帳などに記録します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/535c56e7-d171-c8f1-b2b9-b4994b733d40.png)


# 2. リモートコンポーネントを作成する

1. OCMインスタンスにサインインします

1. 左ナビゲーションの**開発者**→**すべてのコンポーネントの表示**をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/9e2444de-a2dc-d046-9785-33f675f97be2.png)

1. **作成**→**リモート・コンポーネントの登録**をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/8e2e1800-9579-4764-fadf-2444035e3174.png)

1. リモートコンポーネントのダイアログが表示されます。以下を入力し、**登録**をクリックします
    + 名前: **customContactForm**
    + 説明: (任意)
    + コンポーネントURL: 1.2項で取得したGoogleフォームの埋め込み表示用のHTMLコードの`src=https://docs.google.com/forms/d/e/.../viewform?embedded=true`のURLを入力
    + 設定URL: (今回は使用しません。ダミーのURLを入力します)
    + 設定幅: (今回は使用しません。デフォルトのままとします)
    + 設定高さ: (今回は使用しません。デフォルトのままとします)
    + キー: (事前設定されたIDをそのまま利用。変更しません)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/62261138-db11-d4d6-df82-7ab8e397afa7.png)

1. **customContactForm**のリモート・コンポーネントが作成されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/475227ec-2975-1e93-5dd1-5c6045a465f7.png)

# 3. Webページ上に配置する

1. 左ナビゲーションメニューで**サイト**をクリックします

1. 作成済のWebサイト`firstSite`をサイト編集画面で開きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/29aaf3dd-752f-c53a-5efd-b45d810be762.png)

1. 編集モードに切り替えます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/2cb11189-d146-92ac-5773-d7df3acd08cf.png)

1. メニューの**コンポーネント**→**カスタム**をクリックし、**customContactForm**をWebページ上に配置します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/1b9e92cc-f640-30ac-fb48-f4c79e8afb59.png)

1. Googleフォームで作成したお問い合わせフォームが表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/090bda7f-e984-2180-86a1-925e4f75a52e.png)

1. **customContactForm**のメニュー→**設定**をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/f564ec42-4a24-26f0-48ef-c80456b6b7b6.png)

1. 埋め込んだフォームが表示されるように**高さの設定**を有効化し、フォーム全体が表示されるようにします（ここでは **800** を設定）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/20c4cbc5-b0f8-1557-5198-81a9566ad9be.png)

1. 設定パネルを閉じ、編集モードから表示モードに戻します

1. **保存**をクリックします

1. メニューバーのプレビューボタンをクリックし、保存したサイトをプレビューします。お問い合わせフォームが表示されることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/633db4c3-f191-c547-6220-da655bdaf5b6.png)

1. Webサイト上に埋込表示したお問い合わせフォームから問い合わせを1件入力し、**送信**します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/830add23-9807-94c7-7c87-4be898847496.png)

1. 送信内容をGoogleフォームの管理画面で確認します。先ほど送信した問い合わせが登録されていることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120110/c7a08afd-e965-1de5-194d-3223a8537460.png)


###【補足説明】リモートコンポーネントに登録するURLについて

_リモートコンポーネントを含むWebサイトを公開すると、リモートコンポーネント作成時に指定した外部アプリケーションのURL(**コンポーネントURL**)に、Webページとiframeのコンテンツ間の通信を可能にするためのパラメータが追加されます。_

_外部アプリケーションによっては、この追加パラメータの影響でiframeによる埋め込み表示が正しく動作しないこともあります。その場合は、iframeでの埋め込み表示ができる**ローカル・コンポーネント**の開発をご検討ください。_


# まとめ

この記事では、OCM の**リモートコンポーネント**を利用して、Googleフォームで作成したお問い合わせフォームを部品化したカスタムコンポーネント(**customContactForm**)を作成し、Webサイト上にドラッグ＆ドロップで配置できることを確認しました。

このようにカスタムコンポーネントを作成し、部品化することで、以下のようなメリットや効果が期待できます。

+ WebやHTMLに詳しくないビジネスユーザーでも、直感的な操作で外部アプリケーションをWebページ内に組み込むことができる
+ 複数のページおよびサイトで、同じ部品（=カスタムコンポーネント）を再利用できる

この記事を作成する際に参考にした記事やドキュメントを最後にリンクします

+ OCM製品ドキュメント
    + [7 Manage Custom Components and Layouts](https://docs.oracle.com/en/cloud/paas/content-cloud/creating-experiences/manage-custom-components-and-layouts1.html#GUID-15CB1AE6-E45C-4BD7-AE4E-41F94AFA550F)
    + [24 Develop Components - Register a Remote Component](https://docs.oracle.com/en/cloud/paas/content-cloud/creating-experiences/register-remote-component.html)

## （参考）OCMの製品ドキュメント

+ [Oracle Content Management 製品ドキュメント](https://docs.oracle.com/en/cloud/paas/content-cloud/books.html)（英語）
+ [Oracle Content Management 製品ドキュメント](https://docs.oracle.com/cloud/help/ja/content-cloud/index.htm)（日本語翻訳版）  
`製品ドキュメントの英語原本と日本語翻訳版です。翻訳されるまでに時差がありますので、最新情報の確認は 英語版のドキュメントをご利用ください`