ホーム - 業務アプリ - 自動採番

自動採番

業務アプリケーションではデータベースに格納するデータレコードに固有のIDをつけるために自動採番という仕組みをよく使います。YWorks Software Framework(以下、YWSFと呼びます)では、自動採番のために自動採番マネージャ(YCAutoNoManager)クラスを使用します。YCAutoNoManagerクラスは各業務アプリケーションごとにYCAutoNoBaseForSQLServerクラス(データベースがSQLServer以外の場合はYCAutoNoBaseクラス)を継承して作成します。YCAutoNoBaseにはGetGuidメソッドとGetAutoNoメソッドが定義されています。(データベースの種類によって実装方法が異なるため定義のみしかありません。SQLServer用に継承したYCAutoNoBaseForSQLServerクラスでは2つのメソッドは実装済みです。)

YCAutoNoManagerはSingletonパターンで実装します。ですのでインスタンスの呼び出しは「YCAutoNoManager.Instance」という記述で行います。下記にSingletonパターンでのソースコードの記述例を示します。

public class YCAutoNoManager : YCAutoNoBaseForSQLServer
{
    private static YCAutoNoManager _instance = null;

    private YCAutoNoManager()
        : base()
    {
    }

    public override void Dispose()
    {
        if (this.IsDisposable)
        {
            _instance = null;
        }
        base.Dispose();
    }

    //Singletonのインスタンスです。
    public static YCAutoNoManager Instance
    {
        get
        {
            if (_instance == null) _instance = new YCAutoNoManager();
            return _instance;
        }
    }
}
 				


YCAutoNoManagerクラスにはデータレコードの主キー項目に使われる固有ID(コード)を取得するためのメソッドを記述していきます。YWSFでは採番マスタ(M採番)というテーブルを利用します。採番マスタにはオブジェクトの種別ごとに次の採番の際に使われる番号が保持しています。YCAutoNoBaseForSQLServerでは排他制御しながらその番号を取得してから1加えておくように実装されています。ですので、このGetAutoNoメソッドを利用して固有IDを生成します。例えば、顧客マスタ(M顧客)というテーブルに新規レコードを追加するための主キー項目として顧客コード(左0埋め10桁のコード)を自動採番したい場合、顧客のオブジェクト種別コードを「00001」と決めて採番マスタに登録し(オブジェクト種別コードは自由に決められます)、下記のようなソースコードをYCAutoNoManagerクラスに記述します。

//顧客コードの取得
public string GetCustomerCode()
{
    return this.GetAutoNo("00001").ToString().PadLeft(10, '0');
}

 				


データベースの一般的な設計として固有IDとしてGuidという特別な値を使うこともしばしばあります。Guidはデータベースの種類によって取得の仕方がことなりますので、GetGuidメソッドをデータベースに合わせてオーバーライド(サブクラスでの実装)してください。SQLServerにおいては「SELECT NEWID();」というSELECT文を発行することで取得できます。SQLServer用のGetGuidメソッドはYCAutoNoBaseForSQLServerで実装されています。