HOME > 機能 > トリガ

トリガ

概要

トリガとは、データベースに登録(INSERT)や更新(UPDATE)が発生したタイミングで、自動的に指定の処理を発動させる機能です。
一つの処理をきっかけに別の処理を動かすことから、「引き金」を意味するトリガ(Trigger)と呼ばれ、一般的なデータベース操作として利用されています。


スパイラルでは、登録/更新するデータの数値計算や文字結合ができる「演算トリガ」と、他のデータベースの値を取得し、登録データに含められる「ルックアップトリガ」を設定できます。


関連リンク
演算トリガ
ルックアップトリガ

目次

 1. 演算トリガ
 2. ルックアップトリガ

1. 演算トリガ

条件分岐(if)、四則演算、文字列結合(CONCATENATE)、文字列操作ができるトリガです。




<例えばこんなとき!>
「有給休暇申請」フォームから申請があった際に、社員DBの「有給残日数」を自動計算する。




2. ルックアップトリガ

特定のフィールドに対して、あらかじめ設定した条件により他のDBの値を格納する「Vlookup関数」ができるトリガです。




<例えばこんなとき!>
「経費精算」を申請するフォームにて、「社員番号」を入力するだけで社員DBを参照して名前と部署を同時に新規登録する。


2. トリガ設定

トリガはデータベースに対して設定を行います。
 
DB一覧から設定するデータベースの「トリガ設定」に進みます。

 
 
レコードに登録(INSERT)が発生した際に実行されるトリガ、更新(UPDATE) が発生した際に実行されるトリガをそれぞれ設定します。
「新規作成」からトリガの種別、作成方法を選択して「作成」に進みます。

 

(1)演算トリガ設定

【例】「有給休暇」を申請するフォームから登録があった際に、「有給残日数」を自動計算する更新タイプの演算トリガ

トリガ名を入力し「設定」へ進みます。

 
演算結果格納フィールドとして、【有給残日数】フィールドを選択して「追加」を押すと演算式を設定する画面が表示されます。

 
有給残日数を計算する演算式を設定します。

【操作手順】
 ア. 「フィールド」から「有給残日数」を選択
 イ. 「ADD」をクリックし、「有給残日数」のフィールドコード(f000005357)を演算式に反映
 ウ. 「-(マイナス)」をクリックし、演算式に反映
 エ. 「フィールド」から「有給申請日数」を選択
 オ. 「ADD」をクリックし、「有給申請日数」のフィールドコード(f000005358)を演算式に反映
 カ. 演算式が確定したら「保存」をクリック

 

(2)ルックアップトリガ設定

【例】「経費精算」を申請するフォームにて、「社員番号」を入力するだけで社員DBを参照して
   名前と部署を同時に新規登録するルックアップトリガ
 
参照DBは社員DBを選択肢、トリガ名を記入し「保存して詳細設定へ」に進みます。

 
社員番号による抽出条件を以下の手順で設定します


 
【操作手順】
 ア. 抽出条件で、マッチングさせる「社員ID」と「社員番号」をそれぞれ選択する
 イ. 「条件を追加」をクリックし、マッチングさせたフィールドの組み合わせを追加する
 ウ. 登録フィールドで、トリガDBのフィールドに合わせて「名前」「部署」をそれぞれ選択する
 エ. 「保存」をクリックして、設定完了
 
 
<例えばこんなとき!>
演算トリガとルックアップトリガを組み合わせれば様々な応用にフィットします。
例えば商品Aの購入フォームから数量を入力すれば、商品マスタからルックアップトリガで単価を参照した上で、
購入の合計金額を演算トリガにて設定できます。

3. 仕様

(1)設定上限

トリガ設定数上限1DBに対して新規登録、更新ともに10設定まで
演算式設定数上限1DBに対して新規登録、更新ともに50設定まで


(2)演算トリガ

  • DBタイプ別対応表
DBタイプ新規登録更新削除
通常DB [normal]×
履歴DB [history]×
仮想DB(フィルタ型) [view_1]×××
仮想DB(連携型) [view_n]×××
仮想DB(集合型) [union]×××
ステップアンケート|DB [inquire]×××
ガジェット [gadget]×××
ストップDB [stop]×××
画像型 [attachment]×××
トピックDB [forum.topic]×××
コメントDB [forum.comment]×××
トランザクションDB [transaction]××


  • 演算式

