投稿

12月, 2018の投稿を表示しています

帳票レイアウトのコツ

イメージ
GeneXusで帳票を作成する場合、画面と比べて、レイアウトの調整に少々手間ががかかります。 綺麗なレイアウトをサクサクと作成するには、幾つかコツがありますので紹介します。 1)グリッド幅の調整 帳票レイアウトを見ると背景に点が打ってあり、 マウスでオブジェクトを移動させる際には、そのグリッド幅間隔で移動します。 グリッド幅の調整はツールバーの[ツール][オプション]の[エディター][レイアウト]で調整できます。 2)1ピクセルずつの移動 オブジェクトをマウスで移動する際にはグリッド幅間隔になるため、 微細な調整ができません。 1ピクセルずつの移動を行う場合はCtrl+矢印キーです。 または、プロパティで縦横の位置に数値を直接入力 線と線とつなげる場合など、最後の微調整はこちらで行ってください。 3)縦位置にマイナス数値を入れる テキストブロックとテキストブロックが並ぶ際に、罫線を綺麗につなげたい場合、 普通に設定するとどうしても1ピクセル隙間が空いてしまう場合があります。 その場合は、罫線の縦位置にマイナスの数値を設定します。 「-1px」こうすると上のテキストブロックに重なる様に罫線が配置されますので、 綺麗につながって表示されます。 数値にマイナスが入れられるというのが意外と盲点だったりします。 4)背景画像の利用 罫線が大量にある場合、線オブジェクトでレイアウトするのはなかなか大変です。 その場合、罫線込みの画像を作成して、それを背景画像として配置します。 その上にデータ項目を配置することで、調整の手間が省けます。 但し、画像のサイズ調整が必要なのと、 生成されたPDFが画像分、少々大きくなってしまうのが難点です。 5)点線ではなく罫線の色を薄く設定 罫線や長方形のプロパティで、[Border Style]があります。 こちらを[Dotted]や[Dashed]に設定すると、点線・破線の表現ができます。 ただ、実際にPDFや印刷してみると、色が濃いので結構目立ちます。 枠の中に点線を配置する場合は、目立たせたくないために点線にすると思いますので、 これではあまり意味がありません。 その場合は、[Border Color

フォーカス移動と制御

イメージ
通常のWEBシステムのフォーカス移動はタブキーとなります。 GeneXusでもそれは同様ですが、KBプロパティに [Field Exit] プロパティ があり、 こちらを設定することで、変更することができます。 [Field Exit] プロパティ http://wiki.genexus.jp/hwiki.aspx?%5BField+Exit%5D+%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3, よく使うのは「Enter, Tab, Shift-Tab」です。 タブキーに加えて、Enterキーでもフォーカス移動を行います。 汎用機やC/Sのシステムに慣れているユーザーだと、こちらを選択することが多いです。 但し、注意点として、 複数行入力可能なテキストエリアの場合、 Enterキーを押下すると、改行ではなく次の項目へフォーカス移動します。 改行をしたい場合はCtrl+Enterとなりますので、 項目付近にコメントや補足で記載するのが良いかと思います。 「Passing Last Char」は使ったことがありません。 汎用機時代の産物だと思いますが、全桁数分入力したら次の項目へフォーカス移動を行う形です。 WEBシステムでは選ばないですね。 ちなみにフォーカス順を調整する場合、通常のHTMLであればtabindex属性を使うかと思いますが、 残念ながらGeneXusにはtabindex属性を調整する機能やプロパティはありません。 HTMLのフォーカス順に従って、左から右へ、上から下への順番で移り、 Tableタグについては、Tableタグ内の項目が終わってから、次のTableタグへ移る。 といった動作になります。 ですので、画面構成や定義で調整をかけていく形となります。 私の経験上、特殊なレイアウト構成にしなければ、実際のシステム開発で困ることは殆どないです。 特殊なレイアウト構成にすると開発工数もメンテナンス工数も増えますしね。 また、コマンドでsetFocusはありますが、初期フォーカス設定に使うもので、 各項目に対して次の項目への移動をさせようとするのは無理があります。

デフォルトメッセージの変更

イメージ
GeneXusが自動的に表示するメッセージは若干不親切な日本語であることが多いです。 例えば 1)日付にあり得ない値を入力した場合には「無効な日付」 2)数値型に数値以外を入力したときは「値は無効な数字です。」 3)マスタ参照されている値にマスタに無いコードを入れた場合は「〇〇の該当レコードはありません。」  ※〇〇にはテーブル名が入ります。 このメッセージは変更できます。 ローカライズオブジェクトを開いて、「ユーザーメッセージのみを表示」のチェックボックスを外すと、 GeneXusの規定値のメッセージ群を表示・変更可能となります。 目的のメッセージを探すのが少々面倒ですが、 該当のメッセージを見つけて、「ローカライズされたテキスト」の個所を変更すればメッセージが変わります。 メッセージ内の「%1」はパラメータです。 テーブル名や項目名などが埋め込まれる形となります。 上記の例ですと以下のコードになります。 1)GXM_invaliddate     : 無効な日付 2)GXM_badnum        : 値は無効な数字です。 3)GXSPC_ForeignKeyNotFound : '%1' の該当レコードはありません。 ちなみにこのローカライズオブジェクトですが、 GeneXus社が別のツールを用意してまして、個別に編集することも可能です。 GeneXus Translation Tool - Wiki GeneXus http://wiki.genexus.jp/hwiki.aspx?GeneXus+%E7%BF%BB%E8%A8%B3%E3%83%84%E3%83%BC%E3%83%AB, ダウンロードはこちら(※Sign Inが必要) https://www.genexus.com/en/developers/downloadcenter?data=4411;;

参照整合制約(外部キー制約)とGeneXus

GeneXusがデータベースを作成する際、 デフォルトだと 参照整合制約(外部キー制約)も生成します が、 あくまでもデフォルトであり、プロパティで変更することができます。 データストアのプロパティで[Declare referential integrity]がYesだと生成します。 Noだと生成しません。 ※但し、初回に設定しておくか、Noにした後に「DBの再編成」を行う必要があります。 Declare referential integrity property https://wiki.genexus.com/commwiki/servlet/wiki?9093,Declare+referential+integrity+property, 「参照整合制約」があるとどうなるか、ですが。 1)データ移行や、テストデータ作成時にDB構造を考慮する必要がある 親子関係の場合、子のデータを先に作ることができません。 親のデータを削除することができません。 トランとマスタの関係の場合も同じで、マスタが無いとエラーになります。 これは結構大変です。 GeneXusはアジャイル開発で進めることが多いですので、 テーブル構造が固まってないタイミングでもプロトタイプをガンガン作っていきます。 その際に、テストデータを用意するのに、 DB構造を踏まえてデータの投入や作成をするのは面倒ですし、 あまりDBに詳しくないメンバーがいた場合、 エラーの内容が理解できずに時間を浪費してしまうこともあるでしょう。 2)DB再編成時に失敗する これはGeneXus特有で、少々困った事象ですが、 DBを再編成する際にGeneXusはデータも移行しようとします。 機能自体は非常に有益です。 テストデータをなるべく残してくれるので助かります。 ただ、適当なテストデータが入っていて、「参照整合制約」がある状態だと DB再編成時に失敗して、生成し直しになってしまうことが割とあります。 3)テーブル同士の関連で不整合なデータが生成されない 親子関係、マスタとトランの関係をDBが管理しますので、 もし、システムの仕様が誤っていたとしても、DB側がエラーを出します。 ですので、確実にデータの整合性が管理されます。