高度なカスタマイズ > ビジネスロジックのカスタマイズ > レポートの生成 > カスタマイズの詳細 > マクロのカスタマイズ
  
マクロのカスタマイズ
マクロのカスタマイズでは、標準 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$$」という値を入力します。