第44章 スプレッドシートのデシジョンテーブルの定義


スプレッドシート形式のデシジョンテーブル (XLS または XLSX) には、ルールデータを定義する 2 つの重要な領域、RuleSet 領域と RuleTable 領域が必要です。RuleSet 領域では、ルールセット名、ユニバーサルルール属性など、(このスプレッドシートだけでなく) すべてのルールをパッケージ全体に、グローバルに適用する要素を定義します。RuleTable 領域では、実際のルール (行) と、指定したルールセットのルールテーブルを構成する条件、アクション、その他のルール属性 (列) を定義します。スプレッドシート形式のデシジョンテーブルには RuleTable 領域を複数追加できますが、RuleSet 領域は 1 つだけとなります。

重要

通常は、デシジョンテーブルのスプレッドシートを 1 つだけアップロードする必要があります。これには、Business Central の 1 つのルールパッケージに必要なすべての RuleTable 定義が含まれます。異なるパッケージに複数のデシジョンテーブルのスプレッドシートをアップロードすることはできますが、同じパッケージに複数のスプレッドシートをアップロードすると、RuleSet 属性または RuleTable 属性が競合するコンパイルエラーが発生する可能性があるため、これは推奨されません。

デシジョンテーブルを定義する際は、以下のサンプルスプレッドシートを参照してください。

図44.1 配送料金のスプレッドシートデシジョンテーブル例

手順

  1. 新しいスプレッドシート (XLS または XLSX) の 2 列目または 3 列目 (サンプルの行 1) のセルに、RuleSet とラベルを付けます。左の列は、(任意で) 記述的メタデータに使用します。
  2. 右隣のセルに、RuleSet の名前を入力します。このルールセットには、ルールパッケージに定義する RuleTable ルールがすべて含まれます。
  3. RuleSet セルの下に、そのパッケージ内のすべてのルールテーブルにグローバルに適用するルール属性 (セルごとに 1 つ) を定義します。右のセルに属性値を指定します。たとえば、ラベルを Import にして、その右隣のセルに、その他のパッケージからデシジョンテーブルのパッケージにインポートするデータオブジェクトを指定します (形式は package.name.object.name)。サポートされるセルのラベルと値については、「RuleSet の定義」 を参照してください。
  4. RuleSet セルと同じ列で、RuleSet 領域の何行か下の新しいセルに、ラベル RuleTable を入力し (サンプルの行 7)、テーブル名も同じセルに入力します。この名前は、区別のために追加したルールの番号とともに、このルールテーブルに指定した全ルールの名前の最初の部分として使用されます。この自動命名ルールは、NAME 属性列を追加すると上書きできます。
  5. その下の 4 行には、必要に応じて以下の要素を定義します (サンプルの行 8-11)。

    • ルール属性: 条件、アクション、またはその他の属性。サポートされるセルのラベルと値については 「RuleTable の定義」 を参照してください。
    • オブジェクトタイプ: ルール属性が適用されるデータオブジェクト。同じオブジェクトタイプを複数の列に適用する場合は、複数のセルでオブジェクトタイプを繰り返すのではなく、(サンプルのデシジョンテーブルに示されるように) 複数のオブジェクトセルを 1 つのセルに結合します。オブジェクトタイプを結合すると、結合範囲の下にあるすべての列が、1 つのパターンに指定する一連の制約になり、1 度に 1 つのファクトに一致するようになります。オブジェクトを別の列で繰り返し使用すると、列ごとに別のパターンを作成でき、異なるファクトや同じファクトを一致させることができます。
    • 制約: オブジェクトタイプの制約。
    • 列ラベル: (任意) 見やすくするために説明を入力する列のラベル。使用しない場合は空白にします。

      注記

      オブジェクトタイプと制約セルの両方を追加する代わりに、オブジェクトタイプのセルを空のままにし、対応する制約セルに完全式を追加します。たとえば、オブジェクトタイプに Order、制約に itemsCount > $1 を (別々に) 追加する代わりに、オブジェクトタイプセルを空にして、制約セルに Order( itemsCount > $1) と入力できます。その他の制約セルでも同じです。

  6. 必要なルール属性 (列) をすべて定義したら、必要に応じて各列の各行に値を入力してルールを生成します (サンプルの行 12-17)。データのないセルは無視されます (条件やアクションなどが適用されません)。

    デシジョンテーブルのスプレッドシートにさらにルールテーブルを追加する場合は、前のテーブルの最後の行の後に 1 行空け、前のテーブルの RuleTable セルと RuleSet セルと同じ列のセルに、別の RuleTable のラベルを付け、このセクションの手順を繰り返して新しいテーブルを作成します (サンプルの行 19-29)。

  7. XLS または XLSX のスプレッドシートを保存して終了します。
注記

