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 */ 016 package org.opengion.hayabusa.report2; 017 018 import java.io.File; 019 import java.util.Arrays; 020 021 import org.opengion.fukurou.db.DBFunctionName; 022 import org.opengion.fukurou.db.DBUtil; 023 import org.opengion.fukurou.mail.MailTX; 024 import org.opengion.fukurou.util.ApplicationInfo; 025 import org.opengion.fukurou.util.LogWriter; 026 import org.opengion.fukurou.util.StringUtil; 027 import org.opengion.hayabusa.common.HybsSystem; 028 import org.opengion.hayabusa.db.DBTableModel; 029 import org.opengion.hayabusa.db.DBTableModelUtil; 030 import org.opengion.hayabusa.resource.ResourceFactory; 031 import org.opengion.hayabusa.resource.ResourceManager; 032 033 /** 034 * DBからキューを作?するためのクラスです? 035 * キューはGE5x??ブルから作?されます? 036 * 037 * キュー生?時点(処?レ?にスタ?した時点)では、帳票??タの??ブルモ?は作?されません? 038 * 帳票??タは、各スレ?からset()メソ?を呼び出したタイミングで生?されます? 039 * 040 * 処?始及び、完??ス??タスは、GE50の完?フラグに更新されます? 041 * また?エラー発生時のメ?ージは、GE56に更新されます? 042 * 043 * @og.group 帳票シス? 044 * 045 * @version 4.0 046 * @author Hiroki.Nakamura 047 * @since JDK1.6 048 */ 049 public final class QueueManager_DB implements QueueManager { 050 051 /** コネクションにアプリケーション??を追記するかど???*/ 052 private static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 053 054 /** アプリケーション?? */ 055 private static final ApplicationInfo appInfo; 056 static { 057 if( USE_DB_APPLICATION_INFO ) { 058 appInfo = new ApplicationInfo(); 059 // ユーザーID,IPアドレス,ホスト名 060 appInfo.setClientInfo( "ReportDaemon", HybsSystem.HOST_ADRS, HybsSystem.HOST_NAME ); 061 // 画面ID,操?プログラ?D 062 appInfo.setModuleInfo( "ReportDaemon", "QueueManager", "QueueManager" ); 063 } 064 else { 065 appInfo = null; 066 } 067 } 068 069 private static final String DBID = HybsSystem.sys( "RESOURCE_DBID" ); // 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 070 071 // private static final String SQL_SELECT_GE50 = 072 // "SELECT A.SYSTEM_ID, A.YKNO, A.LISTID, A.OUT_DIR, A.OUT_FILE, A.PDF_PASSWD" 073 // + ", B.LANG, B.FGRUN, B.DMN_GRP " 074 // + ", C.MODELDIR, C.MODELFILE, D.PRTNM, C.FGLOCAL, C.FGCUT, C.BSQL, C.HSQL, C.FSQL " 075 // + "FROM GE50 A, GE53 B, GE54 C, GE55 D " 076 // + "WHERE A.FGKAN='1' " 077 // + "AND A.SYSTEM_ID = B.SYSTEM_ID AND A.JOKEN = B.JOKEN " 078 // + "AND A.SYSTEM_ID = C.SYSTEM_ID AND A.LISTID = C.LISTID " 079 // + "AND B.SYSTEM_ID = D.SYSTEM_ID AND B.PRTID = D.PRTID ORDER BY" 080 // + HybsSystem.sys( "REPORT_DAEMON_ORDER_BY" ); 081 082 // 4.3.0.0 (2008/07/18) PDF出力時に出力?マスタは不要?ためGE55は外部結合に変更 083 // private static final String SQL_SELECT_GE50 = 084 // "SELECT A.SYSTEM_ID, A.YKNO, A.LISTID, A.OUT_DIR, A.OUT_FILE, A.PDF_PASSWD" 085 // + ", B.LANG, B.FGRUN, B.DMN_GRP " 086 // + ", C.MODELDIR, C.MODELFILE, D.PRTNM, C.FGLOCAL, C.FGCUT, C.BSQL, C.HSQL, C.FSQL " 087 // + "FROM GE50 A, GE53 B, GE54 C, GE55 D " 088 // + "WHERE A.FGKAN='1' " 089 // + "AND A.SYSTEM_ID = B.SYSTEM_ID AND A.JOKEN = B.JOKEN " 090 // + "AND A.SYSTEM_ID = C.SYSTEM_ID AND A.LISTID = C.LISTID " 091 // + "AND B.SYSTEM_ID = D.SYSTEM_ID(+) AND B.PRTID = D.PRTID(+) ORDER BY" 092 // + HybsSystem.sys( "REPORT_DAEMON_ORDER_BY" ); 093 094 // 4.3.7.0 (2009/06/01) HSQLDB対? 095 // private static final String CON = DBFunctionName.getFunctionName( "CON", ConnectionFactory.getDBFullName( null ) ); 096 // 5.1.4.0 (2010/03/01) ??タベ?ス?でなく?DBID名で検索するように変更します? 097 private static final String CON = DBFunctionName.getFunctionName( "CON", null ); 098 099 // 5.2.0.0 (2010/09/01) Ver4互換モード対? 100 private static final String OUT_FILE = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTFILE" : "OUT_FILE"; 101 private static final String OUT_DIR = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "OUTDIR" : "OUT_DIR"; 102 103 // 4.3.3.6 (2008/11/15) マルチサーバ対応追?GE12から処?象??モングループ取? 104 // 4.3.7.0 (2009/06/01) HSQLDB対? 105 // 5.2.0.0 (2010/09/01) Ver4互換モード対? 106 // 5.4.2.0 (2011/12/26) PRTID,PRGDIR,PRGFILE取? 107 private static final String SQL_SELECT_GE50 = 108 // "SELECT A.SYSTEM_ID, A.YKNO, A.LISTID, A.OUT_DIR, A.OUT_FILE, A.PDF_PASSWD" 109 "SELECT A.SYSTEM_ID, A.YKNO, A.LISTID, A."+OUT_DIR+", A."+OUT_FILE+", A.PDF_PASSWD" 110 + ", B.LANG, B.FGRUN, B.DMN_GRP " 111 + ", C.MODELDIR, C.MODELFILE, D.PRTNM, C.FGLOCAL, C.FGCUT, C.BSQL, C.HSQL, C.FSQL " 112 + " ,B.PRTID, B.PRGDIR, B.PRGFILE " 113 // + "FROM GE50 A, GE53 B, GE54 C, GE55 D " 114 + "FROM GE50 A " 115 + "INNER JOIN GE53 B " 116 + "ON A.SYSTEM_ID = B.SYSTEM_ID AND A.JOKEN = B.JOKEN " 117 + "INNER JOIN GE54 C " 118 + "ON A.SYSTEM_ID = C.SYSTEM_ID AND A.LISTID = C.LISTID " 119 + "LEFT OUTER JOIN GE55 D " 120 + "ON B.SYSTEM_ID = D.SYSTEM_ID AND B.PRTID = D.PRTID " 121 + "WHERE A.FGKAN='1' " 122 + "AND EXISTS ( SELECT 'X' FROM GE12 E " 123 + "WHERE E.FGJ ='1' " 124 + "AND E.SYSTEM_ID = '" 125 + HybsSystem.sys( "SYSTEM_ID" ) 126 + "' " 127 + "AND E.CONTXT_PATH = '" 128 + HybsSystem.sys( "HOST_URL" ) 129 + "' " 130 + "AND E.PARAM_ID LIKE 'REPORT2_HANDLE_DAEMON_%' " 131 + "AND E.PARAM = 'RUN_'" + CON + "A.SYSTEM_ID" + CON + "'_'" + CON + "B.DMN_GRP" 132 + ") " 133 // + "AND A.SYSTEM_ID = B.SYSTEM_ID AND A.JOKEN = B.JOKEN " 134 // + "AND A.SYSTEM_ID = C.SYSTEM_ID AND A.LISTID = C.LISTID " 135 // + "AND B.SYSTEM_ID = D.SYSTEM_ID(+) AND B.PRTID = D.PRTID(+) ORDER BY" 136 + "ORDER BY " 137 + HybsSystem.sys( "REPORT_DAEMON_ORDER_BY" ); 138 139 // 5.1.2.0 (2010/01/01) ペ?ジ数、データ数をGE50に更新する? 140 private static final String SQL_UPDATE_GE50 = 141 // "UPDATE GE50 SET FGKAN = ?, DMN_NAME = ?, DMN_HOST = ? ,DYUPD = ? WHERE SYSTEM_ID = ? AND YKNO = ?"; 142 "UPDATE GE50 SET FGKAN = ?, DMN_NAME = ?, DMN_HOST = ?, SUDATA = ?, SUPAGE = ?, DYUPD = ? WHERE SYSTEM_ID = ? AND YKNO = ?"; 143 144 private static final String SQL_INSERT_GE56 = 145 "INSERT INTO GE56 ( FGJ, SYSTEM_ID, YKNO, ERRMSG, DYSET, DYUPD, USRSET, USRUPD, PGUPD ) " 146 + " VALUES ( '1', ?, ? ,? ,? ,? ,? ,? ,? )" ; 147 148 private static final int STATUS_COMPLETE = 2; 149 private static final int STATUS_EXECUTE = 3; 150 private static final int STATUS_ERROR = 8; 151 152 private static QueueManager manager = new QueueManager_DB(); 153 154 /** 155 * インスタンスの生?を禁止します? 156 */ 157 private QueueManager_DB() {} 158 159 /** 160 * インスタンスを返します? 161 * 162 * @return 帳票処?ューの管??ネ?ジャ 163 */ 164 public static QueueManager getInstance() { 165 return manager; 166 } 167 168 /** 169 * 帳票処?ューを作?します? 170 * 171 * @og.rev 4.3.0.0 (2008/07/15) スレ?IDにシス?IDを付加します? 172 * @og.rev 5.1.2.0 (2010/01/01) HSQL,FSQL,BSQLのセ?を?します?(こ?クラス???タを直接?) 173 * @og.rev 5.4.3.0 (2011/12/26) PRTIDの取? 174 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 175 */ 176 public synchronized void create() { 177 // キューをスタ?するまでの例外?、ScheduleTagでcatchされ??モンがスリープする? 178 // String[][] ge50vals = DBUtil.dbExecute( SQL_SELECT_GE50, new String[0], appInfo ); 179 String[][] ge50vals = DBUtil.dbExecute( SQL_SELECT_GE50, new String[0], appInfo, DBID ); // 5.5.5.1 (2012/08/07) 180 181 for( int i=0; i<ge50vals.length; i++ ) { 182 ExecQueue queue = new ExecQueue(); 183 queue.setSystemId( ge50vals[i][0] ); 184 queue.setYkno( ge50vals[i][1] ); 185 queue.setListId( ge50vals[i][2] ); 186 // queue.setOutputName( new File( ge50vals[i][3] ).getAbsolutePath() + File.separator + ge50vals[i][4] ); 187 queue.setOutputName( new File( ge50vals[i][3] ).getAbsolutePath() , ge50vals[i][4] , ge50vals[i][7] , ge50vals[i][1] ); // 4.3.0.0 (2008/07/18) 要求番号を?力ファイル名に利用 188 queue.setPdfPasswd( ge50vals[i][5] ); 189 queue.setLang( ge50vals[i][6] ); 190 queue.setOutputType( ge50vals[i][7] ); 191 // queue.setThreadId( StringUtil.nval( ge50vals[i][8] , "_DEFALUT_" ) ); 192 queue.setThreadId( ge50vals[i][0] + "_" + StringUtil.nval( ge50vals[i][8] , "_DEFALUT_" ) ); // 4.3.0.0 (2008/07/15) 193 queue.setTemplateName( new File( ge50vals[i][9] ).getAbsolutePath() + File.separator + ge50vals[i][10] ); 194 queue.setPrinterName( ge50vals[i][11] ); 195 queue.setFglocal( "1".equals( ge50vals[i][12] ) ); 196 queue.setFgcut( "1".equals( ge50vals[i][13] ) ); 197 198 // queue.setBsql( ge50vals[i][14] ); 199 // queue.setHsql( ge50vals[i][15] ); 200 // queue.setFsql( ge50vals[i][16] ); 201 202 queue.setPrtId( ge50vals[i][17] ); // 5.4.3.0 203 queue.setPrgDir( ge50vals[i][18] ); // 5.4.3.0 204 queue.setPrgFile( ge50vals[i][19] ); // 5.4.3.0 205 206 queue.setManager( this ); 207 208 ExecThreadManager.insertQueue( queue ); 209 } 210 } 211 212 /** 213 * 帳票処?ータをキューにセ?します? 214 * 215 * @og.rev 5.1.2.0 (2010/01/01) HSQL,FSQL,BSQLのセ?を?します?(こ?クラス???タを直接?) 216 * 217 * @param queue ExecQueueオブジェク? 218 */ 219 public void set( final ExecQueue queue ) { 220 221 ResourceManager resource = null; 222 if( queue.isFglocal() ) { 223 resource = ResourceFactory.newInstance( queue.getSystemId(), queue.getLang(), false ); 224 } 225 else { 226 resource = ResourceFactory.newInstance( queue.getLang() ); 227 } 228 // String[] where = new String[] { queue.getSystemId() , queue.getYkno() } ; 229 230 // ヘッ????の取? 231 // DBTableModel header = DBTableModelUtil.makeDBTable( queue.getHsql(), where, resource, appInfo ); 232 DBTableModel header 233 = (new DBTableModelCreator( queue.getSystemId(), queue.getListId(), queue.getYkno(), "H", resource )).getTable(); 234 if( header != null && header.getRowCount() > 0 ) { 235 queue.setHeader( header ); 236 } 237 238 // フッター??の取? 239 // DBTableModel footer = DBTableModelUtil.makeDBTable( queue.getFsql(), where, resource, appInfo ); 240 DBTableModel footer 241 = (new DBTableModelCreator( queue.getSystemId(), queue.getListId(), queue.getYkno(), "F", resource )).getTable(); 242 if( footer != null && footer.getRowCount() > 0 ) { 243 queue.setFooter( footer ); 244 } 245 246 // ボディー??の取? 247 // DBTableModel body = DBTableModelUtil.makeDBTable( queue.getBsql(), where, resource, appInfo ); 248 DBTableModel body 249 = (new DBTableModelCreator( queue.getSystemId(), queue.getListId(), queue.getYkno(), "B", resource )).getTable(); 250 // レイアウトテーブルがな?固定長を?割するSQL?設定されず、DBTableModelがnullにな? 251 if( body == null ) { 252 queue.addMsg( "[ERROR] DBTableModel doesn't exists! maybe Layout-Table(GE52) is not configured..." + HybsSystem.CR ); 253 queue.setError(); 254 throw new RuntimeException(); 255 } 256 if( body.getRowCount() <= 0 ) { 257 queue.addMsg( "[ERROR] Database Body row count is Zero." + queue.getYkno() + HybsSystem.CR ); 258 queue.setError(); 259 throw new RuntimeException(); 260 } 261 if( body.isOverflow() ) { 262 queue.addMsg( "[ERROR]Database is Overflow. [" + body.getRowCount() + "]" + HybsSystem.CR ); 263 queue.addMsg( "[ERROR]Check SystemParameter Data in DB_MAX_ROW_COUNT Overflow" + HybsSystem.CR ); 264 queue.setError(); 265 throw new RuntimeException(); 266 } 267 queue.setBody( body ); 268 } 269 270 /** 271 * キューを実行中の状態に更新します? 272 * 273 * @param queue ExecQueueオブジェク? 274 */ 275 public void execute( final ExecQueue queue ) { 276 status( queue, STATUS_EXECUTE ); 277 } 278 279 /** 280 * キューを完??状態に更新します? 281 * 282 * @param queue ExecQueueオブジェク? 283 */ 284 public void complete( final ExecQueue queue ) { 285 status( queue, STATUS_COMPLETE ); 286 } 287 288 /** 289 * キューをエラーの状態に更新します? 290 * 291 * @param queue ExecQueueオブジェク? 292 */ 293 public void error( final ExecQueue queue ) { 294 status( queue, STATUS_ERROR ); 295 insertErrorMsg( queue ); 296 } 297 298 /** 299 * GE50の状況Cを更新します? 300 * 301 * @og.rev 4.2.4.1 (2008/07/09) 更新日時をセ? 302 * @og.rev 5.1.2.0 (2010/01/01) 行数、?ージ数も更新する 303 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 304 * 305 * @param queue ExecQueueオブジェク? 306 * @param status 状況C 307 */ 308 private void status( final ExecQueue queue, final int status ) { 309 310 String dyupd = HybsSystem.getDate( "yyyyMMddHHmmss" ) ; 311 312 String[] args 313 = new String[]{ String.valueOf( status ), queue.getThreadId(), HybsSystem.sys( "HOST_NAME" ) 314 , String.valueOf( queue.getExecRowCnt() ), String.valueOf( queue.getExecPagesCnt() ) 315 , dyupd , queue.getSystemId(), queue.getYkno() }; 316 317 // DBUtil.dbExecute( SQL_UPDATE_GE50, args, appInfo ); 318 DBUtil.dbExecute( SQL_UPDATE_GE50, args, appInfo, DBID ); // 5.5.5.1 (2012/08/07) 319 } 320 321 /** 322 * GE56にエラーメ?ージを?力します? 323 * 324 * @og.rev 4.4.0.1 (2009/08/08) エラーメ?ージ機?追? 325 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 326 * 327 * @param queue ExecQueueオブジェク? 328 */ 329 private void insertErrorMsg( final ExecQueue queue ) { 330 String errmsg = queue.getMsg(); 331 if( errmsg.length() > 1300 ) { 332 errmsg = errmsg.substring( errmsg.length() - 1300, errmsg.length() ); 333 } 334 335 String dyset = HybsSystem.getDate( "yyyyMMddHHmmss" ) ; 336 337 String[] args 338 = new String[]{ queue.getSystemId(), queue.getYkno(), errmsg 339 , dyset, dyset, "UNKNOWN", "UNKNOWN", "UNKNOWN" }; 340 341 // DBUtil.dbExecute( SQL_INSERT_GE56, args, appInfo ); 342 DBUtil.dbExecute( SQL_INSERT_GE56, args, appInfo, DBID ); // 5.5.5.1 (2012/08/07) 343 344 sendMail( queue, errmsg ); // 4.4.0.1 (2009/08/08) 345 } 346 347 /** 348 * エラー??のメール送信を行います? 349 * エラーメールは、シス?パラメータ の COMMON_MAIL_SERVER(メールサーバ?)と 350 * ERROR_MAIL_FROM_USER(エラーメール発信?と、ERROR_MAIL_TO_USERS(エラーメール受信? 351 * がすべて設定されて?場合に??信されます? 352 * 353 * @og.rev 4.4.0.1 (2009/08/08) 追? 354 * @og.rev 5.7.0.4 (2013/11/29) listIdの絞込み 355 * 356 * @param queue ExecQueueオブジェク? 357 * @param inErrMsg エラーメ?ージ 358 */ 359 private void sendMail( final ExecQueue queue, final String inErrMsg ) { 360 361 String host = HybsSystem.sys( "COMMON_MAIL_SERVER" ); 362 String from = HybsSystem.sys( "ERROR_MAIL_FROM_USER" ); 363 String[] to = StringUtil.csv2Array( HybsSystem.sys( "ERROR_MAIL_TO_USERS" ) ); 364 String match_txt = HybsSystem.sys( "REPORT_ERRMAIL_REGEX" ); // 5.7.0.4 (2013/11/29) 365 if( host != null && from != null && to.length > 0 ) { 366 if( match_txt == null || match_txt.length() == 0 367 || queue.getListId() == null || queue.getListId().length() == 0 368 || queue.getListId().matches( match_txt )){ // 5.7.0.4 (2013/11/29) 369 // 5.7.0.4 (2013/11/29) listid追? 370 String subject = "SYSTEM_ID=[" + queue.getSystemId() + "] , YKNO=[" + queue.getYkno() + "] , " 371 + "THREAD_ID=[" + queue.getThreadId() + "] , DMN_HOST=[" + HybsSystem.HOST_NAME + "]" 372 + "LISTID=["+ queue.getListId() + "]"; 373 try { 374 MailTX tx = new MailTX( host ); 375 tx.setFrom( from ); 376 tx.setTo( to ); 377 tx.setSubject( "帳票エラー?? + subject ); 378 tx.setMessage( inErrMsg ); 379 tx.sendmail(); 380 } 381 catch( Throwable ex ) { 382 String errMsg = "エラー時メール送信に失敗しました? + HybsSystem.CR 383 + " SUBJECT:" + subject + HybsSystem.CR 384 + " HOST:" + host + HybsSystem.CR 385 + " FROM:" + from + HybsSystem.CR 386 + " TO:" + Arrays.toString( to ) + HybsSystem.CR 387 + ex.getMessage(); // 5.1.8.0 (2010/07/01) errMsg 修正 388 LogWriter.log( errMsg ); 389 LogWriter.log( ex ); 390 } 391 } 392 } 393 } 394 395 /** 396 * 帳票明細??タを帳票レイアウトテーブルに従って?し?そ?結果をDBTableModelとして 397 * 生?します? 398 * ??タの?は、バイト数ベ?スで行われるため、エンコードを正しく?する?があります? 399 * エンコード指定?、シス?リソースのDB_ENCODEで?します? 400 * 401 * レイアウトテーブルが存在しな??合?又?、帳票??タが存在しな??合?DBTableModelは 402 * nullで返されます? 403 */ 404 public static class DBTableModelCreator { 405 // 5.2.0.0 (2010/09/01) Ver4互換モード対? 406 private static final String CLM = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "COLUMN_NAME" : "CLM"; 407 private static final String TEXT_DATA = HybsSystem.sysBool( "VER4_COMPATIBLE_MODE" ) ? "TEXT" : "TEXT_DATA"; 408 409 // 5.2.0.0 (2010/09/01) Ver4互換モード対? 410 // 5.4.4.3 (2012/02/09) FGUSE条件追?? 411 private static final String SQL_SELECT_GE52 = 412 // " select CLM, START_POS, USE_LENGTH" 413 " select "+CLM+", START_POS, USE_LENGTH" 414 + " from GE52" 415 + " where SYSTEM_ID = ?" 416 + " and LISTID = ?" 417 + " and KBTEXT = ?" 418 + " and FGJ = '1'" 419 + " and FGUSE = '1'" // 5.4.4.3 420 + " order by SEQ"; 421 422 // 5.2.0.0 (2010/09/01) Ver4互換モード対? 423 private static final String SQL_SELECT_GE51 = 424 // " select TEXT_DATA" 425 " select "+TEXT_DATA 426 + " from GE51" 427 + " where SYSTEM_ID = ?" 428 + " and YKNO = ?" 429 + " and KBTEXT = ?" 430 + " and FGJ = '1'"; 431 432 private static final String ENCODE = HybsSystem.sys( "DB_ENCODE" ); 433 434 private final String systemId; 435 private final String listId; 436 private final String ykno; 437 private final String kbtext; 438 private final ResourceManager resource; 439 440 private DBTableModel table = null; 441 442 /** 443 * コンストラクタです? 444 * 445 * @param sid シス?ID 446 * @param lid 帳票ID 447 * @param yk 要?O 448 * @param kt ?スト区?H:ヘッ?? F:フッター B:ボディー) 449 * @param res リソースマネージャー 450 */ 451 public DBTableModelCreator( final String sid, final String lid, final String yk, final String kt, final ResourceManager res ) { 452 systemId = sid; 453 listId = lid; 454 ykno = yk; 455 kbtext = kt; 456 resource = res; 457 create(); 458 } 459 460 /** 461 * 帳票??タをレイアウト定義に従い?します? 462 * 463 * @og.rev 5.5.5.1 (2012/08/07) リソース系DBID 付け忘れ対? 464 */ 465 private void create() { 466 String[] ge52Where = new String[] { systemId, listId, kbtext } ; 467 // String[][] ge52Vals = DBUtil.dbExecute( SQL_SELECT_GE52, ge52Where, appInfo ); 468 String[][] ge52Vals = DBUtil.dbExecute( SQL_SELECT_GE52, ge52Where, appInfo, DBID ); // 5.5.5.1 (2012/08/07) 469 if( ge52Vals == null || ge52Vals.length == 0 ) { 470 return; 471 } 472 473 String[] ge51Where = new String[] { systemId, ykno, kbtext } ; 474 // String[][] ge51Vals = DBUtil.dbExecute( SQL_SELECT_GE51, ge51Where, appInfo ); 475 String[][] ge51Vals = DBUtil.dbExecute( SQL_SELECT_GE51, ge51Where, appInfo, DBID ); // 5.5.5.1 (2012/08/07) 476 if( ge51Vals == null || ge51Vals.length == 0 ) { 477 return; 478 } 479 480 String[] clms = new String[ge52Vals.length]; 481 for( int i=0; i<ge52Vals.length; i++ ) { 482 clms[i] = ge52Vals[i][0]; 483 } 484 485 String[][] vals = new String[ge51Vals.length][ge52Vals.length]; 486 for( int i=0; i<ge51Vals.length; i++ ) { 487 byte[] bytes = StringUtil.makeByte( ge51Vals[i][0], ENCODE ); 488 for( int j=0; j<ge52Vals.length; j++ ) { 489 int strpos = Integer.valueOf( ge52Vals[j][1] ) - 1; 490 int len = Integer.valueOf( ge52Vals[j][2] ); 491 if( strpos >= bytes.length ) { 492 vals[i][j] = ""; 493 } 494 else { 495 if( strpos + len > bytes.length ) { 496 len = bytes.length - strpos; 497 } 498 vals[i][j] = StringUtil.rTrim( StringUtil.makeString( bytes, strpos, len, ENCODE ) ); 499 } 500 } 501 } 502 table = DBTableModelUtil.makeDBTable( clms, vals, resource ); 503 } 504 505 /** 506 * ?後?DBTableModelを返します? 507 * 508 * @return ?後?DBTableModel 509 */ 510 public DBTableModel getTable() { 511 return table; 512 } 513 } 514 }