【DO!BOOK・ページリンク】
migaro_tech2013   8 / 100

BOOKをみる

10秒後にBOOKのページに移動します


6 他のプログラムに影響せず、他からも影 響されないため、プログラムの開発効率 と保守性が高まり、再利用しやすくなる。 開発効率と保守性を 高める工夫  社内SE の仕事は開発以外にも多岐に わたるため、内製を維持するには開発効 率が非常に重要である。また、現場の要 望に迅速に応え、競争力を上げるために、 保守性も同様に重要である。  そのため、いかに同じコードを記述せ ずコード数を減らすか、誰が書いても同 様の記述になるかを意識しており、その いくつかを紹介する。 (1)アプリケーションの自動配布  EXE ファイルとDelphi/400 をクラ イアントPC へ事前にインストールせ ず、ユーザーの初回起動時に自動でイン ストールする仕組みを構築した。初回起 動時以降は、EXE ファイルやDelphi/400 のバージョンアップを自動で行うように しており、インストールと更新作業の手 間をなくした。  これにより、ひんぱんにアプリケー ションの仕様変更やDelphi/400 のバー ジョンアップがあったとしても、配布の 手間を気にせずクライアントを最新の状 態にすることができる。  各クライアントの設定を保管するini ファイルに関しては、初回起動時には ファイルをコピーしているが、それ以降 はini ファイルの内容をチェックして追 加されたセクションおよびキーのみ追加 し、設定情報を消さないようにしている。 64bit 版OS のクライアントも対応済で ある。【図2】 (2)フィールド論理名管理  DBGrid の列名や入力項目(DBEdit) のラベルCaption をデザイン画面で設 定するのではなく、データベースに格納 したフィールド論理名を画面表示時に コードから設定することにした。これに より、類似した記述の重複をなくし、変 更箇所を一元化することで開発効率を上 げている。  DBGrid の列名設定のコードは、 DBGrid を拡張したオリジナルコンポー ネントに記述している。入力項目のラベ ルCaption 設定箇所は、使用しない フォームもあるため汎化していない。 【ソース1】 (3)可変メニュー  メニュー内容は、データベース化した ものをツリービューを使って表示する仕 組みとした。フォームの変更が不要であ るためビルド回数を減らせるとともに、 各メニューの有効無効を切り替えると いった対応も、データベースの変更のみ で可能とした。  メニューは、開発側で用意した標準メ ニューと、各自がオリジナルメニューを 作成できるお気に入りメニューの2 つを 用意し、各自で工夫できるようにした。 【図3】  メニュークリック時に開くフォーム は、データベースに文字列として格納す ることになるため、他の情報と合わせ record 型としてTTreeNode のData プ ロパティへ格納し、メニュークリック時 に読み出している。  フォームクラスは、FindClass 関数で 探せるようにフォームのCreate イベン ト等で事前にRegisterClass 手続きを使 い、登録しておく必要がある。【ソース2】 (4)入力値チェック  オリジナルコンポーネントのプロパ ティに設定した値を使用し、全角/ 半角 / 半角大文字/ 数値型に合致する文字列 かどうか、文字型フィールドでは EBCDIC 換算した文字数に収まってい るかどうか、数値型フィールドでは数値 フォーマットに合致するかどうかの妥当 性チェックを行っている。  オリジナルコンポーネントへのプロパ ティとイベント設定は、コード上で行っ ている。ただし、手作業でのコーディン グは行わず、Excel 化したテーブル仕様 書(※)をもとに入力項目仕様書(図4) を作成し、Excel 関数で作成したコード を貼り付けているだけである。【図4】 【ソース3】【ソース4】  また、妥当性チェックのコードも共通 クラスに記述してあるため、ほぼノー コーディングで行っている。【ソース5】 ※ DSPFFD コマンドでFILE 化し、 ODBC 経由でExcel に取り込む (5)値選択とローカルキャッシュ  区分やマスター値については通常、 CD やID としてフィールドに格納され ているが、それを名称や他のフィールド 値から検索して選択するための入力補助 機能を備えている。【図5】【図6】  選択画面のGrid に表示される内容は 事前にキャッシュしておき、高速な表示 や検索を実現した。選択画面表示時にリ フレッシュも可能である。  区分値選択のキャッシュは各フォーム でそれぞれ行い、マスター値選択の キャッシュはキャッシュ用のクラスで 行っている。【ソース6】 (6)値変換とエンティティクラス  各レコードの詳細を表示する欄では、 DataSource のDataChange イベントを 使いフォーム表示時やデータ変更時に CD やID を名称に変換し、CD やID と は別にわかりやすく表示している。 【図7】【ソース7】  SQL 文にID やCD に対応した区分や マスターテーブルを結合して表示せず、 事前にエンティティクラスに読み込んだ データを使用している。そのため高速で、 CD やID を直接入力した際にもサー バーと通信することなく、表示内容を更 新できる。【ソース8】  また、手入力したCD やID がデータ ベース上に存在するかどうかも ClientDataSet のValidate イベントを 使い、その場でチェック可能としている。 【図8】 今後の予定・計画 (1)業務ポータルとしてのグループウェア  Delphi/400 とは別の統合開発環境で 構築しているグループウェアのWeb サービス連携機能について、これを Delphi/400 に移植し、更新情報やアラー トをグループウェアに最新情報として書 き込めるようにする。 (2)印刷方法の拡張  現在の印刷方法は、帳票サーバーへ CSV データとしてデータを渡して印刷 する方法しかなく、その場でプレビュー することができない。そのため、 QuickReport やExcel を使った出力手 段を実装したい。