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.report; 017 018 import org.opengion.hayabusa.common.HybsSystem; 019 import org.opengion.fukurou.util.LogWriter; 020 import org.opengion.fukurou.util.StringUtil; 021 import org.opengion.fukurou.util.ApplicationInfo; 022 import org.opengion.fukurou.db.DBUtil; 023 024 /** 025 * 【DB登録】EXCEL取込機?の???ある、テンポラリ??ブルから?アプリ側の 026 * 本番??ブルへの??タ取込処??ための、PL/SQL をコールします? 027 * 実際の呼び出し?、{ call 帳票IDP.帳票ID( 結果(STATUS),?(ERR_CODE),PGID,要求番号 ) } 028 * と? PL/SQL ?Call します? 029 * 第?引数、第?引数は、OUT属?で、結果(STATUS)とエラー時??(ERR_CODE)を返します? 030 * 第?引数は、起動?PGIDです? 第?引数は、??行う要求番号です? 031 * 結果(STATUS)は、正常なら?? を返してください? 032 * 033 * @og.rev 3.8.0.0 (2005/06/07) 新規追? 034 * @og.group 帳票シス? 035 * 036 * @version 4.0 037 * @author Kazuhiko Hasegawa 038 * @since JDK5.0, 039 */ 040 public class ProgramRun { 041 042 private final StringBuilder errMsg = new StringBuilder(); 043 private static final String CR = HybsSystem.CR ; 044 045 private final String SYSTEM_ID ; 046 private final String YKNO ; 047 private final String LISTID ; 048 private final boolean DEBUG ; // 3.8.5.0 (2006/03/06) ??用のフラグを追? 049 050 private String sqlCmd = null; 051 052 /** コネクションにアプリケーション??を追記するかど???*/ 053 public static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 054 055 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 056 private final ApplicationInfo appInfo; 057 058 /** 059 * コンストラクター 060 * 061 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 062 * 063 * @param system_id シス?ID 064 * @param ykno 要求番号 065 * @param listId 帳票ID 066 * @param debug ??フラグ?? 067 */ 068 public ProgramRun( final String system_id, final String ykno, final String listId, final boolean debug ) { 069 SYSTEM_ID = system_id; 070 YKNO = ykno; 071 LISTID = listId; 072 DEBUG = debug; 073 074 // 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 075 if( USE_DB_APPLICATION_INFO ) { 076 appInfo = new ApplicationInfo(); 077 // ユーザーID,IPアドレス,ホスト名 078 appInfo.setClientInfo( SYSTEM_ID,HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME ); 079 // 画面ID,操?プログラ?D 080 appInfo.setModuleInfo( "ProgramRun",YKNO,LISTID ); 081 } 082 else { 083 appInfo = null; 084 } 085 } 086 087 /** 088 * レポ?ト?力??実行します? 089 * 090 * @return 結果 [true:正常/false:異常] 091 */ 092 public boolean execute() { 093 System.out.print( "ProgramRun [" + SYSTEM_ID + "]... " ); 094 boolean flag; 095 096 try { 097 flag = makeSQLCommand(); 098 if( flag ) { System.out.print( " MK SQL," ); } 099 100 if( flag ) { 101 flag = programRun(); 102 if( flag ) { System.out.print( " PG RUN," ); } 103 } 104 System.out.println( " End." ); 105 } 106 catch( Throwable ex ) { 107 errMsg.append( "ProgramRun Execute Error! " ).append( CR ) ; 108 errMsg.append( "==============================" ).append( CR ); 109 errMsg.append( StringUtil.stringStackTrace( ex ) ) ; 110 errMsg.append( CR ) ; 111 flag = false; 112 } 113 114 return flag ; 115 } 116 117 /** 118 * PLSQL の call コマンド???を作?します? 119 * { call 帳票ID+P.帳票ID( 結果(STATUS),?(ERR_CODE),PGID,要求番号 ) } に対応す? 120 * { call 帳票IDP.帳票ID( ?,?,?,? ) } ??を作?します? 121 * 122 * @return 結果 [true:正常/false:異常] 123 */ 124 private boolean makeSQLCommand() { 125 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL ); 126 127 buf.append( "{ call " ).append( LISTID ); 128 buf.append( "P." ).append( LISTID ); 129 buf.append( "( ?,?,?,? ) }" ); 130 131 sqlCmd = buf.toString(); 132 if( DEBUG ) { 133 System.out.println(); 134 System.out.println( sqlCmd ); 135 } 136 137 return true; 138 } 139 140 /** 141 * 実際のPL/SQL コール処?行います? 142 * { call 帳票IDP.帳票ID( 結果(STATUS),?(ERR_CODE),PGID,要求番号 ) } 143 * と? PL/SQL ?Call します? 144 * 第?引数、第?引数は、OUT属?で、結果(STATUS)とエラー時??(ERR_CODE)? 145 * 返してください。第?引数は、起動?PGIDです? 146 * 結果(STATUS)は、正常なら?? を返してください? 147 * 148 * @og.rev 3.8.7.0 (2006/12/15) アクセスログ取得?為,ApplicationInfoオブジェクトを設? 149 * 150 * @return 結果 [true:正常/false:異常] 151 */ 152 private boolean programRun() { 153 154 String[] args = new String[] { "ProgRUN",YKNO }; 155 String[] rtn = DBUtil.dbCallExecute( sqlCmd,args,appInfo ); // 3.8.7.0 (2006/12/15) 156 157 boolean flag = false; 158 if( rtn != null && rtn.length == 2 ) { 159 String rtnCode = rtn[0]; 160 String rtnMsg = rtn[1]; 161 if( "0".equals( rtnCode ) ) { // 正常 162 flag = true; 163 } 164 else { 165 errMsg.append( "PL/SQL=[" ).append( sqlCmd ).append( "] " ); 166 errMsg.append( "YKNO=[" ).append( YKNO ).append( "] " ); 167 errMsg.append( "LISTID=[" ).append( LISTID ).append( "] " ); 168 errMsg.append( rtnCode ).append( ":" ).append( rtnMsg ); 169 errMsg.append( CR ); 170 LogWriter.log( errMsg.toString() ); 171 } 172 } 173 return flag; 174 } 175 176 /** 177 * エラーが存在した場合に、エラーメ?ージを返します? 178 * 179 * @return エラーメ?ージ String 180 */ 181 public String getErrMsg() { 182 return errMsg.toString(); 183 } 184 }