デフォルトでは、Business Central にスプレッドシートをアップロードすると、スプレッドシートワークブックの最初のワークシートだけがデシジョンテーブルとして処理されます。RuleTable 名とともに使用する各 RuleSet の名前は、同じパッケージの全デシジョンテーブルファイルで一意にする必要があります。

複数のワークシートを含むデシジョンテーブルを処理する場合には、スプレッドシートワークブックと同じ名前の .properties ファイルを作成します。.properties ファイルには、ワークシート名を CSV (コンマ区切りの値) 形式で指定したプロパティーシートを含める必要があります。以下の例を示します。

sheets=Sheet1,Sheet2
Copy to Clipboard Toggle word wrap

Business Central でデシジョンテーブルをアップロードすると、以下の例のように、サンプルスプレッドシートのルールが DRL ルールとして表示されます。

//row 12
rule "Basic_12"
salience 10
  when
    $order : Order( itemsCount > 0, itemsCount <= 3, deliverInDays == 1 )
  then
    insert( new Charge( 35 ) );
end
Copy to Clipboard Toggle word wrap
セルの値に使用するホワイトスペースの有効化

デフォルトでは、デシジョンテーブルのセルの値の前後にあるホワイトスペースのは、デシジョンエンジンがデシジョンテーブルを処理する前に削除されます。セルの値の前後に意図的にホワイトスペースのを保持するには、Red Hat Decision Manager のディストリビューションで drools.trimCellsInDTable システムプロパティーを false に設定します。

たとえば、Red Hat Decision Manager と Red Hat JBoss EAP を併用するには、以下のシステムプロパティーを $EAP_HOME/standalone/configuration/standalone-full.xml ファイルに追加してください。

<property name="drools.trimCellsInDTable" value="false"/>
Copy to Clipboard Toggle word wrap

Java アプリケーションに埋め込まれたデシジョンエンジンを使用する場合は、以下のコマンドでシステムプロパティーを追加してください。

java -jar yourApplication.jar -Ddrools.trimCellsInDTable=false
Copy to Clipboard Toggle word wrap

44.1. RuleSet の定義

デシジョンテーブルの RuleSet 領域のエントリーは、(そのスプレッドシートだけでなく) パッケージのすべてのルールに適用される DRL 制約およびルール属性を定義します。エントリーは、セルのペア (最初のセルにラベル、その右隣のセルに値) が縦方向に積み上げられます。デシジョンテーブルのスプレッドシートには、RuleSet 領域が 1 つだけあります。

以下の表は、RuleSet 定義でサポートされるラベルと値を示しています。

Expand
表44.1 サポートされる RuleSet の定義
ラベル使用法

RuleSet

生成した DRL ファイルのパッケージ名。任意。デフォルトは rule_table です。

最初のエントリーになります。

Sequential

true または falsetrue の場合は、ルールを上から適用する優先順位を使用します。

任意。1 つまで指定可能。1 つまで指定可能。省略すると、適用順は指定されません。

SequentialMaxPriority

整数値

任意。1 つまで指定可能。1 つまで指定可能。順次モードでこのオプションを使用して、優先順位の開始値を設定します。省略した場合のデフォルト値は 65535 です。

SequentialMinPriority

整数値

任意。1 つまで指定可能。順次モードでこのオプションを使用して、優先順位の最低値に違反していないかどうかを確認します。省略した場合のデフォルト値は 0 です。

EscapeQuotes

true または falsetrue の場合は、引用符がエスケープされ、DRL にそのまま表示されます。

任意。1 つまで指定可能。1 回まで指定可能。省略すると、引用符がエスケープされます。

IgnoreNumericFormat

true または falsetrue の場合、パーセントや通貨などの数値の形式は無視されます。

任意。1 つまで指定可能。省略した場合、DRL はフォーマットされた値を取ります。

インポート

別のパッケージからインポートする、コンマ区切りの Java クラスのリスト。

任意。繰り返して使用可能。

Variables

DRL グローバルの宣言 (型に変数名が続く)。グローバル定義が複数になる場合は、コンマで区切る必要があります。

任意。繰り返して使用可能。

関数

DRL 構文に準拠している 1 つまたは複数の関数定義。

任意。繰り返して使用可能。

Queries

DRL 構文に準拠している 1 つまたは複数のクエリー定義。

任意。繰り返して使用可能。

Declare

DRL 構文に準拠している 1 つまたは複数の宣言型。

任意。繰り返して使用可能。

Unit

このデシジョンテーブルから生成されたルールが属するルールユニットです。

任意。1 つまで指定可能。省略すると、ルールはユニットに属しません。

Dialect

Java または mvel。デシジョンテーブルのアクションで使用される方言。

任意。1 つまで指定可能。省略した場合には、java が課されます。

警告

Microsoft Office、LibreOffice、および OpenOffice で二重引用符のエンコード方法が異なり、コンパイルエラーが発生する場合があります。たとえば、“A" は失敗しますが、"A" は成功します。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat