チュートリアル:フォームデータモデルの作成

04-create-form-data-model-main

これは、「最初のアダプティブフォームを作成する」シリーズを構成するチュートリアルです。チュートリアル内のユースケースを理解して実際に操作できるように、このシリーズのチュートリアルを最初から順に学習することをお勧めします。

このチュートリアルについて

AEM Forms のデータ統合モジュールを使用すると、AEM ユーザープロファイル、RESTful Web サービス、SOAP ベースの web サービス、OData サービス、リレーショナルデータベースなど、バックエンドの様々なデータソースを使用してフォームデータモデルを作成できます。フォームデータモデル内でデータモデルオブジェクトとサービスを設定し、そのフォームデータモデルをアダプティブフォームに関連付けることができます。アダプティブフォームのフィールドは、データモデルオブジェクトのプロパティに連結されます。フォームデータモデル内のサービスを使用して、アダプティブフォームに事前にデータを取り込み、送信されたフォームデータをデータモデルオブジェクトに書き込むことができます。

フォームデータの統合機能とフォームデータモデルについて詳しくは、「AEM Forms のデータ統合機能」を参照してください。

このチュートリアルでは、フォームデータモデルの準備、作成、設定を行い、そのフォームデータモデルをアダプティブフォームに関連付けるための手順について、順を追って説明します。このチュートリアルを完了すると、次の操作を実行できるようになります。

フォームデータモデルは、次のように表示されます。

form-data-model_l

A. 設定済みのデータソース B. データソーススキーマ C. 利用可能なサービス D. データモデルオブジェクト E. 設定済みサービス

前提条件

作業を開始する前に、以下の条件が満たされているかどうかを確認してください。

手順 1:MySQL データベースをデータソースとして設定する

各種のデータソースを設定して、フォームデータモデルを作成することができます。このチュートリアルでは、サンプルデータが取り込まれた MySQL データベースの設定を行います。サポートされている他のデータソースとその設定方法については、「AEM Forms のデータ統合機能」を参照してください。

