5.7.5.0 (2014/04/04) [ファイル検索の隠しファイル除外対応] 隠しファイルを検索条件に考慮できるようにします。 FileWhereTag で、isHidden="false" とすると、隠しファイル(hidden)以外を検索します。 true にすると、隠しファイルのみ検索します。 すべてを検索したい場合(従来と同じ)は、何も指定しないでください。 fukurou.util.HybsFileFilter#isHidden( final String flag ) fukurou.util.HybsFileFilter#isHidden( final String flag,final boolean reverse ) fukurou.util.HybsFileFilter$IsHiddenFilter fukurou.process.Process_FileSearch#init( final ParamProcess paramProcess ) hayabusa.taglib.FileWhereTag#doEndTag() hayabusa.taglib.FileWhereTag#release2() hayabusa.taglib.FileWhereTag#setIsHidden( final String flg ) jsp/GF6380/query.jsp jsp/GF6380/result.jsp [Tomcat8.0.5 対応] Tomcat8.0.5 で、ClassLoader の getResources(String)で取得する URL 名の最後に、"/" が付かなくなっています。 8.0.3 までは、付いていました。 その結果、フォルダの最後に "/" がある前提のプログラムが動作しなく なっていますので対応します。 * ※ Tomcat8.0.3 では、ClassLoader の getResources(String)で取得するURL名が、 * /C:/opengionV6/uap/webapps/gf/WEB-INF/classes/org/opengion/plugin/ * の形式で、最後の "/" を取る為、filepath.length() - 1 処理していましたが、 * Tomcat8.0.5 では、/C:/opengionV6/uap/webapps/gf/WEB-INF/classes/org/opengion/plugin * の形式で、最後の "/" がなくなっています。 * 最後の "/" があってもなくても、new File(String) でディレクトリのオブジェクトを * 作成できるため、filepath.length() に変更します。 fukurou.util.FindClassFiles#FindClassFiles( final String filepath,final String keyword ) [HTML5 Editor_DATALIST 対応] Editor_DATALIST に、display:none; が入っていなかったので、追加しました。 HTML5非対応ブラウザで見た場合に、option部分が表示されてしまいました。 下記のキャッシュ機能も追加しました。 * 一覧表出力時の getValue( int ,String ) 処理では、Selection オブジェクトの * キャッシュ機能を利用して、同一Selection オブジェクトの間は、datalist は、 * 1度しか、出力しない様に制御しています。これにより、共有のdatalist を使用する為、 * HTMLの出力データ量を抑えることが可能になります。 * (キャッシュを利用しないと100行出力すると100個のdatalistを出力する事になります。) * (同様の機能を持つ INDBMENU では、行ごとにプルダウンデータを作成しています。) * ただし、行単位にSQLの条件を変える機能(AAA:BBB:CCC:DDD引数)が指定された場合は、 * 行ごとに出力します。 plugin.column.Editor_DATALIST#getValue( final String value ) plugin.column.Editor_DATALIST#getValue( final int row,final String value ) plugin.column.Editor_DATALIST#getOption( final TagBuffer buf,final String value,final boolean useSelCache ) [bulkSet 区切り文字変更] 5.2.3.0 (2010/12/01) で、bulkSet の区切り文字を、タブからカンマに変更しましたが、 数字や値段など、999,999形式の3桁区切りカンマで分割してしまうため、使いにくいため、 元のタブ文字列に戻します。 gf\src\script\common\resultScript.js#bulkSet( obj ) gf\src\script\common\resultScript.js#bulkPaste( obj ) gf\src\script\common\resultScript.js#bulkPasteBox( obj ) gf\src\script\common\resultScript.js#ctrlCV( obj ) [FileUDTag] 5.7.4.3 (2014/03/28) で、修正した FileUDTag の setClmEdit を元に戻します。 その機能の ON/OFF は、useEditLink 属性とします。 過去に導入済みのプログラムで使用されている可能性がある為です。 hayabusa.taglib.FileUDTag#doEndTag() hayabusa.taglib.FileUDTag#release2() hayabusa.taglib.FileUDTag#setEditLink( final String type ) [popup 関係] popup 関係の見直しを行います。 @popup.jspページの head タグの headType に、"popup" を設定します。 これにより、BODY部に、 を記述する必要がなくなります。 gf/jsp/GF9110/popup.jsp gf/jsp/GF6050/popup.jsp Apopupの、モーダルダイアログで、サイズが変更できるように、resizable:on; を追記。 gf\src\script\common\default.js#ogPopup( p_pgid,p_height,p_width,p_in_Array,p_this,p_out_Array,command,event ) Bpopup.jsp の queryButton タグに、編集機能の ON/OFFができる属性(useEditMenu)を追加。 useEditMenu="true" で、編集機能のプルダウンが表示されます。(初期値は互換性の関係で、true) hayabusa.taglib.QueryButtonTag#doEndTag() hayabusa.taglib.QueryButtonTag#release2() hayabusa.taglib.QueryButtonTag#setUseEditMenu( final String flag ) gf/src/META-INF/hybs-taglib.tld gf/WEB-INF/hybs-taglib.tld C関連して、fileUD タグの EditMenu属性を、useEditMenu属性に変更します。 既存では、ほとんど使われていないハズなので、互換性を無視して置き換えます。 hayabusa.taglib.FileUDTag#setUseEditMenu( final String flag ) [HTML5 関係] ViewForm_HTMLTable で使用している colgroup による、DBTypr属性の付与ですが、 HTML5 ネイティブモードで、。(原因不明です) # CSSで左寄せなど指定している箇所で、R , S9 , X9 の右寄せの機能が効きません。 そこで、td:nth-child(n) を使用して、右寄せだけ設定します。 HTMLTable 以外は、基本的に、個々の td に class 属性をセットしているため、 動作しています。(共通の行番号を出力している箇所以外) ViewForm_HTMLSeqClmTable も、本当は対応すべきですが、そもそもが暫定対応なので 良く使う ViewForm_HTMLTable のみ適用します。 # 他の ViewForm_XX でも、行番号を出力している箇所は、同様に対応が必要ですが、 # 取りあえず保留します。 plugin.view.ViewForm_HTMLTable#getTableHead() [javadoc 関係] JavaDocコメント欄に、<,> の記述があったため、エスケープします。 fukurou.mail.MailTX.java plugin.column.Editor_DATALIST.java 5.7.4.3 (2014/03/28) [ロールモード 関係] ロールモードのJavaDocが古いので、最新の状態に合わせます。 また、MODE 定義が、public static final でしたが、ビットパターンは 将来的に変更する予定なので、privateに変更します。 hayabusa.resource.RoleMode.java Edit機能の利用に、useClmEdit を加味します。 従来は、カラム編集画面の内、【表示項目設定】タブを表示しないだけでした。 この設定は、RWMODE を、 ##d , ##u , ##f の場合にも同様の設定が可能です。 カラム編集リンク自体を出さない機能は、現時点ではリソース設定できないため、 タグのパラメータとして指定できるようにします。 基本的には、このパラメータはほとんど使われていないハズなので、 機能を置き換えます。 初期値は、カラム編集リンクを出力する(=true)です。 hayabusa.taglib.FileUDTag#doEndTag() hayabusa.taglib.FileUDTag#release2() hayabusa.taglib.FileUDTag#setClmEdit( final String type ) [Editor_DATALIST 追加] 編集機能に、HTML5で採用された、DATALISTタグを利用した、入力候補となる データリストを定義する編集用エディターを新規作成します。 機能的には、INDBMENUのHTML5版に対応します。 編集パラメータのQUERYに応じて、入力候補のリスト(datalistタグ)を出力します。 入力フィールドとdatalistタグとの関係付は、カラムIDに、"h_カラムID" で結びつけます。 plugin.column.Editor_DATALIST.java 新規作成 [ファイルアップロード機能] ファイルアップロードで、filename のみ、リクエスト変数が使えるようにします。 他の変数では、リクエスト変数が使えない事をチェックするメソッドを用意します。 hayabusa.taglib.FileUploadTag.java 全般的に修正 hayabusa.servlet.MultipartRequest#MultipartRequest(final HttpServletRequest request, … hayabusa.servlet.MultipartRequest#getReqParamFileName( final String fname ) [クロス集計機能] useHeaderColumn の適用条件を、集計カラムすべてに行うのではなく、最初の集計カラムのみに適用します。 基本的には、複数の集計カラムには対応できていなかったので、互換性は保たれるはずです。 plugin.view.ViewForm_HTMLCrossTable#makeCrossTable( final DBTableModel table ) 5.7.4.2 (2014/03/20) で、useHeaderResource を見直しましたが、再度見直します。 useHeaderResource と useHeaderColumn の両方が true でないと適用しない仕様でしたが、 現時点で、useHeaderResource は、他には使われていないため、単独でヘッダーのリソース適用を 実行するように変更します。 上記の変更に伴い、タグリブのJavaDocを修正します。 hayabusa.taglib.ViewCrossParamTag.java JavaDoc修正 [FileQueryTag 機能改善] FileQueryTag にいくつかの機能改善を行います。 @WRITABLE カラムの追加 useWritable属性を指定すると、先頭カラムに、WRITABLE カラムが挿入されます。 AMD5の計算結果を設定する機能。 useMD5属性を指定する事で、MD5 というカラムを追加したうえで、MD5計算を行います。 hayabusa.taglib.FileQueryTag#release2() hayabusa.taglib.FileQueryTag#initDBTable() hayabusa.taglib.FileQueryTag#addFileData( final int rowNo,final int lvl,final File fin ) hayabusa.taglib.FileQueryTag#setUseWritable( final String flag ) hayabusa.taglib.FileQueryTag#setUseMD5( final String flag ) gf/src/META-INF/hybs-taglib.tld gf/WEB-INF/hybs-taglib.tld [FileQueryTag 関連] File関連の対応の中で、FileWhereTag の isLarger、isSmaller を文字列での扱いに変更します。 また、現状は、org.opengion.fukurou.util.HybsFileFilter.java で処理していますが、 KB や バイトなど、JavaDoc上の誤記や、int型では、最大容量に対応できていない事、 指定方法も、MB や KB などの 記号を含めて指定したいことなどを合わせて、文字列での 受渡し方法に変更します。 fukurou.util.HybsFileFilter#getByteSize( final String slen ) fukurou.util.HybsFileFilter#isLarger( final String slen ) fukurou.util.HybsFileFilter$IsLargerFilter$IsLargerFilter( final long len ) fukurou.util.HybsFileFilter#isSmaller( final String slen ) fukurou.util.HybsFileFilter$IsSmallerFilter#IsSmallerFilter( final long len ) fukurou.process.Process_FileSearch#init( final ParamProcess paramProcess ) hayabusa.taglib.FileWhereTag#release2() [JspInitTag 関連] エラー時に、処理を停止していましたが、debug=true と引数に入れることで、 継続処理できるようにしました。 エラー内容によっては、DB検索など、各種処理を行いたい場合もある為です。 hayabusa.taglib.JspInitTag#doEndTag() [HeadTag 関連] @headType に、"frame" を用意します。 これは、index.jsp に使用することを想定しています。 index.jsp では、frameset を使用していますが、HTML5 で、frameset が廃止された 事を受けて、"frame" を指定したページは、 従来のHTML4 を出力して、frameset の 機能を実行しようとしています。 # 現時点では、IEしか調査していませんが、HTML5 にしても frameset は使えています。 AheadType に、"popup" を用意します。 これは、popup.jsp に使用することを想定しています。 popup.jsp では、上下のフレーム処理をせずに、1枚のJSPに、query.jsp 部と result.jsp 部を記述し、さらに、各種設定を行っています。 ほとんど、query.jsp、result.jsp と同じ内容ですが、ほんの少し異なる箇所があり、 コピー作成すると、メンテナンス性が悪化します。 そこで、(将来的に)popup.jsp の自動作成ができるように、マーカーしておきます。 hayabusa.taglib.HeadTag#doAfterBody() hayabusa.taglib.HeadTag#doEndTag() hayabusa.taglib.HeadTag#setHeadType( final String type ) 5.7.4.2 (2014/03/20) [@DATE.XXXX 関係] fukurou.util.SystemParameter.java で、{@XXXX AA BB CC} の、AA,B,CC引数に リクエスト変数を表す @ ではじまる値の設定は、エラーにします。 fukurou.util.SystemParameter#getDateFormat( final String value ) hayabusa.taglib.CommonTagSupport.java で、getSanitizedBodyString()メソッド内で fukurou.util.SystemParameter を使って、{@XXXX} 処理を行っていますが、 これは、リクエスト変数が使えないため、機能制限されます。 このメソッドは、View関連のBODY処理で、リクエスト値の "[" 文字列を、 "\\]\\"に変換して、フォーマット処理されないようにしていますが、それらに、 SystemParameter を使っているため、{@XXXX AA BB CC} 機能が使えない状況に なっています。 そこで、CommonTagSupport に一時的に、サニタイズ処理のフラグを設定し、 getRequestValue( String , boolean )の処理内の、getRequest().getParameter( String ) 処理の直後に、サニタイズ処理を行う様に変更します。 hayabusa.taglib.CommonTagSupport#release2() hayabusa.taglib.CommonTagSupport#getSanitizedBodyString() [ViewForm_HTMLCrossTable 関係] 5.5.5.0 (2012/07/28) [クロス集計時のラベルリソース利用] で適用した処理で、 「カラムリソースがselectionを持たない場合(label表示等)や、カラムリソース そのものが無い場合は何もしません。」 という箇所について、オリジナルのカラムリソースをヘッダー表示の値に適用するように 変更します。 条件は、useHeaderResource && useHeaderColumn && selection != null の時です。 なお、ViewCrossParamTag のJavaDocコメントが間違っていたので、修正します。 plugin.view.ViewForm_HTMLCrossTable#getHeadLine() hayabusa.taglib.ViewCrossParamTag.java gf/jsp/GF6070/query.jsp gf/jsp/GF6070/result_sample6.jsp 5.7.4.1 (2014/03/15) [useRenderer=true時のExcel出力修正] useRendererがtrueの場合画面表示そのままをExcel出力しようとしますが、 DBタイプが数字型の場合に内部的にDouble変換をかけようとしてエラーになる場合があります。 (例えば税率で、DB上は数字で持っているが表示は%付きで出している等) useRendererがfalseの場合のみdouble変換をかけるようにします。 plugin.io.TableWriter_Excel#setRowCellValue( final Row oThisRow, final int indexOfCell, final String dataVal,final int cellType ) [エラーメッセージ変更] fileUDタグのエラー「選択されていません。もう一度、選択しなおして下さい。」は ユーザにとって分かりにくいため、ERR0042を新規に追加して、標準メッセージを 「出力対象データが見つかりませんでした。再度検索して下さい。」に変更します。 hayabusa.taglib.fileUDTag#errorMsg hayabusa.taglib.fileUDTag#release2() [classのファイル分離] public や、protected などの クラスに対する アクセス修飾子 で、 省略時のクラスを、public などと同一ファイルで管理していましたが、 ファイルそのものを分離します。 MailCharset.java から、MailCharsetFactory、UnicodeCorrecter、CharCodeConverter を分離します。 MailCharsetFactory のインナークラスとして、Mail_Windows31J_Charset、Mail_ISO2022JP_Charset、JISDataSource を 再定義しなおします。 fukurou.mail.MailCharset.java fukurou.mail.MailCharsetFactory.java fukurou.mail.UnicodeCorrecter.java fukurou.mail.CharCodeConverter.java [日本語ファイルのIE11対応] 5.7.1.2 (2013/12/20) で、FileDownloadサーブレットに対応した IE11の日本語対応処理で、 forwardタグにも同様の処理が存在したため、対応します。 User-Agent ヘッダーの取得と比較で、条件を反転したうえで、新しいAgent(Trident)に対応させます。 ** IE11はUserAgnetが変更になりましたが、fileDownloadサーブレットの日本語対応ロジックの影響で ** IE11の非互換モードではサーブレット経由のダウンロードが上手くいきませんでした。 ** とりあえず、新しいAgent(Trident)に対応させておきます。 hayabusa.taglib.ForwardTag#doEndTag() [{@DATE.XXXX AA BB CC} 処理の見直し] @日付処理で、AA 引数が、@ 付の場合、パラメータ処理しますが、null でなく 8ケタ以下の場合は、コマンドと判断している処理で、8ケタ以下ではなく、 先頭が、数字かどうかで判定します。 AH1 〜 HXXX :時を指定の分だけ進める処理が、実装できていなかったので、追加します。 BCC 引数で、日付の加減算処理を、"H" , "D" , "M" の 1文字パラメータの場合のみ利用可能 でしたが、他のコマンドでも処理できるように変更しました。 Cこれに伴い、01_ADMIN の [Parameter] JSP を修正します。 hayabusa.taglib.CommonTagSupport#getDateFormat( final String value ) fukurou.util.HybsDateUtil#getDateFormat( final String key ,final String prmA ,final String prmB ) fukurou.util.HybsDateUtil#getDateFormat( final String key ,final String prmA ,final String prmB ,final int intC ) fukurou.util.HybsDateUtil#calendarCalc( final Calendar now,final String prmB ) fukurou.util.HybsDateUtil#calendarCalc( final Calendar now , final String prmB , final int intC ) fukurou.util.SystemParameter#getDateFormat( final String value ) gf\jsp\common\gamen\01_ADMIN\printSystemParameter.jsp [popupのIE11対応] popupで、モーダルダイアログのフレーム対応がおかしくなったため、 ポップアップを見直します。 従来は、index.jsp を、og;popup タグから呼び出しても、フレームサイズを 指定できましたが、ネイティブモードではフレームサイズの指定ができなく なりました。 そこで、popup は、popup.jsp を新規に作成し、query 部と result 部を一つのJSPファイルに まとめる方式を標準とします。 @popup.jsp を別途用意します。 Acustom/popup_info.jsp を include します。トグルボタンや他画面リンクを排除しています。 Bhead タグで、 を記述します。 C
で、自分自身を呼び出すようにします。 DqueryButton タグに、usePrevNext="false" を記述します。 Equery タグに、 scope="request" をセットします。 Fview タグに、scope="request" 、selectedType = "radio"、popupReturnKeys に、引数 を指定します。 jsp/gf/custom/popup_info.jsp jsp/gf/GF9110/popup.jsp jsp/gf/GF9150/result.jsp jsp/gf/GF9200/query.jsp jsp/gf/GF9250/query.jsp jsp/gf/GF9500/query.jsp jsp/gf/GF9510/query.jsp 5.7.4.0 (2014/03/07) [classのファイル分離] public や、protected などの クラスに対する アクセス修飾子 で、 省略時のクラスを、public などと同一ファイルで管理していましたが、 ファイルそのものを分離します。 MailCharset.java から、MailCharsetFactory、UnicodeCorrecter、CharCodeConverter を分離します。 MailCharsetFactory のインナークラスとして、Mail_Windows31J_Charset、Mail_ISO2022JP_Charset、JISDataSource を 再定義しなおします。 fukurou.mail.MailCharset.java fukurou.mail.MailCharsetFactory.java fukurou.mail.UnicodeCorrecter.java fukurou.mail.CharCodeConverter.java LineModelFilter.java から、FilterOperation を分離します。 fukurou/process/LineModelFilter.java fukurou/process/FilterOperation.java [ヘッダ固定のIE11対応] IE11のイントラネット判定の不具合と思われる現象で、ヘッダが予期せぬ改行を起こす場合があります。 ヘッダ固定時のwidth設定を+1pxする事で現象の発生を防ぎます。 jsp/common/scrollBar2.js src/script/common/scrollBar2.js [JavaDoc 関連修正] JavaDoc関連で、HTMLタグのエンティティ化や、各種コメント不足他 修正しています。 [ReplaceString バグ] 5.7.2.1 (2014/01/17) ReplaceString$ReplaceData#isOverlap の修正に関して、追加です。 開始-終了条件が、イコールの場合、エラーなのですが、従来からの互換性の為、エラーではなく 同じという判定をする必要があります。 compareTo(String) で、同一判定を行います。方法は、ReplaceData のハッシュ値が同じかどうかで 判断します。 fukurou.util.ReplaceString$ReplaceData#compareTo( final ReplaceData other ) [jsp/custom/custom.css の 修正] inputタグで、readonly="readonly" を設定したときに、背景色をグレイにするCSSを入れます。 標準では、.readonly クラス指定で、文字色をグレイにします。 カスタムの標準として用意します。(common に入れると互換性が損なわれるためcustomに入れます) jsp/custom/custom.css [UserInfoTag コメント修正] UserInfoTag で、NVLEGT ⇒ NVLGET にコメント修正。 単なる記述ミス。ソース内部の変数は、NVLGET で正しかった。 hayabusa.taglib.UserInfoTag.java 5.7.3.2 (2014/02/28) [Excel帳票デーモン修正] PRT_GRPが指定された際の条件式に誤りがあったため修正します。 (ver.3でもともとPRTIDで指定されていたものが何処かのタイミングでPRT_GRPに変更されてしまっていた) plugin.daemon.Daemon_Report#initDaemon() [Process_**** 修正] Process_Process_GrepChangeで、debug 情報の表示と、キーワードの\n,\t の使用、 trim() の廃止を行います。 * -regex=true で、キーワードに正規表現を利用できます。具体的には、String#replaceAll(String,String) * を利用して置換します。 * 通常の置換処理は、indexOf で見つけて、StringBuilder#replace(int,int,String) を繰り返して処理しています。 * -ignoreCase=true で、検索キーワードに大文字小文字を区別しない処理が可能です。 fukurou.process.Process_GrepChange#init( final ParamProcess paramProcess ) [Tomcat8 対応] Tomcat 8.0.1で、ServletContext#getRealPath( "/" ) の値が、Tomcat 7 の時と異なっています。 具体的には、実アドレスの末尾に、ファイルセパレータが付かなくなりました。 Apache Tomcat/7.0.50 context.getRealPath( "/" ) ⇒ C:\opengionV6\uap\webapps\gf\ context.getRealPath( "" ) ⇒ C:\opengionV6\uap\webapps\gf Apache Tomcat/8.0.1 context.getRealPath( "/" ) ⇒ C:\opengionV6\uap\webapps\gf context.getRealPath( "" ) ⇒ C:\opengionV6\uap\webapps\gf getRealPath( "" ) の場合は、どちらも付かないので、+ファイルセパレータを常に付ける事で 互換性を取るようにします。 hayabusa\common\SystemParameter#loadInitialParameter( final ServletContext context,final String contextName ) hayabusa\filter\AccessStopFilter#init(final FilterConfig filterConfig) hayabusa\filter\FileFilter#init(final FilterConfig filterConfig) hayabusa\filter\URLCheckFilter#init(final FilterConfig filterConfig) hayabusa\filter\URLHashFilter#init(final FilterConfig filterConfig) [ソースチェック] DOC18\xsltV6 のソースチェックを変更します。 SELECT文の取得範囲を増やしました。 gf\jsp\DOC18\xsltV6\GF73_PROG.xsl gf\jsp\DOC18\xsltV6\GF74_PROG.xsl [columnEditorタグのparameter属性] columnEditorタグのparameter属性は、廃止タグで、param に置き換えます。 ただし、5.6.4.3 (2013/05/24) で修正していますので、それ以前のエンジンで jsp/common だけ置き換える場合は、エラーになりますので、ご注意ください。 ※ 今までも、common 以下の置き換えは、エンジンとセットで置き換えていると 思いますので、ミスらないと信じています。 common\gamen\03_DBSEARCH\allCompile.jsp(39) common\gamen\21_WHTSNEW\result.jsp(81) common\gamen\21_WHTSNEW\result.jsp(82) common\gamen\21_WHTSNEW\result.jsp(84) common\gamen\21_WHTSNEW\top_menu.jsp(114) common\gamen\21_WHTSNEW\top_menu.jsp(115) common\gamen\21_WHTSNEW\top_result.jsp(57) common\gamen\21_WHTSNEW\update.jsp(52) common\gamen\23_FAQRGST\result1.jsp(78) common\gamen\23_FAQRGST\result1.jsp(79) common\gamen\23_FAQRGST\result1.jsp(88) common\gamen\23_FAQRGST\update.jsp(56) GF0000\index.jsp(57) GF6410\result.jsp(59) GF6410\result.jsp(61) GF6410\result.jsp(63) [開発ツール 修正] 開発ツール →【JSP解析・確認】→ 使用カラム検索[DOC139] に FORM_TYPE 属性を追加します。 gf/jsp/DOC13/query.jsp gf/jsp/DOC13/result.jsp [DB定義システム 修正] DB定義システム →【拡張機能】→ ARG変数検証(GF81)[GF2070] の command="MODIFY" 時に USE_LENGTH カラムにMAX_LENGTHカラムの値をセットしている箇所を、コメントアウトします。 MAX_LENGTH が null の場合に、元々のUSE_LENGTHカラムの値が消えてしまうためです。 必要であれば、columnBulkSet 機能でコピー&ペーストしてください。 gf/jsp/GF2070/update.jsp 5.7.3.1 (2014/02/14) [Bizロジック修正] 5.7.2.3での修正では不十分だったため、追加対応を行います。 fukurou.business.ArrayTableModel#ArrayTableModel( final String[] nms, final String[][] vs, final String[] ms ) [初期画面修正] 初期画面で、21_WHTSNEW の表示するSELECT文で、ORACLE特有の文法が 使われていたので、修正します。 jsp/common/gamen/21_WHTSNEW/top_result.jsp src/META-INF/resources/jsp/common/gamen/21_WHTSNEW/top_result.jsp jsp/GF0000/index.jsp 今は使ってない 5.7.3.0 (2014/02/07) [Process_**** 修正] Process_**** 関係で、debug パラメータを追加します。 従来は、一部のプロセスのみありましたが、すべてのプロセスで デバッグ出力できるようにします。 fukurou.process.Process_DBCountFilter.java fukurou.process.Process_DBMerge.java fukurou.process.Process_DBReader.java fukurou.process.Process_DBWriter.java fukurou.process.Process_FileCopy.java fukurou.process.Process_FileSearch.java fukurou.process.Process_FileSearch.java fukurou.process.Process_GrepChange.java fukurou.process.Process_LDAPReader.java fukurou.process.Process_StringUtil.java fukurou.process.Process_TableFilter.java fukurou.process.Process_TableReader.java fukurou.process.Process_TableWriter.java fukurou.process.Process_UnicodeEscape.java fukurou.process.Process_XSLT.java [ソースチェック関係] ソースチェックのQUERY定義検索 で、カラム列とテーブルの取得を行います。 それに伴い、桁数の変更と、新しいカラムを追加します。 DB定義書の修正も行います。 GF74 の CLMS 1000桁 ⇒ 4000 桁 GF74 の TABLE_NAMES VARCHAR2(4000) 追加 gf/jsp/DOC18/xsltV6/GF74_PROG.xsl 廃止タグなど、軽微なチェック項目の追加 gf/jsp/DOC18/xsltV6/GF70_PROG.xsl [DB定義DB関係] シーケンスの現在の設定値を見られるように、項目を追加します。 テーブル定義の件数みたいな使い方をします。 取りあえず、数字項目ですが、 NOT NULL 指定はしていません。 ALTER TABLE GF09 ADD ( LAST_NUMBER NUMBER ); gf/jsp/GF2082/result.jsp gf/jsp/GF2082/sqlGF09.jsp gf/jsp/GF2140/result.jsp gf/jsp/GF2150/result.jsp テーブル、インデックス関係で、自動計算初期エクステント(INITIAL_AUTO), 初期エクステント(KB)(INITIAL_EXTENT) などほとんど使っていないのに ラベルがやたらと長いカラムを、後ろに移動させます。 また、ラベルも判りにくくなりますが、省略します。 gf/jsp/GF2010/result.jsp(31): INITIAL_AUTO,INITIAL_EXTENT,SYSTEM_ID,FGJ,UNIQ gf/jsp/GF2030/result.jsp(33): BIKO,INITIAL_AUTO,INITIAL_EXTENT,SYSTEM_ID,FGJ,UNIQ gf/jsp/GF2060/dbdefIn.jsp(45): constKeys = "SYSTEM_ID,TBLSYU,SKENSU,JKENSU,TABLESPACE_NAME,INITIAL_EXTENT,INITIAL_AUTO" gf/jsp/GF2060/dbdefIn.jsp(203): INITIAL_AUTO,INITIAL_EXTENT,SYSTEM_ID,TBLSYU, gf/jsp/GF2150/result.jsp(62): COMMENTS,INITIAL_AUTO,INITIAL_EXTENT, gf/jsp/GF2150/result.jsp(120): TABLESPACE_NAME,BIKO,INITIAL_AUTO,INITIAL_EXTENT,NEXT_EXTENT, gf/jsp/GF6150/result1.jsp(6): INITIAL_AUTO,INITIAL_EXTENT,SYSTEM_ID,FGJ,UNIQ gf/jsp/GF6150/result3.jsp(6): INITIAL_AUTO,INITIAL_EXTENT,SYSTEM_ID,FGJ,UNIQ gf/jsp/GF7020/GF02xml.jsp(27): INITIAL_AUTO,INITIAL_EXTENT,FGJ gf/jsp/GF7020/result.jsp(64): colKeys = "SYSTEM_ID,TBLSYU,TABLE_NAME,NAME_JA,SKENSU,JKENSU,TABLESPACE_NAME,COMMENTS,INITIAL_AUTO,INITIAL_EXTENT,FGJ" DB検索画面で、TABLE,CLM等を入力したときのスキーマ一覧で オーナーが表示されていなかったため、表示に追加します。 gf/jsp/common/gamen/03_DBSEARCH/changeSQL.jsp [FileUploadTag の修正] 5.7.1.2 (2013/12/20) のzip対応の修正で、取得ファイル名が、getPath() になっていた。 getName() が正解。 hayabusa.taglib.FileUploadTag#makeDBTable( final MultipartRequest multi ) hayabusa.taglib.FileUploadTag#makeDBTableFromClms( final MultipartRequest multi ) [リソース関連の修正] 「5.6.1.1 (2013/02/08) で、Editor_MENU を、NUMMENU、YMDMENU、HMMENU のスーパークラスとして使用するに当たり、 Selection オブジェクトの初期化で、null エラーになるので、「とりあえず」処理します。」 について、対応を行います。 @SelectionFactory で、new Selection*** を置き換えます。 ACodeDataやSelectionオブジェクトが作成できない場合は、エラーメッセージを、標準エラー出力に 出力するとともに、エラーメッセージのコードリソースを作成します。 以前は、5.6.1.1 の対応で、Selectionオブジェクトが null になり、CodeData の未登録時などに、 NullPointerException が発生して、発生箇所、原因が判りませんでした。 hayabusa.db.SelectionFactory#newSelection( final String type,final String param ) hayabusa.db.SelectionFactory#newSelection( final String type,final CodeData codeData ) hayabusa.db.SelectionFactory#DBColumn#DBColumn( final String lang, hayabusa.db.SelectionFactory#DBColumn#DBColumn( final DBColumnConfig config ) hayabusa.db.DBColumn#DBColumn( final String lang,・・・ hayabusa.db.DBColumn#DBColumn( final DBColumnConfig config ) hayabusa.db.DBColumn#getSelection() plugin.column.Editor_HMMENU#Editor_HMMENU( final DBColumn clm ) plugin.column.Editor_NUMMENU#Editor_NUMMENU( final DBColumn clm ) plugin.column.Editor_RADIO#Editor_RADIO( final DBColumn clm ) plugin.column.Editor_YMDMENU#Editor_YMDMENU( final DBColumn clm ) plugin.column.Renderer_RADIO#Renderer_RADIO( final DBColumn clm ) plugin.column.Editor_INMENU#getValue( final String value ) plugin.column.Editor_INMENU#getValue( final int row,final String value ) plugin.column.Editor_MENU#getValue( final String value ) plugin.column.Editor_MENU#getValue( final int row,final String value ) plugin.column.Renderer_MENU#getValue( final String value ) plugin.column.Renderer_MENU#getValue( final int row,final String value ) BDBColumn 構築時に、LabelData が null の場合、いきなり、NullPointerException が発生 してしまうため、LabelData の簡易オブジェクト を設定できるようにします。 LabelData のコンストラクタをpublicにし、DBColumnConfig で、LabelData の初期値に設定します。 hayabusa.resource.LabelData#LabelData( final String inkey ) hayabusa.db.DBColumnConfig#DBColumnConfig( final String lang , ・・・・ hayabusa.db.DBColumnConfig#DBColumnConfig( final String name ) CDB検索メニューで、リソースを使わない素のデータを表示したい要望に対応します。 ColumnEditorTag で、リソースを使用しない DBColumn を設定します。 noResource="true" で、処置します。 上記変更で、OWNERの値を利用した localResource も用意します。 ただし、DBID使用時に、本当は接続先リソースを使うべきですが、そこまで対応できていません。 hayabusa.taglib.ColumnEditorTag#release2() hayabusa.taglib.ColumnEditorTag#setNoResource( final String flag ) hayabusa.taglib.ColumnEditorTag#getModifyConfig( final DBColumn dbColumn ) gf/src/META-INF/hybs-taglib.tld gf/WEB-INF/hybs-taglib.tld gf/jsp/common/gamen/03_DBSEARCH/query.jsp gf/jsp/common/gamen/03_DBSEARCH/result.jsp 5.7.2.3 (2014/01/31) [Bizロジック修正] 5.6.7.0の対応でテーブルモデルのチェックの条件を変更しましたが、 検索結果0件の場合にエラーと判定されていたため修正します。 fukurou.business.ArrayTableModel#ArrayTableModel( final String[] nms, final String[][] vs, final String[] ms ) [oracle.sql.*** 関係] 5.7.2.2 (2014/01/24) で対応した、JDBCドライバ対応を、元に戻します。 既存環境との互換性の為、Ver5 では、従来の方式に戻します。 Ver6 は前回の修正のまま、残ります。ソースが異なりますので、ご注意ください。 http://docs.oracle.com/cd/E28389_01/web.1111/b60995/thirdparty.htm hayabusa/taglib/DirectWriteTableTag#executeCall( final Connection conn,final CallableStatement callStmt,final String[] args ) plugin/query/Query_JDBCArrayCallable#execute( final String[] args ) plugin/query/Query_JDBCErrMsg#execute( final String[] args ) plugin/query/Query_JDBCKeyEntry#execute( final String[] keys, final String[] args ) plugin/query/Query_JDBCPLSQL#execute( final String names,final String dbArrayType,final DBSysArg[] sysArg,final DBUserArg[] userArg ) [Process_DBReader 修正] Process_DBReader で、SELECTで読み取ったカラム名を、書き換える機能を用意します。 これは、-asClms 属性で元カラム名:新カラム名 のスペース区切りで指定します。 例:-asClms="FGJ:CDJ SEQ123:UNIQ" 軽微な処理なら、SELECT文で、AS区で書き換えればよいのですが、共通的な カラム名の部分的な置換の場合、SQL文を都度用意するのではなく、引数で指定する方が まとめて処理するのに都合が良い為です。 fukurou.process.Process_DBReader#init( final ParamProcess paramProcess ) 引数の AA:01 BB:02 CC:03 … 形式の、元値:新値のスペース区切り文字列を元に、元値を新値に置き換えます。 fukurou.util.StringUtil#caseReplace( final String target,final String caseStr,final boolean ignoreCase ) Process_TableFilter の replace パラメータで、⇒ 記号で部分文字列の置換指定を行わない場合は、 CASE指定で、"_:0 A:1 B:2" (元値:新値 のスペース区切り) 形式の置換を行う様に機能追加します。 fukurou.process.Process_TableFilter#init( final ParamProcess paramProcess ) fukurou.process.Process_TableFilter#action( final LineModel data ) fukurou.process.Process_TableFilter#end( final boolean isOK ) Process_TableWriter の JavaDocコメントを修正します。 delKey_XXXX , insKey_XXXX パラメータは実装がない為、コメントを削除します。 fukurou.process.Process_TableWriter.java 5.7.2.2 (2014/01/24) で、MainProcess で、ログ出力と、標準エラー出力を停止 しましたが、ログをファイルに出力する場合に、標準出力に出力されないので元に戻します。 なお、ログは標準出力、こちらは、エラー出力なので、標準出力をリダイレクト すれば、2重に見えることは無くなります。 ※ 5.7.2.2 (2014/01/24) のコメントごと削除します。 fukurou.process.MainProcess#run() [DatabaseConfig 修正] DBConfig.xml ファイルの検索で、日本語フォルダを含む相対パスでの URL 検索では ファイル名のエンコードの関係で、名前は取れても、そのままでは、取得できない ケースがありました。そこで、名前を取得後、存在チェックを行い、無ければ、 取得しなおすこととします。 fukurou.db.DatabaseConfig( final String xmlfile ) 引数の XmlFileName 引数を、xmlFileName に変更します。 fukurou.db.ConnectionFactory#init( final String defPoolKey, final String xmlFileName ) [DB定義DB 修正] 比較条件など、少し修正 jsp/GF2030/query.jsp,result.jsp BIKO を検索条件に追加 jsp/GF2060/GFM0016.jsp,GFM0040.jsp SEQNO(表示順)を条件から外す。DBMENUを条件から外す。 jsp/GF2060/dbfileOut.jsp 出力項目に、COMMENTS 追加 jsp/GF2120/GFM0049.jsp 更新条件から、TABLE_NAME を外す。 jsp/GF2160/dbdefOut.jsp ファイルを出力するように変更。 5.7.2.2 (2014/01/24) [MainProcess 修正] MainProcess で、ログ出力と、標準エラー出力の両方とも出力していましたが、 標準エラー出力を停止します。 単に、ログを標準出力に設定した場合、2重に出力されているように見えるためです。 fukurou.process.MainProcess#run() SQL実行エラーを少し詳細に出力します。 fukurou.process.Process_DBCountFilter#action( final LineModel data ) { fukurou.process.Process_DBMerge#action( final LineModel data ) { fukurou.process.Process_DBWriter#action( final LineModel data ) { fukurou.process.Process_FileCopy#action( final LineModel data ) { fukurou.process.Process_Grep#action( final LineModel data ) { fukurou.process.Process_GrepChange3action( final LineModel data ) { fukurou.process.Process_GrepChangeExcel3action( final LineModel data ) { fukurou.process.Process_DBCountFilter#makePrepareStatement( final LineModel data ) fukurou.process.Process_DBMerge#makePrepareStatement( final String table,final LineModel data ) fukurou.process.Process_DBReader#init( final ParamProcess paramProcess ) fukurou.process.Process_DBReader#next() fukurou.process.Process_DBReader#makeLineModel( final int rowNo ) fukurou.process.Process_DBReader#createLineModel( final ResultSet rs ) fukurou.process.Process_DBWriter#makePrepareStatement( final String table,final LineModel data ) fukurou.process.Process_DBWriter#execSql( final String sql ) [DatabaseConfig 修正] 5.6.8.2 (2013/09/20) Tomcat8で、xmlURL が取得できなくなっている対策 で、 xmlURL 変数が、null の場合の再取得で、Tomcat7 の場合でも、WEB-INF/classes フォルダが ないと取得できないケースがあり、(以前より判っている)その場合は、 相対パスでも取れないため、xmlURL 変数の null チェックが必要でした。 それを追加します。 fukurou.db.DatabaseConfig( final String xmlfile ) private final String XmlFilename ⇒ xmlFilename に修正します。 final なので、大文字で始まる固定変数という事だと思うが、static final だけを 大文字(しかも、変数名すべてを大文字)にしているため、これは、変数名を変更します。 fukurou.db.DatabaseConfig.java [UserInfoのsetAttribute 戻し] 5.6.8.1 (2013/09/13) で、対応した、UserInfo のセット値が null の場合は、 処理しないロジックで、null をセットして、メモリ上からクリアするロジックが あると、うまく動作しない(互換性がなくなっている)状況が判りましたので、 以前と同じに、null もセットできるように変更します。 # UserInfo で、セットする値が null、またはゼロ文字列の場合、 # attribute変数に設定しない(DBへも書き込まない)ように変更します。 # これは、無駄なメモリやDB書き込みを減らすためです。 hayabusa.resource.UserInfo#setAttribute( final String key,final String value, final boolean save, final boolean common ) hayabusa.resource.UserInfo#dbLoad() 元は、エンジン内部で使っている変数の無駄な処理を止めるためのロジックなので、 それらをピンポイントで null 登録しない様に変更します。 (EDIT_NAME_*** , EDIT_VIEW_**** , LAST_REQUEST_**** , REPORT_DEFAULT**** , ) ※ すべてを対応したかったが、jspから登録したり、色々なので、とりあえず、EDIT_NAME_SELECTED_ のみ対応 hayabusa.resource.UserInfo#setSelectedEdit( final String guikey, final String editName ) [oracle.sql.*** 関係] JDBCドライバで、ORACLE独自の実装箇所を、出来るだけ、java API の範囲で記述し直します。 Oracle 12c の JDBCドライバを使用した場合、コンパイル時に、警告が出るので、早めに対応します。 なお、racle 12c の JDBCドライバ では、9i 関係のデータベースアクセスに支障が出るため、 当面は、11g の JDBCドライバを使用します。 http://docs.oracle.com/cd/E28389_01/web.1111/b60995/thirdparty.htm なお、この実装は、11.2.0.3のドライバ以降で有効です。 hayabusa/taglib/DirectWriteTableTag#executeCall( final Connection conn,final CallableStatement callStmt,final String[] args ) plugin/query/Query_JDBCArrayCallable#execute( final String[] args ) plugin/query/Query_JDBCErrMsg#execute( final String[] args ) plugin/query/Query_JDBCKeyEntry#execute( final String[] keys, final String[] args ) plugin/query/Query_JDBCPLSQL#execute( final String names,final String dbArrayType,final DBSysArg[] sysArg,final DBUserArg[] userArg ) 5.7.2.1 (2014/01/17) [ReplaceString バグ] ReplaceString$ReplaceData#isOverlap メソッドの結果が反転していたので、修正します。 これは、jdk1.6 で実行した場合、compareToメソッドが実行されず、結果、isOverlapメソッドも 実行されていなかったため、発見できませんでしたが、jdk1.7にすると、compareTo メソッドが 実行され、結果、isOverlapメソッドで、エラー判定されてしまいました。 fukurou.util.ReplaceString$ReplaceData#isOverlap( final ReplaceData other ) [Process_FileSearchのMD5 計算] HybsCryptography に、ファイルを引数に、MD5 を計算するメソッドを追加します。 これを使用して、バッチ系処理で、MD5 の計算結果を出力できるようにします。 Process_FileSearch に、useMD5 引数を追加します。 fukurou.security.HybsCryptography#encrypt( final String org ) fukurou.security.HybsCryptography#decrypt( final String hex ) fukurou.security.HybsCryptography#getMD5( final File input ) fukurou.process.Process_FileSearch#init( final ParamProcess paramProcess ) fukurou.process.FileLineModel#FileLineModel() fukurou.process.FileLineModel#FileLineModel( final boolean isLineCnt ) fukurou.process.FileLineModel#FileLineModel( final boolean isLineCnt,final boolean isMD5 ) fukurou.process.FileLineModel#FileLineModel( final LineModel model ) fukurou.process.FileLineModel#setFileVals( final int level, final File file ) fukurou.process.FileLineModel#getMD5() [UploadedFile のバグ修正] MultipartRequest で 5.6.5.3 (2013/06/28) に修正した箇所を、若干修正します。 修正箇所のコメントは付いていません。(5.6.5.3 のままです) ・RANDOM_KEY の生成で、nextInt( Integer.MAX_VALUE ) に変更。 これは、マイナスのファイル名は、若干嫌だったので、修正します。 ・String tempName = RANDOM_KEY + ・・・ の箇所を、 String uniqKey = RANDOM_KEY + ・・・ に修正。 これは、UploadedFile クラスの引数が、uniqKey になっているのと、 tempName は、いかにも、って感じなので、意味が通るように修正します。 UploadedFile の renameTo メソッドで、FileUtil.renameTo している箇所の 引数の並び順を間違えており、リネームできていませんでした。 hayabusa.servlet.MultipartRequest.java hayabusa.servlet.UploadedFile.renameTo( final String newName , final boolean useBackup ) 5.7.2.0 (2014/01/10) [ガントの週表示 バグ] zoom="0" , "1" の場合の、週単位のヘッダー色制御で、休日データが ある場合に、余分な タグによって、ヘッダー色制御がおかしくなる 不具合を修正しました。 上段(月)と下段(日)で、上段の休日表示を削除した際に、対となるを 消し忘れていた為。 hayabusa.taglib.GanttHeaderTag#makeZoom( final String upper ,final String lower ,final int add, final boolean useMonth ) [nullパスワード対応] ConnectionFactory 内部の ConnectionPool で、パスワード が null の場合に、エラーに なっていたので、パスワードが存在しな場合は、空文字に変更します。 具体的には、EDbid クラスの password の初期値を、空文字に変更します。 fukurou.db.EDbid#password 初期値を null から、"" に変更 [SystemParameter のエラー処理] SystemParameter で、エラー時のメッセージを、見直します。 基本的には、一旦文字列にして、セットするようにします。 hayabusa.common.SystemParameter#loadParameter( final Class cls ) hayabusa.common.SystemParameter#loadParameter( final String keyword ) RuntimeException は、catch しないようにします。 hayabusa.common.SystemParameter#loadDBResource( final Map sysParam ) Throwable の情報をもう少し詳細に出します。 hayabusa.common.SystemParameter#makeSystemParameter( final ServletContext context ) fukurou.util.StringUtil#ogStackTrace( final Throwable th ) INSTALL_CONTEXTS で、初期インストールを行おうとするとき、SQLException 以外のエラーが 発生したり、テーブルが存在しないのに、正常終了で、null を返したりする場合がある為、 ver の初期値を、"none" にすることで、対応します。 hayabusa.common.SystemParameter#getOldMaxVersion() [DB作成用のXML] DB作成用のXMLファイルの index 作成では、DROP 構文を出力しないようにします。 基本的に、自動作成を考えると、既存のINDEXを削除して、作成するケースはほとんどないと 考えられます。 jsp/GF2140/result.jsp ORACLE以外のデータベースでは、SRC、TRG、ARG のスクリプトは作成しません。 gf/build.xml テーブル定義で、小数点の定義を作成する箇所が間違っていた。 plugin.table.TableFilter_TABLE_HSQLDB#makeLineList( final String[] data,final boolean first ) plugin.table.TableFilter_TABLE_POSGRE#makeLineList( final String[] data,final boolean first ) plugin.table.TableFilter_TABLE_SQLSERVER#makeLineList( final String[] data,final boolean first ) DB定義 で、テーブル GE56 のプライマリキーを、GE56_UQ で作成していましたが、 hsqldb の、IDENTITY カラム制約の関係で、通常のユニークキーとします。 DB定義 GE56 GE56_UQ ユニーク GEIDX01 16 16 SYSTEM_ID YKNO UNIQSEQ GE (データベース上の、値の変更。) 【定義管理】→ インデックス → システムID=GE 、 テーブル名=GE56 で、インデックスタイプを変更します。 [必須自動チェックのコントロール] query.jspで設置したカラムに対してエンジンでhiddenを出力しておき、 検索時に自動でチェックを行うカラムを取得できるようになっていますが、 スクリプト等(eventColumn含む)でmustのコントロールを行う際に 邪魔になる場合があるため、属性で出力を制御できるようにします。 useMustHidden属性をcolumn,input,select,textareaタグで利用できるようにします。 hayabusa.taglib.HTMLTagSupport#useMustHidden hayabusa.taglib.HTMLTagSupport#setUseMustHidden( final String flag ) hayabusa.taglib.HTMLTagSupport#makeMustHidden( final String name ) hybs-taglib.tld 5.7.1.2 (2013/12/20) [javadoc の修正] 若干のJavaDocの修正を行います。 og:message msg ⇒ lbl など。 hayabusa\taglib\FileTag.java(74): * <og:message msg="RKE_0157" comment="回路図が存在しません。" /> hayabusa\taglib\FileUploadTag.java(107): * <og:message msg="MSG0003" comment="ファイルの登録が完了しました。" /> hayabusa\taglib\FileUploadTag.java(136): * <og:message msg="MSG0003" comment="ファイルの登録が完了しました。" /> hayabusa\taglib\LinkTag.java(104): * <img src="{@SYS.JSP}/image/insert.gif" alt="Excel Insert" /><og:message msg="MSG0057" /> hayabusa\taglib\MessageTag.java(40): * ●形式:<og:message msg="…" val0=[…] … /> hayabusa\taglib\MessageTag.java(69): * <og:message msg="MSG0032" language="ja" /> hayabusa\taglib\MessageTag.java(75): * <og:message msg="MSG0032" >検索条件</og:message> hayabusa\taglib\ButtonTag.java(73): * <og:button type="submit" name="test" value="1" msg="MSG0103" /> MessageResource プロパティのラベル使用したいときはmsg属性を使います。 hayabusa\taglib\DataCheckTag.java(78): * msg = "{@msg}" hayabusa\taglib\FieldsetTag.java(39): * このタグの lbl 属性か、msg 属性に、リソース情報を記述することで、直接 legendタグ を hayabusa\taglib\FieldsetTag.java(44): * lbl="…" or msg="…" ラベルかメッセージリソースのキー hayabusa\taglib\FieldsetTag.java(70): * <og:fieldset msg="GEM0001" defaultNone="false" > hayabusa\taglib\FileUploadTag.java(87): * <tr><og:input type="text" name="submitter" value="{@USER.JNAME}" size="20" msg="MSG0014" /></tr> hayabusa\taglib\FileUploadTag.java(89): * <og:input type="file" name="file_01" size="30" msg="MSG0015" /> hayabusa\taglib\FileUploadTag.java(92): * <og:input type="file" name="file_02" size="30" msg="MSG0015" /> hayabusa\taglib\FileUploadTag.java(95): * <og:input type="file" name="file_03" size="30" msg="MSG0015" /> hayabusa\taglib\HelpTag.java(58): * <og:help guiInfoKey="{@GUI.KEY}" msg="HELP" /> hayabusa\taglib\HelpTag.java(63): * msg = "メッセージリソースのメッセージIDを指定します。" hayabusa\taglib\HelpTag.java(377): * このURLが指定されない場合、ヘルプリンクは、msgLbl属性で指定されたテキストで表示されます。 hayabusa\taglib\MessageTag.java(27): * msg 属性に メッセージリソースのキーを与えることで、 ロケールにあわせたリソースを使用して、 hayabusa\taglib\MessageTag.java(35): * msg 属性を使用する場合、val0 〜 val9 までの引数を使用することができます。これは、 hayabusa\taglib\MessageTag.java(37): * msg 属性とlbl 属性は同時に使用できません。 hayabusa\taglib\MessageTag.java(210): * msg 属性でメッセージリソースから読み取りますが,開発途中で hayabusa\taglib\MessageTag.java(365): * なお、command によるメッセージの自動選択は、msg , lbl ともにセットされていない hayabusa\taglib\OptionTag.java(59): * <og:select name="ORDER_BY" msg="ORDER_BY"> hayabusa\taglib\OptionTag.java(64): * <og:select name="ORDER_BY" msg="ORDER_BY"> hayabusa\taglib\OptionTag.java(68): * MessageResource プロパティの値を使用したいとききはmsg属性を使います。 hayabusa\taglib\OptionTag.java(70): * <og:option msg="MSG0001" /> hayabusa\taglib\OptionTag.java(178): * lbl 属性/msg 属性でセットされた場合は,そちらを優先します。 hayabusa\taglib\QueryButtonTag.java(79): * msg = "MSG0010" 検索ボタンに表示するメッセージID(初期値:MSG0010) hayabusa\taglib\QueryOptionTag.java(88): * <og:option msg="" /> 初期値を設定したいときはvalue属性を使います。 hayabusa\taglib\SelectTag.java(103): * <og:option msg="MSG0001" /> MessageResource プロパティの値を使用したいとききはmsg属性を使います。 hayabusa\taglib\ViewIGanttTag.java(88): * <og:iGanttBar type="1" colorNo="[COLOR]" start="[DYORDER]" end="[DYNOKI]" msg="[PN]" /> hayabusa\taglib\ViewIGanttTag.java(89): * <og:iGanttBar type="0" src="../image/dia_blue.gif" start="[DYORDER]" msg="開始" /> hayabusa\taglib\ViewIGanttTag.java(90): * <og:iGanttBar type="0" src="../image/dia_red.gif" end="[DYNOKI]" msg="終了" /> hayabusa\taglib\ViewIGanttTag.java(137): * <og:iGanttBar type="1" colorNo="[COLOR]" start="[DYORDER]" end="[DYNOKI]" msg="[COSTCLM]" hayabusa\taglib\ViewIGanttTag.java(139): * <og:iGanttBar type="0" src="../image/dia_blue.gif" start="[DYORDER]" msg="開始" /> [msg ⇒ msglbl 変更] getMsglbl() で取得している値を格納する変数(ローカル変数)名を、msg ⇒ msglbl に変更します。 大した意味はありません。 hayabusa\taglib\BackGamenTag#getMsglbl( final String gamenId ) hayabusa\taglib\HideMenuTag#doStartTag() hayabusa\taglib\LinkTag#doStartTag() [msg ⇒ errMsg 変更] エラー発生時に、Exception を throw する時、一旦、String型変数に入れていますが、 その変数名を、errMsg に統一します。 ただし、org.opengion.fukurou.util. オブジェクトの一時変数のケースもあります。 hayabusa\db\DBTableModelEditor.java(79): throw new HybsSystemException( msg ); hayabusa\remote\TransferExecWrapper.java(102): throw new HybsSystemException( msg, ex ); hayabusa\remote\TransferReadWrapper.java(124): throw new HybsSystemException( msg, ex ); hayabusa\resource\UserInfo.java(916): throw new HybsSystemException( msg ); hayabusa\resource\UserInfo.java(921): throw new HybsSystemException( msg ); hayabusa\resource\UserInfo.java(951): throw new HybsSystemException( msg ); hayabusa\servlet\FileDownload.java(163): throw new HybsSystemException( msg ); hayabusa\taglib\EditConfigTag.java(164): throw new HybsSystemException( msg ); hayabusa\taglib\EditConfigTag.java(172): throw new HybsSystemException( msg ); hayabusa\taglib\ReadTableTag.java(277): throw new HybsSystemException( tempMsg.toString() ); [ファイル関係 改造] FileUtil#copy で、copy先(toFile)のフォルダが存在しなければ、作成します。 fukurou.util.FileUtil#copy( final File fromFile,final File toFile,final boolean keepTimeStamp ) FileTag で、copy元(file1)のファイルが存在しなければ、エラーにします。 hayabusa.taglib.FileTag#actionExec( final String action ) [zipファイル] zipファイルで、圧縮時のファイルのエンコードを指定できるようにします。 ファイルをZIPにするには、java.util.zipパッケージ を利用するのが一般的です。 ところが、ファイル名にUTF-8文字エンコーディングを利用する為、Windowsの世界では これを取り扱うアプリケーションも少ないため、文字化けして見えてしまいます。 これを解決するには、エンコードが指定できるアーカイバをる要する必要があります。 有名どころでは、ant.jar に含まれる、org.apache.tools.zip と、Apache Commons の org.apache.commons.compress です。 org.apache.tools.zip は、java.util.zip とほぼ同じ扱い方、クラス名が使えるので 既存のアプリケーションを作り変えるには、最適です。 openGion では、アーカイバ専用ということで、org.apache.commons.compress を 採用します。 fukurou\util\FileUtil#zip( final File zipFile , final File[] files , final String encording ) fukurou\util\FileUtil#zip( final ArchiveOutputStream aos , final File[] files ) hayabusa.servlet.MultipartRequest#MultipartRequest 入力ファイル名に、".zip" が、付く場合、アップロードされたファイル群を、ZIP圧縮します。 HTML5の複数ファイルアップロードで、一気に圧縮させる、などの使い方が可能です。 hayabusa.servlet.MultipartRequest#MultipartRequest ただし、uploadタグの属性には、リクエスト変数が使えません。誤って設定することを 警告する意味で、uploadタグの属性に、{@XXXX} チェックを入れました。 hayabusa\taglib\FileUploadTag#setFileURL( final String url ) hayabusa\taglib\FileUploadTag#setFilename( final String fname ) [ZipFileUtil.java の大幅な見直し] ZipFileUtil を、java.util.zipパッケージ から、org.apache.commons.compress に変更します。 これに伴い、内部構成の大幅な見直しと、外部インターフェースも変更します。 fukurou\util\ZipFileUtil.java hayabusa\common\SystemInstaller#install( final File buildArchive ) hayabusa\report2\ExecProcess#parse() [EditNameの初期値] Edit機能を利用した場合に、通常は初期値として前回利用分がセットされますが、 システム/ユーザによって初期値をNULLに設定できるようにします。 システムリソースUSE_DEFAULT_EDITNAMEで設定しますが、false指定以外は今まで通りの動作です。 hayabusa.common.SystemData#USE_DEFAULT_EDITNAME hayabusa.taglib.QueryButtonTag#doEndTag() [日本語ファイルのIE11対応] IE11はUserAgnetが変更になりましたが、fileDownloadサーブレットの日本語対応ロジックの影響で IE11の非互換モードではサーブレット経由のダウンロードが上手くいきませんでした。 とりあえず、新しいAgent(Trident)に対応させておきます。 hayabusa.servlet.FileDownload#doPost( final HttpServletRequest request, final HttpServletResponse response ) 5.7.1.1 (2013/12/13) [DocletSpecific 修正] DocletSpecific で、VERSION と、serialVersionUID の値を求めるのに、 Class.forName ではなく、FieldDoc から取得するようにします。 Class.forName では、Class構築ができないケースがあり、エラーの為、 値が求められないケースがありました。 fukurou.taglet.DocletSpecific#checkTag2( final String fullName, final ClassDoc classDoc ) fukurou.taglet.DocletSpecific#findFieldDoc( final ClassDoc classDoc ,final String key ) fukurou.taglet.DocletSpecific#getSerialVersionUID( final String clsName ) 廃止 fukurou.taglet.DocletSpecific#getFieldVERSION( final String clsName ) 廃止 上記に伴う、チェックの結果、VERSION と、serialVersionUID の値を修正しました。 fukurou\taglet\DocletSpecific.java fukurou\util\QrcodeImage.java hayabusa\taglib\TopMenuTag.java hayabusa\taglib\TableUpdateParamTag.java hayabusa\taglib\ReportTableTag.java hayabusa\taglib\QueryButtonTag.java hayabusa\taglib\JspCreateTag.java hayabusa\taglib\HelpTag.java hayabusa\taglib\GanttHeaderTag.java hayabusa\taglib\CommonForwardTag.java hayabusa\taglib\ChartCreateTag.java plugin\column\Renderer_QUERY.java plugin\column\Editor_QUERY.java plugin\daemon\Daemon_Transfer.java plugin\daemon\Daemon_Report.java plugin\query\Query_JDBCTableUpdate.java plugin\query\Query_JDBCPrepared.java plugin\view\ViewForm_HTMLAjaxTreeTable.java [Javadoc 見直し] Javadoc出力で、改行などの見直しを行いました。 タグリブマニュアルの見え方を少し変更します。 fukurou.taglet.DocletParam#start( final RootDoc root ) fukurou.taglet.DocletParam#writeContents( final ClassDoc[] classes,final DocletTagWriter writer ) fukurou.taglet.DocletPlugin#start( final RootDoc root ) fukurou.taglet.DocletPlugin#writeContents( final ClassDoc[] classes,final DocletTagWriter writer ) fukurou.taglet.DocletSpecific#start( final RootDoc root ) fukurou.taglet.DocletSpecific#writeContents( final ClassDoc[] classes,final DocletTagWriter writer ) fukurou.taglet.DocletTaglib#start( final RootDoc root ) fukurou.taglet.DocletTaglib#writeContents( final ClassDoc[] classes,final DocletTagWriter writer ) fukurou.taglet.DocletTagWriter#printTag( final Tag[] tag ) [HTML5 ファイルアップロード対応] HTML5 から、ファイルアップロード の複数選択(multiple)が 可能になりましたので、その対応を行います。 受け側で、同一名称が存在する場合の処理を入れることで、 複数選択時にも、取り込めるようにします。 hayabusa.servlet.UploadedFile.java 新規追加 hayabusa.servlet.MultipartRequest.java 内部構成見直し 5.7.1.0 (2013/12/06) [Excel帳票の互換性対応] 3.8.1.2で対応されているUSE_DATAOVERの対応がVer.5に入っていないため、 互換性確保のために入れます。 これは、PAGE_END_CUT フラグを使用(true)すると、最後の一行が表示されない不具合対応で、 元々Ver.5では修正された動作でしたが、Ver.3からの置き換え時に従来通りの動きをさせる 必要がある場合にシステムリソースから設定します。 Ver.3との互換性維持機能のため、Excel帳票にのみの適用です。 COMPATIBLE_PAGE_END_CUT_RETRIEVALの初期値はfalse(互換動作)です。 もし、Ver.5で新規にExcel帳票を立ち上げている場合はtrueに変更して下さい。 hayabusa.report.DBTableReport_HTML#USE_DATAOVER hayabusa.report.DBTableReport_HTML#changeData( final String inLine ) hayabusa.common.SystemData#COMPATIBLE_PAGE_END_CUT_RETRIEVAL(コメントのみ) [帳票要求NO画面変更] 要求NO画面で、変更時に完成フラグと振分条件を一括セットできるようにします。 ge/jsp/REP01/modify.jsp [GF での GEA 使用削除] GFアプリケーションのsンプルJSPで、GEA系リソースを使っている箇所を GF41 にできるだけ置き換えます。 リソース本番データを変更してしまう恐れがあるので、GF系とGE系を 分けるためです。 gf/jsp/GF6010/query.jsp(41): SELECT GUIKEY,GUIKEY,':',NAME_JA FROM GEA11 gf/jsp/GF6010/result.jsp(42): from GEA11 gf/jsp/GF6140/result.jsp(35): B.DESCRIPTION,A.RDC_CODE,A.RELEASE_NOTES,A.DYUPD,A.CDKH,A.FGJ,COALESCE(B.LANG,'ja') as LANG,A.UNIQ,B.UNIQ UNIQ_GEA08, gf/jsp/GF6200/result.jsp(21): select * from GEA11 gf/jsp/GF6210/result.jsp(21): select * from GEA11 gf/jsp/GF6230/query.jsp(28): select GUIKEY,GUIKEY,NAME_JA from GEA11 gf/jsp/GF6320/result.jsp(32): from GEA10 gf/jsp/GF6330/query.jsp(26): FROM GEA10 gf/jsp/GF6410/query.jsp(57): SELECT A.CODE,B.LNAME FROM GEA04 A,GEA08 B gf/jsp/GF6410/result.jsp(56): SELECT A.CODE,B.LNAME FROM GEA04 A,GEA08 B gf/jsp/GF7060/result.jsp(179): select * from GEA11 gf/jsp/GF7090/DBReader_DBCountFilter.jsp(27): gf/jsp/GF7219/query.jsp(30): select system_id,dyset,count(*)as CNT from GEA11 [HTML5対応] HTML5形式のヘッダーを出力できるようにします。 設定は、システムリソースの USE_HTML5_HEADER キーで定義します。 初期値は、互換性の観点から、false です。 hayabusa.taglib.HeadTag#HTML5_HEAD1 , HTML5_HEAD2 , HEAD_TYPE_ENUM hayabusa.taglib.HeadTag#doEndTag() hayabusa.taglib.HeadTag#release2() hayabusa.taglib.HeadTag#setHeadType( final String type ) JavaDoc修正 hayabusa.common.SystemData#USE_HTML5_HEADER headType に、"handy" キーワードを追加しました。 これは、default.css と custom.css まで、出力します。 headType="null" との違いは、CALENDAR_CSS を出力するかどうか、だけです。 hayabusa.taglib.HeadTag#doEndTag() inputタグに、HTML5 で新たに追加された、type を設定できるようにします。 これらの タイプを使うには、システムリソースの USE_HTML5_HEADER を true にする必要があります。 HTML5追加分[search/tel/url/email/datetime/date/month/week/time/datetime-local/number/range/color] hayabusa.taglib.InputTag#CHECK_TYPE_HTML5 hayabusa.taglib.InputTag#setType( final String type ) hayabusa.taglib.HTMLTagSupport#release2() hayabusa.taglib.HTMLTagSupport#setMust( final String flag ) hayabusa.taglib.HTMLTagSupport#setAutocomplete( final String autocomplete ) hayabusa.taglib.HTMLTagSupport#setAutofocus( final String atfocus ) hayabusa.taglib.HTMLTagSupport#setPattern( final String pattern ) hayabusa.taglib.HTMLTagSupport#setPlaceholder( final String placeholder ) hayabusa.taglib.HTMLTagSupport#setList( final String list ) hayabusa.taglib.HTMLTagSupport#setMin( final String min ) hayabusa.taglib.HTMLTagSupport#setMax( final String max ) hayabusa.taglib.HTMLTagSupport#setStep( final String step ) queryButton タグを、HTMLTagSupport を継承し、ボタンに付ける属性を増やします。 title , style , disabled , tabindex , clazz , onClick , onBlur , onFocus , ondblClick , onMouseDown , onMouseUp , onMouseMove , onMouseOut , onMouseOver , autofocus 追加属性の対応 tld 修正 タグ:input , column , columnEditor 属性:autocomplete , autofocus , pattern , placeholder , required , list , min , max , step タグ:button , select , submit 属性:autofocus タグ:textarea 属性:autofocus , placeholder , required タグ:queryButton 属性:title , style , disabled , tabindex , clazz , onClick , onBlur , onFocus , ondblClick , onMouseDown , onMouseUp , onMouseMove , onMouseOut , onMouseOver , autofocus [エラーメッセージ修正] タグの入れ子チェックでエラーの場合、タグ名が判らなかったので、表示するようにします。 hayabusa.taglib.CaseTag.java(109): String errMsg = "このタグは、switch タグの内部におく必要があります。"; hayabusa.taglib.ColumnSetTag.java(127): String errMsg = "このタグは、EntryTag のBODY部に記述される必要があります。"; hayabusa.taglib.FileOptionTag.java(116): String errMsg = "このタグは、SelectTag のBODY に記述する必要があります。"; hayabusa.taglib.ItdTag.java(117): String errMsg = "このタグは、TheadTag か、TBodyTagの内側(要素)に記述してください。"; hayabusa.taglib.OptionTag.java(144): String errMsg = "このタグは、SelectTag のBODY に記述する必要があります。"; hayabusa.taglib.ParamTag.java(105): String errMsg = "このタグは、ProcessTag の内側(要素)に記述してください。"; hayabusa.taglib.ProcessTag.java(109): String errMsg = "このタグは、MainProcessTagの内側(要素)に記述してください。" hayabusa.taglib.SqlAndTag.java(201): String errMsg = "このタグは、where タグの内部におく必要があります。"; hayabusa.taglib.TableUpdateParamTag.java(186): String errMsg = "このタグは、TableUpdateTagの内側(要素)に記述してください。"; hayabusa.taglib.TFormatTag.java(88): String errMsg = "このタグは、ViewFormTagの内側(要素)に記述してください。"; hayabusa.taglib.ViewParamTag.java(64): String errMsg = "このタグは、ViewFormTagの内側(要素)に記述してください。"; hayabusa.taglib.WriteTableParamTag.java(167): String errMsg = "このタグは、WriteTableTagの内側(要素)に記述してください。"; [HTML5 datalist タグ新規作成] datalistは、フォームの入力欄などで入力候補となるデータリストを定義するHTML拡張タグです。 BODY部に、option 、queryOption 、fileOption タグを使用して、オプション情報を作成します。 これに伴い、各オプションタグから、SelectTag を上位検索() SelectTag select = (SelectTag)findAncestorWithClass( this,SelectTag.class ); ↓ OptionAncestorIF select = (OptionAncestorIF)findAncestorWithClass( this,OptionAncestorIF.class ); に置き換え、SelectTag と、DatalistTag の両方に、OptionAncestorIF を implements します。 5.7.0.4 (2013/11/29) [帳票エラーメールの対象指定] GE50を利用する帳票でも、オンライン的に利用する帳票と、 夜間にバッチ的に出力する帳票があります。 現在の監視メールは送るか送らないかの2択で、監視したい対象を限定する事ができないため、 正規表現方式で帳票IDにフィルタをかけられるようにします。(REPORT_ERRMAIL_REGEX) 何も設定していない場合は全ての帳票IDが対象です。 その他のメール送信条件(host,from,toが存在する事)に変更はありません。 ( [帳票ID].matches( [REPORT_ERRMAIL_REGEXの設定値] ) がtrueかどうかで判定します ) また、メールの件名にlistidを追加します。 hayabusa/report/GE50Access#sendMail( final String inErrMsg ) hayabusa/report/Daemon_Report#startDaemon() hayabusa/report2/QueueManger_DB#sendMail( final ExecQueue queue, final String inErrMsg ) hayabusa/common/SystemData#REPORT_ERRMAIL_REGEX 5.7.0.3 (2013/11/22) [DirectInsertの不具合修正] directTableInsertタグで、ファイルのフォーマットエラーがあった場合等に Tomcatがファイルを掴んだままになってしまう不具合を修正します。 (close処理をfinallyに移します) hayabusa.taglib.DirectTableInsertTag#doEndTag() hayabusa.taglib.DirectTableInsertTag#create( final BufferedReader reader ) 5.7.0.2 (2013/11/15) [リソースの取込画面修正] 5.6.9.2で追加した画面ですが、実運用上での考慮不足があったので修正します。 ・maxRowCountの初期値を10000で渡す ・FGJ=1の条件を追加 ・検索言語の初期値をja ge\jsp\GE0010\query.jsp ge\jsp\GE0010\result.jsp 5.7.0.1 (2013/11/08) [adjustBarの拡張] adjustBarの、ヘッダ部分の縦線を、複数引けるように拡張します。 leftLoc,leftValに対してカンマ区切りで複数の値を指定可能にしました。 (タグの修正はコメント変更のみ) hayabusa.taglib.ViewIHeadTag#setLeftVal( final String leftVal ) hayabusa.taglib.ViewIHeadTag#setLeftLoc( final String leftLoc ) common/option/adjustBar.js 5.7.0.0 (2013/11/03) [属性の空白文字削除] 5.6.9.4で対応したcheckNamesと同じ処理をおこなっている箇所で、 属性値から空白文字を削除する対応を行います。 hayabusa.taglib.ForwardTag#setKeys( final String key ) hayabusa.taglib.QueryTag#setCheckNames( final String nm ) hayabusa.taglib.TableUpdateParamTag#setOmitNames( final String nms ) [ガントヘッダー表示拡張] 時間単位のガントヘッダーの上段に、月日を表示可能にします。 システムリソースのUSE_MDHEADER_ONTIMEで表示を指定しますが、互換性から標準はfalseとします。 月日が入りきらない場合は表示しません。(12時間の単位など) まずは試験的な実装とし、次第で機能拡張を行います。 hayabusa.common.SystemData#USE_MDHEADER_ONTIME hayabusa.taglib.GanttHeaderTag#useMdheader hayabusa.taglib.GanttHeaderTag#makeZoomTime( final int hourOfPixcel,final int step,final boolean useTani ) hayabusa.taglib.GanttHeaderTag#makeHeaderMD( final StringBuilder bufH , final int fillCnt , final int mtCnt , final String mdStr ) 5.6.9.4 (2013/10/31) [Query_JDBCTableUpdate] Query_JDBCTableUpdate のエラーメッセージに1行前の情報も出力します。 これは、データ列が null でエラーになった場合、どのレコードがエラーなのか 判りにくいケースがある為、その前の正常登録できたレコードを表示するように します。例えば、EXCEL読み取りで、#によるコメント行や、シート連続読みなどを 行うと、表示された行番号からは、該当レコードを見つけることができないためです。 plugin.query.Query_JDBCTableUpdate#execute( final int[] rowNo, final DBTableModel table ) [DB定義DB関連] DB定義DB関連の修正を行いました。 定義書読み取り時に、EXCELに空行が入っていると、エラーになる為、 読み取り必須カラムの指定をできるようにします。 GF2050/result.jsp 定義ファイル(GF80)取込 filePopup.jsp の引数に、nullBreakClm=TABLE_NAME 追加 common/filePopup.jsp 引数に、nullCheck と nullBreakClm を受け取るように修正 common/upload.jsp readTable に、nullBreakClm 引数を追加 GF06(インデックス定義)の備考欄には、GF07(インデックスカラム定義)のカラム名が、カンマ区切りで 登録されていますが、既存の読み取りでは、スペース区切りになっています。 そこで、統一する為、スキーマ情報取込みと同じ処理方法で、備考欄をセットします。 GF2060/dbdefIn.jsp 定義ファイル(GF80)検証 GF07 へのINSERT用テーブルモデルから、GF06の備考欄を作成 GF2110/directGF07.jsp スキーマ情報取込 カラム集めのためのユニークキーから、SYSTEM_ID,TBLSYU を削除 ORACLEオブジェクトの検索で、ユニークインデックス、プライマリキー などの制約も検索できるように CONSTRAINT 項目を追加します。 また、この情報を削除できるリンクを用意します。 gamen/03_DBSEARCH/changeSQL.jsp gamen/03_DBSEARCH/constraintDrop.jsp gamen/03_DBSEARCH/optionQuery.jsp [CSV 関係のI/O] TableWriter_Default で、5.3.2.0 (2011/02/01) に修正した、","を付加する条件が反転しているバグを修正 が、TableWriter_CSV で対応されていなかったので、修正します。 また、TableWriter_CSV3 として、数字型には、ダブルクオートを付けず、文字型のゼロ始まりでも カンマを付けないタイプの カンマ区切り出力クラスを新規作成します。 plugin.io.TableWriter_CSV#writeData( final DBTableModel table,final PrintWriter writer ) plugin.io.TableWriter_CSV3.java 新規作成 [edit機能のqueryButtonでの初期値] edit機能を利用した場合、検索の初期値はユーザ情報内に保存された値が必ず使われていましたが、 リクエスト変数editNameの値が存在する場合はそちらを優先的に利用するようにします。 hayabusa.taglib.QueryButtonTag#doEndTag() [JavaDoc関係] JavaDocの出力がおかしかったので、修正します。 ※ ソースコメント上に、@og.tag がなかったので、追加します。 hayabusa.taglib.ReadTableTag#setSheetConstKeys( final String constKeys ) hayabusa.taglib.ReadTableTag#setSheetConstAdrs( final String constAdrs ) ※ stackHeader に、使用していない属性 daySpan、skipHoliday があったので、コメントアウト gf/src/META-INF/hybs-taglib.tld gf/WEB-INF/hybs-taglib.tld [columnCheckタグcheckNames属性修正] chechNames属性はカンマ区切りで指定可能ですが、判定方法が,CLM名,とのindexOfマッチングのため タグで属性を指定する際に改行が入ると正しく判定されなくなります。 checkNames属性指定時は、文字列から空白文字を削除するようにします。 fukurou.util.StringUtil#deleteWhitespace( final String data ) hayabusa.taglib.ColumnCheckTag#setCheckNames( final String nm ) 5.6.9.3 (2013/10/25) [mailSenderでのGE35利用] これまではGE35テーブルをmailSenderでは利用できず、社員番号とアドレスとの対応はLDAPのみでした。 mailSenderでもGE35を利用できるように対応します。 タグとしてはuseDB属性を追加します。検索条件はmailSender2と同じで、名称が取得できた場合は 名称<アドレス>の形式でアドレスを設定します。グループテーブルには対応していません。 useLDAPと同時に設定された場合はLDAPが優先されます。 hayabusa.mail.MailPattern#selGE35,GE35_NAME,GE35_MAIL (privateからpublic) hayabusa.taglib.MailSenderTag#useDB,DBID hayabusa.taglib.MailSenderTag#getAddressArray( final String[] src ) hayabusa.taglib.MailSenderTag#getUserAddr( final String userId ) hayabusa.taglib.MailSenderTag#doEndTag() hayabusa.taglib.MailSenderTag#release2() hayabusa.taglib.MailSenderTag#setUseDB( final String flg ) hybs-taglib.tld [queryButtonのサブミットボタンID付加] queryButtonタグで出力しているサブミットボタンにidを付けます。(queryButtonSubmit) hayabusa.taglib.QueryButonTag#getSubmit() [tableFilter の SEQRESET] tableFilter で、表示順の再振り替えを行う処理で、maxRowCount 指定が ない場合、1000件で処理が打ち切られてしまうため、振り直し処理のqueryタグに maxRowCount="0" (無制限) を追加します。 ge/jsp/GE0002/entry.jsp gf/jsp/common/gamen/23_FAQRGST/entry.jsp 5.6.9.2 (2013/10/18) [メールモジュールのテーブル変更] メール送信時に、パラメータに長文を利用したい場合があるため GE30のparam0とparam1のみ4000バイトに変更します。 (パラメータの分割が可能な場合は、通常長文にはなりにくいため) 送信履歴テーブル追加時はtrimをかけているので、この部分は変更しません。 GE30.PARAM0,PARAM1 [DB定義] INDEX作成時に、削除構文を出力するかどうかをパラメータで指定できるようにします。 これは、INDEXファイルを何度も実行できるようにするためです。 plugin.table.TableFilter_INDEX#execute() plugin.table.TableFilter_INDEX#makeDropLine( final int[] clmNo,final String[] data ) これに伴い、エラー時に、処理を中断するのか、継続するのかを選択できるようにします。 INDEXのクリアなどは、存在しないとエラーになります。先に存在チェックすべきか、どうかは ともかく、一番最初は、すべてエラーになるため、エラー時はパスできる機能を用意します。 なお、エラーを無視するのは、EXEC_SQL のみとします。 fukurou.xml.HybsXMLSave#actionExecSQL( final TagElement tag ) hayabusa.common.InitFileLoader#loadXML( final InputStream stream, final Connection conn,final String table ) hayabusa.common.SystemInstaller#execScripts( final EXEC_TYPE type, final String scriptPath, final Connection conn ) [INDEX作成] INDTYPE で、その他ではなく、2:通常 で判断する。 plugin.table.TableFilter_INDEX#makeLineList( final int[] clmNo,final String[] data,final String clms ) plugin.table.TableFilter_INDEX_FIREBIRD#makeLineList( final int[] clmNo,final String[] data,final String clms ) [TableFilter_TABLE_XXXX] GF05_USE_LENGTH が、nullやゼロ文字列の場合、ORACLE以外のテーブルスクリプト 作成処理で、エラーになっていたので、修正します。 plugin.table.TableFilter_TABLE_FIREBIRD#makeLineList( final String[] data,final boolean first ) plugin.table.TableFilter_TABLE_HSQLDB#makeLineList( final String[] data,final boolean first ) plugin.table.TableFilter_TABLE_MYSQL#makeLineList( final String[] data,final boolean first ) plugin.table.TableFilter_TABLE_POSGRE#makeLineList( final String[] data,final boolean first ) plugin.table.TableFilter_TABLE_SQLSERVER#makeLineList( final String[] data,final boolean first ) [GF 定義修正] @GF77 の VALUELIST を、2000 → 4000 に変更 ALTER TABLE GF77 MODIFY ( VALUELIST VARCHAR2 ( 4000 ) ); [リソースの取込画面追加] 各リソース画面(画面、カラム、コード、ラベル)で抜き出したファイルを利用して、 キー差分、属性差分登録が可能な画面を作成します。 XMLの取込は一度削除してからの追加となること、抜き出した画面でアップロードすると 属性差分の取込(変更処理)が出来ないためです。 画面の作りとしては、取り込んでテーブルモデルを作る部分までを新規画面で、 以降の処理は各リソース登録画面を呼び出す形とし、条件はシステムIDと言語のみを利用可能とします。 (リソース登録画面側は元DBIDの検索をscope=requestで行い、取込データを元として利用します) ge\jsp\GE0010 ge\jsp\GE0002\result.jsp ge\jsp\GE0003\result.jsp ge\jsp\GE0004\result.jsp ge\jsp\GE0005\result.jsp 5.6.9.1 (2013/10/11) [選択カレンダー修正] 月曜開始・日曜開始選択ロジックの影響で、日付と曜日が正しく ない状態で表示されていたため修正します。 jsp\common\calendar2.js [bulkSet機能の修正] VIEWタグでbulkSet機能を利用する際に、カラムリソースの桁数をカンマ付きで 指定している場合に数値に変換できずにエラーが発生していました。 カンマより前の情報を利用するように変更します。 hayabusa.html.AbstractViewForm#getSortedColumnLabel( final int column ) [Shell起動用Daemon] Shellを定期的に起動するようなデーモンを新規作成します。 パラーメータはprogram,workDir,useBatch,stdout,stderr,waitで、 これらの値を利用してfukurou.util.Shellをキックします。 起動方法や間隔は他のデーモンと同じです。 専用画面は現段階では作成しません。 plugin.daemon.Daemon_RunShell 5.6.9.0 (2013/10/04) [リソース定義] リソースのサーバ間差分データ設定(GE0011)を修正します。 pageSize を引数に追加と、maxRowCount を引数ではなく 0(制限なし) で渡すように変更します。 ge\jsp\GE0011 [ソースチェック関係 DB更新] @TARGET 属性の桁数を 10から 30に変更します。 これは、{@SAKI_TARGET} などの変数を使うケースがあるためです。 GF71,GF72 GF93 は、同じカラム名を使っているため、同時に更新しておきます。 AGF73 の FORM_NAME が、200桁で足りなく、500ケタに増やします。 BGF74 の CLMS が、500桁で足りなく、1000ケタに増やします。 GF74 の SQL_TYPE が、20桁で足りなく、30ケタに増やします。 CDB定義書とスキーマの差分削除 GF08 テーブル削除 D仕様書DBのカラム定義変更 GF92(画面項目定義テーブル) の JOINTYPE(連携タイプ) カラム削除 GF91(青紙明細テーブル) に JOINTYPE(連携タイプ) カラム追加 [GF リソース追加] GFM0051 備考 全角文字チェック ラベルリソース追加 USE_RESOURCE リソース使用 カラムリソース、コードリソース追加 [SQL文見直し] カラム別名を付けるときに、AS を省略可能であるが、別名カラムを探す場合などに 使えるため、基本的には、AS を記述することとします。 GF2060\dbdefIn.jsp(313): SELECT SYSTEM_ID,TBLSYU,TABLE_NAME,INDEX_NAME,'' BIKO,UNIQ GF2120\GFM0007.jsp(3): select '1' WRITABLE, '' TABLE_NAME,CLM,NAME_JA, GF2120\GFM0010.jsp(53): select '' TABLE_NAME,CLM,NAME_JA,CLS_NAME,RENDERER,EDITOR,DBTYPE, GF2120\GFM0011.jsp(53): select '0' WRITABLE, '' TABLE_NAME,CLM,NAME_JA,CLS_NAME, GF2120\GFM0012.jsp(3): select '1' WRITABLE,'' TABLE_NAME,CLM,NAME_JA,'' BIKO,UNIQ,SYSTEM_ID GF2120\GFM0013.jsp(4): RENDERER,EDITOR,DBTYPE,0 SEQ,'' CODE,'' CODENAME, GF2120\GFM0013.jsp(20): select '0' WRITABLE,'' TABLE_NAME,CLM,NAME_JA, GF2120\GFM0013.jsp(21): RENDERER,EDITOR,DBTYPE,0 SEQ,'' CODE,'' CODENAME,'' BIKO,UNIQ,SYSTEM_ID GF2120\GFM0049.jsp(3): select '1' WRITABLE, '' TABLE_NAME,A.CLM,COALESCE(B.LNAME,B.NAME_JA,A.NAME_JA) as NAME_JA, GF2120\GFM0049.jsp(5): case when A.CLS_NAME = 'CLOB' then '' else A.USE_LENGTH end as USE_LENGTH , GF2120\GFM0050.jsp(19): select '' TABLE_NAME,CLM,NAME_JA,CLS_NAME,RENDERER,EDITOR,DBTYPE, GF2252\insertGF92.jsp(117): , '' SEQ, A.CLM , MIN(A.TABLE_NAME) as TABLE_NAME, MIN(A.TABLE_NAME) || '.' || A.CLM as ZOKUSEI , MIN(C.AS_TABLE) AS AS_TABLE , FGJ , UNIQ GF6010\result.jsp(41): select GUIKEY,NAME_JA,RWMODE,DECODE( MOD(SEQNO,3),0,'row_mark','' ) GF6030\result.jsp(34): CLM,NAME_JA,LABEL_NAME,KBSAKU ,SYSTEM_ID,LANG,FGJ,'' LBA GF6050\result.jsp(36): CLM, PUP,NAME_JA,LABEL_NAME,KBSAKU,SYSTEM_ID,LANG,FGJ GF6140\result.jsp(36): '' ABC GF6430\result.jsp(37): || ':' || case when A.NAME_JA is null then '' else 'true' end -- 2は、must GF6430\result.jsp(44): A.NAME_JA,B.LNAME,A.KBSAKU,A.SYSTEM_ID,A.EDITOR,A.USE_LENGTH,B.LANG,A.FGJ, REQVAL GF6440\result.jsp(58): ,'' PUP GF9100\result.jsp(59): ,'' PUP GF9150\result.jsp(60): ,'' PUP GFX001\result.jsp(34): '' OPEN GFX022\result.jsp(49): VALUENAME, REQUIRED, DESCRIPTION, CONTENTS, HTMLEXT, ORA05\result.jsp(29): 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# || '''' DELETE_SID, ORA10\result.jsp(27): select OWNER,OBJECT_NAME,OBJECT_TYPE,CREATED,LAST_DDL_TIME,TIMESTAMP,STATUS,'' DEL ORA10\result.jsp(63): select OWNER,OBJECT_NAME,OBJECT_TYPE,CREATED,LAST_DDL_TIME,TIMESTAMP,STATUS,'' DEL GF2120\GFM0011.jsp(3): select '1' WRITABLE, UPPER(TABLE_NAME) AS TABLE_NAME,UPPER(CLM) AS CLM,NAME_JA,CLS_NAME, GF2120\GFM0030.jsp(3): select '1' WRITABLE, UPPER(TABLE_NAME) AS CLM,NAME_JA,0 UNIQ,SYSTEM_ID GF2120\GFM0030.jsp(15): select '0' WRITABLE, CLM, NAME_JA, UNIQ,SYSTEM_ID GF2120\GFM0031.jsp(3): select '1' WRITABLE, CLM, NAME_JA, UNIQ,SYSTEM_ID GF2120\GFM0031.jsp(15): select '0' WRITABLE, UPPER(TABLE_NAME) AS CLM,NAME_JA,UNIQ,SYSTEM_ID GFX000\result.jsp(24): select FGFAVORITE WRITABLE [ファイル出力関連] ファイル出力時に、fileout.xls というファイル名と、fileOut.xls や、FileOut.xls は、 Windows上では区別されませんが、リンクやWeb上では区別されるため、ファイルが見つからない 等のエラーになります。 ここでは、fileout.xls に統一します。 common\gamen\03_DBSEARCH\fileSave.jsp(23): filename = "FileOut.xls" common\gamen\03_DBSEARCH\fileSave.jsp(28): common\gamen\03_DBSEARCH\fileSave.jsp(29): Excel Open FileOut.xls GF6240\index.jsp(23): pageContext.forward( "writeFileRedirect.jsp?filename=FileOut.xls" ); GF6240\query.jsp(40): out.print( "&filename=FileOut" ); GF6440\result.jsp(112): ※ jspのファイル名も変更します。いつものような上書きでは大文字小文字のファイル名は変更されませんので、 直接書き換える必要があります。 GF6440\fileOut.jsp → fileout.jsp 08_DBUPDATE で、カラムの選択に、CLMS 変数を使うと、ファイルダウンロードのカラム指定と 同じキーのため、指定のカラムが出力できない現象が発生しました。 そのため、キー名を変更します。 CLMS → SEL_CLMS common\gamen\08_DBUPDATE\query.jsp common\gamen\08_DBUPDATE\result.jsp DB定義DB情報のXML出力時に、DYSET,DYUPDなどの共通属性を抜き出していなかったので、 それらも抜き出すように変更します。 現在、更新系の処理では、UNIQだけでなく、DYSETもキーとして使っています。 これは、UNIQ番号だけでは、他のテーブルの番号と同じ場合に誤って更新して しまうので、サブキーの代わりに使っています。 本来は、すべてのテーブルでユニークになるような、UNIQ を採番すればよいのですが、 それには、数字ではなく、文字列で桁数を増やす必要があり、今は見送ります。 GF2150\result.jsp 5.6.8.3 (2013/09/27) [columnCheckタグ修正] カラムチェックタグのテーブルモデル有無チェックをcommandで行っていましたが、 実際にはcheckTypeに従ってチェックを行う必要があるため修正します。 hayabusa.taglib.ColumnCheckTag#doEndTag() hayabusa.taglib.COlumnCheckTag#makeErrorDBTable() 5.6.8.2 (2013/09/20) [Tomcat8 対応] DBConfig.xml の読み取りで、ClassLoader から、getResource しているが、 Tomcat8では従来の方法では取れない。 そこで、取れない場合は、基準URLを作成してから、Fileオブジェクトで合成する ようにしました。あくまで、取れなかった場合のみ、動作します。 fukurou.db.DatabaseConfig( final String xmlfile ) X ※ この修正には、\endorsed 以下に、ogTomcat8.jar をコピーする必要がある為保留します。 X コピーしたファイルは、Tomcat7 上でコンパイルする為だけに必要なので、今は対応しません。 X X javax.servlet.ServletOutputStream に、isReady() と、setWriteListener(WriteListener) X の abstractメソッドが、追加されたため、オーバーライドしなければなりません。 X ただし、javax.servlet.WriteListener インターフェースがない為、この class ファイルだけを、 X ogTomcat8.jar という jar にまとめ、tomcat7.x.x の endorsed にコピーし、build.xml に X クラスパスを追加することで、tomcat7 環境でもコンパイルできるようにします。 X なお、Tomcat8 に完全移行する時には、ogTomcat8.jar は不要になります。 X hayabusa.filter.FileResponseStream#isReady() X hayabusa.filter.FileResponseStream#setWriteListener( final javax.servlet.WriteListener listener ) X hayabusa.filter.GZIPResponseStream#isReady() X hayabusa.filter.GZIPResponseStream#setWriteListener( final javax.servlet.WriteListener listener ) [RegistryQueryTag 対応] 以前のPreferencesでは、HKEY_CURRENT_USER/Software 以下のキーを baseKey に指定しても 取得できていましたが、いつからかできなくなっています。 そこで、とりあえず、java.util.prefs.WindowsPreferences を直接変更して、 Software/muratec と、Software/microsoft だけは、取得できるようにしました。 これを実行するには、この改造したクラスを含む jarファイル(ogPreferences.jar)を tomcatの\endorsed に入れておく必要があります。 ちょっと、このタグの見直しを検討します。 属性追加もあります。 hkeyType : HKEY_CURRENT_USER(="user") を読むか、HKEY_LOCAL_MACHINE(="system") を読むかを指定します(初期値:user)。 hayabusa.taglib.RegistryQueryTag.java 修正箇所多数あり gf\src\META-INF\hybs-taglib.tld RegistryQueryTag に、hkeyType 属性追加 gf\WEB-INF\hybs-taglib.tld gf/jsp/GF1020 [rawLongLabel対応] 一覧上でのプルダウンは表示にラベル短を利用し、ツールチップとしてラベル長を利用していました。 概要説明が存在する場合にラベル長がspanタグで囲われてしまって正常に表示されない不具合が ありましたので、未加工のラベル長をツールチップで利用するように変更します。 haybusa.resource.LabelData#LabelData( final String inkey ) haybusa.resource.LabelData#LabelData( final String[] data ) haybusa.resource.LabelData#getRawLongLabel() hayabusa.resource.CodeData#RLNAME,MAX_LENGTH hayabusa.resource.CodeData#getRawLongLabel( final int seqNo ) hayabusa.resource.CodeData#CodeData( final String clm, final Map data) hayabusa.resource.CodeData#subsetList( final String codeCsv ) hayabusa.resource.CodeData#subsetGroup( final String group ) hayabusa.resource.CodeData#subsetRole( final RoleMode userRole ) hayabusa.resource.CodeDataLoader#loadDBResource() hayabusa.resource.CodeDataLoader#getCodeData( final String key ) hayabusa.db.Selection_CODE#Selection_CODE( final CodeData cdData ) [クライアントガント(積上げ)の修正] 折りたたみ表示の場合に、正確に積上げされていない場合があったので修正します。 /jsp/common/option/adjustGanttTable.js 5.6.8.1 (2013/09/13) [edit機能修正] 合計のBigDecimal化をした際に、上手く合計値が足されてない不具合があったため修正します。 hayabusa.db.DBTableModelEditor#addTotalRows( final int maxRowCount, final ResourceManager resource, final boolean[] sumFilter , final boolean[] groupFilter, final boolean[] subTotalFilter, final boolean[] totalFilter ) [{@LAST.XXXX}対応] 最後に使用した値を利用する機能を追加します。 {@MEM.XXXX} と違い、ユーザーオブジェクト内で共有します。 {@LAST.XXXX} を見つけた場合、UserInfo内のメモリにキーを用意し、 command="NEW" が指定された時(RequestCacheTag)の XXXX の値を メモリに設定します。 この設定された値は、ユーザー永続化情報(GE20)テーブル に、通常の情報と 区別する為、"LAST_REQUEST_" という接頭語を付けて保存されます。 hayabusa.taglib.CommonTagSupport#getLASTAttri( final String attkey ) hayabusa.taglib.CommonTagSupport#getReservedValue( final String key ) hayabusa.taglib.RequestCacheTag#commandExec( final String command,final ServletRequest request ) hayabusa.resource.UserInfo#getLastRequestValue( final String key,final String val ) hayabusa.resource.UserInfo#setLastRequestMap( final Map