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 * 171 * @return 後続処理の指示 172 */ 173 @Override 174 public int doEndTag() { 175 debugPrint(); 176 177// String label = HybsSystem.BR; // 検索しなかった場合。 178 String label = ""; // 4.0.0 (2005/11/30) 検索しなかった場合。 179 if( check( command, COMMAND_LIST ) ) { 180 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_SMALL ); 181 if( executeCount > 0 && displayMsg != null && displayMsg.length() > 0 ) { 182 buf.append( executeCount ); 183// buf.append( getResource().getMessage( displayMsg ) ); 184 buf.append( getResource().getLabel( displayMsg ) ); 185 buf.append( HybsSystem.BR ); 186 } 187 188 String err = TaglibUtil.makeHTMLErrorTable( errMessage,getResource() ); 189 if( err != null && err.length() > 0 ) { 190// if( errCode >= ErrorMessage.NG ) { // 異常の場合 191// label = err ; 192// } 193 buf.append( err ); 194 setSessionAttribute( errMsgId,errMessage ); 195 } 196 else { 197 removeSessionAttribute( errMsgId ); 198 } 199 label = buf.toString(); 200 201 if( table != null && ! commitTableObject( tableId, table ) ) { 202 // 3.6.0.8 (2004/11/19) トランザクションチェックを行います。 203 jspPrint( "TableUpdateTag Query処理が割り込まれました。DBTableModel は登録しません。" ); 204 return (SKIP_PAGE); 205 } 206 } 207 208 jspPrint( label ); 209 210 // 警告時に停止していましたが、継続処理させます。 211// int rtnCode = EVAL_PAGE; 212// if( errCode >= ErrorMessage.NG ) { // 異常 213// rtnCode = SKIP_PAGE; 214// } 215// else { 216// rtnCode = EVAL_PAGE; 217// } 218 219 long dyTime = System.currentTimeMillis()-dyStart; 220 jspPrint( "<div id=\"queryTime\" value=\"" + (dyTime) + "\"></div>" ); // 3.5.6.3 (2004/07/12) 221 222 // セキュリティチェック(データアクセス件数登録) 223 GUIInfo guiInfo = (GUIInfo)getSessionAttribute( HybsSystem.GUIINFO_KEY ); 224 if( guiInfo != null ) { guiInfo.addWriteCount( executeCount,dyTime,sql ); } 225 226 int rtnCode = ( errCode >= ErrorMessage.NG ) ? SKIP_PAGE : EVAL_PAGE ; 227 return( rtnCode ); 228 } 229 230 /** 231 * タグリブオブジェクトをリリースします。 232 * キャッシュされて再利用されるので、フィールドの初期設定を行います。 233 * 234 * @og.rev 4.0.2.0 (2007/12/25) commitTableModel追加 235 * @og.rev 4.1.2.0 (2008/03/12) sqlType追加 236 * @og.rev 5.1.7.0 (2010/06/01) quotCheckを指定できるようにする。※但し、初期値はfalse固定。 237 * 238 */ 239 @Override 240 protected void release2() { 241 super.release2(); 242 sqlType = null; // INSERT,COPY,UPDATE,MODIFY,DELETE 243 resourceType = null; 244 resTypeColNo = -1; 245 conditionKey = null; // 条件判定するカラムIDを指定(初期値は columnId ) 246 conditionList = null; // 条件判定する値のリストを、"|"で区切って登録(初期値は、無条件) 247 selectedAll = false; 248 commitTableModel= true; // 4.0.2.0 (2007/12/25) 249 followCdkh = false; // 4.3.2.0 (2008/09/09) 250 quotCheck = false; // 5.1.7.0 (2010/06/01) 251 } 252 253 /** 254 * Query を実行します。 255 * 256 * @og.rev 4.0.2.0 (2007/12/25) commitTableModel追加 257 * 258 * @param query オブジェクト 259 */ 260 @Override 261 protected void execute( final Query query ) { 262 263 try { 264 int[] rowNo = getParameterRows(); // 4.0.0 (2005/01/31) 265 if( rowNo.length > 0 ) { 266 query.execute( rowNo,table ); 267 268 errCode = query.getErrorCode(); 269 errMessage = query.getErrorMessage(); 270 271 // リソースクリア処理 272 if( resourceType != null ) { 273// if( "GEA09".equals( resourceType ) ) { 274// resTypeColNo = table.getColumnNo( "MSGCD" ); // キーは、MSGCD 275// } 276// else { 277 resTypeColNo = table.getColumnNo( "CLM" ); // キーは、CLM 278// } 279 } 280 281 // 逆順にDELETEしないと、行番号がずれてしまう。 282 int row; 283 for( int j=rowNo.length-1; j>=0; j-- ) { 284 row = rowNo[j]; 285 if( resTypeColNo >= 0 ) { 286 clearResourceData( table.getValue( row,resTypeColNo ) ); // リソースのクリア 287 } 288 289 if( commitTableModel ) { // 4.0.2.0 (2007/12/25) 290 if( DBTableModel.DELETE_TYPE.equals( table.getModifyType( row ) ) ) { 291 table.removeValue( row ); 292 } 293 else { 294 table.resetModify( row ); 295 } 296 } 297 } 298// if( query.getUpdateFlag() ) { query.commit(); } 299 if( query.isUpdate() ) { query.commit(); } 300 } 301 } 302 finally { 303 if( query != null ) { query.close(); } 304 } 305 } 306 307 /** 308 * 表示データの HybsSystem.ROW_SEL_KEY を元に、選ばれた 行番号の 309 * 配列を返します。 310 * ここでは、conditionKey に値が設定されている場合は、そのカラムの値が 311 * conditionList にマッチする場合のみ対象選択行として返します。 312 * 値がセットされていない場合は、通常のCommonTagSupport#getParameterRows() 313 * が呼ばれます。 314 * なにも選ばれていない場合は、サイズ0の配列を返します。 315 * 316 * @og.rev 4.3.2.0 (2008/09/09) followCdkh属性対応 317 * 318 * @return (選ばれていない場合は、サイズ0の配列を返す) 319 */ 320 @Override 321 protected int[] getParameterRows() { 322 int[] rowNo ; 323 if( selectedAll ) { 324 int rowCnt = table.getRowCount(); // 3.5.5.7 (2004/05/10) 325 rowNo = new int[ rowCnt ]; 326 for( int i=0; i<rowCnt; i++ ) { 327 rowNo[i] = i; 328 } 329 } else { 330 rowNo = super.getParameterRows(); // 4.0.0 (2005/01/31) 331 } 332 333 if( conditionKey != null ) { 334 int col = table.getColumnNo( conditionKey ); 335 List<Integer> list = new ArrayList<Integer>(); 336 for( int i=0; i<rowNo.length; i++ ) { 337 String val = "|" + table.getValue( rowNo[i],col ) + "|"; 338 if( conditionList.indexOf( val ) >= 0 ) { 339 list.add( Integer.valueOf( rowNo[i] ) ); 340 } 341 } 342 343 int size = list.size(); 344 rowNo = new int[size]; 345 for( int i=0; i<size; i++ ) { 346 rowNo[i] = (list.get(i)).intValue(); 347 } 348 } 349 350 // 4.3.2.0 (2008/09/09) 351 if( sqlType != null && sqlType.length() > 0 && followCdkh ) { 352 List<Integer> flist = new ArrayList<Integer>(); 353 for( int i=0; i<rowNo.length; i++ ) { 354 String cdkh = table.getModifyType( rowNo[i] ); 355 if( ( ( "INSERT".equals( sqlType ) || "COPY".equals( sqlType ) ) 356 && DBTableModel.INSERT_TYPE.equals( cdkh ) ) 357 || 358 ( ( "UPDATE".equals( sqlType ) || "CHANGE".equals( sqlType ) ) 359 && DBTableModel.UPDATE_TYPE.equals( cdkh ) ) 360 || 361 ( ( "DELETE".equals( sqlType ) ) 362 && DBTableModel.DELETE_TYPE.equals( cdkh ) ) ) { 363 flist.add( Integer.valueOf( rowNo[i] ) ); 364 } 365 } 366 367 int size = flist.size(); 368 rowNo = new int[size]; 369 for( int i=0; i<size; i++ ) { 370 rowNo[i] = (flist.get(i)).intValue(); 371 } 372 } 373 374 return rowNo; 375 } 376 377 /** 378 * 【TAG】Query を発行する為のクラスIDを指定します({@og.doc03Link queryType 初期値:JDBCTableUpdate})。 379 * 380 * @og.tag 381 * 引数指定のINSERT/UPDATE文を実行する場合の、queryType 属性を使用します。 382 * このタグでは、execute( int[] ,DBTableModel )を実行します。 383 * 代表的なクラスとして、"JDBCTableUpdate" が標準で用意されています。 384 * 385 * タグにより使用できる/出来ないがありますが、これは、org.opengion.hayabusa.db 386 * 以下の Query_**** クラスの **** を与えます。 387 * これらは、Query インターフェースを継承したサブクラスです。 388 * {@og.doc03Link queryType Query_**** クラス} 389 * 390 * @param id Query を発行する為の実クラス ID 391 * @see org.opengion.hayabusa.db.Query Queryのサブクラス 392 * @see org.opengion.hayabusa.db.Query#execute( int[] ,DBTableModel ) 393 */ 394 @Override 395 public void setQueryType( final String id ) { 396 super.setQueryType( nval( id,"JDBCTableUpdate" ) ); 397 } 398 399 /** 400 * resourceType が設定されたときのみ使用される、キャッシュの初期化メソッドです。 401 * 402 * @param key 初期化を行うキー 403 */ 404 private void clearResourceData( final String key ) { 405 getResource().clear( key ); 406 } 407 408 /** 409 * 【特殊】クリアするリソースの種類[GEA03/GEA04/GEA08]を指定します。 410 * 411 * @og.tag 412 * 注意:この属性は、リソース関連DBのメンテナンス時にのみ、内部リソースキャッシュを 413 * クリアする目的で使用します。一般の属性としては、使用することはないため、 414 * ご注意ください。 415 * リソース関連のテーブルを更新した場合、リソースキャッシュをクリアして 416 * 置かないと、データベースの値が反映されません。 417 * 昔は、リソースの更新ごとに、全件クリアしていましたが、部分クリアが 418 * できるようになったため、部分クリアを行います。 419 * こでは、(GEA03,GEA04,GEA08) のどれかを指定してください。 420 * 421 * @param type クリアするリソースタイプ [GEA03/GEA04/GEA08] 422 */ 423 public void setResourceType( final String type ) { 424 resourceType = nval( getRequestParameter(type),resourceType ); 425 426 if( resourceType != null && 427// "|GEA03|GEA04|GEA08|GEA09|".indexOf( "|" + resourceType + "|" ) < 0 ) { 428// String errMsg = "resourceTypeは GEA03,GEA04,GEA08,GEA09 のどれかです。" 429// + "resourceType=" + type ; 430 "|GEA03|GEA04|GEA08|".indexOf( "|" + resourceType + "|" ) < 0 ) { 431 String errMsg = "resourceTypeは GEA03,GEA04,GEA08 のどれかです。" 432 + "resourceType=" + type ; 433 throw new HybsSystemException( errMsg ); 434 } 435 } 436 437 /** 438 * 【TAG】条件判定するカラムIDを指定します(初期値:null)。 439 * 440 * @og.tag 441 * 指定のカラムIDの値と、conditionList の値を比較して、 442 * 存在する場合は、Query 処理を実行します。 443 * 例えば、conditionKey="CDKH" として、conditionList="A" とすれば、 444 * 改廃コードが"A"のデータで、かつ選択されたデータのみを処理します。 445 * 設定しない場合は、通常の処理と同様に、選択行のみ処理されます。 446 * 447 * @param key 条件判定するカラムID 448 * @see #setConditionList( String ) 449 */ 450 public void setConditionKey( final String key ) { 451 conditionKey = nval( getRequestParameter( key ),null ) ; 452 } 453 454 /** 455 * 【TAG】条件判定する値のリストを、"|"で区切って登録します(初期値:無条件)。 456 * 457 * @og.tag 458 * conditionKey とペアで指定します。ここには、カラムの設定値のリストを 459 * 指定することで、複数条件(OR結合)での比較を行い、リストにカラム値が 460 * 存在する場合のみ、Query 処理を実行します。 461 * 値が設定されている場合は、その値とマッチする必要があります。なにもセット 462 * されない場合、または、null の場合は、null データとマッチする場合のみ処理 463 * されますので、ご注意ください。 464 * 465 * @param list 値のリスト("|"区切) 466 * @see #setConditionKey( String ) 467 */ 468 public void setConditionList( final String list ) { 469 conditionList = "|" + nval( getRequestParameter( list ),"" ) + "|" ; 470 } 471 472 /** 473 * 【TAG】データを全件選択済みとして処理するかどうか[true/false]を指定します(初期値:false)。 474 * 475 * @og.tag 476 * 全てのデータを選択済みデータとして扱って処理します。 477 * 全件処理する場合に、(true/false)を指定します。 478 * 初期値は false です。 479 * 480 * @param all データを全件選択済み [true:全件選択済み/false:通常] 481 */ 482 public void setSelectedAll( final String all ) { 483 selectedAll = nval( getRequestParameter( all ),selectedAll ); 484 } 485 486 /** 487 * 【特殊】SQL実行後に結果をDBTableModelに反映させるかどうか[true/false]を指定します(初期値:true)。 488 * 489 * @og.tag 490 * 注意:この属性は、リソース関連DBのメンテナンス時に、複数DBへの登録を行うための、 491 * 暫定対応として定義しています。 492 * falseにした場合は、実データとDBTableModelの整合性が取れなくなるため、使用には十分注して下さい。 493 * 初期値は true です。 494 * 495 * @og.rev 4.0.2.0 (2007/12/25) 新規作成 496 * 497 * @param commitTblMdl テーブルモデルへ反映する [true:反映する/false:反映しない] 498 */ 499 public void setCommitTableModel( final String commitTblMdl ) { 500 commitTableModel = nval( getRequestParameter( commitTblMdl ),commitTableModel ); 501 } 502 503 /** 504 * 引数の名称配列 505 * 506 * @return 名称配列 507 */ 508 protected String[] getNames() { 509 return table.getNames() ; 510 } 511 512 /** 513 * 【TAG】BODY部に書かれている Param の SQLタイプを指定します。 514 * 515 * @og.tag 516 * TableUpdateParamTag は、上位の TableUpdateTag の sqlType 属性 と同じ 517 * sqlType 属性の場合のみ、SQL文を合成・出力します。 518 * つまり、TableUpdateTag側のsqlType 属性をパラメータに、TableUpdateParamTag 519 * の sqlType 属性を固定値にすることで、どのパラメータを使用するかを 520 * 選択できる機能を実現する事が可能です。 521 * 522 * @og.rev 4.1.2.0 (2008/03/12) 新規追加 523 * 524 * @param type BODY部に書かれている SQL タイプ 525 */ 526 public void setSqlType( final String type ) { 527 sqlType = nval( getRequestParameter( type ),sqlType ); 528 } 529 530 /** 531 * 【TAG】DBTableModelの改廃Cに従って処理を行うかを指定します。 532 * 533 * @og.tag 534 * この属性は、sqlTypeが指定されている場合のみ有効です。 535 * sqlTypeが指定されている場合、そのsqlTypeに対応した、改廃Cが設定されている 536 * 行のみを処理します。 537 * 対応関係は、以下の通りです。 538 * sqlType = "INSERT" or "COPY" ⇒ 改廃C='A'のみ処理 539 * sqlType = "UPDATE" or "CHANGE" ⇒ 改廃C='C'のみ処理 540 * sqlType = "DELETE" ⇒ 改廃C='D'のみ処理 541 * 542 * @og.rev 4.3.2.0 (2008/09/09) 新規追加 543 * 544 * @param flg DBTableModelの改廃Cに従って処理を行うか 545 */ 546 public void setFollowCdkh( final String flg ) { 547 followCdkh = nval( getRequestParameter( flg ),followCdkh ); 548 } 549 550 /** 551 * 【TAG】リクエスト情報の クォーティション(') 存在チェックを実施するかどうか[true/false]を設定します(初期値:false)。 552 * 553 * @og.tag 554 * SQLインジェクション対策の一つとして、暫定的ではありますが、SQLのパラメータに 555 * 渡す文字列にクォーティション(') を許さない設定にすれば、ある程度は防止できます。 556 * 数字タイプの引数には、 or 5=5 などのクォーティションを使用しないコードを埋めても、 557 * 数字チェックで検出可能です。文字タイプの場合は、必ず (')をはずして、 558 * ' or 'A' like 'A のような形式になる為、(')チェックだけでも有効です。 559 * (') が含まれていたエラーにする(true)/かノーチェックか(false)を指定します。 560 * ※(他のタグは、システムリソースのUSE_SQL_INJECTION_CHECK[={@og.value org.opengion.hayabusa.common.SystemData#USE_SQL_INJECTION_CHECK}]) 561 * ですが、JSPの互換性を考慮し、初期値を固定でfalseにしています) 562 * 563 * @og.rev 5.1.7.0 (2010/06/01) 新規追加 564 * 565 * @param flag クォーティションチェック [true:する/それ以外:しない] 566 */ 567 @Override 568 public void setQuotCheck( final String flag ) { 569 quotCheck = nval( getRequestParameter( flag ),quotCheck ); 570 } 571 572 /** 573 * SQLタイプを返します。 574 * 575 * @og.rev 4.1.2.0 (2008/03/12) 新規追加 576 * 577 * @return SQLタイプ 578 */ 579 protected String getSqlType() { 580 return sqlType ; 581 } 582 583 /** 584 * このオブジェクトの文字列表現を返します。 585 * 基本的にデバッグ目的に使用します。 586 * 587 * @og.rev 4.0.2.0 (2007/12/25) resourceColumn、commitTableModel追加 588 * 589 * @return このクラスの文字列表現 590 */ 591 @Override 592 public String toString() { 593 return org.opengion.fukurou.util.ToString.title( this.getClass().getName() ) 594 .println( "VERSION" ,VERSION ) 595 .println( "resourceType" ,resourceType ) 596 .println( "resTypeColNo" ,resTypeColNo ) 597 .println( "conditionKey" ,conditionKey ) 598 .println( "conditionList" ,conditionList ) 599 .println( "followCdkh" ,followCdkh ) 600 .println( "CMD_ENTRY" ,CMD_ENTRY ) 601 .println( "commitTabelModel",commitTableModel ) // 4.0.2.0 (2007/12/25) 602 .println( "sql" ,sql ) // 4.1.2.0 (2008/03/12) 603 .println( "Other..." ,getAttributes().getAttribute() ) 604 .fixForm().toString() 605 + HybsSystem.CR 606 + super.toString() ; 607 } 608}