はじめに
本記事では、概要レポートを作成し、必要に応じて詳細を展開して表示する手法をご紹介します。
実装
2つのレポートを準備することで、展開可能なレポートを作成できます。
具体的には、概要を示す親レポートと、各項目の詳細データを表示する子レポートを用意し、これらを組み合わせます。

この実装のために、SAP Business One を製品として活用しています。
親レポート(概要レポート)
Sharperlight アプリケーションのメニューより パブリッシャーを選択して起動してください。
その後、新規ボタンをクリックし、新規レポートの作成プロセスを開始します。

一般タブで コード、グループ、タイトル、レポートのタイトルをそれぞれ入力します。

オプションタブで、既定の出力形式をTable Gridに設定します。

テーブルタブで幅を 800px に設定してください。後で表示内容を確認してから調整できます。

では、ダイアログ下部のクエリーを編集ボタンをクリックしてクエリを定義します。
展開可能なレポートを作るための親レポートで最も重要なポイントは、出力項目の名前です。
子レポート(詳細レポート)のクエリでフィルタリングに使用する項目名と、親レポート側の出力名を一致させる必要があります。
この例の場合、親レポートの出力項目である「%Company」(Company の出力名)と「%DocEntryNumber」(Doc Entry Number の出力名)が、子レポートを駆動するキーとなります。
子レポートのクエリ内で、親レポートの出力項目に対応するフィルターを作成し、フィルター名を「@」で始まる形式(@Company および @DocEntryNumber)に設定してください。
名前が完全に一致しないと、親子連携(展開機能)が正しく動作しません。

子レポート(詳細レポート)
新しい公開レポートの作成を開始します。
一般タブで コード、グループ、タイトル、レポートのタイトルをそれぞれ入力します。

オプションタブで、既定の出力形式をTable Gridに設定します。

ダイアログ下部のクエリーを編集ボタンをクリックしてクエリを定義します。
販売請求書の詳細テーブルを選択すると、必須フィルターが自動追加されます。
展開可能なレポートを作成する際の子レポートで最も重要なポイントは、フィルター項目の名前です。
親レポート(Summary Report)のクエリにおける出力項目の名前と、子レポートのフィルター名を一致させる必要があります。
この例では、親クエリの出力「%Company」と「%DocEntryNumber」の値が、子クエリのフィルター「@Company」「@DocEntryNumber」に正しく渡されることで連携が成立します。

親レポート(サマリー)と子レポート(詳細)の関係は、図のように次の通りです。

あとがき
展開可能なレポートを作成する上で押さえておくべき主なポイントは次のとおりです:
- 親レポート(概要)と子レポート(詳細)を連携させるためには、出力項目とフィルター項目の名前を一致させる必要があります
- レポートの既定の出力形式は必ずTable Gridに設定してください
** 注意事項 **
親クエリ内で子クエリとのリンクに使用する出力フィールドは、文字列型(string-type)のフィールドでなければなりません。
親クエリのリンク用出力フィールドに数値型フィールドを使用した場合、展開可能なレポートを作成するこのロジックは機能しません。
このソフトウェアの制限は、Sharperlight ビルドバージョン 7.3.27 まで確認されています。
数値型フィールドをどうしても使用しなければならない場合、先に示した例のように拡張表現を使用することで、この制限を回避できます。

この例では内部番号フィールドを使用したかったのですが、このフィールドは数値型でした。
そのため、数値データを文字列に変換するために拡張表現で「CStr({%DocEntryNumberRaw})」を作成し、出力項目の名前を「%DocEntryNumber」としました。
