Adobe LiveCycle Designer を使用した XSD スキーマの繰り返しサブフォーム要素へのバインド

前提条件となる知識

LiveCycle Designer の実用的な知識。XSD スキーマ開発の原則。

ユーザーレベル

中級

その他の必要な製品(サードパーティ/ラボ/オープンソース)

  • 任意の XML/XSD エディタープログラム

    または

  • テキストエディタープログラム(Notepad++ など)

はじめに

この記事で解決しようとする問題は、LiveCycle Designer ES を使用してダイナミックフォームフィールドを XML スキーマドキュメント(XSD)要素にバインドする方法です。 

電子フォームとの動的なやり取りは、LiveCycle の最も魅力的な機能のひとつです。フォームのサイズを特定のトランザクションで必要なドキュメントに合わせることで、印刷コストを削減でき(フォームを印刷する必要がある場合)、トランザクションの完了に必要な量の情報のみを提示することで、フォームがユーザーにとって読みやすく、理解しやすいものになります。フォームオブジェクト(ボタンなど)は、必要な数のデータ入力フィールドをフォームに追加したり削除したりするのに使用できます。  

フォームのオブジェクトによって取得されたデータは、フォーム内に XML データとして格納されます。この XML データをバックエンドサービスにフィードするには、XML が構造化されている必要があります。デフォルトでは、フォームに出力された XML データは、フォームオブジェクト自体のレイアウトおよびそのフォーム上の位置との関係を模倣した XML Path(XPath)構造に従います。この方法の XPath の命名は、多くの場合、バックエンド開発者にとっては不便なので、フォームから出力される XML をバックエンド開発者にとって論理的な方法で構造化するために、XSD ドキュメントが使用されます。 

XSD ドキュメントは、基本的に、XML マークアップ言語で記述されたスキーマまたはルールセットのドキュメントです。この XSD には、フォームから抽出される際に XML データがどのように構造化されるべきかが記述されています。フォームオブジェクトがスキーマ要素にバインドされると、フォームで取得されたデータは、XSD で記述された形式で XML ドキュメントに格納されるようになります。

目下の問題は、動的に繰り返すフォームオブジェクトの要素をスキーマ要素にどのようにバインドするかということです。結局は、オブジェクトはフォーム構造に 1 度、スキーマ構造に 1 度だけ表示されますが、いくつかのデータのセットに格納できます。このドキュメントでは、これらの繰り返しデータのセットのためのフォームの構造要件とフォームをスキーマにバインドするのに必要なバインド規則について説明します。

このチュートリアルの例として使用されるフォーム(図 1 を参照)は、企業パートナーのパワーユーザーによる Web サイトの使用を許可するための申請をサイト管理者がおこなうのに使用できる、シンプルなフォームです。ユーザー数は異なるので、サイト管理者が適切な人数のユーザーを追加するために、「ユーザーを追加」ボタンを追加します。このボタンを押すことで、ユーザーの新しいブロックが表示され、同じ情報(ユーザーの名、ユーザーの姓、(指定されたユーザーの)追加/変更/削除、ユーザーの電話番号、ユーザーの電子メールアドレス)が取得されます。

動的なフィールドの作成

最初に、目的の繰り返しフィールド機能を含むようにフォームを構築する必要があります。これは、フローレイアウトでフォームを作成することで実現できます。フローレイアウトは、静的なレイアウトではありません。むしろ、名前が示すように、フローレイアウトは、必要に応じて、サイズを変更したり、展開/縮小したりできます。デフォルトでは、フローレイアウトは、すべてのフォームオブジェクトが上に重なり、左揃えにします。これは、フォームの実際の領域(フォーム使用可能な空白領域)を適切に使い切らないので、テーブルまたは(できれば)フローレイアウト内の配置済みレイアウトを含むサブフォームを使用する必要があります。

フローレイアウトを含むサブフォームの作成

