アダプティブ Forms コアコンポーネントのカスタム関数

この記事では、次のような最新の機能を備えた、最新のアダプティブフォームのコアコンポーネントを使用してカスタム関数を作成する方法について説明します。

  • カスタム関数のキャッシュ機能
  • グローバル スコープ オブジェクトとフィールド オブジェクトは、カスタム関数をサポートしています。
  • レット関数や矢印関数などの最新のJavaScript機能のサポート(ES10 のサポート)

カスタム関数の最新機能を使用するには、AEM Forms コアコンポーネント環境で 最新のフォームバージョンを設定してください。

バージョン
記事リンク
AEM 6.5
この記事
AEM as a Cloud Service
ここをクリックしてください

はじめに

AEM Forms 6.5 には、ルールエディターを使用して複雑なビジネスルールを定義できるJavaScript関数が含まれています。 AEM Formsは様々な標準のカスタム関数を提供していますが、多くの場合、複数のフォームで使用するために独自のカスタム関数を定義する必要があります。 これらのカスタム関数は、入力されたデータを特定の要件に合わせて操作および処理できるようにすることで、フォームの機能を強化します。 さらに、定義済みの条件に基づいてフォームの動作を動的に変更できます。

カスタム関数の使用 uses-of-custom-function

アダプティブなForms コアコンポーネントでカスタム関数を使用する場合の利点は次のとおりです。

  • データの管理:カスタム関数は、フォームフィールドに入力されたデータを管理および処理します。
  • データの処理:カスタム関数は、フォームフィールドに入力されたデータの処理に役立ちます。
  • データの検証:カスタム関数を使用すると、フォームの入力に対してカスタムチェックを実行し、指定したエラーメッセージを提供できます。
  • 動的な動作:カスタム関数を使用すると、特定の条件に基づいてフォームの動的な動作を制御できます。 例えば、フィールドの表示/非表示、フィールド値の変更、フォームロジックの調整を動的に行うことができます。
  • 統合:カスタム関数を使用して外部の API やサービスと統合できます。 外部ソースからのデータの取得、外部 Rest エンドポイントへのデータの送信、外部イベントに基づくカスタムアクションの実行に役立ちます。

カスタム関数は基本的に、JavaScript ファイルに追加されるクライアントライブラリです。 カスタム関数を作成すると、ルールエディターで使用できるようになり、アダプティブフォーム内のユーザーが選択できるようになります。 カスタム関数は、ルールエディターのJavaScript アノテーションによって識別されます。

カスタム関数でサポートされるJavaScript注釈 js-annotations

