4D Write Pro ドキュメントの表は、ここ最近のバージョンアップで大きく改善されました。4D Write Pro を強力な テンプレート駆動の文書ジェネレーター にするため、私たちは、ヘッダー・データソース・キャリーオーバー行などの 強力な機能 をリリースしてきました。
4D v20 では、ブレーク行 が追加されることになりました!
皆様、拍手でお出迎えください!
目的
アプリケーションの種類にかかわらず、リスト は大体の場合において作成する必要があります。
このリストは、一般的になんらかの基準に従ってソートされていて、分類ごとの 小計/合計/統計 を得るための グループ分け が必要です。4D Write Pro の新機能は、まさにこのようなことを可能にします。
いつ、どのように使うのか?
具体例を見てみましょう
ソートされたデータソースが表に対して設定されている場合、ソート基準の値が変化したときにブレーク行を挿入するのが目標です。
たとえば、複数の 大陸 や 国、そしてその 都市 に住む人々のデータを持っていたとします。
そしてそのデータに対して、大陸ごと、国ごと、都市ごとにグループ化したリストを作成したい場合を考えます。(ケース1)
あるいは、あらかじめ設定されているリレーションを使って、各大陸の会社ごとにグループ化された従業員のリストを作成したい場合を考えます。(ケース2)
どちらの場合もまず最初に、データソースとなるエンティティセレクションがケース毎の条件に従って確実にソートされている必要があります。
ケース1
ds.people.all().orderBy("continent asc, country asc, city asc")
ケース2
ds.People.all().orderBy("worksFor.name asc, continent asc")
1つのソート条件に、1つのブレーク行
ソートされたデータソースが表に割り当てられると、指定の並び順のデータが “繰り返し行” (テンプレート行) に表示されます。次はソート条件に従ってグループ分けする方法を見てみましょう。
インターフェースを使用する
行メニューに新しい項目が追加されました。このメニューはコンテキストに応じて変化するので、カーソルが表の中 (かつ、ヘッダーより下) にある場合にのみ表示されます。
ブレーク行を設定するにあたっては、属性名 (This.item.country) や、リレート属性へのパス (例: This.item.worksFor.name)、あるいはその他の式(Substring(This.item.name;1;1) ) などに基づいて フォーミュラ を作成することができます。
ブレーク属性が設定されると、隣に青いブレーク記号 “S” (ソートのS) が表示されます。これにマウスオーバーすると、その フォーミュラ が表示されます。
ブレーク行の上か下か?
ブレーク行は、データソースのデータを表示する 繰り返し行 の 上 または 下 に置くことができます。
ブレーク行は、ブレーク行に設定したフォーミュラが返す値が変わるたびに挿入されるので、ブレーク行の場所とデータソースのソート順は一致する必要があります。
新しい行属性
属性 wk break formula は、ブレーク行の フォーミュラ を格納します。この属性が存在するだけで、その行はブレーク行とみなされます。ブレーク行は必要なだけ定義することができます (例: 最も低いブレークレベルに Formula(This.item.city)、最も高いブレークレベルに Formula(This.item.continent) )。
WP SET ATTRIBUTES($row; wk break formula; Formula(This.item.country))
WP RESET ATTRIBUTES($row; wk break formula)
注意すべきポイント:
- ブレーク行は、繰り返し行 または他のブレーク行のすぐ 上 か 下 に配置する必要があります。そうでない場合は無視されます。
- ブレークは 5レベルまで設定できます。6レベル目を追加してもエラーは発生しませんが、表示されません。
- 表にブレーク行を挿入しただけでは、データソースはソートされません。データソースは別途ソートする必要があります。
ブレーク行のコンテンツ
テキストの他に、ブレーク行には 2種類のフォーミュラを含めることができます。
- まず、繰り返し行で表示されている、または表示している可能性のある要素を使用します (例: This.item.continent)。
返される値は、ブレーク行 直前 の 最後 の値 (ブレーク行が繰り返し行の 上 にある場合は 直後 の最初 の値) です。 - 次に、ブレーク行のコンテキストでのみ使用できる新しいプロパティ breakItems を使う方法があります(例:This.breakItems)。
breakItemsプロパティは、表のデータソースのサブセットであり、そのブレーク行の集計対象である繰り返し行の集合に対応します。- 大陸-国-都市の区分によるブレーク行の例では、大陸の値が変わるたびに、大陸ごとの人々のデータが サブセット になります。ブレーク行が繰り返し行の前/後に設置されているかに関わらず、このサブセットを使用できます。このサブセットを対象に、sum(“salary”), average(“salary”), などの計算をおこなうことができます。
最後に、これらのサブセットは表のデータソースと同じ型、すなわち、エンティティセレクション または コレクション となることに留意が必要です。
詳細情報
この機能の詳細については、ドキュメント を参照してください。
まとめ
この新機能は、文書の自動作成に関する 4D Write Pro の威力を改めて示すものといえます。
4Dフォーラムで是非ご意見をお聞かせください。