高度なカスタマイズ > ビジネスロジックのカスタマイズ > レポートの生成 > カスタマイズの詳細
  
カスタマイズの詳細
 
レポートを生成した後、レポートのさまざまな面をカスタマイズするための数多くの方法があります。
マクロのカスタマイズ
照会ビルダータイプのカスタマイズ
カスタム入力ページを使用したレポート用に、追加のカスタマイズがサポートされています。
レポート出力フォーマットのカスタマイズ
レポート生成クライアントのカスタマイズ
レポート生成 URL のカスタマイズ
マクロのカスタマイズ
マクロのカスタマイズでは、標準 Windchill アプリケーションサービス委任メカニズムを使用します。このカスタマイズの例では、カットオフ時間を自動的に計算する新規マクロを作成します。
1. 以下のステップを実行して、MacroExpressionProcessor インタフェースを実装するクラスを作成します。
a. 新規パッケージを作成するか、または既存のパッケージを使用します。パッケージに myPackage などの名前を付けます。
b. 新規クラスを作成し、wt.query.report パッケージの MacroExpressionProcessor インタフェースから継承します。クラスに TimeCutoffMacroProcessor などの名前を付けます。
c. クラスをコンパイルします。
d. buildExpression() メソッドの実装を入力します。この実装は、現在のシステム時間をミリ秒単位で読み取り、新規時間を計算し、新規日付を作成します。日付の値は wt.query.DateExpression として返されます。これは、日付およびタイムゾーン設定の Java 表現を考慮に入れるために SQL 定義式で日付が特殊処理されるので必要になります。
public class TimeCutOffMacroProcessor implements MacroExpressionProcessor {
@Override
public ColumnExpression buildExpression( Element a_element, Map a_parameterMap ) throws QMLException
{
final int DAYS=3;
long currentSeconds= (System.currentTimeMillis()/1000);
long timeSeconds= currentSeconds - (60*60*24*DAYS);
java.util.Date time= new java.util.Date(timeSeconds * 1000);
return (ColumnExpression) DateExpression.newExpression(time, Timestamp.class.getName());
}

@Override
public Object getValue()throws WTException{
final int DAYS=3;
long currentSeconds= (System.currentTimeMillis()/1000);
long timeSeconds= currentSeconds - (60*60*24*DAYS);
java.util.Date time= new java.util.Date(timeSeconds * 1000);
return time;
}
}
e. getValue( ) メソッドの実装を入力します。この値は、前の手順で計算された実際の日付の値です。デフォルト値としてマクロが指定されている場合、このメソッドが呼び出されて「レポートビルダー」入力フィールドが設定されます。
2. マクロの論理名を作成し、実装クラスにマッピングします。たとえば、論理名が「TIME_CUTOFF」でクラスが「myPackage.TimeCutoffMacroExpressionProcessor」の場合、エントリは次のようになります。
wt.services/svc/default/wt.query.report.MacroExpressionProcessor/
TIME_CUTOFF/java.lang.Object/0=myPackage.TimeCutoffMacroProcessor/singleton
dbservice.properties.xconf に存在する OOTB エントリは次のようになります。
<Service context="default" name="wt.query.report.MacroExpressionProcessor">
<Option cardinality="singleton" requestor="java.lang.Object"
selector="CURRENT_TIME" serviceClass= "wt.query.report.CurrentTimeMacroProcessor"/>
<Option cardinality="singleton" requestor="java.lang.Object"
selector="CURRENT_USER_NAME" serviceClass= "wt.query.report.UserNameMacroProcessor"/>
<Option cardinality="singleton" requestor="java.lang.Object"
selector="TIME_CUT_OFF" serviceClass="ext.mypkg.TimeCutOffMacroProcessor"/>
</Service>
3. 以下の手順を実行して、新規マクロを使用する新規レポート照会を作成します。
a. 既存のフォルダ格納済み照会を開き、FolderedModified などの新規照会として保存します。
b. キャビネット名に基づいて基準を除去します。
c. 基準を追加します。以下の表のように、「基準」タブで以下の値を設定します。
フィールド
Class
フォルダ格納済み
Attribute
thePersistInfo.modifyStamp
Operator
>
Value
TIME CUTOFF
「照会ビルダー」「基準」タブで、TIME_CUTOFF マクロのレポート内での使用が可能となりました。
d. 照会を保存します。
4. レポートを実行します。
基準またはデフォルト値でマクロを使用した場合、照会ビルダーによってマクロが評価され、結果の値がレポート生成ウィンドウの「基準」表示枠に表示されます。「基準」表示枠の入力フィールドにマクロ名を入力して使用することもできます。マクロ名の最初と最後には、マクロの値であることを示す $$ を付ける必要があります。たとえば、定義済み CURRENT_USER_NAME マクロを入力フィールドに入れる場合、「$$CURRENT_USER_NAME$$」という値を入力します。
照会ビルダータイプのカスタマイズ
照会ビルダーはオブジェクトモデル情報を使用して、照会を構築する対象となるすべての使用可能なタイプを表示します。これは、wt.fc.NetFactor インタフェースを実装するすべてのタイプを検索して実行されます。ただし、wt.fc.Net.Factor インタフェースを実装しないのに、永続可能インタフェースを実装するサブクラスを持ち、照会で使用できるクラスが存在する可能性があります。これは、wt.index.Indexable の例です。これらのタイプを使用して照会を構築するために、これらのタイプをサービスプロパティファイルでリソースとしてリストを作成できます。dbservice.properties の定義済みエントリは、次のようにして、インデックス可能なインタフェースを処理します。
wt.services/rsc/default/wt.query.report.ClassName/
wt.index.Indexable/java.lang.Object/0=wt.index.Indexable
照会ビルダータイプのリストをカスタマイズするために、新しいエントリを追加できます。たとえば、クラス myPackage.myClass の場合、エントリは次のようになります。
wt.services/rsc/default/wt.query.report.ClassName/
myPackage.myClass/java.lang.Object/0= myPackage.myClass
このエントリは、クラスが NetFactor インタフェースを実装しない場合のみ必要ですが、永続インタフェースを実装するサブクラスを持っています。
レポート出力フォーマットのカスタマイズ
* 
カスタム入力ページを使用したレポートのために、このカスタマイズはサポートされています。
定義済みの複数のレポート出力フォーマットが提供されています。これらのフォーマットはすべて一般的な用途を目的としています。つまり、どのような照会からでも適切な出力を生成できます。適切なフォーマットがない場合は、既存のフォーマットを修正するか、まったく新しいフォーマットを作成できます。
レポート生成クライアントのカスタマイズ
* 
カスタム入力ページを使用したレポートのために、このカスタマイズはサポートされています。
レポート生成クライアントは、追加のレポート生成の入力をユーザーに要求する HTML フォームと、レポートを実行して XSL 変換を適用する HTTP プロセッサで構成されています。これらのクライアントは両方とも、一般的な HTML クライアントのカスタマイズと同じ方法でカスタマイズできます 詳細については、Windchill JSP フレームワークを使用した HTML クライアントのカスタマイズを参照してください。
また、レポート生成専用のコードは独立したクラス内で静的メソッドとして使用できるので、再使用が可能です。ReportTemplateHelper クラスでは、レポートを処理するためのメソッドが数多く提供されています (詳細は、インストールされている Windchill Javadoc 内の wt.query.template.ReportTemplateHelper クラスエントリを参照してください)。
* 
以前のリリースでは、サブタイプ (つまり、「タイプおよび属性の管理」ユーティリティを使用して作成したタイプ) を使用するレポートは、レポートコマンドを使用して処理する必要がありました (詳細は、インストールされている Windchill Javadoc 内の com.ptc.core.query.report.command.common パッケージエントリを参照してください)。ReportTemplateHelper API によって、現在ではサブタイプと顧客が作成した属性が直接サポートされます。レポートコマンドは引き続きサポートされますが、処理の必要がなくなりました。
上記のクライアントは両方とも、XSLT プロセッサ用に開発されたラッパー API に依存しています。API の詳細は、インストールされている Windchill Javadoc 内の wt.xml.xslt パッケージエントリにあります。
この API では以下の機能を使用できます。
個々の XSLT 実装 (現在使用中の XSLT プロセッサライブラリである Saxon など) からの独立。
特定の実装の詳細を非表示にする XML ソースのハイレベル抽出 (文字列、Java IO ストリーム、DOM、SAX など)。
Windchill での XSLT 操作のためのクリーン API。
XSLT 変換を複雑に連鎖させるための使いやすいハイレベル機能。
この API で提供されている機能以外の追加機能を使用するには、標準 JAXP (Java API for XML Processing) API を使用するか、Saxon に直接アクセスします。詳細については、以下の URL で現在公開されている Saxon Web ページを参照してください。
http://saxon.sourceforge.net
ただし、Windchill にバンドルされている XSLT ライブラリは将来、変更される可能性があり、Windchill XSLT API および JAXP API のユーザーはこのような変更の影響を若干受けるので注意してください。
レポート生成 URL のカスタマイズ
* 
カスタム入力ページを使用したレポートのために、このカスタマイズはサポートされています。
レポート生成 URL を理解することは、アプリケーションをカスタマイズしてレポート生成機能をシームレスに統合するために重要です。レポートを起動する URL は、動的に作成するか、または既知の URL パラメータで静的に設定 (ブックマークなど) できます。レポート生成 URL には、フォーム生成とレポート実行の 2 つのタイプがあります。フォーム生成 URL はユーザーからの追加入力を要求し (必要な場合のみ)、レポート実行ページに進むためのフォーム操作ボタンを生成します。レポート実行ページによって照会が実行され、HTTP リクエスト出力ストリームに出力が返されます。
これらの URL は両方とも直接編集して URL パラメータを追加できます。オリジナルまたは編集済みの URL は、ブックマークするか、または将来再使用するためにハイパーリンク内で使用できます。また、URL はプログラムでも生成できます。ReportTempateHelper クラスには、各タイプの URL 用の API が用意されています。それぞれ異なるパラメータをとる複数のバージョンを使用することもできます。詳細については、インストールされている Windchill Javadoc 内の getGenerateFormURL( ) および getExecuteReportURL( ) クラスエントリを参照してください。
フォーム生成 URL には、パラメータ値を直接指定できます。URL で指定されているすべてのパラメータ名について、入力フィールドがバイパスされます。さらに、すべての URL パラメータは、フォームの操作ボタンによってレポート実行 URL に渡されます。また、レポート実行 URL は、ReportTemplateHelper メソッドにより URL パラメータからレポートパラメータ値をすべて引き出します。レポートパラメータに対応する URL パラメータが存在しない場合は、レポートパラメータのデフォルト値が使用されます。 デフォルト値を使用します。ほかにも、以下の表で説明されている URL パラメータを使用できます。
URL パラメータ名
説明
jrb
結果列ヘッダをローカライズするための Java リソースバンドルの名前。提供されている XSLT スタイルシートはすべて、Java リソースバンドルの名前が指定されていれば、結果列ヘッダをローカライズできます。この目的は、レポートテンプレートのユーザーインタフェースではロケールごとに文字列を入力する方法が用意されていないので、1 つの照会を再使用して複数の地域言語をサポートできるようにすることです。
フォーマット
フォーマットタイプとして、formatDelegate または formatCustom を指定します。このパラメータは、レポートテンプレートオブジェクトに XSL 指定がない場合にのみ使用されます。
delegateName
代理名を指定して、Windchill コードベースから XSL スタイルシートを取得します。代理名は、dbservice.properties ファイルで指定されている値と一致する必要があります。このパラメータは、レポートテンプレートオブジェクトに XSL 指定がない場合と、format URL パラメータに "formatDelegate" の値がある場合にのみ使用されます。
xsl1
カスタム XSL スタイルシートの URL を指定します。このスタイルシートは照会結果に即座に適用され、ユーザーへの直接出力や別の XSL スタイルシートへの入力に適した出力を生成できます。このパラメータは、レポートテンプレートオブジェクトに XSL 指定がない場合と、cformat URL パラメータに "formatCustom" の値がある場合にのみ使用されます。
xsl2
カスタム XSL スタイルシートの URL を指定します。このスタイルシートは最初の XSL スタイルシート (xsl1 によって指定) の出力に適用され、ユーザーへの出力を生成します。このパラメータは、レポートテンプレートオブジェクトに XSL 指定がない場合、format URL パラメータに "formatCustom" の値がある場合、および xsl1 URL パラメータが指定されている場合にのみ使用されます。