高度なカスタマイズ > ビジネスロジックのカスタマイズ > レポートの生成 > カスタマイズの詳細
  
カスタマイズの詳細
 
レポートを生成した後、レポートのさまざまな面をカスタマイズするための数多くの方法があります。
マクロのカスタマイズ
照会ビルダータイプのカスタマイズ
カスタム入力ページを使用したレポート用に、追加のカスタマイズがサポートされています。
レポート出力フォーマットのカスタマイズ
レポート生成クライアントのカスタマイズ
レポート生成 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 インタフェースを実装しない場合のみ必要ですが、永続インタフェースを実装するサブクラスを持っています。
レポート出力フォーマットのカスタマイズ
* 
カスタム入力ページを使用したレポートのために、このカスタマイズはサポートされています。
定義済みの複数のレポート出力フォーマットが提供されています。これらのフォーマットはすべて一般的な用途を目的としています。つまり、どのような照会からでも適切な出力を生成できます。適切なフォーマットがない場合は、既存のフォーマットを修正するか、まったく新しいフォーマットを作成できます。
CSS のカスタマイズ
提供されているすべての HTML レポートフォーマットでは、Microsoft Word で作成されたフォーマットを除き、CSS1 スタイルシートを使用して、フォント、色、サイズ、および行間の詳細を指定します。CSS1 を使用することによって、これらの詳細をページレイアウトのほかの要素から切り離し、1 つまたは複数の再使用可能なスタイルシートで指定できます。したがって、HTML レポートのこれらの要素をカスタマイズする最も簡単な方法は、そのレポートで使用される CSS ファイルを編集することです。CSS1 の詳細については、以下の URL で現在公開されている W3C CSS1 仕様書を参照してください。http://www.w3.org/TR/REC-CSS1
* 
この URL に問題がある場合は、サイト URL の www.w3.org を試してみてください。
2 つの CSS ファイル、htmlFormat4Print.css と htmlFormat4Screen.css が含まれています。このファイルは両方とも「<Windchill コードベース>/templates/reports」にあります。印刷時の HTML の体裁を指定するときは htmlFormat4Print.css ファイルが使用され、画面に表示するときは「htmlFormat4Screen.css」ファイルが使用されます。実際には、ブラウザによって CSS のこの特徴がサポートされていないため、印刷出力も htmlFormat4Screen.css によって制御されます。ただし、「htmlFormat4Screen.css」よりも htmlFormat4Print.css の方が適切な場合もあります。主にほかの Windchill HTML ページとの一貫性を意図してデザインされているからです。
レポートで使用する CSS スタイルシートを変更する、または CSS1 で可能な変更よりも大きな変更を出力フォーマットに加えるには、以下のセクションの説明に従って XSLT スタイルシートをカスタマイズする必要があります。
XSLT のカスタマイズ
前述のように、レポートは XSLT スタイルシート変換を XML 照会結果に適用することによって生成されます。これには、すべての定義済みフォーマットが含まれます。XSLT スタイルシートによって、HTML レイアウトだけでなくほかの XML またはテキストフォーマットも生成できます。
XSLT スタイルシートは、テンプレートおよび規則の概念をベースにしています。ほとんどの XSLT スタイルシートは、主に XML または HTML タグと静的なテキスト (つまり、出力にそのまま含まれるテキスト) で構成されています。スタイルシートの残りの部分は、入力された XML から出力の動的部分を算出するための規則で構成されています。テンプレートと規則の組み合わせに応じて、XSLT のカスタマイズの内容は単純な HTML 作成から純粋なプログラミングまでさまざまです。XSLT の最終的な仕様については、以下の URL で現在公開されている W3C XSLT 仕様書を参照してください。http://www.w3.org/TR/xslt
* 
この URL に問題がある場合は、サイト URL の www.w3.org を試してみてください。
XSLT の詳細については、"What is XSLT?" のリンクと次の URL で現在使用可能な "Resources" の領域を参照してください。http://www.xml.com
* 
この URL に問題がある場合は、サイト URL の www.xslinfo.com を試してみてください。
提供されているスタイルシート
出力フォーマットをカスタマイズする 1 つの方法として、<Windchill>/codebase/templates/reports/ で提供されている XSLT スタイルシートのいずれかを修正することが挙げられます。これらのスタイルシートについては、以下の表で詳しく説明します。
* 
Windchill UI の XSLT スタイルシートを指定するフィールド内で、<Windchill>/codebase/ に対する相対的なファイルパスを入力する必要があります。たとえば、excel97WebQuery.xsl は "templates/reports/excel97WebQuery.xsl" として参照する必要があります。
XSLT スタイルシート
標準フォーマット名
説明
identity.xsl
XML
XML 照会結果に対してアイデンティティ変換を実行します。つまり、XML 入力を出力します。
csvFormat.xsl
CSV (Comma Separated Variable)
値をコンマで区切ったフォーマットを生成します (スプレッドシートなどへの読み取りに便利です)。
tsvFormat.xsl
TSV (Tab Separated Variable)
値をタブで区切ったフォーマットを生成します (スプレッドシートなどへの読み取りに便利です)。
simpleHtmlForm at.xsl
HTML
単純な HTML フォーマットを生成します。提供されているほかの HTML フォーマットとは異なり、このフォーマットでは数字列の余分なフォーマットが行われません。
htmlWithSorting .xsl
HTML (並べ替え)
並べ替えが列ヘッダ上のハイパーリンクによって行われることを除き、「simpleHtmlFormat.xsl」と類似しています。
htmlWithMerging .xsl
HTML (結合)
垂直方向に複製されたセルが特定の条件で結合されることを除き、「simpleHtmlFormat.xsl」と類似しています。この変換は、ほかのフォーマットよりも時間がかかります。
sortedHtmlAsXM L.xsl
出力が従来の HTML ではなく適格な XML であり、結果にその他の非 HTML 属性が含まれることを除き、「htmlWithSorting.xsl」と同じ結果を生成します。これにより、結果への XSLT 変換 (「mergeHTMLCells.xsl」など) の適用が簡単になります。
mergeHTMLCell s.xsl
「htmlWithMerging.xsl」と同様に HTML (適格な XML) 内のセルを結合します。また、入力には余分な属性アノテーションが含まれている必要があります。このスタイルシートは、照会結果 XML での直接的な使用を目的としていません。その代わり、「sortedHtmlAsXML.xsl」の結果に適用すると、並べ替えと結合による HTML の生成という総合効果が得られます。
msw2000ls.xsl
Microsoft Word 2000 HTML (水平方向)
Microsoft Word 2000 メタデータを含む単純な HTML フォーマットを生成します。結果を Microsoft Word 2000 にドロップすると、最初に指定したマージンやテーブルボーダーなどが維持されます。また、浮動小数点データ列ではデシマルタブストップが指定されます。結果ページの向きは水平方向になります。
msw2000p.xsl
Microsoft Word 2000 HTML (縦方向)
結果ページの向きが縦方向であることを除き、「msw2000ls.xsl」と同じです。
xslfo.xsl
PDF
高精度ページレイアウトの XML ベース規格である XSL フォーマットオブジェクトを生成します (http://www.w3.org/TR/xsl を参照してください)。デフォルトでこのフォーマットが後処理されて PDF が動的に生成されるので、標準フォーマットリストでは PDF フォーマットと呼ばれます。これは Apache FOP (http://xml.apache.org/fop を参照) によって行われ、以下のユーザープリファレンスによって制御されます。
/wt/query/report/template/postprocmap/appl ication/xslfo+xml
現在、このフォーマットには FOP の機能による制限がありますが (たとえば、列幅はコンテンツから計算する以外の方法で指定する必要があります)、FOP の機能向上に伴って今後改善される予定です。
excel97WebQuer y.xsl
Excel 97 以降と互換性のあるバージョンの Excel Web Query (.iqy) フォーマットを生成します。この Excel フォーマットでは、スプレッドシートデータの取得元の URL が記録され、定期的または要求に応じてこの URL からデータを再表示できます。Excel 2000 で最適な結果を得るには、Excel Web Query (IQY) ファイルの MIME タイプを application/x-excel-web-query に設定します。ダウンロード時に、このフォーマットは Excel 2000 のみに自動的にロードされます。Excel 97 の場合は、ダウンロードしたファイルを保存し、Excel 97 の「Web クエリーの実行」コマンド内からこのファイルを選択する必要があります。
excel2000WebQ uery.xsl
現在 Windchill でサポートしている Excel バージョンのみと互換性のあるバージョンの Excel Web Query (.iqy) フォーマットを生成します(サポートされているサードパーティ製品の詳細については、Windchill ソフトウェアマトリックスを参照してください)。
Excel Web 照会の新機能を利用して、HTML URL データソース内のフォーマットではなくスプレッドシート内のフォーマットを保持します。
includes/linker.xsl
XSLT テンプレート generateURLHref を提供します。このテンプレートは指定の HTML および XSL FO フォーマットによって使用され、Windchill オブジェクト全体が選択されたときに照会レイヤーによって与えられる追加の属性情報を含んでいる XML 結果ノードから Windchill オブジェクトへのハイパーリンクを生成します。オブジェクト、バージョン、電子メール、およびコンテンツダウンロードのリンクが現在サポートされています。
includes/excelWe bQueryBase.xsl
「excel97WebQuery.xsl」と「excel2000WebQuery.xsl」の背後にある共有実装。このスタイルシートにより、この共有実装を含むスタイルシートは、HTML テーブルを生成する XSLT スタイルシートの相対 URL を指定できます。生成された Excel Web Query は、レポートを (再度) 実行しますが、指定の HTML テーブルフォーマットを使用して、データを取得します。したがって、この HTML フォーマットを変更することによって、この Web 照会の結果として Excel に表示されるデータを変更できます。現在、「excel97WebQuery.xsl」と「excel2000WebQuery.xsl」の両方とも「simpleHtmlFormat.xsl」を使用しています。
includes/msw200 0.xsl
「msw2000ls.xsl」と「msw2000p.xsl」の背後にある共有実装。ページのサイズ、マージン、および方向はすべて入力として指定されます。このスタイルシートはほかのスタイルシートからの組み込みのみを目的としています。
includes/htmlWit h SortingBase.xsl
「htmlWithSorting.xsl」と「sortedHtmlAsXML.xsl」の背後にある共有実装。このスタイルシートはほかのスタイルシートからの組み込みのみを目的としています。
includes/localize String.xsl
文字列をローカライズするための XSLT 指定のテンプレート (マクロ) を提供します。この実装は、Java にコールバックする XSLT 拡張機能を使用して Java リソースバンドルにアクセスします。このスタイルシートはほかのスタイルシートからの組み込みのみを目的としています。
includes/urlEnco de.xsl
URL エンコードのための XSLT 指定のテンプレートを提供します。この実装は、XSLT 拡張機能を使用して WTURLEncoder.encode を Java にコールバックします。このスタイルシートはほかのスタイルシートからの組み込みのみを目的としています。
XSLT はテンプレートをベースにしているので、対象となる出力フォーマット (HTML など) の知識だけに基づいて、提供されているスタイルシートになんらかの修正を加えることができます。たとえば、CSS1 スタイルシートを使用するフォーマットでは、XSLT スタイルシート内の以下の行を使用して、これらのファイルへの参照が生成されます。
<link rel="stylesheet" type="text/css"
href="{$windchill}/templates/reports/htmlFormat4Screen.css"
media="screen"/>
<link rel="stylesheet" type="text/css"
href="{$windchill}/templates/reports/htmlFormat4Print.css"
media="print"/>
これらの行で厳密な HTML でない唯一の部分は、中括弧 { } 内の部分です。この部分は JavaScript 定義式の使用法と似ていますが、実際は XSLT XPath 定義式です。この場合、定義式は変数 windchill を参照しています。この変数には、Windchill コードベースの URL があらかじめ割り当てられています。
XML リソースバンドル
提供されている XSLT スタイルシートの 1 つの特徴は、テキストのローカライズのために XML リソースバンドルを使用することです。ロケールごとに異なるバージョンの XSLT スタイルシートを生成するのではなく、ロケールに依存するテキストが別々の XML ファイルに抽出されています。これらの XML ファイルは大まかに XML リソースバンドルと呼ばれ、地域言語に基づいた XSLT により取得および検索されます。
この方法が採用された理由は以下のとおりです。
XSLT および HTML 作成 (つまり XML) の背後にあるものと同じテクノロジ、構文、およびツールを使用することによってローカライズを容易にできること。
XSLT スタイルシートとそのローカライズデータ間の関連をより緊密にできること。XML リソースバンドルの検索には相対 URL が使用されるので、Windchill コードベースを基準とするのではなく、その URL を参照する XSLT ファイルを基準として XML リソースバンドルをインストールできます。
XSLT 拡張機能に依存せずにローカライズできること。
提供されている XSLT スタイルシートで使用される XML リソースバンドルは、<Windchill コードベース>/templates/reports/defReportRB_*.xml に保存されています。
独自の XSLT スタイルシートでこの方法を使用する場合、使用例については、提供されている XML リソースバンドルおよび XSLT ファイルを参照してください。以下の事項を念頭に置いてください。
XML リソースバンドルは適格な XML でなければなりません。詳細については、以下の URL で現在公開されている XML.com の注釈付き XML 仕様書を参照してください。http://www.xml.com/pub/axml/axmlintro.html
* 
この URL に問題がある場合は、サイト URL の www.xml.com を試してみてください。
W3C のオリジナルバージョンの注釈なし XML 仕様書は、以下の URL で現在公開されています。http://www.w3.org/TR/REC-xml
* 
この URL に問題がある場合は、サイト URL の www.w3.org を試してみてください。
<?xml ...?> ヘッダーに表示されるエンコーディング方式は、ファイルの保存時に実際に使用されるエンコーディング方式と一致する必要があり、使用する XML パーサー (Xerxes 1.2.2) でサポートされている必要があります。たとえば、Windows NT では、メモ帳の「Unicode で保存する」オプションを使用して、XML リソースバンドル内で unicode エンコード方式を指定できます。
新しいフォーマット
 
既存の XSLT を修正するだけでなく、まったく新しい XSLT スタイルシートも作成できます。以下のステップに従って、新しいスタイルシートを作成できます。
1. 対象となる出力フォーマットのサンプルを作成します。たとえば、HTML エディタを使用して、対象となるフォーマットのサンプルを生成します。Microsoft Office でサンプルドキュメントを作成し、そのドキュメントを HTML として保存します (これは Microsoft Word ベースの HTML フォーマットを作成する方法です)。または、Adobe Illustrator の図面を SVG としてエクスポートします。
* 
さまざまな chart.xsl スタイルシートの説明に従って Apache Batik を使用すると (この章の前半のセクション提供されているスタイルシートの表を参照)、XSLT に関する最低限の知識で SVG を生成できます。
2. サンプル出力の静的部分をスケルトン XSLT スタイルシートにコピーし、その部分を適格な XML にするための必要に応じて編集またはエスケープします(XSLT はすべて適格な XML でなければなりません)。
3. サンプル出力をガイドとして使用して、入力された XML を出力の動的部分に変換する XSLT を作成します。
手順 3 で実行する変換の回数および複雑さはフォーマットごとに大きく異なり、新しいフォーマットの作成に必要な作業は主にこれによって決まります。XSLT では、XML データの並べ替え、フィルタ、集約、および結合を行うための広範な機能が提供されています。さらに、Java や JavaScript などのほかの言語を呼び出す XSLT 拡張機能および要素も利用できます。詳細については、Saxon のマニュアルを参照してください。
XML 結果フォーマット
照会結果の XML フォーマットを理解することは、XSLT (またはその他の方法) を使用して必要なデータを正確に読み取るために非常に重要です。このフォーマットの概要は以下のとおりです。太字の部分は動的データを表し、省略記号 (...) は省略された項目を表しています。
<?xml version="1.0" encoding="UTF-8" ?>
<queryResult>
<metadata>
<name>Report Name</name>
<description>Report Description</description>
<objectIdentifier>Report Object Id</objectIdentifier>
<sourceSystem>Windchill Codebase URL</sourceSystem>
<sourceGateway>Windchill Gateway URL</sourceGateway>
<executingPrincipal>
<fullName>User’s Full Name</fullName>
<objectIdentifier>User Object ID</objectIdentifier>
</executingPrincipal>
<timeOfExecution>Time when Executed</timeOfExecution>
<locale>Locale of User</locale>
</metadata>
<auxData>
<dataItem name="requestParam1">value</dataItem>
. . .
<dataItem name="requestParamN">value</dataItem>
</auxData>
</qml>
. . .
</qml>
<actualParameter parameterId="ParamName1"> Value
</actualParameter>
. . .
<actualParameter parameterId="ParamNameN"> Value
</actualParameter>
<result>
<heading tag="column1TagName"
type="Java data type">column header</heading>
. . .
<heading tag="columnNTagName"
type="Java data type">column header</heading>
<row idx="1">
<column1TagName>value</column1TagName>
. . .
<columnNTagName>value</ColumnTagName>
</row>
. . .
<row idx="N">
. . .
</row>
</result>
</queryResult>
Windchill トップレベルオブジェクト (永続可能) 全体が選択された場合は、オブジェクトのオブジェクト ID、ブランチ ID (オブジェクトがバージョン化されている場合)、クラス名などの追加属性が列タグ要素で生成されます。WTUser には、電子メール属性も含まれています。これらの属性は主に、ハイパーリンクの生成を容易にするために生成されます。HTML および PDF フォーマットの定義済み XSLT スタイルシートは、これらの属性がある場合には常に使用して、オブジェクトへのリンクを生成します。
また、列名で文字 $$ を使用することによって、ハイパーリンクの生成における柔軟性が増します。照会ビルダーを使用して $$ を含む列名を指定すると、 その列の各セルが作成されるのではなく、名前が解析されます。$$ が先行する列名の一部が $$ を含まない別の列名と一致すると、$$ の後に続く部分によって決まるそのデータが属性としてもう一方の列に追加されます。
たとえば、以下の列が照会ビルダーによって指定されるとします。
部品
Part$$branchID
Part$$type
その場合、各 XML 行には、以下のような Part 要素が含まれます。
<Part branchID="dataFromBranchIdColumn"
type="dataFromTypeColumn">dataFromPartColumn</Part>
行には各 Part$$branchID または Part$$type 列は含まれません。この機能により、永続性オブジェクト全体を選択しなくても、このセクションで前述したようにハイパーリンクを取得するために必要なデータが選択できます。
列のタイプが java.util.Date の場合は、HTTP リクエストの言語に基づいて、列データがフォーマットされます。さらに、列の要素には、未処理の Java 文字列値を含む "値" 属性があります。日付のほかのフォーマットをカスタマイズする必要がある場合、この値を使用できます。
以下の表は、照会結果の XML 内のさまざまなトップレベル要素によって伝達されるデータを要約したものです。
要素
説明
metadata
データの取得元の照会とその照会を実行しているユーザーについてのメタ情報。
auxData
使用されたリクエストパラメータ。
qml
実行されたレポートテンプレート照会の詳細をすべて定義します (詳細については、<Windchill コードベース>/wt/query/qml/qml.dtd を参照してください)。
actualParameters
照会の実行時に使用された照会パラメータ。
result
列のヘッダおよびタイプとデータの行。
レポートフォーマットとしての XSLT スタイルシートの使用
 
XSLT スタイルシートをレポートフォーマットとして使用するには、レポートテンプレートのユーザーインタフェースで指定するか、または「生成前に確認」としてフォーマットを指定するレポートテンプレートの場合は HTML レポート生成フォームを使用して生成する際に指定する必要があります。どちらの場合も、カスタムおよび標準の 2 つの方法でフォーマットを指定できます。
カスタムフォーマットの指定は、最大 2 つの相対または絶対 URL を使用して行います。絶対 URL でない場合、その URL は Windchill コードベースを基準とした相対 URL です。2 つの XSLT URL を指定すると、その URL はレポート結果に連続して適用されます。カスタム指定メカニズムによって、Windchill サーバーに保存されていない XSLT スタイルシートを使用できるようになり、新しいスタイルシートのテストが容易になります。また、2 つの XSLT スタイルシートを連続して適用できるようになります。これは、標準フォーマットメカニズムでは不可能です。
標準フォーマットの指定は、リストから 1 つを選択することによって行います。提供されている XSLT スタイルシートのほとんどはこのリストに含まれています。追加フォーマットは、「dbservice.properties」を編集することによってこのリストに追加できます。このプロパティエントリは wt.services/rsc/default/wt.query.report.DefaultXSL で始まります。
既存のフォーマットがカスタマイズによって置き換えられる場合、XSL をオーバーライドするフォーマットタイプの追加のプロパティエントリが発生する可能性があります。このプロパティは wt.services/svc/default/com.ptc.core.query.report.client.generation.ReportSAXTransform で始まり、除去する必要があります。
これらのエントリのフォーマットは、Windchill アプリケーションサービス委任メカニズムのフォーマットです。追加のエントリをローカライズする必要がある場合は、Java リソースバンドル wt.query.template.TemplateResource を編集します。
レポート生成クライアントのカスタマイズ
* 
カスタム入力ページを使用したレポートのために、このカスタマイズはサポートされています。
レポート生成クライアントは、追加のレポート生成の入力をユーザーに要求する 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 のユーザーはこのような変更の影響を若干受けるので注意してください。
レポート生成フォーム
レポート生成フォームは、実行前に追加レポート入力パラメータを収集するために使用します。このフォームは、レポートパラメータと出力フォーマットの 2 つのセクションで構成されています。
レポートパラメータセクションは、照会で指定されたデータによって作成されます。レポート照会を XML ソースとして指定すると、ReportTemplateHelper buildParameterTemplates( ) メソッドによって、照会のパラメータを表す ParameterTemplate インスタンスの配列が返されます。現在のクライアントは、このパラメータテンプレートデータにアクセスして、ユーザーに入力を要求するフォームを構築します。指定した名前が HTTP パラメータに含まれている場合は、処理によってすべてのパラメータテンプレートがバイパスされるので注意してください (後述の「レポート生成 URL のカスタマイズ」セクションを参照してください)。これはフォームをカスタマイズする間接的な方法です。たとえば、レポート生成 URL ですべてのパラメータ値を完全に指定すると、パラメータ入力フィールドは生成されません。また、XSL 指定がレポートテンプレートで設定されており、必要なすべてのパラメータの値が HTTP パラメータで指定されている場合は、現在のフォーム処理によってフォームが完全にバイパスされ、レポート実行処理に直接進みます。
出力フォーマットセクションは、レポートテンプレートオブジェクトの XSL 指定に基づいて生成されます。XSL 指定が存在する場合、出力フォーマットセクションはバイパスされます。それ以外の場合は、フォーマットを指定するための入力フィールドが生成されます。ReportTemplateHelper getAvailableXSLFormats( ) メソッドは、標準 XSL のドロップダウンリストを構築するために使用されます。
レポート生成出力
レポート生成出力は XSLT API に依存しています。基本的な手順は以下のとおりです。
1. ReportTemplateHelper generateXML() メソッドを使用して、レポートデータを XML として生成します。
2. 適用する XSL スタイルシートのリストを取得します。このリストは、レポートテンプレートオブジェクトの属性として、または HTTP パラメータとして指定できます。レポートテンプレートオブジェクトの XSL 指定属性は、HTTP パラメータ値よりも優先されます。このロジックは、ReportTemplateHelper.getXSLSpec() メソッドに実装されています。
3. 必要に応じて、スタイルシートの配列と連鎖している XSLT 変換オブジェクトを作成します。このメソッドは ReportTemplateHelper.getTransform() に実装されています。
4. ReportTemplateHelper.getPostProcessor() を使用して、出力メディアタイプに基づいたポストプロセッサを取得します。このメソッドでは、プリファレンスメカニズムを使用して、ポストプロセッサのクラス名が読み込まれます。
5. レスポンス出力タイプを設定し、レスポンス出力ストリームに対するデータを生成します。
if(postProcessor==null)
{
// No post processor found
response.setHeader("content-type",
ReportTemplateHelper.concatMediaTypeAndEncoding(
outputMimeType, finalSheet.getOutputEncoding()));
transform.outputToStream( response.getOutputStream() );
}
else
(
// Post processor found
response.setHeader("content-type",
ReportTemplateHelper.concatMediaTypeAndEncoding(
postProcessor.getOutputMediaType(),
postProcessor.getOutputEncoding()));
postProcessor.process( transform, response.getOutputStream() );
新規クライアントの作成
前のセクションでは、現在のレポート生成クライアントと単純なカスタマイズの要点について説明しました。XSLT API、ReportTemplateHelper メソッド、およびレポートコマンドをベースとして使用することによって、まったく新しいクライアントを作成できる方法が数多くあります。ただし、このマニュアルでは、この項目について詳しく説明しません。
実行可能なカスタマイズの例は以下のとおりです。
ReportTemplateHelper API または、TypeInstances、QueryResult または Java Swing TableModel オブジェクトを返すレポートコマンドを使用します。これらのメソッドは、特定のタイプの表示を使用する Java クライアントか、または追加の結果セット処理を実装する必要がある Java クライアントで使用できます。
バックグラウンドまたはバッチモードでレポート生成を実行し (毎晩のレポート実行など)、Windchill に結果を保存します。
レポート生成 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 パラメータが指定されている場合にのみ使用されます。