サービスを受けるために、顧客が複数のフォームを送信しなければならないことがあります。それに伴い関連するフォームを集め、入力、送信し、それらを個別にトラッキングしなければなりません。また、複数のフォームで同じ内容を何度も入力しなければなりません。フォームの数が多いとこのプロセスは面倒になり、また間違いも起こりやすくなります。AEM Forms のフォームセット機能により、このような場合のユーザー体験をシンプルにすることができます。
フォームセットは HTML5 フォームの集まりであり、エンドユーザーには 1 つのフォームのセットとして提供されます。エンドユーザーがフォームセットへの入力を始めると、フォームセットはシームレスにその内容を別のフォームにも写します。最終的に、お客様はワンクリックですべてのフォームを送信することができます。
AEM Forms では、フォームの作成、設定、フォームセットの管理を直感的なインターフェイスで行うことができます。フォーム作成者は、エンドユーザーが順を追って入力するように、フォームの順番を並べることができます。またそれぞれのフォームに条件や適格性の式を設定することで、ユーザーの入力に基づいて表示ををコントロールすることができます。例えば、婚姻区分で既婚が選ばれた場合のみ、配偶者についてのフォームを表示するように設定することができます。
さらに、異なるフォーム間で共通するフィールドは、共通データバインディングを共有するよう設定することができます。適切な箇所でデータバインディングを使うと、エンドユーザーが他のフォームと共通する情報を一度入力するだけで、次のフォームではオートフィル入力が行われるようになります。
フォームセットは AEM Forms のアプリでもサポートされており、現場で働く従業員はフォームセットをオフラインにして、顧客を訪問、データを入力し、後で AEM Forms のサーバーとシンクロさせてデータを送信し、ビジネスを進めることができます。
複数の XDP ファイルや Designer を使用して作成したフォームテンプレートを一つのフォームセットに関連付けることができます。それから、フォームセットを使用して、ユーザーが最初にフォームに入力した値やプロフィールを基に、必要な情報のみを含む XDP ファイルを生成できます。
AEM Forms ユーザーインターフェイスを使用して、すべてのフォームやフォームセット、および関連アセットを一元的に管理できます。
フォームセットを作成するには、次の手順を実行します。
フォーム/フォームとドキュメントを選択します。
作成/フォームセットを選択します。
プロパティの追加ページで、次の詳細を追加して「次へ」をクリックします。
フォームを選択画面には使用可能な XDP フォームまたは XDP ファイルが表示されます。フォームセットに追加するフォームを検索して選択し、「フォームセットに追加」をクリックします。必要に応じて、追加するフォームを再度検索します。フォームセットに全てのフォームを追加し、「次へ」をクリックします。
XDP フォーム内のフィールド名にはドット(.)文字を含めないでください。ドット文字が含まれていた場合、スクリプトがそのフィールドを解決できなくなります。
フォームを設定のページで、次の操作を実行できます。
fs.valueOf(<Form Identifier>, <fieldSom expression>) > <value>
例えば、フォームセットに「仕事の経費」と「旅費」という 2 つのフォームがある場合、これらの両方のフォームの Eligibility expression フィールドに Javascript スニペットを追加して、フォームで出費のタイプにユーザーが入力した内容を確認できます。ユーザーが仕事の経費を選択した場合、仕事の経費フォームがエンドユーザーに表示されます。逆に、ユーザーが旅費を選択した場合、エンドユーザーには別のフォームが表示されます。詳しくは、「適格性式」を参照してください。
これ以外にも、各行の右隅にある削除アイコンを使用してフォームセットからフォームを削除するか、ツールバーにある + アイコンを使用して別のフォームセットを追加することこともできます。この + アイコンを押すと、フォームを選択するために使用したウィザードの前の手順に戻ります。既存の選択内容は保持され、追加の選択内容については、そのページにある「フォームセットに追加」アイコンを使用してフォームセットに追加する必要があります。
フォームセットで使用するすべてのフォームは AEM Forms ユーザーインターフェイスで管理されます。
フォームセットを作成すると、作成したフォームセットでは以下の操作を実行できます。
フォームセットを編集するには、次の手順を実行します。
フォーム/フォームとドキュメントを選択します。
編集するフォームセットを見つけます。その上にカーソルを置いて、「編集」()を選択してください。
フォームを設定ページで、以下の内容を編集できます。
また「削除」アイコンを押すことで、そのフォームをフォームセットから削除することができます。
一度 AEM Forms Management ユーザーインターフェイスを使用してフォームセットを作成すると、Workbench を使用してそのフォームセットを「始点」または「タスクの割り当て」アクティビティで使用できます。
処理を設計する際、タスクの割り当て / 始点の Presentation & Data セクションの下で、「CRX アセットを使用」を選択します。CRX アセットブラウザーが表示されます。
フォームセットを選択して、AEM リポジトリ(CRX)のフォームセットをフィルタリングします。
フォームセットを選択してから「OK」をクリックしてください。
フォームセットにおける適格性の式は、ユーザーに表示されるフォームを定義し動的に制御するために使用されます。例えば、ユーザーが特定の年齢のグループに属している場合にのみ特定のフォームを表示する場合などに使用できます。Forms manager を使用して、適格性の式を指定または編集します。
適格性の式には、ブール値を返す任意の有効な Javascript ステートメントを使用できます。JavaScript コード スニペットの最後のステートメントは boolean 値として扱われ、他の部分(それまでの行)で処理中のJavaScript コード スニペットを基にフォームの適格性を決定します。式の値が true の場合、そのフォームはユーザーへの表示に適切であると見なされます。このようなフォームは有効な対象フォームとして知られています。
フォームセットの最初のフォームの適格性の式は実行されません。適格性の式によらず、最初のフォームは常に表示されます。
通常の JavaScript 関数に加えて、フォームセットでは fs.valueOf API も公開しているため、フォームセット内のフォームのフィールドの値にアクセスできます。フォームセットの中のフォームフィールドの値にアクセスするには、この API を使用します。API 構文は fs.valueOf(formUid、fieldSOM)で、ここでは、
FormUid と fieldSOM の両方のパラメーターは文字列リテラルである必要があります。
API の正しい使用法:
fs.valueOf("form1", "xfa.form.form1.subform1.field1")
API の正しくない使用法:
var formUid = "form1";
var fieldSOM = "xfa.form.form1.subform1.field1"; fs.valueOf(formUid, fieldSOM);
フォームセットは、共通または異なるスキーマを持つ複数の HTML5 フォームのまとまりです。XML ファイルを使用して、フォームフィールドへの事前入力を行うこともできます。XML ファイルをフォームセットに関連付けることで、フォームセットの中のフォームを開いたときに、いくつかのフィールドは事前入力されます。
事前入力XML ファイルは、フォームセットの URL の、dataRef パラメータを使用して指定します。dataRef パラメーターは、フォームセットと結合される XML データファイルの絶対パスを指定します。
例えば、次の構造を持つフォームセット内に 3 つのフォーム(form1、form2、form3)があるとします。
form1
field form1field
form2
field form2field
form3
field form3field
各フォームには「field」という共通の名前が付いたフィールドと、「form<i>Field」という一意の名前を持ったフィールドがあります。
次の構造を持った XML を使用してこのフォームセットに事前入力できます。
<?xml version="1.0" encoding="UTF-8" ?>
<formSetRootTag>
<field>common field value</field>
<form1field>value1</form1field>
<form2field>value2</form2field>
<form3field>value3</form3field>
</formSetRootTag>
XML のルートタグにはどんな名前も指定できますが、フィールドに対応する要素タグにはフィールドと同じ名前を指定しなければなりません。XML の階層とフォームの階層は同じでなければなりません。つまり、XML にはサブフォームをラップするための対応するタグがなければなりません。
上記の XML のスニペットでは、フォームセットの事前入力 XML が、個々のフォームの事前入力 XML のスニペットのまとまりであることがわかります。異なるフォームの特定のフィールドがお互いに類似したデータ階層 / スキーマを持つ場合、それらのフィールドは同じ値が事前入力されます。この例では、3 つのすべてのフォームにおいて、共通のフィールド「field」に同じ値が事前入力されています。あるフォームから次のフォームにデータを繰り越すシンプルな方法です。フィールドを同じスキーマまたはデータ参照に結合してもデータを繰り越すことができます。フォームセットのデータをフォームのスキーマに基づいて分離することもできます。これを行うには、フォームセット作成中にフォームの「データルート」属性を指定します。デフォルトでは、この値は「/」で、フォームセットのルートタグにマッピングされます。
前の例において、3 つのフォームに対するデータルートをそれぞれ「/form1」、「/form2」、「/form3」と指定する場合、以下の構造の事前入力 XML を使用する必要があります。
<?xml version="1.0" encoding="UTF-8" ?>
<formSetRootTag>
<form1>
<field>field value1</field>
<form1field>value1</form1field>
</form1>
<form2>
<field>field value2</field>
<form2field>value2</form2field>
</form2>
<form3>
<field>field value3</field>
<form3field>value3</form3field>
</form3>
</formSetRootTag>
フォームセットにおいて、XML スキーマは以下の構文で定義されます。
<formset>
<fs_data>
<xdp:xdp xmlns:xdp="https://ns.adobe.com/xdp/">
<xfa:datasets xmlns:xfa="https://www.xfa.org/schema/xfa-data/1.0/">
<xfa:data>
<rootElement>
... data ....
</rootElement>
</xfa:data>
</xfa:datasets>
</xdp:xdp>
</fs_data>
<fs_draft>
... private data...
</fs_draft>
</formset>
重複するデータルートを持つ 2 つのフォームがある場合、または、あるフォームの要素の階層が別のフォームのデータルートの階層と重複する場合、重複した要素の値は事前入力 XML で結合されます。送信 XML は事前入力 XML と同様の構造を持っていますが、送信 XML にはより多くの wrapper タグとフォームセットのコンテキストデータタグが終了部分に追加されています。
事前入力 XML ファイルを作成する際の構文ルール
parent elements:
null
cardinality: [0,1]
submitXML: P
prefillXML: O
children: fs_data
フォームセット XML のルート要素。フォームセット内のフォームの rootSubform の名前として使用しないようお勧めします。
parent elements:
formset
基数:[1]
submitXML:P
prefillXML:O
children: xdp:xdp/rootElement
サブツリーはフォームセット内のフォームのデータを示します。フォームセットの要素がない場合に限り、要素は事前入力 XML においてオプションです。
parent elements: fs_data/null
cardinality: [0,1]
submitXML: O
prefillXML: O
children: xfa:datasets
このタグは HTML5 フォームの XML の開始を示します。事前入力 XML にこのタグがある場合、または事前入力 XML がない場合、このタグが送信 XML に追加されます。このタグは事前入力 XML から削除できます。
parent elements: xdp:xdp
cardinality: [1]
submitXML: O
prefillXML: O
children: xfa:data
parent elements: xfa:datasets
cardinality: [1]
submitXML: O
prefillXML: O
children: rootElement
parent elements: xfa:datasets/fs_data/null
cardinality: [0,1]
submitXML: P
prefillXML: O
children: controlled by the Forms in Form set
「rootElement」という名前はプレースホルダーでしかありません。実際の名前はフォームセットで使用されているフォームから選択されます。「rootElement」で始まるサブツリーは、フォームセットのフォーム内にフィールドのデータとサブフォームを含んでいます。RootElement の構造とその子を決定する複数の要素があります。
事前入力 XML ではこのタグはオプションです。ただし、このタグがない場合、XML 全体が無視されます。
ルート要素タグの名前
事前入力 XML にルート要素がある場合、その要素名は送信 XML でも引き継がれます。事前入力 XML がない場合、「/」に設定された dataRoot プロパティを持っているフォームセット内の最初のフォームのルートサブフォーム名が rootElement の名前になります。そのようなフォームがない場合は、予約されたキーワードである fs_dummy_root が rootElement 名になります。
AEM Forms アプリを使用すると、フィールドワーカーはモバイルデバイスを AEM Forms サーバーと同期し、タスクを実行できます。アプリケーションはデバイスのローカルにデータを保存することで、デバイスがオフラインの場合でも動作します。フィールドワーカーは、写真などの注釈機能を使用して、ビジネスプロセスに統合する正確な情報を提供します。
フォームセットでは、以下のデータパターンは完全にはサポートされていません。
フォームセットで完全にはサポートされていないパターン | 例 |
入力サイズやパターンサイズの不一致 | When pattern= num{z,zzz} And input= 12,345 または 1,23 |
括弧「( )」のついたパターン形式文字列 | num{(zz,zzz)} |
複数のデータパターン | num{zz,zzz} | num{z,zzz,zzz} |
略記法パターン | num.integer{}, num.decimal{}, num.percent{} または num.currency{} |