自動フォーム変換サービスにより、ソースフォーム内でフォームオブジェクトを特定して抽出することができます。自動フォーム変換サービスでセマンティックマッパーを使用すると、抽出したオブジェクトがアダプティブフォーム内でどのように表示されるのかを確認することができます。例えば、ソースフォームには、表示形式の異なる様々な日付オブジェクトが含まれている場合があります。こうした場合にセマンティックマッパーを使用すると、ソースフォーム内の日付オブジェクトのすべての表示形式を、アダプティブフォームの日付コンポーネントにマップすることができます。また、変換処理の実行中にセマンティックマッパーを使用して、検証設定、ルール、データパターン、ヘルプテキスト、アクセシビリティのプロパティをアダプティブフォームコンポーネントに対して事前に設定して適用することもできます。
メタモデルとは、JSON スキーマのことです。メタモデルを使用するには、JSON について理解する必要があります。具体的には、JSON 形式で保存されたデータの作成、編集、読み取りに関する知識と経験が必要になります。
自動フォーム変換サービスには、デフォルトのメタモデルが付属しています。このメタモデルは JSON スキーマで、自動フォーム変換サービスの他のコンポーネントとともに、Adobe Cloud 上に存在しています。メタモデルのコピーは、ローカル AEM サーバー上の以下のフォルダーに保管されています。http://<server>:<port>/aem/forms.html/content/dam/formsanddocuments/metamodel/global.schema.json
英語のスキーマにアクセスする、またはダウンロードするには、ここをクリックします。フランス語、ドイツ語、スペイン語、イタリア語、ポルトガル語のメタモデルもダウンロードできます。
メタモデルのスキーマは、https://schema.org/docs/schemas.html のスキーマエンティティから継承されます。このスキーマエンティティには、https://schema.org で定義された各種エンティティ(Person、PostalAddress、LocalBusiness など)が含まれています。メタモデルのすべてのエンティティは、JSON スキーマオブジェクトに従属します。以下のコードは、サンプルのメタモデル構造を示しています。
"Entity": {
"id": "Entity",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string",
"description": "Description of the item"
}
}
}
デフォルトのメタモデルをローカルファイルシステムにダウンロードするには、以下の手順を実行します。
メタモデルとは、各種エンティティが保管された JSON スキーマファイルのことです。JSON スキーマファイル内のすべてのエンティティに、名前と ID が設定されています。各エンティティに複数のプロパティを設定することができます。エンティティとそのプロパティは、ドメインによって異なる場合があります。キーワードとフィールド設定を使用してスキーマファイルを拡張することにより、スキーマのプロパティをアダプティブフォームのコンポーネントにマップすることができます。
"Event": {
"id": "Eventid",
"allOf": [
{
"$ref": "#Entity"
},
{
"properties": {
"startDate": {
"type": "string",
"format": "date",
"description": "Specify the start date and time of the event in ISO 8601 date format."
},
"endDate": {
"type": "string",
"format": "date",
"description": "Specify the end date and time of the event in ISO 8601 date format."
},
"location": {
"$ref": "#PostalAddress",
"description": "Specify the location of the event."
}
}
}
]
}
このサンプルコードでは、Event がエンティティ名を表し、id の値が Eventid に設定されています。Event エンティティには、以下に示す複数のプロパティが含まれています。
メタモデル内の allOf コンストラクターにより、エンティティ間での継承が可能になります。
各プロパティには、さらに以下のものを含めることができます。
変換サービスは、aem:affKeyword を使用して参照されるキーワードに基づいて、ソースフォームフィールドに対して検索操作を実行します。変換サービスにより、JSON スキーマのプロパティと追加のプロパティが、検索条件に一致するフィールドに適用されます。
上記のサンプルコードでは、変換サービスを使用して、ソースフォーム内のキーワード(phone、telephone、mobile phone、work phone、home phone、telephone number、telephone no、phone number)を検索しています。変換サービスは、これらのキーワードが含まれているフィールドに基づき、変換処理の完了後に、各種プロパティ(type、pattern、aem:afProperties)をアダプティブフォームのフィールドに適用します。
メタモデルでは、自動フォーム変換サービスによって生成されたアダプティブフォームフィールドに対して、以下の JSON スキーマ共通プロパティを使用することができます。
プロパティ名 | 説明 |
---|---|
title |
メタモデルの title プロパティ内で指定されたテキストは、生成後のアダプティブフォームフィールドで操作を実行するためのキーワードとして機能します。例えば、アダプティブフォームフィールドのラベルを変更する場合などに、その変更操作のキーワードとして機能します。詳しくは、「カスタムメタモデルの例」の「フォームフィールドのラベルを変更する」セクションを参照してください。 |
description |
description プロパティにより、生成後のアダプティブフォームフィールドのヘルプテキストが設定されます。詳しくは、「カスタムメタモデルの例」の「フォームフィールドにヘルプテキストを追加する」セクションを参照してください。 |
type |
type プロパティにより、生成後のアダプティブフォームフィールドのデータタイプが定義されます。type プロパティで指定できる値は以下のとおりです。
メタモデルで type プロパティを使用する方法については、「カスタムメタモデルの例」の「フォームフィールドのタイプを変更する」セクションを参照してください。 |
pattern |
pattern プロパティでは、正規表現に基づいて、生成後のアダプティブフォームフィールドの値が制限されます。例えば、メタモデル内で「 |
format |
format プロパティでは、正規表現ではなく指定されたパターンに基づいて、生成後のアダプティブフォームフィールドの値が制限されます。format プロパティで指定できる値は以下のとおりです。
|
enum と enumNames |
enum プロパティと enumNames プロパティでは、ドロップダウンフィールド、チェックボックスフィールド、ラジオボタンフィールドの値が、事前に設定した値に制限されます。enumNames プロパティで指定した値は、ユーザーインターフェイスに表示されます。enum プロパティで指定した値は、計算処理で使用されます。 |
自動フォーム変換サービスは、変換処理の実行時に、ソースフォームに対してキーワード検索を実行します。変換サービスは、検索条件に一致するフィールドをフィルタリングしてから、メタモデル内のそれらのフィールドに対して定義されているプロパティを、生成後のアダプティブフォームフィールドに適用します。
キーワードは、aem:affKeyword プロパティを使用して参照されます。
{
"numberfields": {
"type": "number",
"aem:affKeyword": ["Bank account number"]
}
}
この例では、aem:affKeyword プロパティ内のテキストが、変換サービスの検索キーワードとして使用されます。検索サービスは、フォーム内の「Bank account number」テキストフィールドを取得し、type プロパティを使用して、このテキストフィールドを数値タイプに変換します。
メタモデル内の aem:afProperties プロパティを使用して、自動フォーム変換サービスによって生成されたアダプティブフォームフィールドに対して、以下の追加のプロパティを定義することができます。
プロパティ名 | 説明 |
---|---|
multiLine |
multiLine プロパティにより、変換処理の完了後に、ソースフォームフィールドがアダプティブフォーム内の複数行フィールドに変換されます。詳しくは、「カスタムメタモデルの例」の「文字列フィールドを複数行フィールドに変換する」セクションを参照してください。 |
mandatory |
mandatory プロパティにより、変換処理の完了後に、アダプティブフォームフィールドの入力が必須入力として設定されます。 |
jcr:title |
jcr:title プロパティを JSON スキーマの title プロパティとともに指定すると、変換処理の完了後に、アダプティブフォームフィールドのラベルを変更することができます。 |
sling:resourceType と guideNodeClass |
sling:resourceType プロパティと guideNodeClass プロパティを使用して、対応するアダプティブフォームコンポーネントにフォームフィールドをマップすることができます。 |
validatePictureClause |
validatePictureClause プロパティにより、変換処理の完了後に、アダプティブフォームフィールドで許可されている形式に対する検証処理が設定されます。 |
言語固有のメタモデルを作成できます。このようなメタモデルを使用すると、選択した言語でマッピングルールを作成するのに役立ちます。自動 Forms コンバージョンサービスを使用すると、次の言語のメタモデルを作成できます。
メタモデルの上部に aem:Language メタタグを追加して、その言語を指定します。例:
"metaTags": {
"aem:Language": "fr"
}
言語が指定されていない場合、サービスはメタモデルを英語と見なします。
すべてのキーの名前が英語であることを確認します。例えば、emailAddress と指定します。
すべての id キーのエンティティ参照と事前定義値が ASCII 文字のみで構成されていることを確認します。例:"id": "ContactPoint" / "$ref": "#ContactPoint"。
次のキーに対応するすべての値が、指定したメタモデル言語になっていることを確認します。
例えば、メタモデルの言語がフランス語("aem:Language": "fr")の場合、すべての説明とメッセージがフランス語で記述されていることを確認します。
すべてのJSON スキーマのプロパティで、サポートされている値のみを使用するようにします。例えば、type プロパティは、文字列、数値、整数およびブール値の選択された値にのみ適用されます。
次の画像は、英語のメタモデルと、対応するフランス語のメタモデルの例を示しています。
デフォルトのメタモデルで登録されているパターンと検証機能のほかに、組織内でパターンと検証機能を設定することができます。デフォルトのメタモデルを拡張することにより組織固有のパターン、検証機能、エンティティを追加することができます。自動フォーム変換サービスにより、変換処理の実行時に、カスタムメタモデルがフォームフィールドに適用されます。組織固有の新しいパターン、検証機能、エンティティが検出されるたびに、メタモデルを継続的に更新することができます。
自動フォーム変換サービスは、変換処理の実行時に、以下の場所に保存されているデフォルトのメタモデルを使用して、ソースフォームフィールドをアダプティブフォームフィールドにマップします。
http://<server>:<port>/aem/forms.html/content/dam/formsanddocuments/metamodel/global.schema.json
ただし、カスタムメタモデルを特定のフォルダーに保存して変換サービスのプロパティを変更することにより、変換処理の実行時にカスタムメタモデルを使用することができます。
変換処理の実行時にカスタムメタモデルを使用するには、以下の手順を実行します。
フォーム/フォームとドキュメントでフォルダーを作成し、このフォルダーにカスタムメタモデルの JSON スキーマファイルをアップロードします。
以下のオプションを使用して、変換サービスを起動します。
ツール/クラウドサービス/自動フォーム変換の設定/<選択した設定のプロパティ>
「基本」タブの「カスタムメタモデル」フィールドでカスタムメタモデルの場所を指定し、「保存して閉じる」をタップします。
変換処理を実行し、カスタムメタモデルを変換処理に適用します。
ここでは、カスタムメタモデルを使用してアダプティブフォームフィールドを変更する場合の一般的な例について説明します。以下のようなケースが考えられます。
例:変換処理の完了後に、アダプティブフォーム内の「Bank account number」というラベルを「Customer account number」に変更する
このカスタムメタモデルの場合、変換サービスは title プロパティを検索キーワードとして使用します。検索サービスは、フォーム内の「Bank account number」というテキストを取得し、aem:afProperties セクションの jcr:title プロパティで指定された「Customer account number」というテキストに置き換えます。
{
"numberfields": {
"type": "number",
"title": "Bank account number",
"aem:afProperties" : {
"jcr:title" : "Customer account number"
}
}
}
例:変換処理の完了後に、アダプティブフォーム内の「Bank account number」というテキストタイプフィールドを変更してから数値タイプフィールドに変換する
このカスタムメタモデルでは、aem:affKeyword プロパティ内のテキストが、変換サービスの検索キーワードとして使用されます。検索サービスは、フォーム内の「Bank account number」テキストフィールドを取得し、type プロパティを使用して、このテキストフィールドを数値タイプに変換します。
{
"numberfields": {
"type": "number",
"aem:affKeyword": ["Bank account number"]
}
}
例:アダプティブフォーム内の「Bank account number」フィールドにヘルプテキストを追加する
このカスタムメタモデルでは、aem:affKeyword プロパティ内のテキストが、変換サービスの検索キーワードとして使用されます。変換サービスは、フォーム内の「Bank account number」テキストフィールドを取得し、description プロパティを使用して、このテキストフィールドにヘルプテキストを追加します。
{
"numberfields": {
"type": "number",
"aem:affKeyword": ["Bank account number"],
"description": "Specify your bank account number."
}
}
例:変換処理の完了後に、アダプティブフォーム内の「Country」文字列タイプフィールドをチェックボックスに変換する
このカスタムメタモデルでは、aem:affKeyword プロパティ内のテキストが、変換サービスの検索キーワードとして使用されます。変換サービスは、変換処理の完了後、フォーム内の「Country」テキストフィールドを取得し、enum プロパティを使用して、このテキストフィールドを以下のチェックボックスに変換します。
sling:resourceType プロパティと guideNodeClass プロパティにより、フォームフィールドがアダプティブフォームのチェックボックスコンポーネントにマップされます。
{
"title": {
"aem:affKeyword": [
"country"
],
"type" : "string",
"enum": [
"India",
"England",
"Australia",
"New Zealand"
],
"aem:afProperties": {
"sling:resourceType": "fd/af/components/guidecheckbox",
"guideNodeClass": "guidecheckbox"
}
}
}
例:「Email Address」フィールドの形式をメール形式に変換する
このカスタムメタモデルでは、aem:affKeyword プロパティ内のテキストが、変換サービスの検索キーワードとして使用されます。変換サービスは、フォーム内の「Email Address」テキストフィールドを取得し、format プロパティを使用して、このテキストフィールドをメール形式に変換します。
{
"additionalDetails" : {
"aem:affKeyword": ["E-mail Address"],
"type" : "string",
"format" : "email"
}
}
例 1:アダプティブフォームの「Postal Code」フィールドに検証機能を追加する
このカスタムメタモデルでは、aem:affKeyword プロパティ内のテキストが、変換サービスの検索キーワードとして使用されます。変換サービスは、フォーム内の「Postal Code」テキストフィールドを取得し、aem:afProperties セクションで定義された validatePictureClause プロパティを使用して、このテキストフィールドに検証機能を追加します。追加された検証機能に従い、変換後のアダプティブフォーム内の「Postal Code」フィールドに値を指定する場合は、6 文字の値を指定する必要があります。
{
"postalCode" : {
"aem:affKeyword": ["Postal Code"],
"type" : "string",
"aem:afProperties" : {
"validatePictureClause" : "\\d{6}"
}
}
}
例 2:アダプティブフォームの「Bank account number」フィールドに検証機能を追加する
このカスタムメタモデルでは、aem:affKeyword プロパティ内のテキストが、変換サービスの検索キーワードとして使用されます。変換サービスは、フォーム内の「Bank account number」テキストフィールドを取得し、aem:afProperties セクションで定義された mandatory プロパティを使用して、このテキストフィールドに検証機能を追加します。追加された検証機能に従い、変換後のフォームを送信する前に、「Bank account number」フィールドに値を指定する必要があります。
{
"numberfields": {
"type": "number",
"aem:affKeyword": ["Bank account number"],
"aem:afProperties" : {
"mandatory": "true"
}
}
}
例:変換処理の完了後に、アダプティブフォーム内の「Country」文字列タイプフィールドをドロップダウンオプションに変換する
このカスタムメタモデルでは、aem:affKeyword プロパティ内のテキストが、変換サービスの検索キーワードとして使用されます。変換サービスは、フォーム内の「Country」テキストフィールドを取得し、enum プロパティを使用して、このテキストフィールドを以下のドロップダウンリストに変換します。
sling:resourceType プロパティと guideNodeClass プロパティにより、フォームフィールドがアダプティブフォームのドロップダウンコンポーネントにマップされます。
{
"title": {
"aem:affKeyword": [
"country"
],
"type" : "string",
"enum": [
"India",
"England",
"Australia",
"New Zealand"
],
"aem:afProperties": {
"sling:resourceType": "fd/af/components/guidedropdownlist",
"guideNodeClass": "guideDropDownlist"
}
}
}
例:カスタムメタモデルを使用して、追加のオプションとして「Sri Lanka」を既存のドロップダウンリストに追加する
オプションをさらに追加するには、そのオプションを使用して enum プロパティを更新します。以下のサンプルコードでは、Sri Lanka を追加のオプションとして使用して enum プロパティを更新しています。enum プロパティに登録された値は、ドロップダウンリスト内の項目として表示されます。
{
"title": {
"aem:affKeyword": [
"country"
],
"type" : "string",
"enum": [
"India",
"England",
"Australia",
"New Zealand",
"Sri Lanka"
],
"aem:afProperties": {
"sling:resourceType": "fd/af/components/guidecheckbox",
"guideNodeClass": "guidecheckbox"
}
}
}
例:変換処理の完了後に、「Address」文字列タイプフィールドをフォーム内の複数行フィールドに変換する
このカスタムメタモデルでは、aem:affKeyword プロパティ内のテキストが、変換サービスの検索キーワードとして使用されます。変換サービスは、フォーム内の「Address」テキストフィールドを取得し、aem:afProperties セクションで定義された multiLine プロパティを使用して、このテキストフィールドを複数行フィールドに変換します。
{
"multiLine" : {
"aem:affKeyword": [
"Address"
],
"type" : "string",
"aem:afProperties": {
"multiLine": "true"
}
}
}