JavaScript注釈は、JavaScript コード のメタデータを提供します。 /**@ など、特定の記号で始まるコメントが含まれます。 注釈は、コード内の関数、変数、その他の要素に関する重要な情報を提供します。 アダプティブフォームは、カスタム関数に対して次のJavaScript注釈をサポートしています。

名前

Name は、アダプティブフォームのルールエディターでカスタム関数を識別するために使用します。 カスタム関数の名前には、次の構文を使用します。

  • @name [functionName] <Function Name>
  • @function [functionName] <Function Name>
  • @func [functionName] <Function Name>
NOTE
[functionName] は、関数の名前です。 スペースは使用できません。
<Function Name> は、アダプティブFormsのルールエディターにある関数の表示名です。
関数名が関数自体の名前と同じ場合は、構文から [functionName] を省略できます。

パラメーター

パラメーター は、カスタム関数で使用される引数のリストです。 1 つの関数は、複数のパラメーターをサポートできます。 次の構文を使用して、カスタム関数でパラメーターを定義します。

  • @param {type} name <Parameter Description>

  • @argument {type} name <Parameter Description>

  • @arg {type} name <Parameter Description>

    {type} は、パラメータータイプを表します。 使用できるパラメーターのタイプは次のとおりです。

    • string:単一の文字列値を表します。
    • 数値:1 つの数値を表します。
    • ブール値:単一のブール値(true または false)を表します。
    • string[]:文字列値の配列を表します。
    • 数値 []:数値の配列を表します。
    • boolean[]: ブール値の配列を表します。
    • 日付:単一の日付値を表します。
    • date[]:日付値の配列を表します。
    • 配列:様々なタイプの値を含む汎用の配列を表します。
    • オブジェクト:値を直接渡す代わりに、カスタム関数に渡されるフォームオブジェクトを表します。
    • scope: globals オブジェクトを表します。このオブジェクトには、フォームインスタンス、ターゲットフィールドインスタンス、カスタム関数内でフォームの変更を実行するためのメソッドなどの読み取り専用変数が含まれています。 これはJavaScript注釈の最後のパラメーターとして宣言され、アダプティブフォームのルールエディターには表示されません。 scope パラメーターは、フォームまたはコンポーネントのオブジェクトにアクセスして、フォームの処理に必要なルールまたはイベントをトリガーします。 Globals オブジェクトとその使用方法の詳細については、 ここをクリックしてください。

パラメータータイプは 大文字と小文字は区別されません で、パラメーター名にはスペースを使用できません。

パラメ <Parameter Description> ターの目的に関する詳細が含まれています。 複数の単語を含めることができます。

戻り値タイプ

戻り値のタイプは、実行後にカスタム関数が返す値のタイプを指定します。 次の構文を使用して、カスタム関数で戻り値のタイプを定義します。

  • @return {type}
  • @returns {type}
    {type} は、関数の戻り値のタイプを表します。 使用できる戻り値のタイプは次のとおりです。
  • string:単一の文字列値を表します。
  • 数値:1 つの数値を表します。
  • ブール値:単一のブール値(true または false)を表します。
  • string[]:文字列値の配列を表します。
  • 数値 []:数値の配列を表します。
  • boolean[]: ブール値の配列を表します。
  • 日付:単一の日付値を表します。
  • date[]:日付値の配列を表します。
  • 配列:様々なタイプの値を含む汎用の配列を表します。
  • object:値を直接表すのではなく、フォームオブジェクトを表します。

戻り値のタイプでは、大文字と小文字が区別されません。

非公開

プライベートとして宣言されたカスタム関数は、アダプティブフォームのルールエディターのカスタム関数のリストには表示されません。 デフォルトでは、カスタム関数はパブリックです。 カスタム関数をプライベートとして宣言する構文は @private です。

カスタム関数の作成時のガイドライン considerations

ルールエディターにカスタム関数を一覧表示するには、次のいずれかの形式を使用できます。

Jsdoc コメント付きまたは付きでない Function ステートメント

カスタム関数を作成する際に、jsdoc コメントを含めることも、含めないこともできます。

    function functionName(parameters)
        {
            // code to be executed
        }

ユーザーがカスタム関数にJavaScript アノテーションを追加しない場合は、関数名によってルールエディターに表示されます。 ただし、カスタム関数を読みやすくするために、JavaScript アノテーションを含めることをお勧めします。

必須のJavaScript注釈またはコメントを含む矢印関数

矢印関数の構文を使用して、カスタム関数を作成できます。

    /**
    * test function
    * @name testFunction
    * @param {string} a parameter description
    * @param {string=} b parameter description
    * @return {string}
    */
    testFunction = (a, b) => {
    return a + b;
    };
    /** */
    testFunction1=(a) => (return a)
    /** */
    testFunction2 = a => a + 100;

ユーザーがカスタム関数にJavaScript注釈を追加しない場合、カスタム関数はアダプティブフォームのルールエディターに表示されません。

必須のJavaScript注釈またはコメントを含む関数式

アダプティブフォームのルールエディターにカスタム関数をリストするには、次の形式でカスタム関数を作成します。

    /**
    * test function
    * @name testFunction
    * @param {string} input1 parameter description
    * @param {string=} input2 parameter description
    * @return {string}
    */
    testFunction = function(input1,input2)
        {
            // code to be executed
        }

ユーザーがカスタム関数にJavaScript注釈を追加しない場合、カスタム関数はアダプティブフォームのルールエディターに表示されません。

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

アダプティブFormsへのカスタム機能の追加を開始する前に、お使いのマシンに次のソフトウェアがインストールされていることを確認してください。

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

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

カスタム関数の作成 create-custom-function

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

AEM プロジェクトアーキタイプを使用したクライアントライブラリの作成 create-client-library-archetype

AEM プロジェクトアーキタイプを使用して作成したプロジェクトにクライアントライブラリを追加することで、カスタム関数を追加できます。
既存のプロジェクトがある場合 、ローカルプロジェクトに カスタム関数を直接追加できます。

