Implem / Implem.Pleasanter

Pleasanter is a no-code/low-code development platform that runs on .NET. You can quickly create business applications with simple operations.
https://pleasanter.org
GNU Affero General Public License v3.0
511 stars 81 forks source link

拡張計算式を入れると、レコード新規作成時にエラーとなる #539

Closed kenichi-fk closed 1 month ago

kenichi-fk commented 2 months ago

計算式(拡張)に以下の式を入力して同期すると、期待する文字列(アカウント名の一部をマスクしたもの)が目的の列(種別は説明)に設定されます。

$REPLACE(アカウント名,4,$LEN(アカウント名)-4,'***') // (1)

ところが、レコードの新規作成を行うと、新規作成画面になった途端「アプリケーションで問題が発生しました。」と表示され、新規作成ができません。 (なお、計算式の設定で「エラーを表示する」のチェックを外すと、新規作成時には目的の列に「Invalid Parameter」の文字列が設定されます) SysLogsテーブルを確認すると、Method列に「new:OnException」、ErrMessage列に「Exception: Formula error Invalid Parameter」とありました。

計算式でエラーになっていると思い、$IFERROR関数、$ISERRORや関数を使用したところ、新規作成時のエラーは解消しました。しかし、期待する計算結果が得られません。

$IFERROR($REPLACE(アカウント名,4,$LEN(アカウント名)-4,'***') ,'') // (2)
$IF($ISERROR($REPLACE(アカウント名,4,$LEN(アカウント名)-4,'***')),'',$REPLACE(アカウント名,4,$LEN(アカウント名)-4,'***')) // (3)

まとめ

(2),(3)の計算式の結果を見る限り、(1)の計算式はエラーと判断されている様子です。 しかし、(1)の計算式は期待する計算結果が得られます。それなのに(1)はなぜ新規作成時にエラーとなるのでしょうか?

kenichi-fk commented 1 month ago

自己解決しました。

勘違いしておりました。

(1) では、計算式の同期により期待する計算結果が格納されるが新規作成時にエラー

-> 新規作成時は、アカウント名の初期値が空欄なので、$LEN(アカウント名)-4 = -4 となり、$REPLACE関数の引数エラーとなる。

以上。