iDempiere 属性の使い方|在庫管理 操作マニュアル・技術仕様
This content is not available in your language yet.
📖 在庫管理の全体像: 在庫管理の業務フロー全体図 も合わせてご覧ください。
属性は、色・サイズなどの品目属性を定義するマスタです。ここで定義した属性を属性セット(M_AttributeSet)に組み込み、その属性セットを品目マスタに設定することで、品目に属性情報を付与できます。
📌 ポイント: 「インスタンス属性」フラグが属性の性格を決めます。OFF なら品目単位で共通の値(例: 色)、ON ならシリアルNo・ロットのように在庫の個体(インスタンス)ごとに異なる値を持ちます。
属性でできること
Section titled “属性でできること”- 品目属性の定義(色・サイズ等)
- 属性値タイプの選択(文字列・数値・リスト・日付・リファレンス・複数選択リスト)
- リスト型属性の選択肢(属性値)の登録
- インスタンス属性(個体ごとの値)と品目共通属性の区別
- 属性の入力必須化(必須フラグ)
- リファレンス型でのシステム参照・ダイナミックバリデーションの利用
属性は2タブ構成です。
| タブ名 | テーブル | 項目数 | 役割 |
|---|---|---|---|
| 属性 | M_Attribute | 約14項目 | 属性の定義(名称・属性値タイプ・インスタンス属性等) |
| 属性値 | M_AttributeValue | 約8項目 | リスト型属性の選択肢(例: 緑、L サイズ) |
💡 ヒント: 属性値タブは属性値タイプが「リスト」の場合のみ使用します。文字列・数値・日付型では属性値の登録は不要です。
基本操作手順
Section titled “基本操作手順”graph TD
A["🚀 メニューから開く<br/>在庫管理 > 品目属性管理 > 属性"] --> B["➕ 新規で名称を入力"]
B --> C{属性値タイプ}
C -->|文字列/数値/日付| D["✏️ タイプを選択して保存<br/>(自由入力の属性)"]
C -->|リスト| E["📋 属性値タブで選択肢を登録<br/>(例: S / M / L)"]
C -->|リファレンス| F["🔗 リファレンス・リファレンスキーを設定<br/>(上級ロールのみ)"]
D --> G["🏷️ インスタンス属性・必須フラグを設定"]
E --> G
F --> G
G --> H["💾 保存"]
H --> I["🔗 属性セットに組み込み<br/>→ 品目マスタへ適用"]
アクセス方法
Section titled “アクセス方法”メニューから「在庫管理 > 品目属性管理 > 属性」を開きます。
- ツールバーの「新規」ボタンをクリック
- 基本情報を入力:
- 名称: 属性名(例:
色、サイズ) - 属性値タイプ: 値の入力形式を選択(デフォルト: 文字列 最大40文字)
- インスタンス属性: 在庫の個体ごとに値が異なる場合にチェック
- 必須: 属性の入力を必須にする場合にチェック
- 名称: 属性名(例:
- 「保存」をクリック
リスト型属性の選択肢登録
Section titled “リスト型属性の選択肢登録”- 属性タブで属性値タイプに「リスト」を選択して保存
- 「属性値」タブに移動
- 選択肢を登録:
- 検索キー: 選択肢のコード(例:
S) - 名称: 選択肢の表示名(例:
Sサイズ)
- 検索キー: 選択肢のコード(例:
- 選択肢の数だけ繰り返して保存
項目リファレンス
Section titled “項目リファレンス”| 項目名 | 必須 | 型 | 説明 |
|---|---|---|---|
| 名称 | 必須 | 文字列 | 属性の名称 |
| 説明 | - | 文字列 | 補足説明 |
| 属性値タイプ | 必須 | リスト | 値の形式(下表参照。デフォルト: 文字列 最大40文字) |
| インスタンス属性 | 必須 | チェック | 個体(シリアルNo・ロット等)ごとの値かどうか |
| 必須 | 必須 | チェック | 属性入力を必須にするか |
| リファレンス | - | 選択 | リファレンス型で使用するシステム参照 |
| リファレンスキー | - | 選択 | 型が Table / List の場合に指定 |
| 日付書式 | - | 文字列 | 日付型の入力書式 |
| ダイナミックバリデーション | - | 選択 | リファレンス型の動的絞り込みルール |
| Default Logic | - | 文字列 | デフォルト値のロジック(; 区切り) |
属性値タイプの種類
Section titled “属性値タイプの種類”| タイプ | コード | 属性値タブ | 説明 |
|---|---|---|---|
| 文字列(最大40文字) | S | 不要 | 自由入力の文字列(デフォルト) |
| 数値 | N | 不要 | 数値入力 |
| リスト | L | 使用 | 属性値タブの選択肢から選択 |
| 日付 | D | 不要 | 日付入力(日付書式を指定可能) |
| リファレンス | R | 不要 | システム参照から選択(上級ロール限定) |
| 複数選択リスト | C | 使用 | 複数選択可能なリスト |
よくある質問(FAQ)
Section titled “よくある質問(FAQ)”Q. 属性を新規保存しようとすると「ここでは許可されていません」エラーになります
Section titled “Q. 属性を新規保存しようとすると「ここでは許可されていません」エラーになります”属性の新規作成、およびリファレンス型属性の変更は、上級権限(Access Advanced)を持つロールのみ実行できます(MAttribute.beforeSave() によるチェック)。システム管理者ロール等、上級権限のあるロールでログインしてください。
Q. インスタンス属性に変更したら、属性セット側の設定も変わりました
Section titled “Q. インスタンス属性に変更したら、属性セット側の設定も変わりました”仕様どおりの動作です。属性を非インスタンス属性からインスタンス属性に変更すると、MAttribute.afterSave() がその属性を使用しているすべての属性セット(M_AttributeUse 経由)の「インスタンス属性」フラグを自動的に Y に更新します。
Q. 属性の名称変更時に「UniqueAttribute」エラーが出ます
Section titled “Q. 属性の名称変更時に「UniqueAttribute」エラーが出ます”名称変更時には、同一クライアント内で重複する属性名がテーブル属性用途で使われていないかがチェックされます(beforeSave() の重複チェック)。別の名称を指定してください。
Q. 属性値タブに登録した選択肢が表示されません
Section titled “Q. 属性値タブに登録した選択肢が表示されません”属性値の選択肢が使われるのは属性値タイプが「リスト」の場合のみです(getMAttributeValues() はリスト型のときだけ属性値を読み込みます)。属性タブのタイプ設定を確認してください。
- 品目マスタ(Product)の使い方 — 属性セット経由で属性を適用
- 属性検索(Attribute Search)の使い方
- シリアルNo管理の使い方
- 画面リファレンス: 属性
🛠 技術仕様(開発者向け)
属性はマスタデータ型のウィンドウ(AD_Window_ID: 260)で、M_Attribute(属性定義)と M_AttributeValue(リスト選択肢)の2テーブルで構成されます。モデルクラスは MAttribute(442行)と MAttributeValue(110行)です。MAttribute は get(ctx, M_Attribute_ID) によるキャッシュ参照と markImmutable() をサポートします。Document 型ではありません。
アーキテクチャ概要
Section titled “アーキテクチャ概要”classDiagram
class MAttribute {
+getOfClient(ctx, ...) MAttribute[]
+get(ctx, M_Attribute_ID) MAttribute
+getMAttributeValues() MAttributeValue[]
+getMAttributeInstance(M_AttributeSetInstance_ID) MAttributeInstance
+setMAttributeInstance(id, value)
+isAttributeValueTypeReference() boolean
#beforeSave(newRecord) boolean
#afterSave(newRecord, success) boolean
+markImmutable() MAttribute
}
class MAttributeValue {
+toString() String
}
class X_M_Attribute {
<<generated>>
}
class X_M_AttributeValue {
<<generated>>
}
class PO {
<<abstract>>
}
MAttribute --|> X_M_Attribute
MAttributeValue --|> X_M_AttributeValue
X_M_Attribute --|> PO
X_M_AttributeValue --|> PO
MAttribute --> MAttributeValue : has many (List type)
MAttribute --> MAttributeInstance : instance values
パッケージ: org.compiere.model
ソースファイル: org.adempiere.base/src/org/compiere/model/MAttribute.java / MAttributeValue.java
関連DBテーブル
Section titled “関連DBテーブル”M_Attribute(属性)
Section titled “M_Attribute(属性)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_Attribute_ID | ID | PK | 属性ID | 主キー |
| AD_Client_ID | TableDirect | Y | クライアント | |
| AD_Org_ID | TableDirect | Y | 組織 | |
| Name | String(60) | Y | 名称 | 識別子 |
| AttributeValueType | List(1) | Y | 属性値タイプ | S/N/L/D/R/C、デフォルト S |
| IsInstanceAttribute | YesNo | Y | インスタンス属性 | |
| IsMandatory | YesNo | Y | 必須 | |
| AD_Reference_ID | Table | N | リファレンス | R 型で使用 |
| AD_Reference_Value_ID | Table | N | リファレンスキー | Table/List 時に指定 |
| AD_Val_Rule_ID | TableDirect | N | ダイナミックバリデーション | |
| DateFormat | String(20) | N | 日付書式 | D 型で使用 |
| DefaultValue | String(2000) | N | Default Logic | ; 区切り |
| M_AttributeSearch_ID | TableDirect | N | 属性検索FK | 共通検索属性への割当 |
| EntityType | Table(40) | N | エンティティタイプ | 辞書同期の所有区分 |
M_AttributeValue(属性値)
Section titled “M_AttributeValue(属性値)”| カラム名 | 型 | 必須 | 説明 | 備考 |
|---|---|---|---|---|
| M_AttributeValue_ID | ID | PK | 属性値ID | 主キー |
| M_Attribute_ID | TableDirect | Y | 属性FK | 親リンク |
| Value | String(40) | Y | 検索キー | 一意 |
| Name | String(60) | Y | 名称 | 識別子 |
| Description | String(255) | N | 説明 |
erDiagram
M_Attribute ||--o{ M_AttributeValue : "list values"
M_Attribute ||--o{ M_AttributeUse : "used in"
M_AttributeSet ||--o{ M_AttributeUse : "contains"
M_Attribute ||--o{ M_AttributeInstance : "instance values"
M_AttributeSearch ||--o{ M_Attribute : "search grouping"
ビジネスロジック
Section titled “ビジネスロジック”beforeSave()(保存前チェック)
Section titled “beforeSave()(保存前チェック)”MAttribute.beforeSave() の処理(ソース根拠):
- 権限チェック: 新規レコード、またはリファレンス型(
ATTRIBUTEVALUETYPE_Reference)の場合、MRole.getDefault().isAccessAdvanced()でなければActionNotAllowedHereエラーで保存を拒否 - 名称重複チェック: 名称変更時、同一クライアント内のテーブル属性用途で重複名があると
UniqueAttributeエラーで保存を拒否
afterSave()(保存後処理)
Section titled “afterSave()(保存後処理)”非インスタンス属性からインスタンス属性への変更時、M_AttributeUse を介してこの属性を含む M_AttributeSet の IsInstanceAttribute を SQL 一括更新で 'Y' に設定します。
属性値の読み込み
Section titled “属性値の読み込み”getMAttributeValues() は属性値タイプが List(L)の場合のみ M_AttributeValue を読み込み、先頭に null 要素(未選択)を付加した配列を返します。属性インスタンスへの値設定は setMAttributeInstance() のオーバーロード(String / BigDecimal / int / KeyNamePair / Timestamp / 複数選択)で行います。
拡張ポイント
Section titled “拡張ポイント”- Model Validator: 属性値の形式チェックや命名規則などの独自制約を
M_Attribute/M_AttributeValueの保存時に追加できます。 - Callout: gw_column.tsv 上、両テーブルに標準の Callout は定義されていません。
- ダイナミックバリデーション(AD_Val_Rule_ID): リファレンス型属性の選択肢を SQL 条件で動的に絞り込めます。コード変更なしで設定可能です。
関連プロセス
Section titled “関連プロセス”リファレンスページ・メニュー上、このウィンドウ固有の関連プロセスはありません。
関連ドキュメント
Section titled “関連ドキュメント”iDempiereカスタマイズのご相談
Section titled “iDempiereカスタマイズのご相談”品目属性は Model Validator やダイナミックバリデーションでコア改変なしに拡張できます。属性セット設計・ロット/シリアル追跡の導入もご相談ください。
As-Link株式会社では、OSGiプラグインによる安全なカスタマイズを提供しています。