演算結果格納フィールドに格納する演算式を設定します。
演算トリガフィールド別対応表(PDF)


※ 演算結果格納フィールドのフィールドタイプによって格納できる値が異なるため、それぞれのタイプに合わせた式を構築する必要があります。
※ セレクト、マルチセレクト、マルチセレクト(128項目)のフィールドは設定されているラベルの値のみ、固定値として演算式に格納できます。
※ 曜日(○曜日)のフィールドは日から月までのいずれかの値を固定値として演算式に格納できます。
※セミコロンを式に使用できません。
※式として成立しないもの、不正な文字列が存在するものなどは設定できません。
 演算式には以下の項目を利用できます。


【演算式に利用可能な項目】
・演算トリガフィールド別対応表に存在するフィールド
・演算子 (以下参照)
・関数 (以下参照)
・シングルクォーテーションで囲んだ固定文字列
・数字
・括弧()
・NULL
・IS NULL、IS NOT NULL(値の存在判定時に使用)


  • 式の操作

演算結果格納フィールドでは以下のような設定項目が表示されます。

(演算結果格納フィールドでセレクトフィールド、曜日以外を選択した場合)


・フィールド
演算式及び条件式に使用するフィールドを選択します。


・固定値
固定値を入力できます。


・関数
演算式及び条件式に使用できる関数を選択できます

関数入力例
文字数length(対象の文字列(1))
関数 : length('111-222-333')  結果 : 11
バイト数octet_length(対象の文字列(1))
関数 : octet_length('番号111-222-333') 結果 : 15
絶対値abs(引数(1))
関数 : abs:(-12.2) 結果 : 12.2
四捨五入(最近接偶数への丸め)round(引数(1), 引数(2))
関数 : round(12.456, 2)  結果 : 12.46
切り捨てtrunc(引数(1), 引数(2))
関数 : trunc(12.456, 2) 結果 : 12.45 切り上げの場合:trunc(12.456 + .009)
文字列検索strpos(対象の文字列(1), 検索する文字列(2))
関数 : strpos('111-222-333', '-') 結果 : 4
文字列分割split_part(対象の文字列(1), 分割する文字列(2)), 取得する要素番号(3))
関数 : split_part('111-222-333', '-' , 1)  結果 : 111
文字列切り出しsubstr(対象の文字列(1), 開始位置(2)、切り出し文字数(3))
関数 : substr('111-222-333', 5 , 3)  結果 : 222
文字列置換replace(対象の文字列(1), 変換前文字列(2)、変換後文字列(3))
関数 : replace('111-222-333', '-' , '@') 結果 : 111@222@333
最大値greatest(引数(1)、引数(2)・・・(30))
関数 : greatest(15, 20.5, 24.5) 結果 : 24.5
最小値least(引数(1)、引数(2)・・・(30))
関数 : least(15, 20.5, 24.5) 結果 : 15


・演算子
式に使用できる演算子を選択できます。

演算子意味入力例
数字同士で加算をする$intA$ + 1
数字同士で減算をする$intA$ - 1
×数字同士で乗算をする$intA$ * 2
÷数字同士で除算をする$intA$ / 2
数字同士で除予算をする$intA$ % 2
先に計算したい式を囲む$intA$ * ($intB$ - 2)
先に計算したい式を囲む$intA$ * ($intB$ - 2)
||文字列を結合する$textA$ || '_example'
NULL値がNULLかどうかを判定する$textA$ IS NULL
NOT式を否定するNOTNOT $textA$ IS NULL または $textA$ IS NOT NULL
AND二つの式の論理積を求める$textA$ IS NULL AND $intA$ > 0
OR二つの式の論理和を求める$textA$ IS NULL OR $intA$ > 0
二つの値が等価である事を表す$textA$ = $textB$
!=二つの値が等価でない事を表す$textA$ != $textB$
>=辺の値が右辺の値より大きいか等しい事を表す$intA$ >= $intB$
<=右辺の値が左辺の値より大きいか等しい事を表す$intA$ <= $intB$
左辺の値が右辺の値より大きい事を表す$intA$ > $intB$
右辺の値が左辺の値より大きい事を表す$intA$ < $intB$


(演算結果格納フィールドで曜日を選択した場合)


