コアコンポーネントに基づくアダプティブフォームのカスタム関数の作成

コアコンポーネントに基づくアダプティブFormsは、ユーザー入力に基づいてコンテンツと動作を調整することで、動的なユーザーエクスペリエンスを提供します。 カスタム関数を使用すると、開発者は機能を拡張して、フォームが特定の要件を満たすことができるようにします。 カスタム機能を統合することで、開発者は複雑なロジックを実装し、プロセスを自動化し、特定のビジネス要件やユーザーの期待に沿った独自のインタラクションを導入できます。 これにより、フォームが様々な条件に適合するだけでなく、様々なユースケースに対してより正確で効果的なソリューションを提供できるようになります。
この記事では、コアコンポーネントを使用してアダプティブFormsのカスタム関数を作成する手順を説明します。

考慮事項

  • parameter typereturn typeNone をサポートしません。

  • カスタム関数リストでサポートされていない関数は次のとおりです。

    • ジェネレーター関数
    • 非同期/待機関数
    • メソッドの定義
    • クラスメソッド
    • デフォルトのパラメーター
    • Rest パラメーター

カスタム関数を作成するための前提条件

アダプティブFormsへのカスタム関数の追加を開始する前に、次のことを確認してください。

ソフトウェア:

  • プレーンテキストエディター(IDE):どのプレーンテキストエディターでも機能しますが、Microsoft Visual Studio Code などの統合開発環境(IDE)では、編集を簡単にする高度な機能が提供されます。

  • Git:コードの変更を管理するには、このバージョン管理システムが必須です。インストール済みでない場合は、https://git-scm.com からダウンロードしてください。

カスタム関数の作成

ルールエディターでカスタム関数を呼び出すクライアントライブラリを作成します。 詳しくは、「クライアント側ライブラリの使用」を参照してください。

カスタム関数を作成する手順は次のとおりです。

クライアントライブラリの作成 create-client-library

クライアントライブラリを追加することで、カスタム関数を追加できます。 クライアントライブラリを作成するには、次の手順を実行します。

リポジトリのクローンを作成

AEM Formsas a Cloud Serviceリポジトリのクローン:

  1. コマンドラインまたはターミナルウィンドウを開きます。

  2. リポジトリを保存するマシン上の目的の場所に移動します。

  3. 次のコマンドを実行して、リポジトリのクローンを作成します。

    git clone [Git Repository URL]

このコマンドは、リポジトリをダウンロードし、複製されたリポジトリのローカルフォルダーをコンピューターに作成します。 このガイド全体では、このフォルダーを [AEMaaCS プロジェクトディレクトリ ] と呼びます。

クライアントライブラリフォルダーの追加

[AEMaaCS プロジェクトディレクトリ ] に新しいクライアントライブラリフォルダーを追加するには、次の手順に従います。

  1. [AEMaaCS プロジェクトディレクトリ ] をエディターで開きます。

    カスタム関数のフォルダー構造

  2. ui.apps を見つけます。

  3. 新しいフォルダーを追加します。例えば、experience-league という名前のフォルダーを追加します。

  4. /experience-league/ フォルダーに移動し、ClientLibraryFolder を追加します。例えば、customclientlibs という名前のクライアントライブラリフォルダーを作成します。

    Location is: [AEMaaCS project directory]/ui.apps/src/main/content/jcr_root/apps/

クライアントライブラリフォルダーへのファイルとフォルダーの追加

追加したクライアントライブラリフォルダーに以下を追加します。

  • .content.xml ファイル
  • js.txt ファイル
  • js フォルダー

Location is: [AEMaaCS project directory]/ui.apps/src/main/content/jcr_root/apps/experience-league/customclientlibs/

  1. .content.xml で、次のコード行を追加します。

    code language-javascript
    <?xml version="1.0" encoding="UTF-8"?>
    <jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
    jcr:primaryType="cq:ClientLibraryFolder"
    categories="[customfunctionscategory]"/>
    
    note note
    NOTE
    client library foldercategories プロパティには任意の名前を選択できます。
  2. js.txt で、次のコード行を追加します。

    code language-javascript
          #base=js
        function.js
    
  3. js フォルダーで、カスタム関数を含む JavaScript ファイルを function.js として追加します。

    code language-javascript
     /**
         * Calculates Age
         * @name calculateAge
         * @param {object} field
         * @return {string}
     */
    
     function calculateAge(field) {
     var dob = new Date(field);
     var now = new Date();
    
     var age = now.getFullYear() - dob.getFullYear();
     var monthDiff = now.getMonth() - dob.getMonth();
    
     if (monthDiff < 0 || (monthDiff === 0 && now.getDate() < dob.getDate())) {
     age--;
     }
    
     return age;
     }
    
  4. ファイルを保存します。

カスタム関数のフォルダー構造

新しいフォルダーを filter.xml に含める

  1. [AEMaaCS プロジェクトディレクトリ]内の /ui.apps/src/main/content/META-INF/vault/filter.xml ファイルに移動します。

  2. ファイルを開き、最後に次の行を追加します。

    <filter root="/apps/experience-league" />

  3. ファイルを保存します。

カスタム関数フィルター xml

新しく作成したクライアントライブラリフォルダーをAEM環境にデプロイします

AEM as a Cloud Service の [AEMaaCS プロジェクトディレクトリ]を Cloud Service 環境にデプロイします。Cloud Service 環境にデプロイするには:

  1. 変更をコミットする

    1. 次のコマンドを使用して、リポジトリに変更を追加、コミット、プッシュします。
    code language-javascript
        git add .
        git commit -a -m "Adding custom functions"
        git push
    
  2. 更新されたコードをデプロイします。

    1. 既存のフルスタックパイプラインを使用してコードのデプロイメントをトリガーします。 これにより、更新されたコードが自動的にビルドおよびデプロイされます。

