サポート > Wagby Developer Network > カスタマイズ事例 > 出庫伝票作成と同時に商品在庫を減らす処理を行う

カスタマイズ要件

今回のテーマは、二つのモデルの値を同時に変更するというものです。データベース内の値を矛盾させないために「トランザクション」制御を行います。

Wagby が自動生成するソースコードは、一つのモデル操作に対するトランザクション制御を行っています。 二つ以上のモデルを操作する場合は、カスタマイズを行う必要があります。
今回は、図1に示す「在庫管理」をテーマに説明します。

倉庫-商品-商品在庫-出庫伝票
図1 在庫管理システムのイメージ

  • マスタ系である「倉庫」「商品」「商品在庫」は Wagby の自動生成機能だけで作成できます。
  • 「商品」と「商品在庫」は 1:1 の関係があります。このため、「商品在庫」の主キーは、「商品」を参照するようにしています。
  • トランザクション系である「出庫伝票」に注目します。このモデルの新規登録処理で、商品在庫を同時に変動させる必要があります。また、商品在庫を超える出庫要求については、エラーを返すようにします。

Wagby定義ファイルの指定

Wagby 定義ファイルでは、トランザクション系のモデルである「出庫伝票」の項目「商品」の詳細定義で、トランザクション指定を行います。ここでは、新規登録時に「在庫」モデルと連動する指定を行います。

トランザクション指定
図2 トランザクション指定

トランザクション指定でモデル名を明記しているのは、今回のケースにおいては(参照先のモデルが)「商品」ではなく「商品在庫」となっているためです。(「商品」と「商品在庫」は 1:1 の関係にあり、「商品在庫」の主キーは、「商品」の主キーと同じという関係にあります。)
参照先モデルがそのままトランザクション処理の対象モデルに等しい場合は、ここでモデル名を空白とします。 この場合は、モデル定義シートにおける参照モデル名が有効となります。

カスタマイズ方法

  1. 自動生成された $(DEVHOME)\env\work\srcgen\jp\jasminesoft\wagby\app\syukko\InsertSyukkoProcessBean.java ファイルを、 $(DEVHOME)\customize\webpage\WEB-INF\src\jp\jasminesoft\wagby\app\syukko\MyInsertSyukkoProcessBean として保存します。先頭に「My」を付与します。
    フォルダ名は、ご利用になるパッケージ名により変わります。適切に読み替えてください。
  2. MyInsertSyukkoProcessBean.java を編集します。在庫の照会、在庫の減算と出庫伝票の作成をセットで行います。具体的には次のようになります。
package jp.jasminesoft.wagby.app.syukko;

import jp.jasminesoft.wagby.model.syukko.*;
...

public class MyInsertSyukkoProcessBean
  extends InsertSyukkoProcessBean
{
  @Override
  public String do_transaction(Syukko syukko, Zaiko zaiko) {

    // トランザクション処理
    int suryou = zaiko.getSuryou();
    int syukko_num = syukko.getSyukkoNum();

    if (suryou - syukko_num < 0) {
      return "在庫 "+suryou+" に対して "+syukko_num+
        " を出庫しようとしました。";
    }

    // 在庫の調整
    zaiko.setSuryou(suryou - syukko_num);

    return null;
  }
}

このソースコードのポイントは次のとおりです。

  • Wagby が自動生成するプロセスビーンが提供する do_transaction メソッドをオーバーライドします。 同メソッドの引数には、トランザクション対象のストアモデルが渡されます。
  • メソッドの戻り値は、正常の場合は null を、エラーの場合は文字列を返すようにしてください。
  • オブジェクトのロック、DBMS へのトランザクション開始宣言とコミット、Wagby 内のオブジェクトキャッシュのクリア処理などはすべて自動で行われます。
  • ファイルは UTF-8 で保存してください。

ビルド

変更したファイルのビルド方法については、「カスタマイズファイルの適用方法」をお読みください。

なお、カスタマイズされたヘルパコードの存在が認識されると、自動生成される bean 定義ファイル(work\srcgen\webpage\WEB-INF\applicationContext\customer.xml)は次のように変更されます。

  <bean id="InsertSyukkoProcessBean"
        class="jp.jasminesoft.wagby.app.syukko.MyInsertSyukkoProcessBean"/>

これによって、カスタマイズされたクラスが使われるようになることがわかります。

ダウンロード

このページで紹介したサンプルをダウンロードしてお試しいただくことができます。

  • zaikokanri.zip (509,778 byte)
    同 zip ファイルには次のファイルが含まれています。
    customize\webpage\WEB-INF\src\jp\jasminesoft\wagby\app\syukko\MyInsertSyukkoProcessBean.java
    xls-model\zaikokanri.xls

ダウンロード後、次の手順に従ってお試しください。

  1. ダウンロードファイルを $(DEVHOME) に展開します。Wagby 定義ファイルならびにカスタマイズコードが上書きで配置されます。(なお、パッケージ名は「jp.jasminesoft.wagby」となっていますので、変更している方はご注意ください。)
  2. フルビルドを行います。

このページ

カスタマイズ事例