アーキタイププロジェクトを作成するか既存のプロジェクトを使用したら、クライアントライブラリを作成します。 クライアントライブラリを作成するには、次の手順を実行します。

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

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

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

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

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

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

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

    場所:[AEM 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 folder および categories プロパティには、任意の名前を付けることができます。
  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

  4. ビルド方法セクションで説明されている手順に従って、新しく作成したクライアントライブラリフォルダーをAEM環境にビルドします。

CRXDE を通じたカスタム関数の作成とデプロイ create-add-custom-function

最新のAEM FormsおよびForms アドオンを使用している場合は、CRXDE を通じてカスタム関数を作成し、カスタム関数の最新のアップデートを使用できます。 それには、次の手順を実行します。

  1. http://server:port/crx/de/index.jsp# にログインします。

  2. /apps フォルダーの下にフォルダーを作成します。例えば、experience-league という名前のフォルダーを作成します。

  3. 変更を保存します。

  4. 作成したフォルダーに移動し、タイプ cq:ClientLibraryFolder のノードを clientlibs として作成します。

  5. 新しく作成した clientlibs フォルダーに移動し、allowProxy プロパティと categories プロパティを追加します。

    カスタムライブラリノードのプロパティ

    note note
    NOTE
    customfunctionsdemo の代わりに任意の名前を指定できます。
  6. 変更を保存します。

  7. clientlibs フォルダーの下に js というフォルダーを作成します。

  8. js フォルダーの下に functions.js というJavaScript ファイルを作成します。

  9. clientlibs フォルダーの下に js.txt というファイルを作成します。

  10. 変更を保存します。
    作成したフォルダー構造は次のようになります。

    作成したクライアントライブラリフォルダー構造

  11. functions.js ファイルをダブルクリックして、エディターを開きます。ファイルは、カスタム関数のコードを含みます。
    JavaScript ファイルに次のコードを追加して、生年月日(YYYY-MM-DD)に基づいて年齢を計算しましょう。

    code language-javascript
        /**
             * Calculates Age
             * @name calculateAge
             * @return {string}
        */
    
        function calculateAge(dateOfBirthString) {
        var dob = new Date(dateOfBirthString);
        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;
        }
    
  12. function.js を保存します。

  13. js.txt に移動し、次のコードを追加します。

    code language-javascript
        #base=js
        functions.js
    
  14. js.txt ファイルを保存します。

次の カスタム関数フォルダーを参照できます。 このフォルダーをダウンロードしてAEM インスタンスにインストールします。

これで、クライアントライブラリを追加して、アダプティブフォームでカスタム関数を使用できるようになりました。

アダプティブフォームへのクライアントライブラリの追加 add-client-library

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

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

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

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

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

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

  5. 完了」をクリックします。

これで、ルールエディターでカスタム関数を使用するルールを作成できます。

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

次に、AEM Forms 6.5 で ルールエディターの呼び出しサービスを使用してカスタム関数を設定および使用する方法を説明しす。

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

アダプティブフォームでは、 ルールエディター内のカスタム関数を使用できます。
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 が呼び出され、年齢が返されます。

ルールエディターでの年齢のカスタム関数の計算

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

ルールエディターフォームプレビューでの Calculate Age カスタム関数

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

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

非同期カスタム関数がルールエディターリストに表示されない。 ただし、同期関数式を使用して作成されたカスタム関数内で、非同期関数を呼び出すことができます。

Sync および async カスタム関数

NOTE
カスタム関数で非同期関数を呼び出す利点は、非同期関数を使用すると、複数のタスクを同時に実行でき、カスタム関数内で各関数の結果を使用できる点です。

カスタム関数を使用して非同期関数を呼び出す方法については、以下のコードを参照してください。


    async function asyncFunction() {
    const response = await fetch('https://petstore.swagger.io/v2/store/inventory');
    const data = await response.json();
    return data;
    }

    /**
    * callAsyncFunction
    * @name callAsyncFunction callAsyncFunction
    */
    function callAsyncFunction() {
    asyncFunction()
        .then(responseData => {
        console.log('Response data:', responseData);
        })
        .catch(error => {
         console.error('Error:', error);
    });
}

上記の例では、asyncFunction 関数は asynchronous function です。 https://petstore.swagger.io/v2/store/inventory に対して GET リクエストを実行することで、非同期操作を実行します。 await を使用して応答を待ち、response.json() を使用して応答本文を JSON として解析し、データを返します。 callAsyncFunction 関数は、asyncFunction 関数を呼び出してコンソールに応答データを表示する同期カスタム関数です。 callAsyncFunction 関数は同期していますが、非同期の asyncFunction 関数を呼び出し、then 文と catch 文で結果を処理します。

動作を確認するには、ボタンを追加し、ボタンクリック時に非同期関数を呼び出すボタンのルールを作成します。

async 関数のルールを作成しています

ユーザーが「Fetch」ボタンをクリックすると、カスタム関数 callAsyncFunction が呼び出され、非同期関数 asyncFunction が呼び出されることを示すには、以下のコンソールウィンドウの図を参照してください。 コンソールウィンドウをInspectして、ボタンがクリックされたときの応答を確認します。

コンソールウィンドウ

カスタム関数の機能について説明します。

カスタム関数の様々な機能

カスタム関数を使用すると、パーソナライズされた機能をフォームに追加できます。 これらの関数は、特定フィールドの操作、グローバルフィールドの使用、キャッシュなど、様々な機能をサポートします。 この柔軟性により、組織の要件に応じてフォームをカスタマイズできます。

カスタム関数のフィールド オブジェクトとグローバル スコープ オブジェクト support-field-and-global-objects

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

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

カスタム関数でフィールドおよびグローバルオブジェクトを使用する方法を、様々な使用例を使用する Contact Us フォームを利用して説明します。

お問い合わせフォーム

ユースケース:SetProperty ルールを使用したパネルの表示

create-custom-function の節で説明したように、カスタム関数に次のコードを追加して、フォームフィールドを Required として設定します。


    /**
    * enablePanel
    * @name enablePanel
    * @param {object} field1
    * @param {object} field2
    * @param {scope} globals
    */

    function enablePanel(field1,field2, globals)
    {
       if(globals.functions.validate(field1).length === 0)
       {
       globals.functions.setProperty(field2, {visible: true});
       }
    }
NOTE
  • [form-path]/jcr:content/guideContainer.model.json にある使用可能なプロパティを使用して、フィールドのプロパティを設定できます。
  • Globals オブジェクトの setProperty メソッドを使用してフォームに加えられた変更は、本質的に非同期であり、カスタム関数の実行中には反映されません。

この例では、ボタンをクリックすると personaldetails パネルの検証が行われます。 パネルでエラーが検出されない場合は、ボタンをクリックすると、feedback のパネルが表示されます。

Next ボタンのルールを作成してみましょう。このルールは、personaldetails パネルを検証し、ユーザーが Next ボタンをクリックすると feedback パネルが表示されるようにします。

プロパティを設定

Next」ボタンをクリックしたときに personaldetails パネルが検証される場所を示すには、以下の図を参照してください。 personaldetails ージ内のすべてのフィールドが検証されると、feedback のパネルが表示されます。

プロパティを設定フォームのプレビュー

personaldetails パネルのフィールドにエラーがある場合、エラーは「Next」ボタンをクリックするとフィールドレベルに表示され、feedback パネルは非表示のままになります。

プロパティを設定フォームのプレビュー

ユースケース:フィールドを検証します。

create-custom-function の節で説明したように、カスタム関数に次のコードを追加して、フィールドを検証します。

    /**
    * validateField
    * @name validateField
    * @param {object} field
    * @param {scope} globals
    */
    function validateField(field,globals)
    {

        globals.functions.validate(field);

    }
NOTE
validate() 関数で引数が渡されない場合は、フォームが検証されます。

この例では、「contact」フィールドにカスタムの検証パターンが適用されます。 ユーザーは、10 で始まり、その後 8 桁が続く電話番号を入力する必要があります。 ユーザーが 10 で始まらない電話番号や、8 桁以下の電話番号を入力した場合、ボタンをクリックすると検証エラーメッセージが表示されます。

メールアドレスの検証パターン

次の手順では、ボタンクリック時に contact フィールドを検証する Next ボタンのルールを作成します。

検証パターン

次の図を参照して、ユーザーが 10 で始まらない電話番号を入力した場合、フィールドレベルにエラーメッセージが表示されることを示してください。

メールアドレスの検証パターン

ユーザーが有効な電話番号を入力し、personaldetails ントロールパネル内のすべてのフィールドが検証されると、feedback ントロールパネルが画面に表示されます。

メールアドレスの検証パターン

ユースケース:パネルのリセット

create-custom-function の節で説明したように、カスタム関数に次のコードを追加して、パネルをリセットします。

    /**
    * resetField
    * @name  resetField
    * @param {string} input1
    * @param {object} field
    * @param {scope} globals
    */
    function  resetField(field,globals)
    {

        globals.functions.reset(field);

    }
NOTE
reset() 関数で引数が渡されない場合は、フォームが検証されます。

この例では、「Clear」ボタンをクリックすると、personaldetails パネルがリセットされます。 次の手順では、ボタンクリック時にパネルをリセットする Clear ボタンのルールを作成します。

消去ボタン

ユーザーが「clear」ボタンをクリックすると、personaldetails パネルがリセットされることを示す次の図を参照してください。

リセットフォーム

ユースケース:フィールドレベルでカスタムメッセージを表示し、フィールドを無効としてマークする

markFieldAsInvalid() 関数を使用して、フィールドを無効として定義し、フィールドレベルでカスタムのエラーメッセージを設定できます。 fieldIdentifier の値は、fieldIdfield qualifiedNamefield dataRef のいずれかです。 option という名前のオブジェクトの値は、{useId: true}{useQualifiedName: true}{useDataRef: true} のいずれかです。
フィールドを無効としてマークし、カスタムメッセージを設定するために使用される構文は次のとおりです。

  • globals.functions.markFieldAsInvalid(field.$id,"[custom message]",{useId: true});
  • globals.functions.markFieldAsInvalid(field.$qualifiedName, "[custom message]", {useQualifiedName: true});
  • globals.functions.markFieldAsInvalid(field.$dataRef, "[custom message]", {useDataRef: true});

create-custom-function の節で説明したように、カスタム関数に次のコードを追加して、フィールドレベルでカスタムメッセージを有効にします。

    /**
    * customMessage
    * @name customMessage
    * @param {object} field
    * @param {scope} globals
    */
    function customMessage(field, globals) {
    const minLength = 15;
    const comments = field.$value.trim();
    if (comments.length < minLength) {
        globals.functions.markFieldAsInvalid(field.$id, "Comments must be at least 15 characters long.", { useId: true });
    }
}

この例では、ユーザーがコメント テキストボックスに 15 文字未満で入力すると、カスタムメッセージがフィールドレベルに表示されます。

次に、comments フィールドのルールを作成します。

フィールドを無効としてマーク

comments のフィールドに負のフィードバックを入力すると、フィールドレベルでのカスタムメッセージの表示がトリガーされることを示す、以下のデモを参照してください。

フィールドを無効なプレビューフォームとしてマーク

ユーザーがコメントテキストボックスに 15 文字を超える文字を入力すると、フィールドが検証され、フォームが送信されます。

フィールドを有効なプレビューフォームとしてマーク

ユースケース:変更されたデータのサーバーへの送信

次のコード行:
globals.functions.submitForm(globals.functions.exportData(), false); は、操作後にフォームデータを送信するために使用されます。

  • 最初の引数は、送信するデータです。
  • 2 番目の引数は、送信前にフォームを検証するかどうかを表します。 このプロパティは optional であり、デフォルトでは true として設定されます。
  • 3 番目の引数は送信 contentType です。デフォルト値を multipart/form-data にした場合もオプションとなります。 その他の値は、application/jsonapplication/x-www-form-urlencoded です。

create-custom-function の節で説明したように、カスタム関数に次のコードを追加して、操作されたデータをサーバーで送信します。

    /**
    * submitData
    * @name submitData
    * @param {object} field
    * @param {scope} globals
    */
    function submitData(globals)
    {

    var data = globals.functions.exportData();
    if(!data.comments) {
    data.comments = 'NA';
    }
    console.log('After update:{}',data);
    globals.functions.submitForm(data, false);
    }

この例では、ユーザーが comments テキストボックスを空のままにした場合、NA ータはフォームの送信時にサーバーに送信されます。

次に、データを送信する「Submit」ボタンのルールを作成します。

データの送信

ユーザーが comments テキストボックスを空のままにした場合、NA の値がサーバーで送信されることを示すには、以下の console window の図を参照してください。

コンソールウィンドウでのデータの送信

また、コンソールウィンドウを調べて、サーバーに送信されたデータを表示することもできます。

コンソール ウィンドウのInspect データ

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

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

キャッシュをサポートするカスタム関数

カスタム関数が変更されると、キャッシュが無効化され、解析されます。

トラブルシューティング troubleshooting

  • ユーザーは、 コアコンポーネントと仕様のバージョンが最新バージョンに設定されていることを確認する必要があります。 ただし、既存のAEM プロジェクトおよびフォームの場合は、さらに次の手順に従う必要があります。

    • AEM プロジェクトの場合、submitForm('custom:submitSuccess', 'custom:submitError') のすべてのインスタンスを submitForm() に置き換え、プロジェクトをデプロイする必要があります。

    • 既存のフォームで、カスタム送信ハンドラーが正しく機能しない場合は、ユーザーがルールエディターを使用して 送信 ボタンで submitForm ルールを開いて保存する必要があります。 この操作を実行すると、既存のルールが submitForm('custom:submitSuccess', 'custom:submitError') からフォーム内の submitForm() に置き換えられます。

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

    エラーログファイル

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

    適切なカスタム関数を持つエラーログファイル

考慮事項

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

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

    • ジェネレーター関数
    • 非同期/待機関数
    • メソッドの定義
    • クラスメソッド
    • デフォルトのパラメーター
    • REST パラメーター
recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2