投稿

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側がエラーを出します。 ですので、確実にデータの整合性が管理されます。

GeneXusServer Cloud

イメージ
GenexusServerはGeneXusのオブジェクトを資産管理、共有するためのToolです。 オブジェクトのコミット/更新を行いServerで管理することで、複数人での開発を円滑にする。 いわゆるSVNのような機能です。 別途有償のライセンスで250万位なので割と高価です。 ただ、便利なので一度使うと無しには戻りたくありません。無しの場合は手動での管理となり、 どうしてもデグレードの可能性が高くなってしまいますので。 そんなGeneXusServerですが、日本では殆ど公表されてませんが Cloudでのサービス展開 がされています。 直接GeneXus社との取引となることから日本では宣伝されていない模様です。 GeneXus Server Cloud http://gxserver.com/en/main ユーザー数などでプランを選べるので簡易に始めてみたい場合は良いと思います。 ただ、ユーザーコントロールやWorkwithPlusをインストールする場合は問い合わせフォームから依頼する必要があるらしいです。 英語かスペイン語での問い合わせ、ということでしょうかね。

Javaの有償化とGeneXus

2019年からJavaが有償化 されることになりました。 GeneXus15はJavaか.NETのジェネレータから選択しますので、 今後はどうなっていくのか気になる所です。 まず前提として、 GeneXusはプロパティの設定でコンパイラを選択できます。 そのコンパイラを有償のOracleJDKにするか、無償のOpenJDKにするかは ユーザーの設定次第となります。 ですので、GeneXus的には 「Javaのソースは生成するけど、どのJDKを使うか、 どのバージョンを使うかは自由だよ。」ということですね。 GeneXus社からは「OracleJdkもOpenJDKも両方サポートしていく」 と聞いています。 これはJavaジェネレータから生成されたシステムを 両方で動作確認しますよ。ということだと思います。 私は、GeneXusでのWEBシステムをOracleJDKでもOpenJDKでも運用していますが。 実際の所、全く変わりが無いな。 という印象です。 新機能を率先して使う場合は、差が出てくるのかもしれませんが、 GeneXusは基本的に他の言語でも同じように動作する形で生成しますので、 あまり新しい機能や、言語固有の機能は使っていないことも要素としてあるのかと思います。 ただ、脆弱性という意味ではOpenJDKの方は これから半年に一度のアップデートは必須になっていくのかと思います。 OracleJDKももう少し安ければよいのですが、結構高いですね。 正確ではないですが、WEBシステムとして使うのであれば1CPUで60万円なのかな。 ユーザー数カウントだと1ユーザー1万円位。 数年前までの私の実績ではJava5割、.NET5割だったのですが、 近年はクラウドサーバーを利用することが増えて、Javaが6・7割位になってました。 クラウドサーバーの場合はWindowsOSだと高いので、 LinuxでJavaでTomcatでPostgreSQLで、といった形で、 ユーザーにも開発者にも手軽にシステムが作れて運用できていたので、 それが難しくなってくるのは非常に残念です。 GeneXus16では.NET Coreジェネレータが搭載 されます。 .NET Coreがどれだけ普及するか

GeneXusのオプション設定、起動時オプション

イメージ
GeneXusをインストールした後に、私が 必ず行う設定 を紹介します。 GeneXusの[ツール][オプション] ①KBエクスプローラーにディスクリプションを表示 これが こうなる ②ダイアグラムにディスクリプションを表示 これが こうなる ③ビルドオプション ・インスタンスの同時生成 ・インスタンスの同時分析 これはビルド時にCPUを何コア使うかの設定です。 良いPCを使っている場合は、こちらの設定を確認した方が良いです。 GeneXusは基本1オブジェクトが1ソースとなります。 1ソースに割り当たるコアは一つだけです。 なので、1オブジェクトが大きい場合のビルド時間はCPUの個数ではなく速さに依存します。 ただ、複数オブジェクトをビルドする場合やリビルドする場合には 並列で処理が行われるので、かなりの差が出てきます。 ビルドは分析(Specify)と生成(Build)に分かれており、分析は割と早く終わります。 これに割り当てるのが「インスタンスの同時分析」です。 生成(Build)が実際のJavaソースや.NETのソースの生成です。 物理的にファイルを作るので時間が掛かります。 これに割り当てるのが「インスタンスの同時分析」で、時間が掛かる場合は大体こちらです。 全部のCPUコアをあててしまうとOSが止まるでしょうから、最適な数値を設定するのが良いでしょう。 複数の同時生成処理と分析処理のインスタンス http://wiki.genexus.jp/hwiki.aspx?%E8%A4%87%E6%95%B0%E3%81%AE%E5%90%8C%E6%99%82%E7%94%9F%E6%88%90%E5%87%A6%E7%90%86%E3%81%A8%E5%88%86%E6%9E%90%E5%87%A6%E7%90%86%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9, ・ナビゲーション詳細 こちらをTrueにすると、トランザクション画面をビルドした後のナビゲーションで Rulesに指定した内容の実行順序が出てきます。 トランザクション画面を利用

