001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.hayabusa.taglib; 017 018import org.opengion.fukurou.system.OgRuntimeException ; // 6.4.2.0 (2016/01/29) 019import org.opengion.hayabusa.common.HybsSystem; 020import org.opengion.hayabusa.common.HybsSystemException; 021import org.opengion.hayabusa.db.DBTableModel; 022import org.opengion.hayabusa.report.DBTableReport; 023import org.opengion.fukurou.util.FileUtil; 024import org.opengion.fukurou.util.Shell; 025import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 026import org.opengion.fukurou.util.StringUtil ; 027 028import static org.opengion.fukurou.util.StringUtil.nval ; 029import static org.opengion.fukurou.system.HybsConst.BR; // 6.1.0.0 (2014/12/26) refactoring 030 031import java.io.File; 032 033/** 034 * 検索結果の DBTableModelオブジェクトをレポート形式に変換するタグです。 035 * 036 * データ(DBTableModel)と、コントローラ(DBTableReport クラス)を与えて、 037 * 外部からコントロールすることで、各種形式で データ(DBTableModel)を表示させることが 038 * 可能です。 039 * 040 * @og.formSample 041 * ●形式:<og:report fileURL="[・・・]" listId="[・・・]" ・・・ /> 042 * ●body:なし 043 * 044 * ●Tag定義: 045 * <og:report 046 * listId ○【TAG】帳票IDを指定します(必須)。 047 * fileURL 【TAG】雛型のHTMLファイルの保存してある ディレクトリを指定します 048 * programFile 【TAG】HTMLファイルをEXCEL変換する場合に使用するBATファイルを指定します 049 * outFileURL 【TAG】出力HTMLファイルの保存してあるディレクトリを指定します 050 * outFilename ○【TAG】ファイルを作成するときの出力ファイル名をセットします(必須)。 051 * headerKeys 【TAG】固定部の{@KEY} の KEY 部分をCSV形式で複数指定します 052 * headerVals 【TAG】固定部のKEY に対応する値をCSV形式で複数指定します 053 * footerKeys 【TAG】繰り返し部の終了後に表示する key 部分をCSV形式で複数指定します 054 * footerVals 【TAG】固定部のKEY に対応する値をCSV形式で複数指定します 055 * pageEndCut 【TAG】ボディー部(繰り返し部)がなくなったときに、それ以降を表示するかどうか[true/false]を指定します(初期値:true) 056 * reportClass 【TAG】実際に書き出すクラス名の略称(DBTableReport_**** の ****)をセットします(初期値:HTML) 057 * language 【TAG】タグ内部で使用する言語コード[ja/en/zh/…]を指定します 058 * scope 【TAG】キャッシュする場合のスコープ[request/page/session/application]を指定します(初期値:session) 059 * tableId 【TAG】(通常は使いません)sessionから所得する DBTableModelオブジェクトの ID 060 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 061 * /> 062 * 063 * ●使用例 064 * 065 * @og.group その他出力 066 * 067 * @version 4.0 068 * @author Kazuhiko Hasegawa 069 * @since JDK5.0, 070 */ 071public class ReportTableTag extends CommonTagSupport { 072 /** このプログラムのVERSION文字列を設定します。 {@value} */ 073 private static final String VERSION = "6.4.2.1 (2016/02/05)" ; 074 private static final long serialVersionUID = 642120160205L ; 075 076 // 印刷時に使用するテンポラリフォルダ名 077 private final String REPORT_URL = 078 nval( HybsSystem.sys( "REPORT_FILE_URL" ) , 079 HybsSystem.sys( "FILE_URL" ) + "REPORT/" ) ; 080 081 // 3.8.0.4 (2005/08/08) 印刷時に使用するシステムID 082 private static final String SYSTEM_ID =HybsSystem.sys( "SYSTEM_ID" ); 083 084 // 3.8.0.4 (2005/08/08) 帳票出力に準拠した方式に変更 085 private final int TIMEOUT = HybsSystem.sysInt( "REPORT_DAEMON_TIMEOUT" ); 086 087 private final String BASE_URL = HybsSystem.sys( "FILE_URL" ); 088 089 private String[] headerKeys ; // 固定部の{@KEY} の KEY 部分を指定する。カンマで複数指定できる。 090 private String[] headerVals ; // 固定部のKEY に対応する値を指定する。 {@KEY} に置き換わる。 091 private String[] footerKeys ; // 繰り返し部の終了後に表示する key 部分を指定する。カンマで複数指定できる。 092 private String[] footerVals ; // 繰り返し部の終了後に表示する key に対する値を指定する。 093 private boolean pageEndCut = true; // ボディー部(繰り返し部)がなくなったときに、それ以降のページを出力するか指定する。 094 private String fileURL = BASE_URL; // 雛型のHTMLファイルの保存してある ディレクトリを指定します。 095 private String outFileURL = BASE_URL; // 出力HTMLファイルの保存してある ディレクトリを指定します。 096 private String outFilename ; // 出力HTMLファイル名を指定します。 ディレクトリ名を含んでも構いません。 097 private String reportClass = "HTML"; 098 099 private transient DBTableModel table ; 100 private String tableId = HybsSystem.TBL_MDL_KEY ; 101 // 3.8.0.4 (2005/08/08) 帳票出力に準拠した方式に変更 102 private String listId ; // 雛型のHTMLファイル名を指定します。 103 private String programFile ; // HTMLファイルのEXCEL化を行うバッチファイルを指定します。 104 105 /** 106 * デフォルトコンストラクター 107 * 108 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 109 */ 110 public ReportTableTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 111 112 /** 113 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 114 * 115 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 116 * @og.rev 3.8.0.4 (2005/08/08) 帳票出力に準拠した方式に変更 117 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソース統合( getResource().getMessage ⇒ getResource().getLabel ) 118 * @og.rev 4.0.0.0 (2007/11/28) メソッドの戻り値をチェックします。 119 * @og.rev 6.4.2.1 (2016/02/05) HybsSystem.url2dir に引数追加。 120 * 121 * @return 後続処理の指示 122 */ 123 @Override 124 public int doEndTag() { 125 debugPrint(); 126 127 final int rtnCode; 128 129 table = (DBTableModel)getObject( tableId ); 130 if( table == null || table.getRowCount() == 0 ) { 131 rtnCode = SKIP_PAGE ; // ページの残りの処理を行わない。 132 } 133 else { 134 synchronized( ReportTableTag.class ) { 135 final String reportDir = HybsSystem.url2dir( REPORT_URL , SYSTEM_ID , listId ) ; // 6.4.2.1 (2016/02/05) 136 // String ykno = HybsSystem.getDate( "yyyyMMddHHmmss" ); 137 final String ykno = String.valueOf( Math.round( Math.random() * 1000000 ) ) ; 138 139 create( reportDir,ykno ) ; 140 141 // 処理クラス(reportClass)が HTML の場合は、Shell を起動して、VBS で EXCEL化が必要。 142 if( programFile != null && "HTML".equalsIgnoreCase( reportClass ) ) { 143 final String htmlFile = StringUtil.urlAppend( reportDir , ykno ); // 6.4.2.1 (2016/02/05) 144 final String cmd = makeShellCommand( htmlFile,listId ); 145 programRun( cmd ); 146 } 147 148 if( outFilename != null ) { 149 final File outDir = new File( HybsSystem.url2dir( outFileURL ) ); 150 if( !outDir.exists() && !outDir.mkdirs() ) { 151 final String errMsg = "所定のフォルダを作成できませんでした。[" + outDir + "]" ; 152 throw new OgRuntimeException( errMsg ); 153 } 154 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid declaring a variable if it is unreferenced before a possible exit point. 155 final File xlsFile = new File( reportDir,ykno + ".xls" ); 156 final File outFile = new File( outDir,outFilename ); 157 FileUtil.copy( xlsFile , outFile ); 158 159 final String msg = getResource().getLabel( "MSG0003" ) // MSG0003=ファイルの登録が完了しました。 160 + BR 161 + getResource().getLabel( "MSG0022" ) // MSG0022=ファイル名 162 + ":" + outFile.getAbsolutePath() ; 163 jspPrint( msg ); 164 } 165 } 166 rtnCode = EVAL_PAGE ; 167 } 168 169 return rtnCode ; 170 } 171 172 /** 173 * タグリブオブジェクトをリリースします。 174 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 175 * 176 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 177 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 178 * @og.rev 3.1.3.0 (2003/04/10) REPORT_ENCODE(帳票エンコーディング)を利用するように修正。 179 * @og.rev 3.8.0.4 (2005/08/08) filename 削除、listId ,programFile 追加 , 180 * 181 */ 182 @Override 183 protected void release2() { 184 super.release2(); 185 headerKeys = null; 186 headerVals = null; 187 footerKeys = null; 188 footerVals = null; 189 pageEndCut = true; 190 fileURL = BASE_URL; 191 outFileURL = BASE_URL; 192 outFilename = null; // 出力ファイル名 193 reportClass = "HTML"; 194 table = null; 195 tableId = HybsSystem.TBL_MDL_KEY ; 196 listId = null ; // 3.8.0.4 (2005/08/08) 197 programFile = null ; // 3.8.0.4 (2005/08/08) 198 } 199 200 /** 201 * TableWriter の実オブジェクトを生成して,PrintWriter に書き込みます。 202 * 203 * @og.rev 3.1.3.0 (2003/04/10) REPORT_ENCODE(帳票エンコーディング)を利用するように修正。 204 * @og.rev 3.5.4.3 (2004/01/05) HTMLDBTableReport のクラス名変更。 205 * @og.rev 3.6.0.0 (2004/09/17) メソッド名の変更。setInputFile ⇒ setTemplateFile 206 * @og.rev 3.8.0.0 (2005/06/07) setTemplateFile メソッドの引数を String ⇒ File に変更 207 * @og.rev 3.8.0.4 (2005/08/08) 帳票出力に準拠した方式に変更 208 * @og.rev 4.0.0.0 (2005/01/31) lang ⇒ ResourceManager へ変更 209 * 210 * @param reportDir 出力ディレクトリ名 211 * @param ykno 要求番号 212 */ 213 private void create( final String reportDir,final String ykno ) { 214 215 final String MODELDIR = HybsSystem.url2dir( fileURL ) ; 216 217 File templateFile = null; 218 File firstTemplateFile = null; 219 220 // 本来は、各クラス中で処理すべき。そのためのオブジェクト指向なのだから。 221 if( "HTML".equalsIgnoreCase( reportClass ) ) { 222 templateFile = FileUtil.checkFile( MODELDIR, listId + ".html" , 1 ); 223 firstTemplateFile = FileUtil.checkFile( MODELDIR, listId + "_FIRST.html" ,1 ); 224 } 225 else if( "Excel".equalsIgnoreCase( reportClass ) ) { 226 templateFile = FileUtil.checkFile( MODELDIR, listId + ".xls" , 1 ); 227 } 228 else { 229 final String errMsg = "リポートクラスがサポート外です。[" + reportClass + "]" 230 + "クラスは、HTML、Excel のみサポートされています。" ; 231 throw new OgRuntimeException( errMsg ); 232 } 233 234 FileUtil.copy( templateFile,new File( reportDir ) ); 235 236 final String className = "org.opengion.hayabusa.report.DBTableReport_" + reportClass ; 237 final DBTableReport report = HybsSystem.newInstance( className ); // 3.5.5.3 (2004/04/09) 238 239 report.setDBTableModel( table ); 240 report.setTemplateFile( templateFile ); // 3.6.0.0 (2004/09/17) 241 report.setFirstTemplateFile( firstTemplateFile ); // 3.6.0.0 (2004/09/17) 242 report.setOutputDir( reportDir ); 243 report.setOutputFileKey( ykno ); 244 report.setHeaderKeys( headerKeys ); 245 report.setHeaderVals( headerVals ); 246 report.setFooterKeys( footerKeys ); 247 report.setFooterVals( footerVals ); 248 report.setPageEndCut( pageEndCut ); 249 report.setResourceManager( getResource() ); // 4.0.0 (2005/01/31) 250 report.setListId( listId ); // 3.6.1.0 (2005/01/05) 251 report.writeReport(); 252 } 253 254 /** 255 * 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します 256 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。 257 * 258 * @og.tag 259 * 検索結果より、DBTableModelオブジェクトを作成します。これを、下流のviewタグ等に 260 * 渡す場合に、通常は、session を利用します。その場合の登録キーです。 261 * query タグを同時に実行して、結果を求める場合、同一メモリに配置される為、 262 * この tableId 属性を利用して、メモリ空間を分けます。 263 * (初期値:HybsSystem#TBL_MDL_KEY[={@og.value HybsSystem#TBL_MDL_KEY}])。 264 * 265 * @param id テーブルID (sessionに登録する時のID) 266 */ 267 public void setTableId( final String id ) { 268 tableId = nval( getRequestParameter( id ), tableId ); 269 } 270 271 /** 272 * 【TAG】帳票IDを指定します。 273 * 274 * @og.tag 275 * 雛形ファイルは、帳票ID.html となります。また、ファーストページ対応の場合は、 276 * 帳票ID_FIRST.html になります。 277 * なお、filename 属性が指定された場合は、そちらが優先されます。 278 * 279 * @og.rev 3.8.0.4 (2005/08/08) 新規追加 280 * 281 * @param listId 帳票ID 282 */ 283 public void setListId( final String listId ) { 284 this.listId = nval( getRequestParameter( listId ), this.listId ); 285 } 286 287 /** 288 * 【TAG】固定部の{@KEY} の KEY 部分をCSV形式で複数指定します。 289 * 290 * @og.tag 291 * カンマで複数指定できます。 292 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 293 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 294 * 295 * @og.rev 3.5.6.2 (2004/07/05) 先に配列に分解してからリクエスト変数の値を取得 296 * 297 * @param hKeys 固定部のkey 298 */ 299 public void setHeaderKeys( final String hKeys ) { 300 headerKeys = getCSVParameter( hKeys ); 301 } 302 303 /** 304 * 【TAG】固定部のKEY に対応する値をCSV形式で複数指定します。 305 * 306 * @og.tag 307 * カンマで複数指定で、リクエスト情報でも設定できます。 308 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 309 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 310 * 311 * @og.rev 3.5.6.2 (2004/07/05) 先に配列に分解してからリクエスト変数の値を取得 312 * 313 * @param hVals 固定部の値 314 */ 315 public void setHeaderVals( final String hVals ) { 316 headerVals = getCSVParameter( hVals ); 317 } 318 319 /** 320 * 【TAG】繰り返し部の終了後に表示する key 部分をCSV形式で複数指定します。 321 * 322 * @og.tag 323 * カンマで複数指定できます。 324 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 325 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 326 * 327 * @og.rev 3.5.6.2 (2004/07/05) 先に配列に分解してからリクエスト変数の値を取得 328 * 329 * @param ftKeys 繰り返し部の終了後に表示するkey 330 */ 331 public void setFooterKeys( final String ftKeys ) { 332 footerKeys = getCSVParameter( ftKeys ); 333 } 334 335 /** 336 * 【TAG】固定部のKEY に対応する値をCSV形式で複数指定します。 337 * 338 * @og.tag 339 * カンマで複数指定で、リクエスト情報でも設定できます。 340 * 分解方法は、CSV変数を先に分解してから、getRequestParameter で値を取得します。 341 * こうしないとデータ自身にカンマを持っている場合に分解をミスる為です。 342 * 343 * @og.rev 3.5.6.2 (2004/07/05) 先に配列に分解してからリクエスト変数の値を取得 344 * @og.rev 3.8.1.2 (2005/12/19) footer 関連の値とpageEndCut の関係を解除します。 345 * 346 * @param ftVals 繰り返し部の終了後に表示する値 347 */ 348 public void setFooterVals( final String ftVals ) { 349 footerVals = getCSVParameter( ftVals ); 350 } 351 352 /** 353 * 【TAG】ページエンドカットするかどうか[true:する/false:しない]を指定します(初期値:true:カットする)。 354 * 355 * @og.tag 356 * ページエンドカットとは、ボディー部(繰り返し部)がなくなったときに、それ以降の表示を打ち切る(カットする) 357 * 機能で、(true:カットする) を指定すると、それ以降を出力しません。 358 * 初期値は "true" (なくなった時点で、出力しない)です。 359 * 360 * @og.rev 3.8.1.2 (2005/12/19) footer 関連の値とpageEndCut の関係を解除します。 361 * 362 * @param peCut ページ終了カット [true:する/false:しない] 363 */ 364 public void setPageEndCut( final String peCut ) { 365 pageEndCut = nval( getRequestParameter( peCut ),pageEndCut ); 366 } 367 368 /** 369 * 【TAG】雛型のHTMLファイルの保存してある ディレクトリを指定します 370 * (初期値:FILE_URL[={@og.value SystemData#FILE_URL}])。 371 * 372 * @og.tag 373 * この属性で指定されるディレクトリのファイルを読み取ります。 374 * 指定方法は、通常の fileURL 属性と同様に、先頭が、'/' (UNIX) または、2文字目が、 375 * ":" (Windows)の場合は、指定のURLそのままのディレクトリに、そうでない場合は、 376 * システムパラメータ の FILE_URL 属性で指定のフォルダの下に、作成されます。 377 * fileURL = "{@USER.ID}" と指定すると、FILE_URL 属性で指定のフォルダの下に、 378 * さらに、各個人ID別のフォルダを作成して、そこを操作します。 379 * (初期値:FILE_URL[={@og.value SystemData#FILE_URL}])。 380 * 381 * @og.rev 4.0.0.0 (2005/01/31) StringUtil.urlAppend メソッドの利用 382 * @og.rev 4.0.0.0 (2007/11/20) 指定されたディレクトリ名の最後が"\"or"/"で終わっていない場合に、"/"を付加する。 383 * @og.rev 6.4.2.1 (2016/02/05) URLの最後に、"/" を追加する処理を廃止。 384 * 385 * @param url 雛型のHTMLファイルのディレクトリ 386 */ 387 public void setFileURL( final String url ) { 388 final String furl = nval( getRequestParameter( url ),null ); 389 if( furl != null ) { 390 fileURL = StringUtil.urlAppend( fileURL,furl ); 391 } 392 } 393 394 /** 395 * 【TAG】HTMLファイルをEXCEL変換する場合に使用するBATファイルを指定します。 396 * 397 * @og.tag 398 * ファイルは、フルパスで指定してください。 399 * 指定がない場合は、変換処理は行いません。 400 * 通常は、dbdef2/def/Script/runExcelPrint.bat を呼び出してください。 401 * 初期値は、null(変換処理しない)です。 402 * 403 * @og.rev 3.8.0.4 (2005/08/08) 新規追加 404 * 405 * @param programFile プログラムファイル名 406 */ 407 public void setProgramFile( final String programFile ) { 408 this.programFile = nval( getRequestParameter( programFile ),this.programFile ); 409 } 410 411 /** 412 * 【TAG】出力HTMLファイルの保存してあるディレクトリを指定します 413 * (初期値:FILE_URL[={@og.value SystemData#FILE_URL}])。 414 * 415 * @og.tag 416 * この属性で指定されるディレクトリにファイルを出力します。 417 * 指定方法は、通常の fileURL 属性と同様に、先頭が、'/' (UNIX) または、2文字目が、 418 * ":" (Windows)の場合は、指定のURLそのままのディレクトリに、そうでない場合は、 419 * システムパラメータ の FILE_URL 属性で指定のフォルダの下に、作成されます。 420 * fileURL = "{@USER.ID}" と指定すると、FILE_URL 属性で指定のフォルダの下に、 421 * さらに、各個人ID別のフォルダを作成して、そこに出力します。 422 * (初期値:FILE_URL[={@og.value SystemData#FILE_URL}])。 423 * 424 * @og.rev 4.0.0.0 (2007/11/20) 指定されたディレクトリ名の最後が"\"or"/"で終わっていない場合に、"/"を付加する。 425 * @og.rev 6.4.2.1 (2016/02/05) URLの最後に、"/" を追加する処理を廃止。 426 * 427 * @param url 出力HTMLファイルのディレクトリ 428 */ 429 public void setOutFileURL( final String url ) { 430 final String furl = nval( getRequestParameter( url ),null ); 431 if( furl != null ) { 432 outFileURL = StringUtil.urlAppend( outFileURL,furl ); 433 } 434 } 435 436 /** 437 * 【TAG】ファイルを作成するときの出力ファイル名をセットします。 438 * 439 * @og.tag ファイルを作成するときの出力ファイル名をセットします。 440 * 441 * @param filename 出力ファイル名 442 */ 443 public void setOutFilename( final String filename ) { 444 this.outFilename = nval( getRequestParameter( filename ),this.outFilename ); 445 } 446 447 /** 448 * 【TAG】実際に書き出すクラス名の略称(DBTableReport_**** の ****)をセットします(初期値:HTML)。 449 * 450 * @og.tag 451 * これは、org.opengion.hayabusa.report 以下の DBTableReport_**** クラスの **** を 452 * 与えます。これらは、DBTableReport インターフェースを継承したサブクラスです。 453 * 初期値は、"HTML" です。 454 * 属性クラス定義の {@link org.opengion.hayabusa.report.DBTableReport DBTableReport} を参照願います。 455 * 456 * @param reportClass クラス名(の略称) 457 * @see org.opengion.hayabusa.report.DBTableReport DBTableReportのサブクラス 458 */ 459 public void setReportClass( final String reportClass ) { 460 this.reportClass = nval( getRequestParameter( reportClass ),this.reportClass ); 461 } 462 463 /** 464 * シェルコマンドの文字列を作成します。 465 * 466 * 処理クラス(reportClass)が HTML の場合は、Shell を起動して、VBS で EXCEL化が必要。 467 * 468 * @og.rev 3.8.0.4 (2005/08/08) 新規追加 469 * @og.rev 3.8.0.8 (2005/10/03) デーモングループのデフォルト値設定 470 * 471 * @param htmlFile パーサ済みのHTMLファイル(拡張子なし) 472 * @param listId 雛形ファイル(帳票ID) 473 * 474 * @return シェルコマンドの文字列 475 * @og.rtnNotNull 476 */ 477 private String makeShellCommand( final String htmlFile,final String listId ) { 478 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ) 479 .append( programFile ).append( ' ' ) // 実行するコマンド 480 .append( '"' ) // 6.0.2.5 (2014/10/31) char を append する。 481 .append( htmlFile ).append( "_*.html\" " ) // 入力HTMLファイル 482 .append( "\"xls\" " ) // プリンタ名 483 // ダミーファイルを指定する必要がある。 484 .append( '"' ) // 6.0.2.5 (2014/10/31) char を append する。 485 .append( htmlFile ).append( ".xls\" " ) // ダミー出力ファイル 486 .append( listId ) // モデルファイル名 487 .append( " NULL" ); // ダミーデーモングループ 488 489 return buf.toString(); 490 } 491 492 /** 493 * 実際のレポート出力処理を行います。 494 * 495 * 処理クラス(reportClass)が HTML の場合は、Shell を起動して、VBS で EXCEL化が必要。 496 * 497 * @og.rev 3.8.0.4 (2005/08/08) 新規追加 498 * 499 * @param shellCmd シェルを実行するコマンド文字列 500 */ 501 private void programRun( final String shellCmd ) { 502 final Shell shell = new Shell(); 503 shell.setCommand( shellCmd,true ); // BATCHプロセスで実行する 504 shell.setWait( true ); // プロセスの終了を待つ 505 shell.setTimeout( TIMEOUT ); // 3.6.1.0 (2005/01/05) Shell の タイムアウトを設定 506 507 final int rtnCode = shell.exec(); // 0 は正常終了を示す 508 509 if( rtnCode != 0 ) { 510 final String errMsg = "Shell Command exequte Error." + CR 511 + "==============================" 512 + shellCmd + CR 513 + shell.getStdoutData() + CR 514 + shell.getStderrData() + CR ; 515 throw new HybsSystemException( errMsg ); // 3.5.5.4 (2004/04/15) 引数の並び順変更 516 } 517 } 518 519 /** 520 * タグの名称を、返します。 521 * 自分自身のクラス名より、自動的に取り出せないため、このメソッドをオーバーライドします。 522 * 523 * @og.rev 4.0.0.0 (2005/01/31) 新規追加 524 * 525 * @return タグの名称 526 * @og.rtnNotNull 527 */ 528 @Override 529 protected String getTagName() { 530 return "report" ; 531 } 532 533 /** 534 * このオブジェクトの文字列表現を返します。 535 * 基本的にデバッグ目的に使用します。 536 * 537 * @return このクラスの文字列表現 538 * @og.rtnNotNull 539 */ 540 @Override 541 public String toString() { 542 return ToString.title( this.getClass().getName() ) 543 .println( "VERSION" ,VERSION ) 544 .println( "headerKeys" ,headerKeys ) 545 .println( "headerVals" ,headerVals ) 546 .println( "footerKeys" ,footerKeys ) 547 .println( "footerVals" ,footerVals ) 548 .println( "pageEndCut" ,pageEndCut ) 549 .println( "fileURL" ,fileURL ) 550 .println( "outFileURL" ,outFileURL ) 551 .println( "outFilename" ,outFilename ) 552 .println( "reportClass" ,reportClass ) 553 .println( "tableId" ,tableId ) 554 .println( "listId" ,listId ) 555 .println( "programFile" ,programFile ) 556 .println( "REPORT_FILE_URL" ,REPORT_URL ) 557 .println( "SYSTEM_ID" ,SYSTEM_ID ) 558 .println( "TIMEOUT" ,TIMEOUT ) 559 .println( "BASE_URL" ,BASE_URL ) 560 .println( "Other..." ,getAttributes().getAttribute() ) 561 .fixForm().toString() ; 562 } 563}