5.5.1. IM-BloomMakerにおける変数の仕組みと注意点¶
5.5.1.1. 双方向バインディング¶
IM-BloomMakerでは、エレメントの値と変数値が双方向に影響しあいます。これを「双方向バインディング」と呼びます。エレメントの状態が変化することによってエレメントに紐づけた変数の値を変更したいとき、エレメントでの変更を監視して変数に代入する必要はありません。また、逆に変数の値が変化したとき、エレメントに対して変数の値を適用しなおす必要もありません。これらの処理はIM-BloomMakerによって自動的に行われるため、エレメントの状態が変化した場合は変数へ、変数の値が変化した場合はエレメントへ、即時に反映されます。この仕組みにより、IM-BloomMakerでは画面上の部品と内部変数との値のやりとりを行うための処理を減らすことができ、エレメントを変更してもバインドする変数が変わらなければ、アクションやカスタムスクリプトの修正が不要です。
5.5.1.2. 変数の自動型変換¶
変数のデータ型は自動で変換が行われます。JSONエディタ上における変換の対応表を示します。JSONエディタの利用方法は「JSON形式を用いた代入値の設定」を参照してください。<JSONエディタ上における型変換の対応表>
元から変数に設定されているデータ型 JSONエディタから入力する代入値の型 文字列 整数 浮動小数点数 高精度小数 真偽値 日付・時刻 マップ 文字列 - 整数 → 文字列 浮動小数点数 → 文字列 高精度小数 → 高精度小数 真偽値 → 文字列 日付・時刻 → 日付・時刻 マップ → 文字列 整数 文字列 → 整数 - 浮動小数点数 → 浮動小数点数 高精度小数 → 高精度小数 真偽値 → 整数 日付・時刻 → 整数 マップ → 整数 浮動小数点数 文字列 → 浮動小数点数 整数 → 浮動小数点数 - 高精度小数 → 高精度小数 真偽値 → 浮動小数点数 日付・時刻 → 浮動小数点数 マップ → 浮動小数点数 真偽値 文字列 → 真偽値 整数 → 真偽値 浮動小数点数 → 真偽値 高精度小数 → 真偽値 - 日付・時刻 → 真偽値 マップ → 真偽値 マップ 文字列 → マップ 整数 → マップ 浮動小数点数 → マップ 高精度小数 → マップ 真偽値 → マップ 日付・時刻 → マップ - IM-BloomMakerは通常ブラウザで扱えない特殊な型を使用しています。そのため、IM-BloomMakerで作成した別のコンテンツや外部サービスのAPIなど、コンテンツ外に変数の値を受け渡す場合は、ブラウザで取り扱える一般的な形式に変換が行われます。
高精度小数
この型の変数値は、文字列に変換されます。割り切れない数(1/3など)は、分数表記に変換されますので、変数値の受け取り側が分数表記に対応していない場合は、正しく値の受け渡しができません。この場合、浮動小数点数型の変数に値を入れ替えてください。ただし、特に割り切れない数を取り扱った場合、小数の精度が低下し桁落ちが発生することがあります。日付・時刻
この型の変数値は、ISO8601形式の文字列に変換され、タイムゾーン情報も一緒に送信されます。変数値の受け取り側が ISO8601形式に対応していない場合は、正しく値の受け渡しができません。受け取り側がエポックミリ秒を想定している場合、整数型の変数に値を入れ替えてください。ただし、エポックミリ秒にはタイムゾーン情報が含まれないため、受け取り側でタイムゾーンが変わる場合があります。IM-LogicDesignerに日付・時刻型の変数値を受け渡す場合は、タイムゾーンをサポートしたimdatetime型を入力値として定義してください。 date型などタイムゾーンをサポートしていない型を使用すると、システムタイムゾーンで扱われるため、表示上の日付や時刻にずれが生じる場合があります。基準日のような「日付のみ」を扱う場合、IM-BloomMakerの日付入力エレメントでは、アカウントコンテキストのタイムゾーンで0時として日時が設定されます。例えば日本の標準時(GMT+09:00)の場合、日付で「2022年12月1日」を表したときは、変数値には「2022-12-01T00:00:00+0900」が代入されます。IM-LogicDesignerのような外部とのデータ連携で「日付のみ」を扱う場合は、連携元と連携先でログインユーザのアカウントコンテキストのタイムゾーンに統一するようにしてください。
5.5.1.3. マップ型からマップ型への代入¶
マップ型からマップ型に変数の代入を行う場合、デザイナの変数タブで定義されているキーの設定によって、以下のように動作が変わります。
代入元に存在するキーが代入先に存在しない場合
代入先に定義されていないキーについては、代入時に切り捨てられます。例えば key1, key2 が定義されているマップ型の変数に、以下のJSONと同等の値を代入します。{"key1": "foo", "key2": "bar", "key3": "baz"}この場合、代入先の変数には key3 の値は代入されません。代入元に存在しないキーが代入先に存在する場合
代入先に定義されているキーにおいて代入元から渡されなかった場合は、自動的に null が代入されます。例えば key1, key2, key3 が定義されているマップ型の変数に、以下のJSONと同等の値を代入します。{"key1": "foo", "key2": "bar"}この場合、代入先の変数には key3 のキーが自動的に補完され、値は null が代入されます。