サポート > リポジトリ > Appendix > プリンシパルの詳細

インポートエクスポート画面で、システムモデルに「プリンシパル」は表示されません。これは特別なモデルで、アカウント(juser)のインポートエクスポートにあわせて処理されます。

開発者が追加したプリンシパルは、データベースに用意された "jprincipal" というテーブルに格納されます。このモデルは通常、外部から操作することはできませんが、テーブル情報としては存在しています。アカウント情報 (juser) のインポート・エクスポート時には、jprincipal も操作されます。

jprincipalの主キー(プリンシパルID)はビルドのタイミングで自動採番されます。("プリンシパル名(英語)" のソート順になります。)

外部データベース利用時は、ビルド後に import_db.bat を実行することで、追加したプリンシパルがアプリケーションに反映されます。 詳細は"サポート > データベース活用ガイド(R8) > テーブルの作成 >二回目以降"の手順をお読みください。

内蔵データベース(HSQLDB)利用時は、この手順は自動的に行われます。

詳細な仕組み

ログオンアカウントにプリンシパルを割り当てる」にあるように、アカウントには複数のプリンシパルを紐づけることができます。内部ではjuserは、複数のプリンシパルIDを保持します。

図6 juser と jprincipal の関係

このように juser は jprincipal の ID 値を参照する仕組みですが、新たに jprincipal が追加された場合、juser がもっている ID 値に変更がないにもかかわらず、jprincipal の ID 値が降り直されるため、「ずれ」が生じる可能性があります。

そこで Wagby では、プリンシパルの追加に伴いプリンシパルIDが変わった場合でも、通常のアプリケーション入れ替えルール(エクスポートとインポート処理)を行うことで、整合性が維持されるようにしています。

  1. ビルド前のアプリケーションで、データをエクスポートしておきます。
  2. ビルド後のアプリケーションで、データをインポートします。インポート時に、インポート対象データのプリンシパル情報と、(ビルド後の)アプリケーションのプリンシパル情報を比較して、インポート対象データのアカウント(juser)のプリンシパルIDを自動的に変換します。

最小限の操作

この仕組みから、プリンシパルの追加時は、アカウントモデル(juser)のインポートを行うことで反映されます。具体的には次の操作になります。

  1. ビルド前のアプリケーションでアカウントモデル(juser)をエクスポートしておく。
  2. ビルド及びアプリケーションの入れ替えを行う。
  3. 新しいアプリケーションで 1. のアカウントモデル(juser)をインポートする。

3. のタイミングで、追加されたプリンシパルが自動的に反映されます。

import_db.bat を使って juser のみのインポートを行うことはできません。juser のみを対象とするインポートは、ビルド後の Wagby アプリケーションを使うことができます。システム管理者で Wagby アプリケーションにログオンし、"管理処理 > インポートとエクスポート" 画面から "アカウント" のみにチェックをつけインポート処理を行うことができます。このとき juser と jprincipal テーブルのインポートが行われ、プリンシパルIDが再セットされます。

上で説明したようにプリンシパルの追加はエクスポートとインポートによってプリンシパルIDのずれを吸収しますが、プリンシパルの削除もしくはプリンシパル名の変更は手動で対応する必要があります。

具体的にはアカウントモデル(juser)がもつプリンシパル情報をすべて消去し、新しくプリンシパルを再設定してください。

プリンシパルIDの変更は、主キーの変更と同じインパクトがあります。そのため追加は可能ですが削除や変更は影響が大きいものとなっています。

プリンシパルモデルは Wagby システム内部で管理されており、開発者がこの定義を変更することはできません。内部では次のようになっています。

R8.4.0以降

項目説明
id整数順序による自動採番
principalId文字列識別用の文字
content文字列表示用の文字
category整数カテゴリID
isShowInSelect真偽値開発者による権限設定で選択肢として表示するかどうか
isEditable真偽値プリンシパル設計画面で編集可能かどうか

R8.3.xまで

項目説明
id整数順序による自動採番
name文字列識別用の文字
content文字列表示用の文字
R8.4.0以降のWagbyへ移行すると、nameは削除されます。

内部表現

プリンシパルをXML形式で表現すると次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<jprincipal id="1000">
  <principalId>productmgr</principalId>
  <content>{"en":"productmgr","ja":"商品管理者"}</content>
  <category>7</category>
  <isShowInSelect>true</isShowInSelect>
  <isEditable>true</isEditable>
</jprincipal>

プリンシパルIDのルール8.4.2

システム系のプリンシパルのIDは1番から999番までとし、これは予約します。ユーザが独自に作成したプリンシパルIDは1000番から割り当てられます。なお、このプリンシパルIDは内部で自動採番されるものであり、開発者が通常、意識することはありません。