スマートデバイス用タイマー的なコントロール

GeneXusには クロノメーター(Chronometer)コントロール があります。 これはタイマー(Timer)のようなコントロールで、 最初に 設定しておくことで何秒後かにイベントを発生させる ことが出来るものです。 元々スマートデバイス用だったと思うのですが、Web用としても使えるようです。 Chronometer コントロール http://wiki.genexus.jp/hwiki.aspx?Chronometer+%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB, 以前にスマホアプリを開発した時に、数秒置きに処理を行いたかったのですが、 実現する方法がどうしても分からず、Wikiや英語サイトを漁っても分からず、 GeneXusJapan社を経由して、GeneXus社に確認したところ、 暫くしてこんなコントロールがあるよ。言われました。 「有ったんかい!」 と、思わず叫びましたけどね。 その時はWikiの見出しに載ってなかったのと、 クロノメーターと言われても、全くピンと来なかったので、辿り着けませんでした。 今はWikiの見出しにはありますけど、 名前がChronometerコントロールですからね。 このブログから辿り着ける人もいるかもしれませんので、掲載します。

IVS文字・サロゲートペア文字の注意

システムの中で文字数を取得する際には IVS文字・サロゲートペア文字 に注意が必要です。 IVD/IVSとは | 文字情報基盤整備事業 https://mojikiban.ipa.go.jp/1292.html サロゲートペア入門:CodeZine(コードジン) https://codezine.jp/article/detail/1592 例えば、エラーチェックで指定した「文字数」で固定する場合 最大「文字数」を超えているかチェックする場合 GeneXusでは&変数.Length()か、またはLen(&変数)で文字数を取得することが出来ます。 但し、上記のIVS文字・サロゲートペア文字の場合は、 見た目の1文字が1文字として算出されません。 試した環境:GeneXus15U10 通常文字 :辻 IVS文字:辻の点が1つの文字 このLengthを求めると、以下の結果となります。 通常文字 :1文字 IVS文字:3文字 --------- 通常文字     :叱 サロゲートペア文字:叱(環境依存) このLengthを求めると、以下の結果となります。 通常文字     :1文字 サロゲートペア文字:2文字 ※IVS文字とサロゲートペア文字を試したい場合は、Windowsの設定を変更する必要があります。  Microsoft IMEの場合   ・IMEのプロパティから[詳細設定]   ・[変換]タブの[詳細設定]   ・変換文字制限に      変換文字制限をしない      IVSを含む文字を制限する      サロゲートペアを含む文字を制限する    といった候補が出ますので、[変換文字制限をしない]をチェックしてください。    これで変換候補にIVS文字とサロゲートペア文字が出てきます。   ※※※     試した後は、戻しておいた方が良いです。     メールなどで送ってしまうと相手に迷惑ですので。 ちなみにBytecount()を使用してバイト数(文字コードはUTF-8)を取得すると 以下の結果となります。 通常文字 :辻 IVS文字:辻の点が1つの文字 ↓↓↓ 通常文字 :3バイト IVS文字:7バイト ---------

GeneXusの調査用サイト紹介

イメージ
■GeneXusの.NET、Javaソース https://app.assembla.com/spaces/genexus_standard_classes/subversion/source .NETやJavaの GeneXus標準モジュールのソース が公開されています。 GeneXus内部の記述がどのようになっているか調査したい場合は、 こちらを見ると、それぞれのバージョン毎にソースを見ることが出来ます。 Web版だけです。 AndroidやiOSのクライアント側アプリのソースも公開して欲しいんですが、 悪用される可能性があるからダメなのかな。 ■コラボDB https://www.gxsupport.jp/gxfaq/gamexamplelogin.aspx GeneXusJapan社が運用している 日本のGeneXusユーザー向けの事例集 GeneXusライセンスを保有するユーザーに対してアカウントが発行されます。 現在、約900件の情報がUPされている模様です。(2018年11月時点) ■GeneXusSAC日本語版 https://www.genexus.com/ja-JP/japan/community-and-support-jp/sac SACとはGeneXus社が取りまとめているGeneXusの要望/バグ/リリース情報の管理です。 その日本語翻訳版となります。 ■GeneXusSAC https://www.genexus.com/en/developers/websac?data=0;; GeneXusSACの本体です。 スペイン語とポルトガル語が一番情報が多く、次に英語になります。 スペイン語ONLYといったメッセージが割と出てきます。 事象の調査や事例が必要な場合は、 上記に記載した 順番(コラボDB→日本語SAC→本体SAC)で調査 していくのが良いです。 Wiki等のURLも以下に記載しておきます。 ■GeneXus15ヘルプ(日本語) http://wiki.genexus.jp/hwiki.aspx?カテゴリ%3aGeneXus+15+ヘルプ, ■WorkwithPlusヘルプ(日本語) http://wwp.genexus.jp