パイプラインをまだ設定していない場合は、AEM Forms as a Cloud Service のパイプラインの設定方法のガイドを参照してください。

パイプラインが正常に実行されると、クライアントライブラリに追加されたカスタム関数が アダプティブフォームのルールエディターで使用できるようになります。

アダプティブフォームにクライアントライブラリを追加 use-custom-function

クライアントライブラリを Forms CS 環境にデプロイしたら、その機能をアダプティブフォームで使用します。アダプティブフォームでクライアントライブラリを追加するには、次の手順に従います。

  1. フォームを編集モードで開きます。フォームを編集モードで開くには、フォームを選択し、「編集」を選択します。

  2. コンテンツブラウザーを開き、アダプティブフォームの​ ガイドコンテナ ​コンポーネントを選択します。

  3. ガイドコンテナプロパティ ガイドプロパティ アイコンをクリックします。アダプティブフォームコンテナダイアログボックスが開きます。

  4. 基本」タブをクリックし、ドロップダウンリストから​ クライアントライブラリカテゴリ ​の名前を選択します(この場合は、customfunctionscategory を選択します)。

    カスタム関数のクライアントライブラリを追加

    note note
    NOTE
    クライアントライブラリカテゴリ」フィールドにコンマ区切りのリストを指定することで、複数のカテゴリを追加できます。
  5. 完了」をクリックします。

カスタム関数は、🔗JavaScript注釈 を使用してアダプティブフォームのルールエディター で使用できます。

アダプティブフォームでのカスタム関数の使用

アダプティブフォームでは、 ルールエディター内のカスタム関数を使用できます。 JavaScriptのファイル(Function.js ファイル)に次のコードを追加して、生年月日(YYYY-MM-DD)に基づいて年齢を計算しましょう。 生年月日を入力として受け取り、年齢を返す calculateAge() というカスタム関数を作成します。

    /**
        * Calculates Age
        * @name calculateAge
        * @param {object} field
        * @return {string}
    */

    function calculateAge(field) {
    var dob = new Date(field);
    var now = new Date();

    var age = now.getFullYear() - dob.getFullYear();
    var monthDiff = now.getMonth() - dob.getMonth();

    if (monthDiff < 0 || (monthDiff === 0 && now.getDate() < dob.getDate())) {
    age--;
    }

    return age;
    }

上記の例では、ユーザーが生年月日を(YYYY-MM-DD)形式で入力すると、カスタム関数 calculateAge が呼び出され、年齢が返されます。

ルールエディター内の Calcualte Agae カスタム関数

フォームをプレビューして、ルールエディターを通じてカスタム関数がどのように実装されるかを確認しましょう。

ルールエディターフォームプレビューでの Agae カスタム関数の計算

NOTE
次のカスタム関数フォルダーを参照できます。パッケージマネージャーを使用して、このフォルダーをダウンロードして AEM インスタンスにインストールします。

カスタム関数の機能

AEM forms のカスタム関数は、フォームの機能を拡張およびパーソナライズするための堅牢なソリューションを提供します。 カスタム関数を使用すると、組織固有のニーズを満たすことができます。

これらの関数は、特定フィールドの操作、グローバルフィールドの使用、非同期操作、キャッシュメカニズムの組み込みなど、様々な機能をサポートします。 この柔軟性により、フォームを複雑な要件に適応させ、効率的にカスタマイズされたユーザーエクスペリエンスを提供できるようになります。 これらの高度な機能を活用することで、フォームのインタラクションを強化し、パフォーマンスを最適化して、AEM フォームをより機能的でレスポンシブなものにすることができます。

カスタム関数の機能について詳しく見ていきましょう。

カスタム関数での非同期のサポート support-of-async-functions

カスタム関数を使用すると、ルールエディターで非同期関数を実装できます。 この方法のガイダンスについては、記事 アダプティブフォームでの非同期関数の使用を参照してください。

フィールドおよびグローバルスコープのオブジェクトは、カスタム関数でサポートされています。 support-field-and-global-objects

フィールドオブジェクトは、テキストフィールド、チェックボックスなど、フォーム内の個々のコンポーネントまたは要素を参照します。 Globals オブジェクトには、フォームインスタンス、ターゲットフィールドインスタンス、カスタム関数内でフォームの変更を実行するためのメソッドなどの読み取り専用変数が含まれています。

NOTE
param {scope} globals は最後のパラメーターにする必要があり、アダプティブフォームのルールエディターには表示されません。

スコープ オブジェクトの詳細については、「 カスタム関数のスコープ オブジェクト」を参照してください。

カスタム関数でのキャッシュサポート

アダプティブフォームは、カスタム関数のキャッシュを実装して、ルールエディターでカスタム関数リストを取得する際の応答時間を短縮します。error.log ファイルに、Fetched following custom functions list from cache というメッセージが表示されます。

キャッシュサポートを備えたカスタム関数

カスタム関数を変更すると、キャッシュは無効になり、解析されます。

トラブルシューティング

  • カスタム関数のコードを含む JavaScript ファイルにエラーがある場合、カスタム関数はアダプティブフォームのルールエディターにリストされません。カスタム関数リストを確認するには、エラーの error.log ファイルに移動します。エラーが発生した場合、カスタム関数リストは空で表示されます。

    エラーログファイル

    エラーがない場合、カスタム関数が取得され、error.log ファイルに表示されます。error.log ファイルに、Fetched following custom functions list というメッセージが表示されます。

    適切なカスタム関数を使用したエラーログファイル

次の手順

次に、様々な コアコンポーネントに基づくアダプティブフォームのカスタム関数の例を見てみましょう。

関連トピック

recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab