リファレンス

CEL 式

数式フィールド、検証ルール、表示条件、共有、フローの条件を支える式言語です。ObjectOS での使いどころ、いくつかの例、そして objectstack.ai にある言語の完全な説明を紹介します。

対応エディション

完全な仕様: objectstack.ai の Expressions (CEL)。このページはその要約です。ObjectOS での使いどころと、いくつかの例を示します。

ObjectOS は、定義に小さく安全な式が必要な場所で CEL(Common Expression Language)を使います。CEL には副作用も I/O もなく、サーバー上で評価されます。式からは、評価対象のレコードが record(その以前の状態が previous)として見え、実行ユーザーがいる場合はそのユーザーが current_user として見えます。

ObjectOS での使いどころ

場所式が決めること
数式フィールドレコードから導出されるフィールドの値
フィールドの requiredWhen、visibleWhen、readonlyWhenこのレコードでフィールドが必須か、表示されるか、編集できるか
検証ルール書き込みが拒否されるかどうか(検証ルール)
共有ルールユーザーのグループにどのレコードが付与されるか(レコードアクセス)
アクションの visible / disabledボタンが表示されるかどうか
フローの開始条件とその分岐フローが実行されるかどうか、どちらに進むか(フローと自動化)
フィールドの defaultValue新しいレコードの初期値

例

数式フィールド:明細行の合計:

subtotal: Field.formula({
  label: 'Subtotal',
  expression: F`record.quantity * record.unit_price`,
}),

検証:完了日は未来でなければならない。script ルールの condition は無効なレコードを記述します。これが true のとき、書き込みは拒否されます。

// One validation rule, an entry of the object's `validations`
{
  type: 'script',
  name: 'close_date_in_future',
  message: 'Close date must be in the future',
  condition: P`record.close_date <= today()`,
}

表示条件:商談が成立してから初めてフィールドを表示する:

close_reason: Field.textarea({
  label: 'Close reason',
  visibleWhen: P`record.stage == 'closed_won'`,
}),

フローの条件:金額が大きい場合だけ、レコード変更フローを開始する:

// The `config` of a `start` node; the rest of the flow is omitted (see Flows).
config: {
  objectName: 'opportunity',
  triggerType: 'record-after-update',
  condition: P`record.amount >= 1000`,
}

権限のチェック

ObjectStack 17.5 以降、current_user.can(object, verb) は、実行ユーザーがオブジェクト権限を持っているかを尋ね、そのユーザーの実効的な権限に基づいて答えます。

discount: Field.percent({
  label: 'Discount',
  defaultValue: cel`current_user.can('crm_quote', 'edit') ? 10 : 0`,
}),

サーバーは、選択肢の visibleWhen(ユーザーが選べない選択肢は invalid_option で拒否されます)、数式フィールド、CEL の defaultValue でこれに答えます。評価に権限のデータが伴わない場所(検証ルールがその一例です)では、can() は推測されるのではなく拒否され、式は失敗します。

式が間違っているとき

黙って失敗することはありません。形式が不正な式や、オブジェクトにないフィールドを指定する式は、場所と「もしかして」のヒントを示して os compile で失敗します。実行時には、不正な式は null や false に評価されるのではなく、原因を特定したエラーを投げます。そのため、数式の値やガードの判断を黙って壊すのではなく、ログと監査証跡に失敗が表れます。

関連項目