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 static org.opengion.fukurou.util.StringUtil.nval; 019 020import java.util.ArrayList; 021import java.util.List; 022 023import org.opengion.fukurou.util.ErrorMessage; 024import org.opengion.hayabusa.common.HybsSystem; 025import org.opengion.hayabusa.common.HybsSystemException; 026import org.opengion.hayabusa.db.DBTableModel; 027import org.opengion.hayabusa.db.Query; 028import org.opengion.hayabusa.resource.GUIInfo; 029 030/** 031 * SQL文を直接指定して、データベースに追加/更新/削除を行います(queryType="JDBCTableUpdate")。 032 * 033 * 存在チェックを行う場合は、tableExist タグと併用してください。 034 * 複雑な処理が必要な場合は、従来より使用しています、PLSQLをCALLする、 035 * plsqlUpdateタグを使用してください。 036 * また、tableUpdateParam タグを使用する事で、テーブル名とsqlTypeの指定で動的に 037 * SQL文を自動生成できます。これにより、追加、更新、削除やテーブルに関して、 038 * 単一のJSP画面ですべて対応できるようになります。 039 * 040 * ※ このタグは、Transaction タグの対象です。 041 * 042 * @og.formSample 043 * ●形式:<og:tableUpdate command="…" names="…" queryType="JDBCTableUpdate" > 044 * {@SQL} 045 * </og:update> 046 * ●body:あり(EVAL_BODY_BUFFERED:BODYを評価し、{@XXXX} を解析します) 047 * 048 * ●Tag定義: 049 * <og:tableUpdate 050 * queryType 【TAG】Query を発行する為のクラスIDを指定します({@og.doc03Link queryType 初期値:JDBCTableUpdate}) 051 * sqlType 【TAG】BODY部に書かれている Param の SQLタイプを指定します 052 * command 【TAG】コマンド(NEW,RENEW)をセットします(PlsqlUpdateTag,UpdateTag の場合は、ENTRY) 053 * scope 【TAG】キャッシュする場合のスコープ[request/page/session/applicaton]を指定します(初期値:session) 054 * displayMsg 【TAG】検索結果を画面上に表示するメッセージリソースIDを指定します (初期値:VIEW_DISPLAY_MSG[=]) 055 * resourceType 【特殊】クリアするリソースの種類[GEA03/GEA04/GEA08]を指定します 056 * conditionKey 【TAG】条件判定するカラムIDを指定します(初期値:null) 057 * conditionList 【TAG】条件判定する値のリストを、"|"で区切って登録します(初期値:無条件) 058 * tableId 【TAG】(通常は使いません)結果のDBTableModelを、sessionに登録するときのキーを指定します 059 * dbid 【TAG】(通常は使いません)Queryオブジェクトを作成する時のDB接続IDを指定します 060 * selectedAll 【TAG】データを全件選択済みとして処理するかどうか[true/false]を指定します(初期値:false) 061 * commitTableModel 【特殊】SQL実行後に結果をDBTableModelに反映させるかどうか[true/false]を指定します(初期値:true) 062 * followCdkh 【TAG】DBTableModelの改廃Cに従って処理を行うかを指定します 063 * quotCheck 【TAG】リクエスト情報の クォーティション(') 存在チェックを実施するかどうか[true/false]を設定します(初期値:false) 064 * debug 【TAG】デバッグ情報を出力するかどうか[true/false]を指定します(初期値:false) 065 * > ... Body ... 066 * </og:tableUpdate> 067 * 068 * ●使用例 069 * ・QUERYを他のJSPから渡す場合 070 * 【copy.jsp】 071 * <og:hidden name="SQL" > 072 * INSERT INTO GE41 073 * (CLM,NAME_JA,LABEL_NAME,KBSAKU,SYSTEM_ID,LANG, 074 * FGJ,DYSET,DYUPD,USRSET,USRUPD,PGUPD) 075 * VALUES 076 * ([CLM],[NAME_JA],[LABEL_NAME],[KBSAKU],[SYSTEM_ID],[LANG], 077 * '1','{@USER.YMDH}','{@USER.YMDH}','{@USER.ID}','{@USER.ID}','{@GUI.KEY}') 078 * </og:value> 079 * 080 * 【entry.jsp】 081 * <og:tableUpdate 082 * command = "{@command}" 083 * queryType = "JDBCTableUpdate" 084 * {@SQL} 085 * </og:tableUpdate> 086 * 087 * ・tableUpdateParamを使用する場合 088 * 【entry.jsp】 089 * <og:tableUpdate 090 * command = "{@command}" 091 * queryType = "JDBCTableUpdate" 092 * sqlType = "{@sqlType}" // tableUpdateParam の sqlType と一致 093 * > 094 * <og:tableUpdateParam 095 * sqlType = "{@sqlType}" // INSERT,COPY,UPDATE,MODIFY,DELETE 096 * table = "{@TABLE_NAME}" // 処理対象のテーブル名 097 * names = "{@names}" // 処理対象のカラム名 098 * omitNames = "{@omitNames}" // 処理対象外のカラム名 099 * where = "{@where}" // 処理対象を特定するキー 100 * constKeys = "{@constKeys}" // 処理カラム名の中の固定情報カラム名 101 * constVals = "{@constVals}" // 処理カラム名の中の固定情報設定値 102 * /> 103 * </og:tableUpdate> 104 * 105 * ・処理の可否を指定する場合 106 * 【entry.jsp】 107 * <og:tableUpdate 108 * command = "{@command}" 109 * queryType = "JDBCTableUpdate" 110 * conditionKey ="…" : 条件判定するカラムIDを指定(初期値は columnId ) 111 * conditionList ="…" : 条件判定する値のリストを、"|"で区切って登録(初期値は、無条件) 112 * {@SQL} 113 * </og:tableUpdate> 114 * 115 * @og.rev 3.8.8.0 (2007/12/22) 新規作成 116 * @og.group DB登録 117 * 118 * @version 4.0 119 * @author Kazuhiko Hasegawa 120 * @since JDK5.0, 121 */ 122public class TableUpdateTag extends QueryTag { 123 //* このプログラムのVERSION文字列を設定します。 {@value} */ 124 private static final String VERSION = "5.1.7.0 (2010/06/01)" ; 125 126 private static final long serialVersionUID = 517020100601L ; 127 128 /** command 引数に渡す事の出来る コマンド 登録{@value} */ 129 public static final String CMD_ENTRY = "ENTRY" ; 130 /** command 引数に渡す事の出来る コマンド リスト */ 131 private static final String COMMAND_LIST = CMD_ENTRY; 132 133 // 処理を行う、リソースの種類を指定します。(GEA03,GEA04,GEA08 のどれか) 134 private String sqlType = null; // INSERT,COPY,UPDATE,MODIFY,DELETE 135 private String resourceType = null; 136 private int resTypeColNo = -1; 137 private String conditionKey = null; // 条件判定するカラムIDを指定(初期値は columnId ) 138 private String conditionList = null; // 条件判定する値のリストを、"|"で区切って登録(初期値は、無条件) 139 private boolean selectedAll = false; 140 private boolean commitTableModel= true; // 4.0.2.0 (2007/12/25) 141 private boolean followCdkh = false; // 4.3.2.0 (2008/09/09). 142 private boolean quotCheck = false; // 5.1.7.0 (2010/06/01) quotCheckを指定できるようにする。※但し、初期値はfalse固定。タイミングを見て修正要 143 144 /** 145 * Taglibの開始タグが見つかったときに処理する doStartTag() を オーバーライドします。 146 * 147 * @og.rev 4.0.0.0 (2007/11/14) 0件の場合でもstartQueryTransactionを通すように変更 148 * @og.rev 5.1.7.0 (2010/06/01) quotCheckを指定できるようにする。※但し、初期値はfalse固定。 149 * 150 * @return 後続処理の指示( EVAL_BODY_BUFFERED ) 151 */ 152 @Override 153 public int doStartTag() { 154 dyStart = System.currentTimeMillis(); 155 table = (DBTableModel)getObject( tableId ); 156 startQueryTransaction( tableId ); // 4.0.0.0 (2007/11/14) 0件の場合でもdoEndでPAGE_SKIPしないように位置変更。 157 if( table == null || table.getRowCount() == 0 || 158 ! check( command, COMMAND_LIST ) ) { return(SKIP_BODY); } 159// startQueryTransaction( tableId ); // 3.6.0.8 (2004/11/19) 160// quotCheck = false; // このタグでは、クオートチェックは行いません。 161 super.quotCheck = quotCheck; 162 163 return( EVAL_BODY_BUFFERED ); // Body を評価する。( extends BodyTagSupport 時) 164 } 165 166 /** 167 * Taglibの終了タグが見つかったときに処理する doEndTag() を オーバーライドします。 168 * 169 * @og.rev 4.0.0.0 (2007/10/18) メッセージリソース統合( getResource().getMessage ⇒ getResource().getLabel ) 170 * @og.rev 5.10.2.2 (2018/08/24) 一部のエラーをjspPrintから標準のErrorMessageに変更 171 * 172 * @return 後続処理の指示 173 */ 174 @Override 175 public int doEndTag() { 176 debugPrint(); 177 178// String label = HybsSystem.BR; // 検索しなかった場合。 179 String label = ""; // 4.0.0 (2005/11/30) 検索しなかった場合。 180 if( check( command, COMMAND_LIST ) ) { 181 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL ); 182 if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) { 183 buf.append( executeCount ); 184// buf.append( getResource().getMessage( displayMsg ) ); 185 buf.append( getResource().getLabel( displayMsg ) ); 186 buf.append( HybsSystem.BR ); 187 } 188 189 // 5.10.2.2 (2018/08/24) 6.9.9.0 「ERR0041:検索処理中に割り込みの検索要求がありました」エラーを、標準のErrorMessageに追加するようにします。 190 if( table != null && ! commitTableObject( tableId, table ) ) { 191 if( errMessage == null ) { errMessage = new ErrorMessage( "TableUpdateTag Query Error!" ); } 192 // ERR0041:検索処理中に割り込みの検索要求がありました。処理されません。 193 errMessage.addMessage( 0,ErrorMessage.NG,"ERR0041" ); 194 errCode = ErrorMessage.NG; 195 } 196 197 String err = TaglibUtil.makeHTMLErrorTable( errMessage,getResource() ); 198 if( err != null && err.length() > 0 ) { 199// if( errCode >= ErrorMessage.NG ) { // 異常の場合 200// label = err ; 201// } 202 buf.append( err ); 203 setSessionAttribute( errMsgId,errMessage ); 204 } 205 else { 206 removeSessionAttribute( errMsgId ); 207 } 208 label = buf.toString(); 209 210// // 5.10.2.2 (2018/08/24) 6.9.9.0 211// if( table != null && ! commitTableObject( tableId, table ) ) { 212// // 3.6.0.8 (2004/11/19) トランザクションチェックを行います。 213// jspPrint( "TableUpdateTag Query処理が割り込まれました。DBTableModel は登録しません。" ); 214// return (SKIP_PAGE); 215// } 216 } 217 218 jspPrint( label ); 219 220 // 警告時に停止していましたが、継続処理させます。 221// int rtnCode = EVAL_PAGE; 222// if( errCode >= ErrorMessage.NG ) { // 異常 223// rtnCode = SKIP_PAGE; 224// } 225// else { 226// rtnCode = EVAL_PAGE; 227// } 228 229 long dyTime = System.currentTimeMillis()-dyStart; 230 jspPrint( "<div id=\"queryTime\" value=\"" + (dyTime) + "\"></div>" ); // 3.5.6.3 (2004/07/12) 231 232 // セキュリティチェック(データアクセス件数登録) 233 GUIInfo guiInfo = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY ); 234 if( guiInfo != null ) { guiInfo.addWriteCount( executeCount,dyTime,sql ); } 235 236 int rtnCode = ( errCode >= ErrorMessage.NG ) ? SKIP_PAGE : EVAL_PAGE ; 237 return( rtnCode ); 238 } 239 240 /** 241 * タグリブオブジェクトをリリースします。 242 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 243 * 244 * @og.rev 4.0.2.0 (2007/12/25) commitTableModel追加 245 * @og.rev 4.1.2.0 (2008/03/12) sqlType追加 246 * @og.rev 5.1.7.0 (2010/06/01) quotCheckを指定できるようにする。※但し、初期値はfalse固定。 247 * 248 */ 249 @Override 250 protected void release2() { 251 super.release2(); 252 sqlType = null; // INSERT,COPY,UPDATE,MODIFY,DELETE 253 resourceType = null; 254 resTypeColNo = -1; 255 conditionKey = null; // 条件判定するカラムIDを指定(初期値は columnId ) 256 conditionList = null; // 条件判定する値のリストを、"|"で区切って登録(初期値は、無条件) 257 selectedAll = false; 258 commitTableModel= true; // 4.0.2.0 (2007/12/25) 259 followCdkh = false; // 4.3.2.0 (2008/09/09) 260 quotCheck = false; // 5.1.7.0 (2010/06/01) 261 } 262 263 /** 264 * Query を実行します。 265 * 266 * @og.rev 4.0.2.0 (2007/12/25) commitTableModel追加 267 * 268 * @param query オブジェクト 269 */ 270 @Override 271 protected void execute( final Query query ) { 272 273 try { 274 int[] rowNo = getParameterRows(); // 4.0.0 (2005/01/31) 275 if( rowNo.length > 0 ) { 276 query.execute( rowNo,table ); 277 278 errCode = query.getErrorCode(); 279 errMessage = query.getErrorMessage(); 280 281 // リソースクリア処理 282 if( resourceType != null ) { 283// if( "GEA09".equals( resourceType ) ) { 284// resTypeColNo = table.getColumnNo( "MSGCD" ); // キーは、MSGCD 285// } 286// else { 287 resTypeColNo = table.getColumnNo( "CLM" ); // キーは、CLM 288// } 289 } 290 291 // 逆順にDELETEしないと、行番号がずれてしまう。 292 int row; 293 for( int j=rowNo.length-1; j>=0; j-- ) { 294 row = rowNo[j]; 295 if( resTypeColNo >= 0 ) { 296 clearResourceData( table.getValue( row,resTypeColNo ) ); // リソースのクリア 297 } 298 299 if( commitTableModel ) { // 4.0.2.0 (2007/12/25) 300 if( DBTableModel.DELETE_TYPE.equals( table.getModifyType( row ) ) ) { 301 table.removeValue( row ); 302 } 303 else { 304 table.resetModify( row ); 305 } 306 } 307 } 308// if( query.getUpdateFlag() ) { query.commit(); } 309 if( query.isUpdate() ) { query.commit(); } 310 } 311 } 312 finally { 313 if( query != null ) { query.close(); } 314 } 315 } 316 317 /** 318 * 表示データの HybsSystem.ROW_SEL_KEY を元に、選ばれた 行番号の 319 * 配列を返します。 320 * ここでは、conditionKey に値が設定されている場合は、そのカラムの値が 321 * conditionList にマッチする場合のみ対象選択行として返します。 322 * 値がセットされていない場合は、通常のCommonTagSupport#getParameterRows() 323 * が呼ばれます。 324 * なにも選ばれていない場合は、サイズ0の配列を返します。 325 * 326 * @og.rev 4.3.2.0 (2008/09/09) followCdkh属性対応 327 * 328 * @return (選ばれていない場合は、サイズ0の配列を返す) 329 */ 330 @Override 331 protected int[] getParameterRows() { 332 int[] rowNo ; 333 if( selectedAll ) { 334 int rowCnt = table.getRowCount(); // 3.5.5.7 (2004/05/10) 335 rowNo = new int[ rowCnt ]; 336 for( int i=0; i<rowCnt; i++ ) { 337 rowNo[i] = i; 338 } 339 } else { 340 rowNo = super.getParameterRows(); // 4.0.0 (2005/01/31) 341 } 342 343 if( conditionKey != null ) { 344 int col = table.getColumnNo( conditionKey ); 345 List<Integer> list = new ArrayList<Integer>(); 346 for( int i=0; i<rowNo.length; i++ ) { 347 String val = "|" + table.getValue( rowNo[i],col ) + "|"; 348 if( conditionList.indexOf( val ) >= 0 ) { 349 list.add( Integer.valueOf( rowNo[i] ) ); 350 } 351 } 352 353 int size = list.size(); 354 rowNo = new int[size]; 355 for( int i=0; i<size; i++ ) { 356 rowNo[i] = (list.get(i)).intValue(); 357 } 358 } 359 360 // 4.3.2.0 (2008/09/09) 361 if( sqlType != null && sqlType.length() > 0 && followCdkh ) { 362 List<Integer> flist = new ArrayList<Integer>(); 363 for( int i=0; i<rowNo.length; i++ ) { 364 String cdkh = table.getModifyType( rowNo[i] ); 365 if( ( ( "INSERT".equals( sqlType ) || "COPY".equals( sqlType ) ) 366 && DBTableModel.INSERT_TYPE.equals( cdkh ) ) 367 || 368 ( ( "UPDATE".equals( sqlType ) || "CHANGE".equals( sqlType ) ) 369 && DBTableModel.UPDATE_TYPE.equals( cdkh ) ) 370 || 371 ( ( "DELETE".equals( sqlType ) ) 372 && DBTableModel.DELETE_TYPE.equals( cdkh ) ) ) { 373 flist.add( Integer.valueOf( rowNo[i] ) ); 374 } 375 } 376 377 int size = flist.size(); 378 rowNo = new int[size]; 379 for( int i=0; i<size; i++ ) { 380 rowNo[i] = (flist.get(i)).intValue(); 381 } 382 } 383 384 return rowNo; 385 } 386 387 /** 388 * 【TAG】Query を発行する為のクラスIDを指定します({@og.doc03Link queryType 初期値:JDBCTableUpdate})。 389 * 390 * @og.tag 391 * 引数指定のINSERT/UPDATE文を実行する場合の、queryType 属性を使用します。 392 * このタグでは、execute( int[] ,DBTableModel )を実行します。 393 * 代表的なクラスとして、"JDBCTableUpdate" が標準で用意されています。 394 * 395 * タグにより使用できる/出来ないがありますが、これは、org.opengion.hayabusa.db 396 * 以下の Query_**** クラスの **** を与えます。 397 * これらは、Query インターフェースを継承したサブクラスです。 398 * {@og.doc03Link queryType Query_**** クラス} 399 * 400 * @param id Query を発行する為の実クラス ID 401 * @see org.opengion.hayabusa.db.Query Queryのサブクラス 402 * @see org.opengion.hayabusa.db.Query#execute( int[] ,DBTableModel ) 403 */ 404 @Override 405 public void setQueryType( final String id ) { 406 super.setQueryType( nval( id,"JDBCTableUpdate" ) ); 407 } 408 409 /** 410 * resourceType が設定されたときのみ使用される、キャッシュの初期化メソッドです。 411 * 412 * @param key 初期化を行うキー 413 */ 414 private void clearResourceData( final String key ) { 415 getResource().clear( key ); 416 } 417 418 /** 419 * 【特殊】クリアするリソースの種類[GEA03/GEA04/GEA08]を指定します。 420 * 421 * @og.tag 422 * 注意:この属性は、リソース関連DBのメンテナンス時にのみ、内部リソースキャッシュを 423 * クリアする目的で使用します。一般の属性としては、使用することはないため、 424 * ご注意ください。 425 * リソース関連のテーブルを更新した場合、リソースキャッシュをクリアして 426 * 置かないと、データベースの値が反映されません。 427 * 昔は、リソースの更新ごとに、全件クリアしていましたが、部分クリアが 428 * できるようになったため、部分クリアを行います。 429 * こでは、(GEA03,GEA04,GEA08) のどれかを指定してください。 430 * 431 * @param type クリアするリソースタイプ [GEA03/GEA04/GEA08] 432 */ 433 public void setResourceType( final String type ) { 434 resourceType = nval( getRequestParameter(type),resourceType ); 435 436 if( resourceType != null && 437// "|GEA03|GEA04|GEA08|GEA09|".indexOf( "|" + resourceType + "|" ) < 0 ) { 438// String errMsg = "resourceTypeは GEA03,GEA04,GEA08,GEA09 のどれかです。" 439// + "resourceType=" + type ; 440 "|GEA03|GEA04|GEA08|".indexOf( "|" + resourceType + "|" ) < 0 ) { 441 String errMsg = "resourceTypeは GEA03,GEA04,GEA08 のどれかです。" 442 + "resourceType=" + type ; 443 throw new HybsSystemException( errMsg ); 444 } 445 } 446 447 /** 448 * 【TAG】条件判定するカラムIDを指定します(初期値:null)。 449 * 450 * @og.tag 451 * 指定のカラムIDの値と、conditionList の値を比較して、 452 * 存在する場合は、Query 処理を実行します。 453 * 例えば、conditionKey="CDKH" として、conditionList="A" とすれば、 454 * 改廃コードが"A"のデータで、かつ選択されたデータのみを処理します。 455 * 設定しない場合は、通常の処理と同様に、選択行のみ処理されます。 456 * 457 * @param key 条件判定するカラムID 458 * @see #setConditionList( String ) 459 */ 460 public void setConditionKey( final String key ) { 461 conditionKey = nval( getRequestParameter( key ),null ) ; 462 } 463 464 /** 465 * 【TAG】条件判定する値のリストを、"|"で区切って登録します(初期値:無条件)。 466 * 467 * @og.tag 468 * conditionKey とペアで指定します。ここには、カラムの設定値のリストを 469 * 指定することで、複数条件(OR結合)での比較を行い、リストにカラム値が 470 * 存在する場合のみ、Query 処理を実行します。 471 * 値が設定されている場合は、その値とマッチする必要があります。なにもセット 472 * されない場合、または、null の場合は、null データとマッチする場合のみ処理 473 * されますので、ご注意ください。 474 * 475 * @param list 値のリスト("|"区切) 476 * @see #setConditionKey( String ) 477 */ 478 public void setConditionList( final String list ) { 479 conditionList = "|" + nval( getRequestParameter( list ),"" ) + "|" ; 480 } 481 482 /** 483 * 【TAG】データを全件選択済みとして処理するかどうか[true/false]を指定します(初期値:false)。 484 * 485 * @og.tag 486 * 全てのデータを選択済みデータとして扱って処理します。 487 * 全件処理する場合に、(true/false)を指定します。 488 * 初期値は false です。 489 * 490 * @param all データを全件選択済み [true:全件選択済み/false:通常] 491 */ 492 public void setSelectedAll( final String all ) { 493 selectedAll = nval( getRequestParameter( all ),selectedAll ); 494 } 495 496 /** 497 * 【特殊】SQL実行後に結果をDBTableModelに反映させるかどうか[true/false]を指定します(初期値:true)。 498 * 499 * @og.tag 500 * 注意:この属性は、リソース関連DBのメンテナンス時に、複数DBへの登録を行うための、 501 * 暫定対応として定義しています。 502 * falseにした場合は、実データとDBTableModelの整合性が取れなくなるため、使用には十分注して下さい。 503 * 初期値は true です。 504 * 505 * @og.rev 4.0.2.0 (2007/12/25) 新規作成 506 * 507 * @param commitTblMdl テーブルモデルへ反映する [true:反映する/false:反映しない] 508 */ 509 public void setCommitTableModel( final String commitTblMdl ) { 510 commitTableModel = nval( getRequestParameter( commitTblMdl ),commitTableModel ); 511 } 512 513 /** 514 * 引数の名称配列 515 * 516 * @return 名称配列 517 */ 518 protected String[] getNames() { 519 return table.getNames() ; 520 } 521 522 /** 523 * 【TAG】BODY部に書かれている Param の SQLタイプを指定します。 524 * 525 * @og.tag 526 * TableUpdateParamTag は、上位の TableUpdateTag の sqlType 属性 と同じ 527 * sqlType 属性の場合のみ、SQL文を合成・出力します。 528 * つまり、TableUpdateTag側のsqlType 属性をパラメータに、TableUpdateParamTag 529 * の sqlType 属性を固定値にすることで、どのパラメータを使用するかを 530 * 選択できる機能を実現する事が可能です。 531 * 532 * @og.rev 4.1.2.0 (2008/03/12) 新規追加 533 * 534 * @param type BODY部に書かれている SQL タイプ 535 */ 536 public void setSqlType( final String type ) { 537 sqlType = nval( getRequestParameter( type ),sqlType ); 538 } 539 540 /** 541 * 【TAG】DBTableModelの改廃Cに従って処理を行うかを指定します。 542 * 543 * @og.tag 544 * この属性は、sqlTypeが指定されている場合のみ有効です。 545 * sqlTypeが指定されている場合、そのsqlTypeに対応した、改廃Cが設定されている 546 * 行のみを処理します。 547 * 対応関係は、以下の通りです。 548 * sqlType = "INSERT" or "COPY" ⇒ 改廃C='A'のみ処理 549 * sqlType = "UPDATE" or "CHANGE" ⇒ 改廃C='C'のみ処理 550 * sqlType = "DELETE" ⇒ 改廃C='D'のみ処理 551 * 552 * @og.rev 4.3.2.0 (2008/09/09) 新規追加 553 * 554 * @param flg DBTableModelの改廃Cに従って処理を行うか 555 */ 556 public void setFollowCdkh( final String flg ) { 557 followCdkh = nval( getRequestParameter( flg ),followCdkh ); 558 } 559 560 /** 561 * 【TAG】リクエスト情報の クォーティション(') 存在チェックを実施するかどうか[true/false]を設定します(初期値:false)。 562 * 563 * @og.tag 564 * SQLインジェクション対策の一つとして、暫定的ではありますが、SQLのパラメータに 565 * 渡す文字列にクォーティション(') を許さない設定にすれば、ある程度は防止できます。 566 * 数字タイプの引数には、 or 5=5 などのクォーティションを使用しないコードを埋めても、 567 * 数字チェックで検出可能です。文字タイプの場合は、必ず (')をはずして、 568 * ' or 'A' like 'A のような形式になる為、(')チェックだけでも有効です。 569 * (') が含まれていたエラーにする(true)/かノーチェックか(false)を指定します。 570 * ※(他のタグは、システムリソースのUSE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}]) 571 * ですが、JSPの互換性を考慮し、初期値を固定でfalseにしています) 572 * 573 * @og.rev 5.1.7.0 (2010/06/01) 新規追加 574 * 575 * @param flag クォーティションチェック [true:する/それ以外:しない] 576 */ 577 @Override 578 public void setQuotCheck( final String flag ) { 579 quotCheck = nval( getRequestParameter( flag ),quotCheck ); 580 } 581 582 /** 583 * SQLタイプを返します。 584 * 585 * @og.rev 4.1.2.0 (2008/03/12) 新規追加 586 * 587 * @return SQLタイプ 588 */ 589 protected String getSqlType() { 590 return sqlType ; 591 } 592 593 /** 594 * このオブジェクトの文字列表現を返します。 595 * 基本的にデバッグ目的に使用します。 596 * 597 * @og.rev 4.0.2.0 (2007/12/25) resourceColumn、commitTableModel追加 598 * 599 * @return このクラスの文字列表現 600 */ 601 @Override 602 public String toString() { 603 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 604 .println( "VERSION" ,VERSION ) 605 .println( "resourceType" ,resourceType ) 606 .println( "resTypeColNo" ,resTypeColNo ) 607 .println( "conditionKey" ,conditionKey ) 608 .println( "conditionList" ,conditionList ) 609 .println( "followCdkh" ,followCdkh ) 610 .println( "CMD_ENTRY" ,CMD_ENTRY ) 611 .println( "commitTabelModel",commitTableModel ) // 4.0.2.0 (2007/12/25) 612 .println( "sql" ,sql ) // 4.1.2.0 (2008/03/12) 613 .println( "Other..." ,getAttributes().getAttribute() ) 614 .fixForm().toString() 615 + HybsSystem.CR 616 + super.toString() ; 617 } 618}