/
グループ化されたアイテムリスト

グループ化されたアイテムリスト



ファイル名:

Item list group.xfd

レベル:

Advanced

レポートから XML:

Item -> FF&E list -> FF&E list grouped by FF&E level

XMLサンプルファイル:

xml/file_with_cost.xml

キーコンセプト:

Dynamic indentation, condition, table repeat, key/index

このレポートは、FF&Eアイテムを含む階層的なFF&Eカタログ構造を印刷する方法を示しています。レポートは、FF&Eカタログ構造を表す<level>構造を走査します。 
そのために、<level>ノードの上に繰り返しセクションがあります。 重要なのは、<level>ノードは階層構造を表すために互いに入れ子になっていることです。
このため、単純に最初のレベルをドキュメントにドラッグ&ドロップし、作成された式 (/drofus-xml/level) の上に繰り返しセクションを作成します。
この式が機能しないのは、トップ・レベルの<level>ノードだけを繰り返し処理し、サブ・レベルは行わないからです。
これを実現するには、XML構造のどこに配置されているかに関係なく、ドキュメント内のすべての<level>ノードを選択する式を使用します。この式は:

//level

//level

サブ・グループのインデントを取得するには "Alignment & Indentation (整列とインデント) -> Start Indent (開始インデント)" プロパティの動的な値を次のように設定します:concat(@depth*5,'mm'). これは、グループ (トップ・レベル) には 0、サブ・グループなどには 1 となるレベルの深さ属性を使用します。
これに 5 を乗算し、その結果をミリメートル単位の長さ単位を与える mm と連結します。インチを得るにはincを使います。
これは、グループには0、サブ・グループには5、サブ・サブ・グループには10といったインデントを与えます。

各グループの下には、FF&Eアイテム (物品) のテーブルがあります。テーブルは条件セクションの中にあり、条件はcount(article) > 0で、グループ内にアイテムがなければfalseを返します。
これにより、テーブル・ヘッダーが必要ないときに表示されるのを防止できます。条件付きセクションは、Insert (挿入)→ Conditional Section (条件付きセクション)から挿入できます。

3.6で説明したように、テーブルにはテーブル・ヘッダーと繰り返し可能な行があります。XPATH式の物(article)を使用してください。

xmlソースでは、レベル・ノードは<article>という子ノードを持ち、これはFF&Eアイテムを表します。このノードには、/drofus-xml/article-container ノードの下にある article アイテムへの ID を含む @ref という属性が 1 つだけあります。FF&Eアイテムのデータを取得するには、この同じIDを持つ正しい<article>ノードの下で検索を行う必要があります。
これを効率的に行うために、使用可能なインデックスを作成します。インデックスについては5.3を参照してください。
これを行うには、以下のコードをReview (レビュー)->Global XSLT window (グローバルXSLTウィンドウ)に貼り付けます。

<xsl:key match="article" name="article-index" use="@id"/>

<xsl:key match="article" name="article-index" use="@id"/>

これは、id属性に基づいてすべての<article>ノードにインデックスを作成します。

例えばFF&E番号列のようなテーブル列を作成するには、Insert (挿入)→Field (フィールド)を選択し、以下のXPATH式を入力します。

key('article-index', @ref)/core/@article_func_no

key('article-index', @ref)/core/@article_func_no

もちろん、このフィールドを他の列にコピー・ペーストすることもできます。利用可能なフィールドはarticle-container/articleの下を見てください。

各グループの合計は、各FF&Eリストの後に印刷され、サブグループを持つグループの合計も、各サブグループの後に印刷される。
これを行うために、2つの条件付きセクションがあります。最初のものは、各リストの後に合計を印刷し、サブグループがない場合にのみ実行します。この条件は次のとおりです:

not(level)

not(level)

サブ・グループを持つすべてのグループの合計を得るには、最後のサブ・グループの最後でこれを行う必要があります。これを行うには、以下の条件を使用します:

not(following-sibling::level) and parent::level

not(following-sibling::level) and parent::level

これは最後のレベルであり、親レベルがあることを保証します。

Related content

V2. グループ化されたアイテムリスト
V2. グループ化されたアイテムリスト
More like this
V2. グループ別部屋リスト
V2. グループ別部屋リスト
More like this
グループ別部屋リスト
グループ別部屋リスト
More like this
V2. アイテム仕様
V2. アイテム仕様
More like this
アイテム仕様
アイテム仕様
More like this
V2. アイテム・リスト
V2. アイテム・リスト
More like this