WorkwithPlus

イメージ
GeneXus Day 2018で最新情報を発表した Dvelop社のWorkwithPlus ですが、私はかなり気に入ってます。 4,5年位前から非常に良いバージョンアップを続けており、 毎回、実際のプロジェクトで使えそうな機能が次々に追加されてます。 私が特に評価したのは以下の機能です ・Gridのタイトル行クリックの全件並び替え ・CSV出力 ・ユーザーが自由に定義できる画面領域(ユーザーテーブル) ・データの変更履歴取得 ・帳票テンプレート ・Gridのページング制御 ・GAMの制御と連動したシステム基盤 ・GAMのロールと連動した機能利用制御、更にボタン押下制御 ただ、WorkwithPlusはGeneXusありきのツールなので、 GeneXusを知らない人に説明するのは非常に難しい所でもあります。 GeneXusの説明をした後に、WorkwithPlusの説明をすると、 「え?WorkwithPlusが無いとダメじゃん!」 と言われることが良くあります。 いえいえ、GeneXus自体も凄いんです。 でも、それにWorkwithPlusを加えると、もっと凄いんです。 と補足が必要になります。 現在のバージョンは WorkwithPlus11 です。 このバージョンは相当に驚きました。 GAMを適用した上で、WorkwithPlusを使用すると、 突然ウィザードが始まります。 これらのウィザードに従って設定を行い、 その上で、1つのトランザクションを作成してWorkwithPlusを適用してみると このような画面、、、、いえ! 「業務システム」が出来上がります。 WorkwithPlus11は私もまだ触り始めたばかりですが、 これから色々と試してみたいと思います。

GeneXusDay 2018 開催

2018年10月23日(火)にGeneXusDay 2018が開催され、参加してきました。 参加者は400人位で、久しぶりにお見かけする面々が沢山いらっしゃいました。 発表資料がダウンロードできるようですので、興味のある方はどうぞ。 GeneXus Day 2018 プログラム https://internal.genexus.jp/downloads/GXDay2018/Program.html GeneXus社からGeneXus16の情報、Dvelop社からWorkwithPlusの最新情報 GeneXusを古くから使っている銀行パッケージ"Bantotal"の紹介 JBCC社の代々木ゼミナール様の実績の発表などがありました。 GeneXus16の一番のテーマは 「マルチエクスペリエンス」 です。 Webやモバイルだけでなくチャットボットや音声認識など、 ユーザーとのやり取りの方法を複数用意することを可能にするということです。 さらにWebも新しいデザインシステムが導入され、著名なCSSフレームワークが選択可能 ということで、私は面白いと思いますが、まだ業務システムでのAI活用も そこまで浸透してませんので、「フーン、あそう」と思う人も多いと思います。 少し話がずれますが、 最近、 DX(デジタルトランスフォーメーション) という言葉を割と耳にします。 ビジネスをデジタルに変換して新しいビジネスモデルを作っていこうというイメージです。 これには旧来の基幹システム開発のような1,2年かけて綿密に作り上げていく ウォーターフォール型の開発スタイルはマッチしません。 アジャイル方式の、いわゆる高速開発が適しています。 この「デジタルトランスフォーメーション」ですが、 実はGeneXus15の一番のテーマでした。 GeneXus15が出た当時は、私は良いフレーズだなと思いましたが、 当時の周りの反応はイマイチで「ふーむ、パンチが弱くないか」といった感じでした。 そう考えるとGeneXusは結構凄いなと思います。 今回のマルチエクスペリエンスも、GeneXusにとって「デジタルトランスフォーメーション」は もう”当たり前に出来ること”で、それを マルチチャンネルでユーザーに提

GeneXusブログ始めます

昨年、20年勤めた会社を退職しまして、 現在はフリーのエンジニアとして活動しています。 GeneXusを使って13年位になりますが、システム開発って楽しいんですよね。 ここ数年はアジャイル開発が主体となってきて、 ユーザーが一緒に参加(開発)してくれるようになって本当にそう思います。 会社という形も良いのですが、 よりいい仕事、納得のいく仕事をユーザーに提供したい。 そして、ユーザーと一緒に楽しく仕事をしたいと思い、 フリーのエンジニアを始めた次第です。 このブログでは、少しでも誰かの仕事が楽しくなるような情報を 提供していければ良いかと考えています。 その内、製品なども作っていきます。