ページ全体とラップされたサブフォームのどちらをフローレイアウトのセクションにするかにかかわらず、必要なのはフローを設定することです。

注意:

ページ全体のフローを設定する場合、デザインビューでページを表すフォームオブジェクト階層の項目(デフォルトでは、これは「(名称未設定サブフォーム)(ページ 1)」と呼ばれます)を右クリックします。「(マスターページ)」オブジェクトの下の「ページ1」オブジェクトを右クリックしないように注意してください。

新しいサブフォームを作成するには

  1. フォームオブジェクト階層のページ(デフォルトでは Designer の左側)を右クリックします。

  2. 表示されるポップアップメニューで、「サブフォームを挿入」を選択します。

  3. 適宜、サブフォームに名前を付けます(後述の例では、このオブジェクトの名前は「UserDesigneeContainer」)。

  4. 「オブジェクト」パレットにある「サブフォーム」タブの「コンテンツ」設定を、必ず「フローレイアウト」にします。

フローレイアウトサブフォーム内での配置済みレイアウトを含むサブフォームの作成

  1. フォームオブジェクト階層で、新しく作成したフローレイアウトサブフォームを右クリックします。

  2. 表示されるポップアップメニューで、「サブフォームを挿入」を選択します。

  3. 適宜、サブフォームに名前を付けます(後述の例では、このオブジェクトの名前は「UserDesigneeSubform」)。

  4. 「オブジェクト」パレットにある「サブフォーム」タブの「コンテンツ」設定を、必ず「配置済み」にします。

  5. このサブフォームで繰り返されるフォーム要素を追加します(図 2 および 3 を参照)。

繰り返しサブフォームを模倣したノードを含むスキーマを作成します。

XML スキーマ開発は、このチュートリアルの範囲外ですが、フォーム用の XML スキーマを作成してから、フォームとスキーマの間のデータ接続を作成する必要があります。

XML スキーマは、任意の XML または XSD スキーマ開発ツールを使用して開発することも、オープンソース製品の Notepad ++ のようなシンプルなテキストエディターでシンプルに作成することもできます。XML スキーマに関する必須の特性のひとつは、繰り返しサブフォームの構造を模倣するセクションを含める必要があることです。

前述の例では、「UserDesigneeSubform」には、次のようないくつかのデータ取得要素があります。

  • UserFirstNm – テキストフィールド
  • UserLastNm – テキストフィールド
  • UserAddChangeDelIn – ドロップダウンリストセレクター
  • UserTelNo – テキストフィールド(数値フィールドも可)
  • UserEmailAd – テキストフィールド

これは、XML スキーマドキュメントも同じ要素が定義されている必要があることを意味します(図 4 を参照)。含まれる「フローレイアウト」オブジェクト(UserDesigneeContainer)およびサブフォームの「配置済み」オブジェクト(UserDesigneeSubform)の両方で「maxOccurs」属性が未バインドに設定されている必要があることに注意してください。また、繰り返し「UserDesigneeSubform」オブジェクトが「UserDesigneeContainer」オブジェクト内に埋め込まれる必要があることが、Designer のフォーム階層の位置に反映されることに注意してください。

繰り返しフォームオブジェクトのスキーマへのバインド

スキーマを開発し、データ接続を確立したら、フォーム要素のスキーマへのバインドを開始できます。フィールドのデータソースへのバインドについて詳しくは、こちらを参照してください。

角括弧付きアスタリスク規則「[*]」の使用

通常のフォームオブジェクトのバインドと XML スキーマのバインドの違いのひとつは、開発者が Designer のバインドパスに角括弧付きのアスタリスク「[*]」も含める必要があることです(図 5 を参照)。

繰り返しサブフォームを XSD にバインドするのに必要なことは、これだけです。これで、ユーザーが完成に必要なフォームにセクションを追加すると、別の同一の XML 出力ノードが表示されます(図 6 を参照)。