概要: Webエンジン Ver 5.1.7.0 (2010/06/01) をリリースいたします。 今回のリリースのおける主な変更点は、以下の通りです。 @Calc帳票システム機能追加 Calc帳票システムで、1つの雛形ファイルに対して、複数の雛形シートを用意し、データに応じて、 適用する雛形ファイルを動的に切り替えることができる機能を追加します。 この機能を利用することにより、異なるレイアウトの帳票を1要求番号で処理できるようになり、 1つのExcelファイルやPDFファイルとして出力することができるようになります。 (利用方法の詳細については、Calc帳票の開発者ガイドを参照して下さい) Aドキュメント変換・連結機能追加 各種ドキュメントの形式の変換、連結を行うことのできる機能として、docConvertタグを追加します。 形式の変換は、Excel⇒PDF、Calc⇒PDF等だけでなく、Word⇒PDF等、OpenOfficeで処理することのできる フォーマットについては、変換を行うことができます。 なお、ドキュメント連結については、現時点では、入力ファイルが(Excel、Calc)の場合のみ対応しています。 B動的プルダウン・実装見直し 動的プルダウン機能(eventColumn,eventURL属性)の内部実装を大幅に見直しします。 (見直し内容の詳細については、リリースノート及びcolumnタグのeventColumn,eventURL属性の タブリブマニュアルを参照して下さい。 Cリアルタイム帳票・マルチスレッド対応の見直し 画面から帳票発行処理を行うための機能(report2タグ)については、マルチスレッド対応の見直しを行います。 (今までは、簡易機能のため、マルチスレッド対応が不十分でした。今回のドキュメント変換などの対応に 伴い、マルチスレッド対応の実装を見直しています。 Dフィルター処理(GZIPフィルターバグ修正) GZIPフィルターで、正常処理にも関わらず、エラーログが大量に出力されてしまうバグを修正します。 GZIPフィルターを利用している場合は、バージョンアップをお願いします。 ※ バージョンアップされる場合は、ビルドファイル(verup.x.x.x.x.zip)に含まれるchanges.txtを確認の上、 作業をお願いします。 ※ 変更点に関する詳細及びその他の修正内容については、添付のリリースノートを参照下さい。 5.1.7.0 (2010/06/01) [ヘッダー固定・バグ修正] ヘッダー固定(ScrollBar2.js)で、tdタグで指定した高さが無視されてしまうバグを修正します。 jsp/common/scrollBar2.css [画面キャプチャ機能 追加] org.opengion.fukurou.util.DisplayCapture.java クラスを新規に追加します。 これは、画面イメージをキャプチャして、ファイルに書き出すためのクラスです。 基本的な使い方は、main メソッドから立ち上げて、クリップボードの状態を監視します。 クリップボードに、"GUI:画面ID xxxxx.jsp" 形式の文字が書き込まれると、flavorsChanged イベントが 発生して、画面を、ファイルに書き出す処理が実行されます。 書き出すファイル名の初期形式は、useGuiDir の設定により異なります。 org.opengion.fukurou.util.DisplayCapture.java 新規追加 gf\jsp\custom\result_info_Capture.jsp クリップボードに画面IDとJSPファイル名をセットする。 * Usage: java org.opengion.fukurou.util.DisplayCapture * [BASE_DIR] [useGuiDir(false/true)] [imageFormat(png|gif|jpg)] [startCnt] * * args[0] BASE_DIR : キャプチャファイルをセーブするベースとなるディレクトリ(初期値:起動フォルダ) * args[1] useGuiDir : キャプチャ画像をセーブするファイル方式を指定します。(初期値:false) * true(保存時は、ベースフォルダに、画面ID+jspファイル名で、ファイルを作成する) * false(保存時に画面IDのフォルダを作成し、その下に、jspファイル名で、ファイルを作成する。) * args[2] imageFormat : 作成するイメージの形式。png|gif|jpg のどれか。 * args[3] startCnt : セーブファイル名をユニークにするためのカウント(初期値:100) [DBConfig.xml 取得方法変更] DBConfig.xml の取得方法を、jaxb とDBConfig.xsd 方式から、DocumentBuilder による DOM処理に変更します。 スキーマの定義情報をコンパイルして、毎回、作り直す処理は、複雑なためです。 ただし、DBConfig.xml を変更した場合は、読取クラスも修正する必要があります。 # 以前は、DBConfig.xsd を変更するだけで、Javaのソースを自動作成していました。しかし、実際には # 修正箇所は、何箇所も発生するため、スキーマからJavaソースを作成するメリットはありませんでした。 これに伴い、org.opengion.fukurou.xml.jaxb.dbid のクラスは、廃止されます。 org.opengion.fukurou.xml.DomParser.java 新規追加 org.opengion.fukurou.db.DatabaseConfig.java 大幅書き換え org.opengion.fukurou.db.EDbid.java Cloneable の追加と、メソッドの若干の修正 org.opengion.fukurou.xml.jaxb.dbid.DbConfig.java 廃止 org.opengion.fukurou.xml.jaxb.dbid.DbDriver.java 廃止 org.opengion.fukurou.xml.jaxb.dbid.Dbid.java 廃止 org.opengion.fukurou.xml.jaxb.dbid.ObjectFactory.java 廃止 org.opengion.fukurou.xml.jaxb.dbid.DBConfig.xsd 廃止 gf/build.xml DBConfig.xsd 廃止に伴う修正 [filter関連修正] filter関連で、isClosed == true の場合に 安全のため、Exception を発行していますが、 これを、無視して、単に、return のみとします。 これは、GZIPResponseWrapper の finishResponse() メソッドで、 public void finishResponse() { Closer.ioClose( writer ); Closer.ioClose( stream ); } のような処理を行っていますが、writer 自体が、stream を元に作られているため、 writer の close() で、自動的に、stream もclose() されています。 この処理で、Closer.ioClose( stream ) を止めれば、解決すると思われますが、 何らかの問題で、IO関連のリソースが開放されないケースでは、システムダウンにも 繋がりかねないため、すでに、close 済みの場合は、何もしないという実装で対処します。 org.opengion.hayabusa.filter.FileResponseStream#flush() org.opengion.hayabusa.filter.FileResponseStream#write(final int bt) org.opengion.hayabusa.filter.FileResponseStream#write(final byte bt[], final int off, final int len) org.opengion.hayabusa.filter.GZIPResponseStream#flush() org.opengion.hayabusa.filter.GZIPResponseStream#write(final int bt) org.opengion.hayabusa.filter.GZIPResponseStream#write(final byte bt[], final int off, final int len) [og:view(フォーマット処理)バグ修正] og:viewタグで、HTMLFormatテーブルやHTMLCustomテーブルを利用して、Body部分にフォーマットを記述した際、 そのフォーマット部分に{@xxx}形式の変数が存在し、さらにその値に"["が含まれてる場合、その値が フォーマット定義として処理されてしまい、エラーとなる問題に対応します。 今回の対応では、og:view、og:tbody、og:thead、og:tfoot、og:Itdの各タグで、{@xxx}の変数の値に"["が含ま れていた場合は、予めサニタイズ(無効化)し、表示時に戻すという処理を加えることで、その値がフォーマット 定義として処理されないようにします。 org.opengion.fukurou.util.SystemParameter.getColumns() org.opengion.fukurou.util.SystemParameter.getFormats() org.opengion.hayabusa.html.TableFormatter.getFormat() org.opengion.hayabusa.html.TableFormatter.getTrTag() org.opengion.hayabusa.html.TableFormatter.makeFormat(DBTableModel) org.opengion.hayabusa.html.TableFormatter.decodeSanitizedStr(String) org.opengion.hayabusa.taglib.CommonTagSupport.getSanitizedBodyString() org.opengion.hayabusa.taglib.ViewFormTag.doAfterBody() org.opengion.hayabusa.taglib.TFormatTag.doEndTag() [columnタグ、selectタグのdefaultVal属性の改善] columnタグ、selectタグでcommandがRENEWの場合は、defaultValを適用しないようにします。。 これは、defaultValの値が埋め込まれた項目が存在する画面に戻った際に、 defaultValの項目の値がnullとなっていた場合に、defaultValの値が復元されると、 検索結果との不一致が発生するためです。 ※この問題は、command=NEW(画面リンクした場合)でも発生します。 しかし、この場合、遷移先の画面がエントリー画面などであった場合は、defaultValが適用されないと 問題が発生する可能性があります。 このため、command=NEWの場合の問題を根本的に解決するには、今回の対応方法ではなく、画面遷移時の forward制御を見直す必要があります。 具体的には、forward.jspでcommand=NEWの場合に、自動的にresult.jspに遷移するのではなく、query.jspで 自動サブミットさせることで、これをトリガとして、result.jspを表示することで、query.jspとresult.jspの 整合性をあわせることができます。 但し、この方法も、result.jspのみが存在し、query.jspが存在しない場合に、result.jspが開かなくなる可能性があります。 つまり、JSPを変えないと言う前提の上では、対応は困難であるため、command=NEWに対する対応は見送っています。 org.opengion.hayabusa.taglib.ColumnTag.doStartTag() org.opengion.hayabusa.taglib.SelectTag.doStartTag() [ポップアップボタン・閉じるボタン標準化] ポップアップ画面で、閉じるボタンを標準化します。 閉じるボタンを表示するには、query.jspでpopup_info.jsp、または、popup_info.jsp_minを インクルードして下さい。 (ポップアップ画面の標準雛形もこれをインクルードするように変更しています。) /jsp/custom/popup_info.jsp /jsp/custom/popup_info.jsp_min /jsp/image/close.gif /jsp/image/close_min.gif /gf/jsp/GF9510/query.jsp [1行用のヘッダー追加] クエリ部分に表示される標準のヘッダー(query_info.jsp)について、表示領域の高さを縮小したものを 標準として提供します。 これを利用するには、custom/query_info.jsp_minを標準のcustom/query_info.jspと置き換えて下さい。 /jsp/custom/query_info.jsp_min /jsp/image/separator_min /jsp/image/back_min.gif [Calc帳票・シートブレイク機能追加] Calc帳票システムで、データを埋め込む雛形シートを動的に切り替えることのできる機能を追加します。 この機能を利用するには、以下の手順を踏む必要があります。 @1つの雛形ファイルに対して、複数シートSHEET1,SHEET2を定義しておく A帳票レイアウト定義で、(SHEETBREAK)という項目を予め用意しておき、その項目の値としてシート名 (SHEET1,SHEET2)を定義しておく。 これにより、SHEETBREAKのシート名がブレイクしたタイミングでデータを埋め込むシートを切り替える ことができます。 org.opengion.hayabusa.report2.OdsContentParser.SHEET_BREAK org.opengion.hayabusa.report2.OdsContentParser.execContent() org.opengion.hayabusa.report2.OdsContentParser.getBodyValue(String, int) TEST10.ods シートブレイク用のサンプル追加 [Calc帳票システム・バグ修正] Calc帳票システムで雛形シートにセル参照(セルBをセルAの参照にするなど)を行った際に、正しくパース されない不具合を修正します。 org.opengion.hayabusa.report2.OdsContentParser.replaceOoocError(String) [tableUpdateタグ・SQLインジェクション対策対応] tableUpdateタグでSQLインジェクション対策を行うための、quotCheck属性が利用できるようにします。 但し、現状のJSPとの互換性を考慮し、初期値は、false(SQLインジェクションチェックを行わない)です。 hybs-taglib.tld org.opengion.hayabusa.taglib.TableUpdateTag.doStartTag() org.opengion.hayabusa.taglib.TableUpdateTag.release2() org.opengion.hayabusa.taglib.TableUpdateTag.setQuotCheck(String) [ヘッダーソート機能・バグ修正] ヘッダーソート後に画面遷移し、戻ってきた際にstartNoがクリアされるバグを修正します。 org.opengion.hayabusa.taglib.ViewFormTag.doStartTag() [画面遷移なし登録・バグ修正] 画面遷移なし登録で、行が1件もない状態で追加ボタンを押した際、update.jspのviewの設定で、 useHilightRowがfalseになっていると正しく行が表示されないバグを修正します。 これは、update.jspから返されるHTMLをresult.jspに挿入する際に、「div onclick="hilightRow」 という文字列でマッチさせていたためですが、useHilightRowをoffにすると、このdivが出力されない ために、マッチせず、データが表示されていませんでした。 今回の対応では、useHilightRowでも、
がSQL文中で利用できないバグを修正 gf/jsp/GF6410 hybs-taglib.tld valueタグ、columnタグにxssCheck属性を追加 jsp/common/htmlend.jsp jsp/common/eventColumnSql.jsp 廃止 jsp/common/eventColumn.jsp 新規追加 jsp/common/eventColumn.js jsp/common/eventColumnMarker.jsp jsp/common/jquery/jquery.js 1.4.2にバージョンアップ org.opengion.hayabusa.common.HybsSystem.EVENT_COLUMN_CLASS org.opengion.hayabusa.common.HybsSystem.EVENT_COLUMN_WRITABLE org.opengion.hayabusa.common.HybsSystem.EVENT_COLUMN_ID org.opengion.hayabusa.common.HybsSystem.EVENT_COLUMN_INITVAL org.opengion.hayabusa.db.DBEventColumn 新規追加 org.opengion.hayabusa.db.DBColumn.DBColumn(String, ColumnData, LabelData, CodeData) org.opengion.hayabusa.db.DBColumn.getRawParam() 廃止 org.opengion.hayabusa.db.DBColumn.getRawEditParam() org.opengion.hayabusa.db.DBColumn.getRawRendParam() org.opengion.hayabusa.db.DBColumnConfig.getRawParameter() 廃止 org.opengion.hayabusa.db.DBColumnConfig.getRawEditParameter() org.opengion.hayabusa.db.DBColumnConfig.getRawRendParameter() org.opengion.hayabusa.db.DBColumnConfig.setRawParameter(String) org.opengion.hayabusa.db.DBColumn.getEventColumnTag(String, String, boolean) org.opengion.hayabusa.db.DBColumn.getEventColumnTag(String, String, int, boolean) org.opengion.hayabusa.html.StringFormat org.opengion.plugin.columnから移動 org.opengion.hayabusa.taglib.CommonTagSupport.addEventColumn(String, String) 廃止 org.opengion.hayabusa.taglib.CommonTagSupport.addEventColumn(String, String, String, String, String, String) org.opengion.hayabusa.taglib.CommonTagSupport.addEventColumn(DBColumn) org.opengion.hayabusa.taglib.ColumnTag.doAfterBody() org.opengion.hayabusa.taglib.ColumnTag.release2() org.opengion.hayabusa.taglib.ColumnTag.setXssCheck(String) org.opengion.hayabusa.taglib.ColumnTag.getInsertTag(DBColumn, String) org.opengion.hayabusa.taglib.ColumnEditorTag.doAfterBody() org.opengion.hayabusa.taglib.ColumnEditorTag.setParameter(String) org.opengion.hayabusa.taglib.QueryOptionTag.doAfterBody() org.opengion.hayabusa.taglib.QueryOptionTag.doEndTag() org.opengion.hayabusa.taglib.QueryOptionTag.release2() org.opengion.hayabusa.taglib.QueryOptionTag.getEventColumn() 廃止 org.opengion.hayabusa.taglib.SelectTag.makeTag() org.opengion.hayabusa.taglib.SelectTag.setRawParam(String) org.opengion.hayabusa.taglib.SelectTag.release2() org.opengion.hayabusa.taglib.ValueTag.doStartTag() org.opengion.hayabusa.taglib.ValueTag.doAfterBody() org.opengion.hayabusa.taglib.ValueTag.doEndTag() org.opengion.hayabusa.taglib.ValueTag.release2() org.opengion.hayabusa.taglib.ValueTag.setXssCheck(String) org.opengion.hayabusa.taglib.ValueTag.commandExec(String) org.opengion.hayabusa.taglib.ValueTag.getSQLAttribute(DBTableModel) org.opengion.hayabusa.taglib.ViewFormTag.doEndTag() org.opengion.plugin.view.AbstractViewForm.init(DBTableModel) org.opengion.plugin.view.AbstractViewForm.getRendererValue(int, int, String) org.opengion.plugin.view.AbstractViewForm.getEditorValue(int, int, String) org.opengion.plugin.view.AbstractViewForm.setColumnWritable(String) org.opengion.plugin.view.AbstractViewForm.setNoWritable(String) org.opengion.plugin.view.AbstractViewForm.setUseEventCols() org.opengion.plugin.column.AbstractEditor.AbstractEditor(DBColumn) org.opengion.plugin.column.AbstractEditor.getValue(String) org.opengion.plugin.column.AbstractEditor.getValue(int, String) org.opengion.plugin.column.AbstractEditor.createEventColumnJS(String, String, int, String) 廃止 org.opengion.plugin.column.Editor_AUTOAREA.getValue(String) org.opengion.plugin.column.Editor_AUTOAREA.getValue(int, String) org.opengion.plugin.column.Editor_DBMENU.Editor_DBMENU(DBColumn) org.opengion.plugin.column.Editor_DBMENU.getValue(String) org.opengion.plugin.column.Editor_DBMENU.getValue(int, String) org.opengion.plugin.column.Editor_DBMENU.getOption(TagBuffer, String, boolean) org.opengion.plugin.column.Editor_DBRADIO.getValue(int, String) org.opengion.plugin.column.Editor_DBRADIO.getValue(String) org.opengion.plugin.column.Editor_HIDDEN.Editor_HIDDEN(DBColumn) org.opengion.plugin.column.Editor_INDBMENU org.opengion.plugin.column.Editor_INDBMENU.getOption(TagBuffer, String) org.opengion.plugin.column.Editor_MENU.Editor_MENU(DBColumn) org.opengion.plugin.column.Editor_MENU.getValue(String) org.opengion.plugin.column.Editor_MENU.getValue(int, String) org.opengion.plugin.column.Editor_MENU.getValue(int, String) org.opengion.plugin.column.Editor_QUERY.getValue(int, String) org.opengion.plugin.column.Editor_QUERY.getValue(String) org.opengion.plugin.column.Editor_TEXTAREA.getValue(String) org.opengion.plugin.column.Editor_TEXTAREA.getValue(int, String) org.opengion.plugin.column.Renderer_DBMENU.getValue(int, String) org.opengion.plugin.column.Renderer_DBMENU.getValue(String) org.opengion.plugin.column.Renderer_FORM org.opengion.plugin.column.Renderer_FORM.getValue(String) org.opengion.plugin.column.Renderer_QUERY org.opengion.plugin.column.Renderer_QUERY.getValue(String) [左右分割画面不具合対応] 左右分割画面で、右側のビューに他画面のリンク・マーカーがセットされてしまうバグを修正します。 これは、右側のビュー表示のcommandが"VIEW"で設定されていることにより、他画面のビュー情報のキャッシュが 復元されてしまうため発生します。(通常、右側のビューは、viewFormId="viewX2"となっており、他画面で 同じviewFormIdが存在すると、復元されてしまう) 今回の対応では、ビュー情報をキャッシュから復元する条件を厳しくし、同一画面IDのキャッシュ情報のみしか 復元しないようにします。 org.opengion.hayabusa.html.ViewForm.setGamenId(String) org.opengion.hayabusa.html.ViewForm.getGamenId() org.opengion.plugin.view.AbstractViewForm.setGamenId(String) org.opengion.plugin.view.AbstractViewForm.getGamenId() org.opengion.hayabusa.taglib.ViewFormTag.doStartTag() [og:forwargタグ改善] og:forwardタグでGAMENIDをパラメーターとして渡すようにします。 gamenId属性で指定された場合はその画面IDが、指定されていない場合は、自身の画面IDが渡されます。 また、過去との互換性を考慮し、keys属性にGAMENIDが含まれている場合は、valsで指定されている 画面IDが優先されます。 org.opengion.hayabusa.taglib.ForwardTag.doEndTag() [Calc帳票64Bit対応] Calc帳票が64Bit版Javaでも動作するように対応します。 但し、64Bit版Javaで動作させる場合は、システムリソースのREPORT_OOO_CONN_TYPEを"TCP"に設定した上で、 "そのサーバー上で動作する他のCalc帳票と重複しない"ようにREPORT_OOO_MIN_PORTを設定する必要があります。 REPORT_OOO_MIN_PORTについては、「プロセス毎に割り当てるポート番号を初期値」ですので、REPORT_OOO_MIN_PORT を基準として、プロセスの最大数分までのポート番号は予め明けて置いてください。 ---------------------------------------------------------------------------------------------------- 設定例) REPORT_OOO_CONN_TYPE = "TCP"、REPORT_OOO_MIN_PORT = "8100"、REPORT_MAX_PROCESS_COUNT = "256" の場合、8100から、最大で8355までのポート番号が自動で割り振られます。 ---------------------------------------------------------------------------------------------------- 但し、プロセスを起動しようとしたポート番号が、他のプロセス(OpenOffice以外のプロセスを含む)で、 既にバインド(使用中)の場合は、そのポート番号をスキップした上で空きポートを検索します。 org.opengion.hayabusa.common.SystemData.REPORT_OOO_CONN_TYPE org.opengion.hayabusa.common.SystemData.REPORT_OOO_MIN_PORT org.opengion.hayabusa.report2.ProcessFactory.ProcessPool.createInstance() org.opengion.hayabusa.report2.SOfficeProcess.ENV_DIR org.opengion.hayabusa.report2.SOfficeProcess.bootstrap() org.opengion.hayabusa.report2.SOfficeProcess.execOffice(String, String, int) org.opengion.hayabusa.report2.SOfficeProcess.getConnParam(String) org.opengion.hayabusa.report2.SOfficeProcess.getProcParam(String) org.opengion.hayabusa.report2.SOfficeProcessTcp 新規作成 [og:popupタグ改善] og:popupタグでポップアップ先に渡すコマンドを指定できるようにします。 従来は、JavaScriptでcommand="NEW"を固定で渡していましたが、今回の対応で、これを引数として 渡せるようにします。 hybs-taglib.tld jsp/common/ogPopup.js org.opengion.hayabusa.taglib.PopupTag.release2() org.opengion.hayabusa.taglib.PopupTag.setCommand(String) org.opengion.hayabusa.taglib.PopupTag.makePopup(boolean) [og:errorMessageタグ改善] エラー・ワーニングメッセージの後に改行を入れるようにします。 「登録しました。」(displayMsg)の後には、改行が入っているため、これに仕様を合わます。 org.opengion.hayabusa.taglib.ErrorMessageTag.makeTitle()