起動ルーチン
C#.NETで作成された実行ファイルはMainというメソッドから実行されます(エントリポイントといいます)。Mainメソッドは新規プロジェクトを作成した際に自動的に「Programクラス(Program.cs)」に作成されます。
それでは、テンプレートプロジェクトのMainメソッドの中を見ていくことにしましょう。
static void Main() { // //YWorks Software Framework の起動時の記述です。 // YCLogon logon = null; bool isLogoned = false; try { //YWorks Software Framework キーの設定 //キーを設定すると起動時のロゴを非表示にできます。 //キーは別途取得してください。 YCApplication.Instance.YSystemKey = string.Empty; //アプリケーション設定 YCApplication.Instance.Disposer = new YCDisposer(); YCApplication.Instance.SetupConfig("config.xml"); //コネクション設定 YCConnectionManager.Instance.StartupConnection(new YCSqlConnection(), YCApplication.Instance.Config.GetKey("database", "source_main")); //ユーザ認証(ログオン) logon = new YCLogon(); isLogoned = logon.Logon(YCConnectionManager.Instance.Connection); logon.Dispose(); logon = null; //ユーザ認証後のアプリケーション起動 if (isLogoned) { //リストの読み込み YCListManager.Instance.LoadLists(); //MDIの起動 Application.Run(new mdiApplication()); } } catch (Exception e) { if (logon != null) { try { logon.Dispose(); } catch { } logon = null; } try { YCApplication.Instance.Dispose(); } catch { } YCMessageBox.ShowErrorMessage("起動に失敗しました。\n" + e.Message); } }
まず、アプリケーション設定の部分を見てみましょう。
「YWorks Software Framework(以下、YWSFと呼びます)」ではアプリケーション起動中の情報(ログオンユーザの情報など)を持つ「YCApplication」というクラスがあります。このクラスは起動している業務アプリケーションごとにインスタンスがただ一つだけ存在するように設計されています。このようにインスタンスが一つだけ存在するようなクラス設計をデザインパターン用語で「Singleton(シングルトン)パターン」と呼びます。YWSFではSingletonパターンのインスタンスは「クラス名.Instance(例えばYCApplication.Instance)」という記述でインスタンスを呼び出します。まず始めにYWSFのキー設定があります。YWSFでは起動時に「YWorks Software」のロゴが表示されます。これをキャンセルしたい場合は別途キーを取得して、起動時の最初に設定してください。(キー設定がない場合でもYWSFは利用できます。)
以降はアプリケーションの設定です。「YCApplication」クラスは自身がDispose(利用されなくなったインスタンスを後処理するためのメソッドです)されるときに、リストマネージャなどの他のSingletonパターンのクラスのDisposeを実行するディスポーザ(YCDisposerクラス)のDisopseを呼び出します。YCDisposerクラス(YCDisposer.cs)はYCDisposerBaseクラスを継承し、Disposeメソッドにて下記のようにSingletonパターンのクラスのDisposeを呼び出しています(ただしコネクションマネージャのみベースクラスでDisposeを呼び出します)。
////// SingletonクラスのDispose用クラスです。 /// アプリケーション終了時に呼び出されます。 /// public class YCDisposer : YCDisposerBase { public YCDisposer() : base() { } public override void Dispose() { if (this.IsDisposable) { //SingletonクラスのDisposeを実行します。 //リストマネージャ try { YCListManager.Instance.Dispose(); } catch { } //自動採番マネージャ try { YCAutoNoManager.Instance.Dispose(); } catch { } } base.Dispose(); } }
また、起動に必要な設定ファイルの情報をXMLで記述したConfigファイル名もアプリケーション起動時に設定します。このソースコードでは「config.xml」と固定の設定ファイル名を記述していますが、アプリケーション起動時に引数として設定ファイル名を指定させるような記述も可能です。
設定ファイルは業務アプリケーションの実行ファイルと同じフォルダに配置します。同様にローカル設定テンプレートファイル(既定はsettings.xmlですが、設定ファイル内でファイル名を指定することができます)も実行ファイルと同じフォルダに配置します。下記に設定ファイルとローカル設定テンプレートファイルの内容を示します。
設定ファイル(config.xml) <config> <database> <source_main>Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\templatedb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True</source_main> </database> <local_settings> <template_file_name<settings.xml</template_file_name> <file_name>settings.xml</file_name> </local_settings> </config> ローカル設定テンプレートファイル(settings.xml) <local_settings> <window> <left>0</left> <top>0</top> <width>800</width> <height>600</height> <state>0</state> </window> </local_settings>
設定ファイルには接続先のデータベースの情報(databaseセクション)やローカル設定ファイルの情報(local_settingsセクション)が記述されています。この他にも業務アプリケーションを作成する際に必要な設定情報はこの設定ファイルに記述していきます。
ローカル設定ファイルはユーザ個人の設定情報として「Local Settings」フォルダ内に保存されます(ファイルが存在しない場合はローカル設定テンプレートファイルがコピーされます)。上記ではユーザが前回利用したWindowサイズ情報が書き込まれています。業務アプリケーション実行ごとに保存(書き込み)が必要な情報についてはローカル設定として取り扱ってください。
アプリケーション設定の次にコネクション(データベースへの接続)設定を実行します。データベースへの接続を管理するためにYWSFではコネクションマネージャというクラスがあります。起動時に設定ファイルからデータベースの情報としてデータベース接続文字列を取得します(上記の場合は「database」セクションの「source_main」キーがデータベース接続文字列に当たります)。
業務アプリケーションではメインで使用するデータベース以外にも別のアプリケーションがメインに使っているデータベースのデータを参照することもあります。StartupConnectionメソッドはこれから作成する業務アプリケーションがメインとして使用するデータベース接続を確立するためのメソッドです。
メインデータベースへの接続が確立すると、次はユーザ認証に移ります。YWSFのユーザ認証では「Mユーザ」というテーブルの「ユーザID」と「パスワード」を使って認証するようになっています。ユーザ認証により、YCApplicationインスタンスにユーザ情報(YCApplication.Instance.User)が設定されます。
ユーザ認証後、リストマネージャが情報入力に必要なリスト情報(マスタ情報)を読み込みます。リスト読込みメソッド(YCListManager.Instance.LoadLists)については、各業務アプリケーションに合わせてオーバーライド(サブクラスでの実装のことです)してください。
そして、Mainメソッドの最後で業務アプリケーション用のウィンドウが開かれます。YWSFではMDIウィンドウ(親ウィンドウの中で子ウィンドウが開くタイプのことです)を使用します。MDIウィンドウが開く際に、ユーザ認証を受けたユーザに合わせてメニュー画面が開くようになっています。ユーザのグループや権限に合わせて開くメニュー画面を指定するメソッド(YCUser.MainMenuType)を各業務アプリケーションに合わせてオーバーライドしてください。