MySQL データベースを設定するには、次の手順を実行します。

  1. MySQL データベース用の JDBC ドライバーを OSGi バンドルとしてインストールします。

    1. MySQL JDBC ドライバー OSGi バンドルをダウンロードします。

    2. AEM Forms のオーサーインスタンスに管理者としてログインし、AEM Web コンソールのバンドルに移動します。デフォルトの URL は、https://localhost:4502/system/console/bundles です。

    3. Install/Update をタップします。「バンドルのアップロード/インストール」ダイアログが表示されます。

    4. ファイルを選択」をタップし、MySQL JDBC ドライバーの OSGi バンドルを探して選択します。「バンドルを開始」と「パッケージを更新」を選択して「インストールまたはアップデート」をタップします。MySQL の Oracle Corporation’s JDBC ドライバーがアクティブになっていることを確認します。ドライバーがインストールされます。

  2. MySQL データベースをデータソースとして設定します。

    1. AEM web コンソール(https://localhost:4502/system/console/configMgr)に移動します。

    2. Apache Sling Connection Pooled DataSource」という設定を探し、その設定をタップして編集モードで開きます。

    3. 設定ダイアログで、以下の詳細情報を指定します。

      • Datasource name:任意のデータソース名を指定します。例えば、「WeRetailMySQL」などを指定します。
      • DataSource service property name:データソース名を保管するサービスプロパティの名前を指定します。この名前は、データソースインスタンスを OSGi サービスとして登録する際に指定されます。例えば、「datasource.name」などを指定します。
      • JDBC driver class:JDBC ドライバーの Java クラス名を指定します。MySQL データベースの場合は、com.mysql.jdbc.Driver​と指定します。
      • JDBC connection URI:データベースの接続 URL を指定します。ポート 3306 およびスキーマ weretail で実行される MySQL データベースの場合、URL は jdbc:mysql://'server':3306/weretail?autoReconnect=true&useUnicode=true&characterEncoding=utf-8 です。
      メモ

      MySQL データベースがファイアウォールの内側にある場合、データベースホスト名はパブリック DNS ではありません。データベースの IP アドレスを AEM ホストマシンの /etc/hosts ファイルに追加する必要があります。

      • Username:データベースのユーザー名を指定します。データベースとの接続を確立するには、JDBC ドライバーを有効にする必要があります。
      • Password:データベースのパスワードを指定します。データベースとの接続を確立するには、JDBC ドライバーを有効にする必要があります。
      メモ

      AEM Forms は、MySQL の NT 認証をサポートしていません。https://localhost:4502/system/console/configMgr で AEM web コンソールに移動し、「Apache Sling Connection Pooled Datasource」を検索します。「JDBC 接続 URI」プロパティでは、「integratedSecurity」の値を False に設定し、作成したユーザー名とパスワードを使用して MySQL データベースに接続します。

      • Test on Borrow:Test on Borrow オプションを有効にします。

      • Test on Return:Test on Return オプションを有効にします。

      • Validation Query:プールからの接続状態を確認するための SQL SELECT クエリを指定します。このクエリでは、1 行以上の行が返される必要があります。例えば、customerdetails から * を選択します

      • Transaction Isolation:このオプションの値を「READ_COMMITTED」に設定します。

        上記以外のプロパティはデフォルトのままにして Save をタップします。

        以下のような設定が作成されます。

        relational-database-data-source-configuration

手順 2:フォームデータモデルを作成する

AEM Forms には、設定済みデータソースからフォームデータモデルを作成するための直感的なユーザーインターフェイスが用意されています。1 つのフォームデータモデル内で複数のデータソースを使用することができます。このユースケースでは、既に設定されている MySQL データソースを使用します。

フォームデータモデルを作成するには、以下の手順を実行します。

  1. AEM オーサーインスタンスで、フォームデータ統合​に移動します。

  2. 作成フォームデータモデル​の順にタップします。

  3. フォームデータモデル作成ダイアログで、フォームデータモデルの​名前​を指定します。例えば、customer-shipping-billing-details などを指定します。「次へ」をタップします。

  4. データソース選択画面に、すべての設定済みデータソースが一覧表示されます。「WeRetailMySQL」データソースを選択して「作成」をタップします。

    data-source-selection

customer-shipping-billing-details というフォームデータモデルが作成されます。

手順 3:フォームデータモデルを設定する

フォームデータモデルを設定するには、以下の操作を行う必要があります。

  • データモデルオブジェクトとサービスを追加する
  • データモデルオブジェクト用の読み取りサービスと書き込みサービスを設定する

フォームデータモデルを設定するには、以下の手順を実行します。

  1. AEM オーサーインスタンスで、フォームデータ統合​に移動します。デフォルトの URL は、https://localhost:4502/aem/forms.html/content/dam/formsanddocuments-fdm です。

  2. 前の手順で作成した customer-shipping-billing-details というフォームデータモデルが表示されます。このフォームデータモデルを編集モードで開きます。

    前の手順で選択した WeRetailMySQL というデータソースが、フォームデータモデル内に設定されています。

    default-fdm

  3. データソースツリーで WeRailMySQL データソースを展開します。weretailcustomerdetails スキーマで、以下のデータモデルオブジェクトをフォームデータモデルに対して選択します。

    • データモデルオブジェクト

      • id
      • name
      • shippingAddress
      • 市区町村
      • ステート
      • zipcode
    • Services:

      • get
      • 更新

    選択項目を追加」をタップして、選択したデータモデルオブジェクトとサービスをフォームデータモデルに追加します。

    WeRetail スキーマ

    メモ

    JDBC データソースのデフォルトの get サービス、update サービス、insert サービスは、フォームデータモデルでそのまま使用することができます。

  4. 以下の手順により、データモデルオブジェクトの読み取りサービスと書き込みサービスを設定します。

    1. customerdetails」データモデルオブジェクトを選択して「プロパティの編集」をタップします。

    2. 「読み取りサービス」ドロップダウンで「get」を選択します。customerdetails データモデルオブジェクトのプライマリキーである id 引数が自動的に追加されます。タグ aem_6_3_edit をタップして 、次のように引数を設定します。

      read-default

    3. 同様に、書き込みサービスとして「update」を選択します。customerdetails オブジェクトが引数として自動的に追加されます。この引数を以下のように設定します。

      write-default

      id 引数を追加して以下のように設定します。

      id-arg

    4. 完了」をタップして、データモデルオブジェクトのプロパティを保存します。  次に「保存」をタップして、フォームデータモデルを保存します。

      get サービスと update サービスが、データモデルオブジェクトのデフォルトのサービスとして追加されます。

      data-model-object

  5. サービス」タブに移動し、get サービスと update サービスを設定します。

    1. get サービスを選択して「プロパティの編集」をタップします。プロパティダイアログが開きます。

    2. プロパティを編集ダイアログで、以下のプロパティを指定します。

      • タイトル:サービスのタイトルを指定します。例えば、「Retrieve Shipping Address」などを指定します。

      • 説明:サービスの詳細な機能を示す説明を入力します。次に例を示します。

        このサービスは MySQL データベースから配送先住所などの顧客についての詳細を取得します

      • 出力モデルオブジェクト:顧客データを保管するスキーマを選択します。次に例を示します。

        customerdetail スキーマ

      • 配列を返す:「配列を返す」オプションを無効にします。

      • 引数ID という引数を選択します。

      完了」をタップします。これで、顧客の詳細情報を MySQL データベースから取得するサービスが設定されました。

      shiping-address-retrieval

    3. update サービスを選択して「プロパティの編集」をタップします。プロパティダイアログが開きます。

    4. プロパティを編集ダイアログで、以下を指定します。

      • タイトル:サービスのタイトルを指定します。例えば、「Update Shipping Address」などを指定します。

      • 説明:サービスの詳細な機能を示す説明を入力します。次に例を示します。

        このサービスは、配送先住所とそれに関連するフィールドを MySQL データベース内で更新します

      • 入力モデルオブジェクト:顧客データを保管するスキーマを選択します。次に例を示します。

        customerdetail スキーマ

      • 出力タイプ:「ブール演算式」を選択します。

      • 引数ID という引数と customerdetails という引数を選択します。
        完了」をタップします。MySQL データベース内の顧客の詳細情報を更新する update サービスが設定されました。

      shiping-address-update

これで、フォームデータモデル内のデータモデルオブジェクトとサービスが設定されました。次に、フォームデータモデルのテストを実行します。

手順 4:フォームデータモデルのテストを実行する

データモデルオブジェクトとサービスをテストすることにより、フォームデータモデルが正しく設定されているかどうかを確認することができます。

テストを実行するには、以下の手順を実行します。

  1. モデル」タブに移動し、customerdetails データモデルオブジェクトを選択して「モデルオブジェクトをテスト」をタップします。

  2. モデル/サービスのテストウィンドウの「モデル/サービスを選択」ドロップダウンで「モデルオブジェクトを読み込み」を選択します。

  3. customerdetails」セクションで、設定済み MySQL データベース内の id 引数を指定して「テスト」をタップします。

    指定した id 引数に関連付けられている顧客の詳細情報がデータベースから取得され、以下のように Output セクションに表示されます。

    test-read-model

  4. 同様の手順で、書き込みモデルオブジェクトと書き込みサービスをテストします。

    以下の例では、データベース内で 7102715 という ID が設定されている住所情報が、update サービスによって正しく更新されています。

    test-write-model

    この状態で、7102715 という ID に対して読み取りモデルサービスのテストをもう一度実行すると、以下のように、更新後の顧客の詳細情報が画面に表示されます。

    read-updated

このページ