・曜日
演算結果格納フィールドが曜日(○曜日)の場合、格納する固定値を選択できます。


(演算結果格納フィールドでセレクトフィールドを選択した場合)


・ラベル
演算結果格納フィールドがセレクト、マルチセレクト、マルチセレクト(128項目)の場合、格納する固定値を選択できます。

  • 演算トリガ制限事項
ア. 使用できない記号

・セミコロン「 ; 」


イ. 特定の場合の書き方
項目書き方
固定値で文字列を使用するクォーテーションでくくる'テスト' || $mm_text$
文字列内でクォーテーションを使用する文字列内のクォーテーションは
バックスラッシュでエスケープする
'\'テスト\'' || $mm_text$
値がNULLかどうかを判定する・ *** IS NULL (NULLならtrue)
・ *** IS NOT NULL (NULLでなければtrue)
-
性別の固定値・男性 : '男'
・女性 : '女'
-
日付計算、時間計算をする
場合の固定値
・ 年 : '1years' or '-1years'
・ 月 : '1months' or '-1months'
・ 週 : '1weeks' or '-1weeks'
・ 日 : '1days' or '-1days'
・ 時 : '1hours' or '-1hours'
・ 分 : '1minutes' or '-1minutes'
・ 秒 : '1seconds' or '-1seconds'
$mm_regist_date$ + '-1years' +'1months'
予約語現在日時の取得 : 'now''now'


ウ. 日付計算の制限

・日付型のフィールドと日付型のフィールドを計算することはできない。


例)× $mm_regist_date$ + $mm_date_ymdhhmmss$
  × $mm_date_ymdhhmmss$ - '-mm_date_ymd'


・日付型のフィールドを比較する場合、比較する2つ以上のフィールドのタイプ(型)が完全に一致しなければならない。


例)○ $mm_date_ymdhhmmss$ > $mm_date_ymdhhmmss$
  × $mm_date_ymdhhmmss$ > $mm_date_ymdhhmm$


※比較する2つ以上のフィールドのタイプが異なる場合、
 同一のフィールドタイプに値を格納するトリガを作成の上比較してください。


エ. 時間計算の固定値の制限

・固定値を時間計算に使用する場合、+ を使用することはできない。


例)× $mm_interval_ym$ + '1day'
  ○ $mm_interval_ym$ - '-1day'


オ. 時間計算の計算制限

・時間型(mm_interval_*)から日付型(mm_date_*、mm_regist_date, mm_optout)を足したり引いたりできない。


例)× $mm_interval_ym$ + $mm_date_ymdhhmmss$
  × $mm_interval_ym$ - $mm_date_ymdhhmmss$


カ. オプトアウトフィールドの固定値の制限

・固定値をオプトアウトフィールドとの計算に使用する場合、- を使用することはできない。


例)× $mm_optout$ - '1days'
  ○ $mm_optout$ + '-1days'


キ. 数値計算の制限

・数値計算する際、0で割る計算をすると、必ずエラーになる。
 ※ 割るフィールドの値が0になる際も同じくエラーになる。


例)$mm_integer$ / 0
  $mm_real$ / $mm_integer$ ← $mm_integer$に0が入る


ク. 関数の制限

 ・引数には適切な型の値(もしくはフィールド、返り値が適切な型である関数)を設定する必要がある。


 例)○substr ($mm_number32$, 0 , $mm_integer$)
   ○substr ($mm_number32$, 0, octet_length($mm_email$))
   ○substr ($mm_number32$, 0, octet_length($mm_email$))


 ・四捨五入の関数「round()」において、端数処理は「最近接偶数への丸め」である。
  例)2つの整数間のちょうど真ん中の場合、偶数に丸められる。
    「39.5」→40.
    「50.5」→51ではなく、50。

 

(2)ルックアップトリガ

  • 参照データの抽出条件

・ 同一のフィールドタイプのみ対応付けができます。
・抽出条件は、必ず完全一致となります。
 
 

  • 参照データの抽出条件

・ 同一のフィールドタイプのみ対応付けができます。
・値がそのまま格納されます。
 
 

  • DBタイプ別対応表
