JSPカスタムタグをベースとした、Webアプリケーションフレームワークです。
SQLの知識さえあれば、データのCRUD操作をメインとした業務システムが
簡単に構築することができます。
このフレームワークは、村田機械株式会社の基幹システムを構築するために
開発され、ほぼ全ての基幹システムは、これを利用して構築し、稼動しています。
(基本機能)
・ユーザー管理 ・認証・アクセス制御
・多言語対応 ・Excel入出力機能
・ガントチャート表示、編集機能 ・定型帳票作成、発行機能
・定型メール送信機能 ・データベース定義管理機能
・バッチ処理機能
各種詳細情報及びドキュメントについては、openGion@Websiteを参照して下さい。
Java を含む標章は、米国 Sun Microsystems, Inc.の商標であり、同社のJava ブランドの技術を使用した製品を指します。
Excel は、Microsoft Corporationの米国及びその他の国における登録商標です。
コンテンツ中に記載された社名および製品名は、すべて各社の商標または登録商標です。
5.6.5.0 (2013/06/03)
[autoLinkスクリプトの追加]
画面上のhttp,httpsに対して自動でリンクを作成するスクリプトを追加します。
現段階では自動動作及びタグでのコントロール等は行わず、optionへの追加に留めておきます。
jsp/common/option/urlAutoLink.js
5.6.4.4 (2013/05/31)
[XMLパーサー]
OGAttributes で、属性情報の出力で、属性数が4以上、文字列が80文字以上の場合、
折り返しの特殊処理をおこなっていましたが、この処理で、属性がくっつく現象が発生しました。
修正します。
fukurou.xml.OGAttributes#getText( final String attTab )
fukurou.xml.OGDocument#toString()
fukurou.xml.OGElement#getText( final int cnt )
fukurou.xml.OGElement#getPara( final int cnt )
[JspEnumeration]
JSP作成で、タブによる位置合わせにおいて、範囲オーバーになる計算方法が
あったので、修正しました。
hayabusa.develop.JspEnumeration$enum WHERE_OPERATORS#leftVal( final String left )
column タグ作成で、名前空間 を設定し忘れていたので、追加します。
plugin.develop.JspCreate_COLUMN#execute( final OGElement ele , final String nameSpace )
JspCreate_SELECT は、JspCreate_ORDER_BY に変更します。
その他、新規追加(JspCreate_HIDEMENU)、変更します。
plugin.develop.JspCreate_SELECT.java 削除
plugin.develop.JspCreate_COLUMN.java 変更
plugin.develop.JspCreate_HIDEMENU.java 新規追加
plugin.develop.JspCreate_ORDER_BY.java 変更(JspCreate_SELECTの代わり)
plugin.develop.JspCreate_QUERY.java 変更
plugin.develop.JspCreate_TABLE_UPDATE.java 変更
画面作成関連の修正を行いました。
gf/jsp/GF2250
gf/jsp/GF2251
gf/jsp/GF2252
gf/jsp/common/gamen/11_GUIMAKE/jspOut.jsp
5.6.4.3 (2013/05/24)
[valueタグ 最大、最小取得]
valueタグで、DBTableModelから、最大値と最小値を取得する アクション(MAX_MIN、ALL_MAX_MIN)を追加します。
これは、command="SETTBL" の場合に、DBTableModelから、key に指定したカラムの 最大値と最小値を
MIN.キー と MAX.キー 変数にセットします。
つまり、{@MIN.キー} や、{@MAX.キー} で値を取り出すことが可能になります。
これにより、検索結果と同じ条件で、再検索することなく、最大値、最小値を取得できるようになります。
MAX_MIN は、選択された行番号を対象に、最大値、最小値を求め、ALL_MAX_MIN は、検索結果のすべてのレコードから
最大値、最小値を求めます。
MAX_MIN ,ALL_MAX_MIN については、DBTableModelのカラムのCLS_NAMEが、NUMBER,INTEGER,DECIMAL の場合は、
数字型(double)に変換して比較します。
数字型(double)の場合だけ、合計(SUM.キー) と 平均(AVG.キー)計算も同時に行います。
それ以外の場合は、文字列比較を行います。(command="SETTBL" のみ)
command="SET" の場合は、数字型(double)として、value の値を、separator で分解したうえで、
最大、最小、合計、平均 を計算し、それぞれを、MIN.キー、MAX.キー、SUM.キー、AVG.キー 変数にセットします。
数字に変換できなかった場合は、エラーになります。
null は、無視され(平均を求める場合の母数としても無視)、すべてが nulll の場合は、ゼロ文字列("")になります。
ゼロ文字列("") の場合に、defaultVal 属性が設定されていると、defaultVal が設定されます。
hayabusa.taglib.ValueTag#setTableAttribute( final DBTableModel table,final String key,final String action )
hayabusa.taglib.ValueTag#setAttribute( final String key,final String value,final String action )
gf/jsp/GF7070 サンプル修正
command="SETTBL" で、選択行の判定で、ACT_ALL_APPEND のみ、選択行がない場合でも動作するように
していましたが、"ALL_" で始まる action をすべて許可するように変更します。
hayabusa.taglib.ValueTag#setTableAttribute( final DBTableModel table,final String key,final String action )
command="SETTBL" で、action="ALL_MAP" の時に、row=1 から始まっていたので、row=0 に変更します。
hayabusa.taglib.ValueTag#setTableAttribute( final DBTableModel table,final String key,final String action )
[valueタグ parameter 属性削除]
parameter 属性を廃止します。
これは、現時点で使っていないのと、将来的に、"parameter" 属性をすべて、param 属性に変更したいので、
今のうちに、不要な属性を整理していきます。
これに伴い、tld からも、削除しておきます。
hayabusa.taglib.ValueTag#release2()
hayabusa.taglib.ValueTag#setParameter( final String param )
[valueタグ tmpSelectedAll 属性追加]
内部だけで使用する、tmpSelectedAll 属性を追加します。
action="ALL_xxxx" 関係は、tmpSelectedAll="true" で内部処理します。
これは、他のタグの、selectedAll 属性と同等の働きをして、すべての行を選択行と同じように扱います。
hayabusa.taglib.ValueTag#release2()
hayabusa.taglib.ValueTag#setSQLAttribute( final DBTableModel table )
hayabusa.taglib.ValueTag#setTableAttribute( final DBTableModel table,final String key,final String action )
hayabusa.taglib.ValueTag#getParameterRows()
[{@NVL.XXXX} サンプル]
{@NVL.XXXX} 追加に伴う、サンプル JSP を用意しました。
既存の GF6000(テキストフィールド ) です。
gf/jsp/GF6000 サンプル修正
gf/jsp/common/gamen/01_ADMIN/printSystemParameter.jsp
[Javadoc 修正]
Javadoc コメントで、@ が使われている箇所を、@ に置き換えます。
hayabusa.taglib.CommonTagSupport.java
hayabusa.taglib.URLConnectTag.java
hayabusa.taglib.RequestValueTag.java
hayabusa.taglib.MailSenderTag.java
hayabusa.taglib.DataCheckTag.java
[iBar のパディング]
ガントバーで用意した、paddingLeft,paddingRigth 属性を iBar にも用意します。
hayabusa/taglib/ViewIBarTag#setPaddingLeft( final String paddingLeft )
hayabusa/taglib/ViewIBarTag#setPaddingRigth( final String paddingRigth )
hybs-taglib.tld iBar タグに、paddingLeft,paddingRigth 属性追加
[GanttHeaderTag の breakTimeStyle]
GanttHeaderTag の breakTimeStyle の初期値を変更します。
IEの下位バージョンでも透過するようにします。
breakTimeStyle = "top:20px;background-color:yellow;filter:alpha(opacity=60);opacity:0.60;"
hayabusa/taglib/GanttHeaderTag#breakTimeStyle
日本語の"日"が入ると、ヘッダーがずれていたので、修正しました。
以前、Firefox対応されているので、文字数での位置合わせ基準になっているため、
"日" を2文字の、"日 " に修正しました。
hayabusa/taglib/GanttHeaderTag#makeZoomTime( final int hourOfPixcel,final int step,final boolean useTani )
[useTbodyMovable の 付け忘れ]
5.6.3.3 (2013/04/19) で追加した useTbodyMovable を付け忘れしていたので、対応します。
hayabusa.taglib.HeadTag#doEndTag()
[jsp/image に追加]
jsp/image にthumbフォルダを追加します。
excel.png 、media.png 、pdf.png 、ppt.png 、word.png 、zip.png
[ColumnEditorTag の parameter属性]
ColumnEditorTag の parameter属性名を、param に変更します。
単に、ColumnTag は、param なので、統一するためです。
既存の属性は、廃止属性として、当面は、互換性のため残しておきます。
hayabusa.taglib.ColumnEditorTag#setParameter( final String prm )
hayabusa.taglib.ColumnEditorTag#setParam( final String prm )
[FAQアイコン表示の制御]
helpタグでヘッダに表示する際に、関連画面IDが入っているものが存在する場合のみ表示可能にします。
helpタグのuseFaqCtrl属性をtrueにするか、システムリソースのUSE_GUI_FAQ_CTRLをtrueにします。
初期値はfalseです。
なお、画面リソースを利用して判定しているため、反映にはリソース更新が必要です。
hayabusa.resource.GUIDataLoader#QUERY
hayabusa.resource.GUIInfo#isFaq()
hayabusa.resource.GUIInfo#getAttribute( final String key )
hayabusa.resource.GUIData#GUIData( final String[] data )
hayabusa.resource.GUIData#toString()
hayabusa.taglib.HelpTag#release2()
hayabusa.taglib.HelpTag#makeTagFaq()
hayabusa.taglib.HelpTag#setUseFaqCtrl( final String flag )
hayabusa.common.SystemData#USE_GUI_FAQ_CTRL
hybs-taglib.tld useFaqCtrl属性追加
[result_infoでのhelpアイコン指定変更]
result画面のHelpアイコンをresult_infoで出していますが、
common/gamen内からのURIに問題があるため、../imageではなく{@SYS.JSP}/image
に変更します。
同様にjquery-ui.jsやchangeFontSize.jsの指定も変更します。
jsp/custom/result_info.jsp
jsp/custom/result_FS_info.jsp
jsp/custom/result_info.jsp
[時間軸の角度]
時間軸を表す DateAxis オブジェクトで、角度を変更したいが、本来は、
rotationLabel ではなく、useVerticalLabels [true/false]を使います。
しかし、メソッドの配置の関係から、ChartCreate に作ってしまったので、
rotationLabel=2 (90度)のときのみ、useVerticalLabels=true を有効にする
処理を入れます。(近いうちに修正するかも)
hayabusa.taglib.ChartCreateTag#release2()
hayabusa.taglib.ChartCreateTag#create()
hayabusa.taglib.ChartCreateTag#setUseVerticalLabels( final String useVLavels )
hayabusa.io.ChartCreate#getDateAxis()
hayabusa.io.ChartCreate#setUseVerticalLabels( final boolean useVLavels )
gf/jsp/GF6120 JFreeChart サンプル修正
gf/jsp/GF7219 タイムチャートサンプル 新規追加
dateAxisFormat 変数が、パラメータ処理のロジックが入っていなかったので、修正しました。
hayabusa.taglib.ChartCreateTag#setDateAxisFormat( final String dtFormat )
5.6.4.2 (2013/05/17)
[紙芝居作成]
紙芝居で、実行時間計測を行うと、マイナス値が発生し、エラーになるケースがあります。
紙芝居専用ですが、実機でもマイナスになることは無いので、対策を入れておきます。
jsp/common/queryScript.js(53): // 5.6.4.1 (2013/05/10) pView がマイナスの場合は、0 に設定する。
[紙芝居作成]
雛形自動作成 で、useAjaxSubmit="true" の場合、entry.htm にJavaScriptを入れて、forward させますが
ターゲットの判定方法(eval)がうまく動いていないので、それの対応を行った。
jsp/common/option/noTranHref.js
[紙芝居作成]
Matrixメニュー buttonRequest 廃止対応
URI分離 URI分離 request取出
① gamenId="jsp" + index.jsp + GAMENID=XXXX ⇒ saveDir + "jsp/indexXXXX.htm" Matrixメニューからの画面呼出し。
② gamenId="jsp" + result.jsp + GAMENID=XXXX ⇒ saveDir + "jsp/indexXXXX.htm" 画面QUERYのヘッダーメニュー
③ gamenId="menu" + multiMenu.jsp + group=YYYY ⇒ saveDir + "menu/menuYYYY.htm" 通常メニューのグループ選択
④ gamenId="menu" + matrixMenu.jsp + group=YYYY ⇒ saveDir + "menu/matrixMenuYYYY.htm" Matrixメニューのグループ選択
hayabusa/filter/FileFilter#makeFileName( final ServletRequest request )
hayabusa/filter/FileResponseTransform$IndexMatrixMenuData#replace( final String file,final String inStr )
hayabusa/filter/FileResponseTransform$HrefChangeData#replace( final String file,final String inStr )
fileDownload だけ特殊。ファイルのエンコードは、UTF-8 ではなく、UnicodeLittle でセーブする。
hayabusa/filter/FileResponseStream#close()
hayabusa/filter/FileFilter#makeFileName( final ServletRequest request )
renew('queryNW.htm','QUERY',this) 変換
query.htm ファイル内の、renew('query.htm','QUERY',this) を renew('queryNW.htm','QUERY',this) に変換します。
queryNW.htm 内の renew は、変換しませんので、イベント発生時に、query.htm と queryNW.htm を行き来します。
hayabusa/filter/FileResponseTransform#private static final ChangeData[] data 宣言
イベントカラム関係で、紙芝居実行時のエラーを極力減らすための条件設定を行いました。
eventScript.js#eventColumn( jEvCol, jTag, cid, cname, suffix, writable )
[ガントバー]
ガント系で、同一色を重ねて表示する場合、区切り線が欲しい
従来は、L,Rの画像を用意していましたが、前回廃止したため、今回の対応を入れます。
iGantt タグに、paddingLeft,paddingRigth 属性追加
jsp/common/option/option/adjustGanttTable.js
hayabusa/taglib/ViewIGanttTag#setPaddingLeft( final String paddingLeft )
hayabusa/taglib/ViewIGanttTag#setPaddingRigth( final String paddingRigth )
hybs-taglib.tld iGantt タグに、paddingLeft,paddingRigth 属性追加
[Javascript の parseInt]
Javascript の parseInt で、第2引数を付けていないと、基数を 8 で計算するパターンが存在した。
安全の為、基数の 10 を記述しておきます。
gf\src\script\common\resultScript.js(828): ,left :parseInt( popDiv.offset().left ) + parseInt( popDiv.width() )
gf\src\script\common\resultScript.js(850): left : parseInt( popDiv.offset().left ) + 8
gf\src\script\common\resultScript.js(851): ,top : parseInt( popDiv.offset().top ) + 8
gf\src\script\common\scrollBar.js(161): //oLayerDiv.style.borderTopWidth = nHeaderH + parseInt(oTab.cellSpacing);
gf\src\script\common\scrollBar.js(508): // var nSpacing = parseInt(table.cellSpacing) ;
gf\src\script\common\scrollBar.js(584): //var nTopWidth = parseInt(layer.style.borderTopWidth || 0);
gf\src\script\common\scrollBar2.js(430): // nHoriLimit = ($t.p.width ) ? parseInt($t.p.width ) : nHoriLimit;
gf\src\script\common\scrollBar2.js(431): // nVertLimit = ($t.p.height) ? parseInt($t.p.height) : nVertLimit;
gf\src\script\common\calendar\fullcalendar.js(2377): var index = parseInt(this.className.match(/fc\-day(\d+)/)[1]); // TODO: maybe use .data
gf\src\script\common\calendar\fullcalendar.js(3241): var mins = parseInt(rowMatch[1]) * opt('slotMinutes');
gf\src\script\common\option\adjustBar.js(417): clrNo = parseInt(clrNo) % colorNoList.length ; // なければ、連想配列の長さで割り算し、余を求める。
gf\src\script\common\option\adjustBar.js(665): clrNo = parseInt(clrNo) % colorNoList.length ; // なければ、連想配列の長さで割り算し、余を求める。
gf\src\script\common\option\adjustField.js(36): cols = parseInt( objField[0].getAttribute('cols') );
gf\src\script\common\option\adjustField.js(49): cellHeight = parseInt( objField[0].getAttribute('cellHeight') );
gf\src\script\common\option\adjustField.js(54): tables = parseInt( objField[0].getAttribute('tables') );
gf\src\script\common\option\adjustField.js(58): tableMargin = parseInt( objField[0].getAttribute('tableMargin') );
gf\src\script\common\option\adjustField.js(62): tableBorder = parseInt( objField[0].getAttribute('tableBorder') );
gf\src\script\common\option\adjustGanttTable.js(565): hilightBar.parentNode.style.left = (parseInt( oriLeft ) + moveDist)+"px";
gf\src\script\common\option\adjustGanttTable.js(578): hilightBar.parentNode.style.left = (parseInt( oriLeft ) + moveDist)+"px" ;
gf\src\script\common\option\adjustGanttTable.js(593): hilightBar.parentNode.style.left = (parseInt( oriLeft ) + moveDist) +"px";
gf\src\script\common\option\adjustGanttTable.js(1079): clrNo = parseInt(clrNo) % colorNoList.length ;
gf\src\script\common\option\adjustGanttTable.js(1636): fixedCols = parseInt( fixedCols || "0" );
gf\src\script\common\option\adjustGanttTable.js(1936): fixedCols = parseInt( iTable[0].getAttribute('fixedCols') || "0" );
gf\src\script\common\option\adjustGanttTable.js(2007): fixedCols = parseInt( iTask[0].getAttribute('fixedCols') || "0" );
gf\src\script\common\option\adjustMatrix.js(557): rowStart = new Number( parseInt( startCell.row ) <= parseInt( endCell.row ) ? startCell.row : endCell.row );
gf\src\script\common\option\adjustMatrix.js(558): colStart = new Number( parseInt( startCell.col ) <= parseInt( endCell.col ) ? startCell.col : endCell.col );
gf\src\script\common\option\adjustMatrix.js(559): rowEnd = new Number( parseInt( startCell.row ) <= parseInt( endCell.row ) ? endCell.row : startCell.row );
gf\src\script\common\option\adjustMatrix.js(560): colEnd = new Number( parseInt( startCell.col ) <= parseInt( endCell.col ) ? endCell.col : startCell.col );
gf\src\script\common\option\adjustMatrix.js(600): rowStart = new Number( parseInt( startCell.row ) <= parseInt( endCell.row ) ? startCell.row : endCell.row );
gf\src\script\common\option\adjustMatrix.js(601): colStart = new Number( parseInt( startCell.col ) <= parseInt( endCell.col ) ? startCell.col : endCell.col );
gf\src\script\common\option\adjustMatrix.js(602): rowEnd = new Number( parseInt( startCell.row ) <= parseInt( endCell.row ) ? endCell.row : startCell.row );
gf\src\script\common\option\adjustMatrix.js(603): colEnd = new Number( parseInt( startCell.col ) <= parseInt( endCell.col ) ? endCell.col : startCell.col );