編集可能なレイアウトを含むフォームでのオブジェクトの配置を制御する

Designer でフォームにオブジェクトを配置する方法は、次のいずれかの方法で制御できます。

コンテンツ領域
マスターページのコンテンツ領域を使用して、Designer のページ上でオブジェクトを配置する領域とフローの方向を制御します。マスターページごとにデフォルトのコンテンツ領域があります。

サブフォーム
サブフォームを使用して、Designer のフォームへのオブジェクト配置を制御します。オブジェクトをサブフォームに含めると、オブジェクトパレットの「サブフォーム」タブと「連結」タブのオプションを使用して、オブジェクトのレンダリング回数やページでの配置を制御できます。

編集可能なレイアウトのコンテンツ領域

マスターページごとにデフォルトのコンテンツ領域があり、それがすべての関連するページに表示されます。コンテンツ領域は、ページ上でオブジェクトを配置できる領域を囲むもので、テキスト文書の余白に似ています。ページのコンテンツ領域で示された領域の外側にオブジェクトを配置することはできません。

フォームごとに最低 1 つのコンテンツ領域が必要です。

コンテンツ領域は、マスターページでオブジェクトを配置する領域の輪郭を描いたり、その領域を制限したりするものではありません。ボイラープレートオブジェクトはコンテンツ領域の内外を問わず、マスターページ上の任意の場所に配置できます。ヘッダーやフッターのテキスト、日付と時間、ページ番号などを入れるためにコンテンツ領域の外側にオブジェクトを配置する場合は、フォームをテストして、オブジェクトが意図したとおりに表示されることを確認する必要があります。また、フォームのレンダリング時に、マスターページ上のオブジェクトにページ上のオブジェクトが重なって隠れていないことを確認する必要があります。

データ量に応じて調整されるセクションを持つフォームでは、フォームの最終的なレイアウトがデータ量によって決まることに注意してください。フォームが Forms または Output でレンダリングされる場合は、使用可能なすべてのデータがマージされるまでページが追加されます。新しいページが追加されると、各ページにわたりマスターページのコンテンツ領域によって指定された領域内で、データがフローされます。

フォームの各ページを同じレイアウトにする場合は、デフォルトのコンテンツ領域で十分です。ただし、複雑なレイアウトの場合は、デフォルトのマスターページにコンテンツ領域を追加できます。フローの方向やページの向きを変えたり、両面ページにしたい場合は、追加のマスターページを挿入してこのマスターページとコンテンツ領域をデザインに合わせて設定できます。

ページ上でコンテンツ領域は使用できません。

編集可能なレイアウトのサブフォーム

サブフォームを計画することは、編集可能なレイアウトを含むフォームの作成に欠かせない工程です。フローセクションを含むフォームでは、フォームのセクションごとにオブジェクトをサブフォームに含めます。サブフォームは、フォームのレイアウトを保ちながら、マージされるデータの量に応じて長さが調整されます。サブフォームにより、オブジェクト群が一体として移動し、オブジェクト間の配置も保たれます。オブジェクトをサブフォームに含めると、フォームにマージされるデータの量に関わりなく各セクションの形式が保持され、フォーム全体のレイアウトもレンダリングごとに変わりません。

サブフォームは任意の深さまで階層化できます。サブフォームを階層化することで、マージされる XML データファイルにフォームデザインを一致させることができます。例えば、XML データファイルに 2 つのレベルがある場合、サブフォーム名を XML データファイル内のタグ名に一致させてサブフォーム階層を作成し、データファイルを変換せずに Designer でデータをマップできます。

発注書サンプルなど、編集可能なレイアウトが含まれるフォームには通常、階層化された様々なサブフォームが含まれており、それぞれのサブフォームに 1 つ以上のオブジェクトが入っています。例えば発注書サンプルでは、様々なオブジェクトが header detailHeader detail total というサブフォームにどのように含まれているかがわかります。テキストオブジェクトおよびテキストフィールドオブジェクトを行や列に整列し、サブフォームに含めることができます。サブフォームを使用して、様々なテキストフィールドオブジェクトなどのオブジェクトのグループを detail サブフォームに含めると、オブジェクトのレイアウトを維持できるだけでなく、サブフォームの繰り返し回数も制御できます。

それぞれのサブフォームを設定して、フォームのレンダリング時にデータコンテンツの表示に必要なオブジェクトの入ったサブフォームだけを配置できます。例えば、顧客ごとに異なる発注書を作成する場合があります。1 つの発注書フォームでは、購入品目を示すために detail サブフォームを 12 回繰り返して配置します。別の発注書フォームでは、複数のページにまたがって同じサブフォームを 50 回繰り返して配置します。

発注書フォームのサンプルを見ると、このような設定を実現するためにサブフォームをどのように使用すればよいかがわかります。Designer でフォームを開いて、階層パレットでサブフォームの構造を確認できます。オブジェクトパレットでサブフォームの設定方法を確認できます。特に purchaseOrder、detailHeader、detail の各サブフォームとその設定方法に注目してください。親サブフォームである purchaseOrder がフォームのコンテンツのフローを制御し、使用可能なデータに合わせて拡大します。detailHeader サブフォームには最小値 1 が設定されていますが、これはフォームのレンダリング時にこのサブフォームが 1 回だけ表示されることを意味しています。一方、detail サブフォームはデータアイテムごとに繰り返すように設定されているので、フォームのレンダリング時にはデータのオカレンスと同じ回数だけ表示されます。

サブフォームを使用してサブフォームのグループの周囲に境界線を描くこともできます。例えば、1 つまたは複数のダイナミックサブフォームを作成し、サブフォーム内に階層化してから、このダイナミックサブフォームを含んだサブフォームの境界線を指定できます。フォームがレンダリングされると、すべての内部サブフォームを囲む境界線が描かれます。