DBタイプトリガDBとして対応参照DBとして対応
通常DB [normal]
履歴DB [history]
仮想DB(フィルタ型) [view_1]×
仮想DB(連携型) [view_n]×
仮想DB(集合型) [union]××
ステップアンケートDB [inquire]××
ガジェット [gadget]××
ストップDB [stop]××
画像型 [attachment]××
トピックDB [forum.topic]××
コメントDB [forum.comment]××
トランザクションDB [transaction]

 

  • フィールド別対応表
フィールド名対応フィールド名対応
メールアドレス登録日時
メールアドレス(大・小文字を無視)日付(○年○月○日 ○時○分○秒)ト
性別日付(○年○月○日 ○時○分)
郵便番号日付(○年○月○日 ○時)
都道府県日付(○年○月○日)
電話番号日付(○年○月)
通貨月日(○月○日)
セレクト時刻(○時○分)
マルチセレクト曜日(○曜日)
マルチセレクト(128項目)テ時間(○年○カ月)
テキストフィールド(32 bytes)時間(○日)
テキストフィールド(32 bytes)かな時間(○週間)
テキストフィールド(32 bytes)カナクリックカウント, HTML開封チェック
テキストフィールド(32 bytes)ローマ字不正アドレスフラグ
テキストフィールド(64 bytes)モバイルドメインフラグ
テキストフィールド(64 bytes)かな重複フラグ
テキストフィールド(64 bytes)カナオプトアウト
テキストフィールド(64 bytes)ローマ字配信エラート
テキストフィールド(128 bytes)エラーカウント
テキストエリア(256 bytes)パスワード
テキストエリア(512 bytes)簡易パスワード
テキストエリア(1024 bytes)メッセージダイジェスト(MD5)
テキストエリア(2048 bytes)メッセージダイジェスト(SHA1)
テキストエリア(4096 bytes)メッセージダイジェスト(SHA256)
テキストエリア(8192 bytes)ルックアップキー
数字・記号・アルファベット(6 bytes)緯度経度
数字・記号・アルファベット(32 bytes)画像(100KiB)
整数ファイル
実数
ブーリアン

 

  • エラーメッセージ
エラー発生場所/
エラー内容
抽出条件のフィールドの
入力値がNULLの場合
複数レコード抽出
された場
1レコードも抽出
されなかった場合
DBオペレーション【ルックアップトリガ】
抽出条件のフィールドの値にNULLが使用されています
【ルックアップトリガ】
参照するレコードが複数抽出されました
【ルックアップトリガ】
参照するレコードがありませんでした
データ登録【ルックアップトリガ】
抽出条件のフィールドの値にNULLが使用されています
【ルックアップトリガ】
参照するレコードが複数抽出されました
【ルックアップトリガ】
参照するレコードがありませんでした
登録フォーム
(新規作成)
登録できませんでした
(エラーコード:2200)
登録できませんでした
(エラーコード:2201)ト
登録できませんでした
(エラーコード:2202)
登録フォーム
(更新)
更新できませんでした
(エラーコード:2200)
更新できませんでした
(エラーコード:2201)
更新できませんでした
(エラーコード:2202)
会員情報ページ
(マイエリア)
更新できませんでした
(エラーコード:3355)
更新できませんでした
(エラーコード:3356)
更新できませんでした
(エラーコード:3357)
一覧表編集更新できませんでした更新できませんでした更新できませんでした

 

  • ルックアップトリガ制限事項

【連携による抽出ルールを使用する際の制限事項】
DB連携で連携したデータを発動条件とするルックアップトリガを設定した場合、
「ルックアップトリガ発動」→「DB連携」という順番で処理が行われ、
データが連携される前にルックアップトリガが発動されてしまうため、
ルックアップトリガが発動条件にマッチせず、発動しません。
この事象に関する詳細内容は以下のア~オの通りです。
ア. DB連携(間接連携)を設定し、詳細設定のマスタDBにて
 「データ登録時に、マスタキーに入力された値を元に参照元DBと自動連携:自動連携する」を選択する。
イ. マスタDBに対して、抽出ルールで「連携DBによる抽出」を作成する。
ウ. 参照元DBに参照するデータを登録する。
エ. マスタDBに対して、ルックアップトリガ(新規登録)を設定する。
  ルックアップトリガの発動条件には「イ」で作成した抽出ルールを使用する。
オ. マスタDBに「ウ」で登録したデータと連携するデータを登録する。


最終更新日:2018/2/21