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.hayabusa.common.HybsSystem; 019import org.opengion.hayabusa.common.HybsSystemException; 020import org.opengion.hayabusa.db.DBTableModel; 021import org.opengion.hayabusa.db.Query; 022import org.opengion.hayabusa.db.DBSysArg; 023import org.opengion.hayabusa.db.DBUserArg; 024import org.opengion.hayabusa.resource.GUIInfo; 025import org.opengion.fukurou.system.DateSet; // 6.4.2.0 (2016/01/29) 026import org.opengion.fukurou.util.ErrorMessage; 027import org.opengion.fukurou.util.StringUtil ; 028import org.opengion.fukurou.util.ToString; // 6.1.1.0 (2015/01/17) 029import org.opengion.fukurou.util.ArraySet; // 6.4.3.4 (2016/03/11) 030 031import static org.opengion.fukurou.util.StringUtil.nval ; 032import static org.opengion.fukurou.system.HybsConst.BR; // 6.1.0.0 (2014/12/26) refactoring 033 034import java.util.Set; // 6.4.3.4 (2016/03/11) 035 036/** 037 * PLSQLをCALLしてデータベースにアクセスするタグです。 038 * queryType = "JDBCPLSQL" が、標準で用意されています。 039 * queryType と 実際のJavaクラスとの関連付けは、システムリソースの Query_JDBCPLSQL 属性です。 040 * 041 * DBTableModel内のデータを 配列でPL/SQLに渡してDB登録します。 042 * 043 * ※ このタグは、Transaction タグの対象です。 044 * 045 * @og.formSample 046 * ●形式:<og:plsqlUpdate command="…" names="…" dbType="…" queryType="JDBCPLSQL" >{plsql(?,?,?,?,?)} <og:plsqlUpdate> 047 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 048 * 049 * ●Tag定義: 050 * <og:plsqlUpdate 051 * queryType 【TAG】Query を発行する為のクラスIDを指定します({@og.doc03Link queryType 初期値:JDBCPLSQL}) 052 * command 【TAG】コマンド (NEW,RENEW)をセットします(PlsqlUpdateTag,UpdateTag の場合は、ENTRY) 053 * scope 【TAG】キャッシュする場合のスコープ[request/page/session/application]を指定します(初期値:session) 054 * maxRowCount 【TAG】(通常は使いません)データの最大読み込み件数を指定します (初期値:DB_MAX_ROW_COUNT[=1000])(0:[無制限]) 055 * skipRowCount 【TAG】(通常は使いません)データの読み始めの初期値を指定します 056 * notfoundMsg 【TAG】検索結果がゼロ件の場合に表示するメッセージリソースIDを指定します(初期値:MSG0077[対象データはありませんでした]) 057 * names 【TAG】PL/SQLを利用する場合の引数にセットすべき データの名称をCSV形式で複数指定します 058 * dbType 【TAG】Queryオブジェクトに渡す引数のタイプ定義(例:type名_ARRAY) 059 * selectedAll 【TAG】データを全件選択済みとして処理するかどうか[true/false]を指定します(初期値:false) 060 * tableId 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します 061 * dbid 【TAG】(通常は使いません)Queryオブジェクトを作成する時のDB接続IDを指定します 062 * stopError 【TAG】PLSQL/SQL処理エラーの時に処理を中止するかどうか[true/false]を設定します(初期値:true) 063 * dispError 【TAG】エラー時にメッセージを表示するか[true/false]を設定します。通常はstopErrorと併用(初期値:true) 064 * tableModelCommit 【TAG】テーブルモデルの確定処理を行うかどうか[true/false]を設定します(初期値:true) 065 * useTimeView 【TAG】処理時間を表示する TimeView を表示するかどうかを指定します 066 * (初期値:VIEW_USE_TIMEBAR[={@og.value SystemData#VIEW_USE_TIMEBAR}])。 067 * caseKey 【TAG】このタグ自体を利用するかどうかの条件キーを指定します(初期値:null) 068 * caseVal 【TAG】このタグ自体を利用するかどうかの条件値を指定します(初期値:null) 069 * caseNN 【TAG】指定の値が、null/ゼロ文字列 でない場合(Not Null=NN)は、このタグは使用されます(初期値:判定しない) 070 * caseNull 【TAG】指定の値が、null/ゼロ文字列 の場合は、このタグは使用されます(初期値:判定しない) 071 * caseIf 【TAG】指定の値が、true/TRUE文字列の場合は、このタグは使用されます(初期値:判定しない) 072 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 073 * > ... Body ... 074 * </og:plsqlUpdate> 075 * 076 * ●使用例 077 * ・引数/プロシジャーを他のJSPから渡す場合 078 * 【copy.jsp】 079 * <og:hidden name="names" value="UNIQ,USRID,ECNO,EDBN" /> 080 * <og:hidden name="SQL" value="{ call RKP0271E.RK0271E( ?,?,?,?,? ) }" /> 081 * 【entry.jsp】 082 * <og:plsqlUpdate 083 * command = "{@command}" 084 * names = "{@names}" →PL/SQLに渡す引数(配列)のカラム名 085 * dbType = "RK0271ARG" →PL/SQLに渡す引数(配列)の定義ファイル名 086 * queryType = "JDBCPLSQL" > 087 * {@SQL} →CALLするPL/SQL 088 * </og:plsqlUpdate> 089 * 090 * ・引数/プロシジャーを直接書く場合 091 * 【entry.jsp】 092 * <og:plsqlUpdate 093 * command = "{@command}" 094 * names = "UNIQ,USRID,ECNO,EDBN" →PL/SQLに渡す引数(配列)のカラム名 095 * dbType = "RK0271ARG" →PL/SQLに渡す引数(配列)の定義ファイル名 096 * queryType = "JDBCPLSQL" > 097 * { call RKP0271E.RK0271E( ?,?,?,?,? )} →CALLするPL/SQL 098 * </og:plsqlUpdate> 099 * 100 * <<参考>> 101 * ・RKP0271E.RK0271E( ?,?,?,?,? )の「?」の意味 102 * (RKP0271E.spc)------------------------------------------------------------ 103 * CREATE OR REPLACE PACKAGE RKP0271E AS 104 * PROCEDURE RK0271E( 105 * P_KEKKA OUT NUMBER -- 1個目の「?」⇒結果 0:正常 1:警告 2:異常 106 * ,P_ERRMSGS OUT ERR_MSG_ARRAY -- 2個目の「?」⇒エラーメッセージ配列 107 * ,P_NAMES IN VARCHAR2 -- 3個目の「?」⇒カラム名チェック用文字列 108 * ,P_SYSARGS IN SYSARG_ARRAY -- 4個目の「?」⇒登録条件配列(改廃(A:追加/C:変更/D:削除)等がセットされます) 109 * ,P_RK0271 IN RK0271ARG_ARRAY -- 5個目の「?」⇒登録データ配列 110 * 111 * ・RK0271ARGの定義の仕方 112 * (RK0271ARG.sql)------------------------------------------------------------ 113 * DROP TYPE RK0271ARG_ARRAY; 114 * CREATE OR REPLACE TYPE RK0271ARG AS OBJECT 115 * ( 116 * UNIQ VARCHAR2(11) 117 * ,USRID VARCHAR2(5) 118 * ,ECNO VARCHAR(7) 119 * ,EDBN VARCHAR(2) 120 * ) ; 121 * / 122 * CREATE OR REPLACE TYPE RK0271ARG_ARRAY AS VARRAY(100) OF RK0271ARG; 123 * / 124 * 125 * @og.group DB登録 126 * 127 * @version 4.0 128 * @author Kazuhiko Hasegawa 129 * @since JDK5.0, 130 */ 131public class PlsqlUpdateTag extends QueryTag { 132 /** このプログラムのVERSION文字列を設定します。 {@value} */ 133 private static final String VERSION = "6.9.9.0 (2018/08/20)" ; 134 private static final long serialVersionUID = 699020180820L ; 135 136 /** command 引数に渡す事の出来る コマンド 登録{@value} */ 137 public static final String CMD_ENTRY = "ENTRY" ; 138 // 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。 139 private static final Set<String> COMMAND_SET = new ArraySet<>( CMD_ENTRY ); 140 141 /** 引数のタイプ定義 */ 142 protected String userDBType ; 143 144 // 3.5.2.0 (2003/10/20) 内部オブジェクトタイプ名を システムパラメータ で定義します。 145 private static final String SYSARG = "SYSARG"; 146 private boolean selectedAll ; 147 148 private boolean isCommit = true; // 5.5.5.2 (2012/08/10) 6.0.2.5 (2014/10/31) refactoring 149 150 /** 151 * デフォルトコンストラクター 152 * 153 * @og.rev 6.4.2.0 (2016/01/29) PMD refactoring. Each class should declare at least one constructor. 154 */ 155 public PlsqlUpdateTag() { super(); } // これも、自動的に呼ばれるが、空のメソッドを作成すると警告されるので、明示的にしておきます。 156 157 /** 158 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 159 * 160 * @og.rev 6.3.4.0 (2015/08/01) caseKey,caseVal,caseNN,caseNull,caseIf 属性対応 161 * @og.rev 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。 162 * 163 * @return 後続処理の指示 164 */ 165 @Override 166 public int doStartTag() { 167 if( !useTag() ) { return SKIP_BODY ; } // 6.3.4.0 (2015/08/01) 168 169 dyStart = System.currentTimeMillis(); 170 171 table = (DBTableModel)getObject( tableId ); 172 if( table == null || table.getRowCount() == 0 || 173 ! check( command, COMMAND_SET ) ) { return SKIP_BODY ; } 174 175 startQueryTransaction( tableId ); // 3.6.0.8 (2004/11/19) 176 return EVAL_BODY_BUFFERED ; // Body を評価する。( extends BodyTagSupport 時) 177 } 178 179 /** 180 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 181 * 182 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 183 * @og.rev 3.5.5.2 (2004/04/02) TaglibUtil.makeHTMLErrorTable メソッドを利用 184 * @og.rev 3.6.0.8 (2004/11/19) DBTableModel をセーブする時に、トランザクションチェックを行います。 185 * @og.rev 3.6.1.0 (2005/01/05) オーバーフロー時と登録件数の表示をコメントします。 186 * @og.rev 4.3.3.0 (2008/09/22) 検索結果を、"DB.ERR_CODE" キーでリクエストにセットする。 187 * @og.rev 4.3.3.0 (2008/09/22) 属性 stopError の設定により、JSP処理を中止するかどうかを制御します。 188 * @og.rev 4.3.5.7 (2009/03/22) アクセスカウント不具合対応 189 * @og.rev 6.3.4.0 (2015/08/01) caseKey,caseVal,caseNN,caseNull,caseIf 属性対応 190 * @og.rev 6.4.1.2 (2016/01/22) QueryTag.errMsgId → QueryTag.ERR_MSG_ID refactoring 191 * @og.rev 6.4.3.4 (2016/03/11) String配列 から、Setに置き換えます。 192 * @og.rev 5.9.26.1 (2017/11/10) dispError対応 193 * @og.rev 6.9.9.0 (2018/08/20) 「ERR0041:検索処理中に割り込みの検索要求がありました」エラーを、標準のErrorMessageに追加するようにします。 194 * 195 * @return 後続処理の指示 196 */ 197 @Override 198 public int doEndTag() { 199 debugPrint(); // 4.0.0 (2005/02/28) 200 if( !useTag() ) { return EVAL_PAGE ; } // 6.3.4.0 (2015/08/01) 201 202 String label = BR; // 検索しなかった場合。 203 if( check( command, COMMAND_SET ) ) { 204 // 6.9.9.0 (2018/08/20) 「ERR0041:検索処理中に割り込みの検索要求がありました」エラーを、標準のErrorMessageに追加するようにします。 205 if( table != null && ! commitTableObject( tableId, table ) ) { 206 if( errMessage == null ) { errMessage = new ErrorMessage( "PlsqlUpdateTag Query Error!" ); } 207 // ERR0041:検索処理中に割り込みの検索要求がありました。処理されません。 208 errMessage.addMessage( 0,ErrorMessage.NG,"ERR0041" ); 209 errCode = ErrorMessage.NG; 210 } 211 212 // 3.5.5.2 (2004/04/02) TaglibUtil.makeHTMLErrorTable メソッドを利用 213 final String err = TaglibUtil.makeHTMLErrorTable( errMessage,getResource() ); 214 if( err != null && err.length() > 0 ) { 215 if( errCode >= ErrorMessage.NG ) { // 異常の場合 216 label = err; 217 } 218 // 6.4.1.2 (2016/01/22) QueryTag.errMsgId → QueryTag.ERR_MSG_ID refactoring 219 setSessionAttribute( ERR_MSG_ID,errMessage ); 220 } 221 else { 222 // 6.4.1.2 (2016/01/22) QueryTag.errMsgId → QueryTag.ERR_MSG_ID refactoring 223 removeSessionAttribute( ERR_MSG_ID ); 224 } 225 // 4.3.3.0 (2008/09/22) 検索結果を、"DB.ERR_CODE" キーでリクエストにセットする。 226 setRequestAttribute( "DB.ERR_CODE", String.valueOf( errCode ) ); 227 // 5.9.26.1 (2017/11/10) エラーメッセージをリクエスト変数で持つようにしておく 228 setRequestAttribute( "DB.ERR_MSG", label ); 229 230// // 6.9.9.0 (2018/08/20) 「ERR0041:検索処理中に割り込みの検索要求がありました」エラーを、標準のErrorMessageに追加するようにします。 231// // 3.6.0.8 (2004/11/19) トランザクションチェックを行います。 232// // 4.0.0.0 (2007/11/29) 入れ子if の統合 233// if( table != null && ! commitTableObject( tableId, table ) ) { 234// jspPrint( "PlsqlUpdateTag Query処理が割り込まれました。DBTableModel は登録しません。" ); 235// return SKIP_PAGE; 236// } 237 } 238 239 // 5.9.26.1 (2017/11/10) dispErrorで表示をコントロール 240 if( dispError ) { 241 jspPrint( label ); 242 } 243 244 // 4.0.0 (2005/01/31) 処理時間集計 245 final long dyTime = System.currentTimeMillis()-dyStart; 246 247 // 4.0.0 (2005/01/31) セキュリティチェック(データアクセス件数登録) 248 final GUIInfo guiInfo = (GUIInfo) getSessionAttribute( HybsSystem.GUIINFO_KEY ); 249 executeCount = getParameterRows().length ; // 4.3.5.7 (2009/03/16) アクセス件数不具合対応。チェック行と仮定 250 if( guiInfo != null ) { guiInfo.addWriteCount( executeCount,dyTime,sql ); } 251 252 // 4.3.3.0 (2008/09/22) 属性 stopError の設定により、処理を中止するかを判断します。 253 return errCode >= ErrorMessage.NG && stopError ? SKIP_PAGE : EVAL_PAGE ; // 6.4.2.1 (2016/02/05) PMD refactoring. Useless parentheses. 254 } 255 256 /** 257 * タグリブオブジェクトをリリースします。 258 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 259 * 260 * @og.rev 2.0.0.4 (2002/09/27) カスタムタグの release() メソッドを、追加 261 * @og.rev 3.1.1.2 (2003/04/04) Tomcat4.1 対応。release2() を doEndTag()で呼ぶ。 262 * @og.rev 3.5.2.0 (2003/10/20) sysDBType 廃止。SYSARG は、システムパラメータ で定義します。 263 * @og.rev 5.5.5.2 (2012/08/10) isTableModelCommit追加 264 * 265 */ 266 @Override 267 protected void release2() { 268 super.release2(); 269 userDBType = null; 270 selectedAll = false; 271 isCommit = true; // 5.5.5.2 (2012/08/10) 6.0.2.5 (2014/10/31) refactoring 272 } 273 274 /** 275 * Query を実行します。 276 * 277 * @og.rev 2.1.2.3 (2002/12/02) データベース更新時に、更新フラグをセットするように変更 278 * @og.rev 3.5.0.0 (2003/09/17) カラム名ではなく、カラム番号を先に求めておく方式に変更。 279 * @og.rev 3.5.2.0 (2003/10/20) 内部オブジェクトタイプ名を システムパラメータ で定義します。 280 * @og.rev 3.5.4.2 (2003/12/15) HTMLTableViewForm クラス名変更(⇒ ViewForm_HTMLTable) 281 * @og.rev 3.5.6.0 (2004/06/18) DBRowHeader のパッケージプライベート化に伴なう変更 282 * @og.rev 4.0.0.0 (2005/01/31) setArguments 廃止、Query#execute に、引数をすべて追加 283 * @og.rev 4.3.0.0 (2008/07/22) DBSysArgの引数に日付、PG、ユーザーIDを追加 284 * @og.rev 5.5.5.2 (2012/08/10) isTableModelCommitによるテーブルモデル確定処理のコントロール 285 * @og.rev 6.4.2.0 (2016/01/29) DateSet.getDate( String ) を利用するように修正します。 286 * 287 * @param query オブジェクト 288 */ 289 @Override 290 protected void execute( final Query query ) { 291 if( names == null ) { 292 final String errMsg = "names 属性が、設定されていません。" + CR 293 + sql + CR ; 294 throw new HybsSystemException( errMsg ); // 3.5.5.4 (2004/04/15) 引数の並び順変更 295 } 296 else { 297 final int[] rowNo = getParameterRows(); 298 final int rowCount = rowNo.length ; 299 if( rowCount > 0 ) { 300 final String[] nameArray = StringUtil.csv2Array( names ); 301 final int[] clmNo = getTableColumnNo( nameArray ); // 3.5.0.0 302 303 final String curdate = DateSet.getDate( "yyyyMMddHHmmss" ); // 6.4.2.0 (2016/01/29) 304 final String pgid = getGUIInfoAttri( "KEY" ); // 4.3.0.0 305 final String userid = getUser().getAttribute( "ID" ); // 4.3.0.0 306 307 DBSysArg[] sysArg = new DBSysArg[rowCount]; 308 DBUserArg[] userArg = new DBUserArg[rowCount]; 309 for( int i=0; i<rowCount; i++ ) { 310 final int row = rowNo[i]; 311 final String cdkh = table.getModifyType( row ); 312 sysArg[i] = new DBSysArg( SYSARG,row,cdkh,curdate,pgid,userid ); 313 final String[] values = getTableModelData( clmNo,row ); // 3.5.0.0 314 userArg[i] = new DBUserArg( userDBType,nameArray,values ); 315 } 316 query.execute( names,userDBType + "_ARRAY",sysArg,userArg ); 317 errCode = query.getErrorCode(); 318 errMessage = query.getErrorMessage(); 319 320 // 6.9.7.0 (2018/05/14) PMD These nested if statements could be combined 321// if( errCode < ErrorMessage.NG ) { // 異常以外の場合 322// if( isCommit ) { // 5.5.5.2 (2012/08/10) 6.0.2.5 (2014/10/31) refactoring 323 if( errCode < ErrorMessage.NG && isCommit) { // 異常以外の場合 324 for( int j=rowCount-1; j>=0; j-- ) { 325 final int row = rowNo[j]; 326 if( DBTableModel.DELETE_TYPE.equals( table.getModifyType( row ) ) ) { 327 table.removeValue( row ); 328 } 329 else { 330 table.resetModify( row ); 331 } 332 } 333// } 334 } 335 } 336 } 337 } 338 339 /** 340 * カラム名配列(String[])より、対応するカラムNo配列(int[])を作成します。 341 * 342 * @og.rev 3.5.0.0 (2003/09/17) 新規追加 343 * 344 * @param nameArray カラム名配列(可変長引数) 345 * 346 * @return カラムNo配列 347 */ 348 private int[] getTableColumnNo( final String... nameArray ) { 349 int[] clmNo = new int[ nameArray.length ]; 350 for( int i=0; i<clmNo.length; i++ ) { 351 clmNo[i] = table.getColumnNo( nameArray[i] ); 352 } 353 return clmNo; 354 } 355 356 /** 357 * 指定の行番号の、カラムNo配列(int[])に対応した値の配列を返します。 358 * 359 * 表示データの HybsSystem.ROW_SEL_KEY を元に、選ばれた 行を 360 * 処理の対象とします。 361 * 362 * @og.rev 3.5.0.0 (2003/09/17) カラム名ではなく、カラム番号を受け取るように修正。 363 * 364 * @param clmNo カラムNo配列 365 * @param row 行番号 366 * 367 * @return 行番号とカラムNo配列に対応した、値の配列 368 */ 369 private String[] getTableModelData( final int[] clmNo,final int row ) { 370 String[] values = new String[ clmNo.length ]; 371 for( int i=0; i<values.length; i++ ) { 372 values[i] = table.getValue( row,clmNo[i] ) ; 373 // NUMBER タイプのキャストエラーを防ぐ為の対応 374 if( values[i] != null && values[i].isEmpty() ) { values[i] = null; } 375 } 376 return values; 377 } 378 379 /** 380 * 表示データの HybsSystem.ROW_SEL_KEY を元に、選ばれた 行を処理の対象とします。 381 * 382 * @og.rev 4.0.0.0 (2005/01/31) getParameterRows() を使用するように変更 383 * 384 * @return 選択行の配列 385 * @og.rtnNotNull 386 */ 387 @Override 388 protected int[] getParameterRows() { 389 final int[] rowNo ; 390 if( selectedAll ) { 391 final int rowCnt = table.getRowCount(); // 3.5.5.7 (2004/05/10) 392 rowNo = new int[ rowCnt ]; 393 for( int i=0; i<rowCnt; i++ ) { 394 rowNo[i] = i; 395 } 396 } else { 397 rowNo = super.getParameterRows(); // 4.0.0 (2005/01/31) 398 } 399 return rowNo ; 400 } 401 402 /** 403 * 【TAG】Queryオブジェクトに渡す引数のタイプ定義(例:type名_ARRAY)。 404 * 405 * @og.tag 406 * ここでは、type 定義のPL/SQL名を指定します。 407 * 行を表す配列は、type名_ARRAY という名称です。 408 * 409 * @param type 定義のPL/SQL名 410 */ 411 public void setDbType( final String type ) { 412 userDBType = getRequestParameter( type ); 413 } 414 415 /** 416 * 【TAG】データを全件選択済みとして処理するかどうか[true/false]を指定します(初期値:false)。 417 * 418 * @og.tag 419 * 全てのデータを選択済みデータとして扱って処理します。 420 * 全件処理する場合に、(true/false)を指定します。 421 * 初期値は false です。 422 * 423 * @param all データを全件選択済み [true:全件選択済み/false:通常] 424 */ 425 public void setSelectedAll( final String all ) { 426 selectedAll = nval( getRequestParameter( all ),selectedAll ); 427 } 428 429 /** 430 * 【TAG】Query を発行する為のクラスIDを指定します({@og.doc03Link queryType 初期値:JDBCPLSQL})。 431 * 432 * @og.tag 433 * 引数指定のINSERT/UPDATE文を実行する場合の、queryType 属性を使用します。 434 * このタグでは、execute( String ,String , DBSysArg[] , DBUserArg[] )を実行します。 435 * 代表的なクラスとして、"JDBCPLSQL" が標準で用意されています。 436 * 437 * タグにより使用できる/出来ないがありますが、これは、org.opengion.hayabusa.db 438 * 以下の Query_**** クラスの **** を与えます。 439 * これらは、Query インターフェースを継承したサブクラスです。 440 * {@og.doc03Link queryType Query_**** クラス} 441 * 442 * @og.rev 3.5.4.2 (2003/12/15) JavaDocコメント用にメソッド追加。 443 * 444 * @param id Queryを発行する為の実クラスID 445 * @see org.opengion.hayabusa.db.Query Queryのサブクラス 446 * @see org.opengion.hayabusa.db.Query#execute( String ,String , DBSysArg[] , DBUserArg[] ) 447 */ 448 @Override 449 public void setQueryType( final String id ) { 450 super.setQueryType( nval( id,"JDBCPLSQL" ) ); 451 } 452 453 /** 454 * 【TAG】テーブルモデルに対する確定処理を行うかどうかを指定します(初期値:true)。 455 * 456 * @og.tag 457 * PlsqlUpdateタグで、エラーがなかった場合は通常、テーブルモデルの改廃に従って処理が行われます。 458 * (改廃Dについては削除処理を行い、その他については改廃を元に戻す) 459 * 460 * このパラメータをfalseに指定すると、テーブルモデルに対する処理を行いません。 461 * これは、例えばPL/SQLでエラーチェックのみを行いたい場合に有効です。 462 * 初期値はtrue(処理を行う)です。 463 * 464 * @og.rev 5.5.5.2 (2012/08/10) 新規作成 465 * 466 * @param flag テーブルモデルの確定処理 [true:する/false:しない] 467 */ 468 public void setTableModelCommit( final String flag ) { 469 isCommit = nval( getRequestParameter( flag ),isCommit ); // 6.0.2.5 (2014/10/31) refactoring 470 } 471 472 /** 473 * このオブジェクトの文字列表現を返します。 474 * 基本的にデバッグ目的に使用します。 475 * 476 * @return このクラスの文字列表現 477 * @og.rtnNotNull 478 */ 479 @Override 480 public String toString() { 481 return ToString.title( this.getClass().getName() ) 482 .println( "VERSION" ,VERSION ) 483 .println( "selectedAll" ,selectedAll ) 484 .fixForm().toString() 485 + CR 486 + super.toString() ; 487 } 488}