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