前回の記事で、kintoneの自動計算フィールドが #CONVERT!
エラーを起こしてその後の自動計算が止まった、という話を書きました。
今回はその対策として、「そもそもおかしい入力をさせない仕組み」として
gusuku Customineの正規表現チェックを導入した話です。
そもそも何が問題だったか
- kintoneの数値フィールドに、ユーザーが全角や文字列を入れてしまい
- 計算式が動かず
#CONVERT!
エラーが発生 - 結果、他の自動処理も止まってしまった
今回やったこと:入力チェックの仕組みを入れる
使用したアクション
※パラメータは例です
- gusuku Customine:正規表現でエラーチェックを行う
- 対象フィールド:数値フィールド(単価など)
- 正規表現:
^\d+$
(先頭から末尾まで半角数字のみ) - エラーメッセージ:
半角数字だけで入力してください
公式ドキュメント 正規表現でエラーチェックを行う
結果
- ユーザーが文字列や全角数字を入れると、即エラー表示
- 不正な値が登録される前にブロックできた
-
#CONVERT!
エラー、編集画面で値修正後は出なくなりました!! - 保存キャンセルのカスタマイズと組み合わせてもよさそう
補足:正規表現って何?という方向けに簡単解説
書き方 | 意味 | 今回の使い方例 |
---|---|---|
\d |
数字1文字 |
\d+ で1文字以上の数字 |
^ |
入力の先頭 |
^ から始まる文字列 |
$ |
入力の末尾 |
$ で終わる文字列 |
+ |
1文字以上の繰り返し | 数字1文字以上でOK |
つまり、^\d+$
は「最初から最後まで半角数字しかないこと」を意味しています。
正規表現は最悪Chat-GPTに「JavaScriptで[入力させたい値の条件]の正規表現出して!」と聞けば大体正しいのを返してくれます。
ただし:弾くだけじゃなく「別の処理をしたい」時もある
もちろん、エラーで弾いて終わり!でもいいんですが、
「この入力おかしいな?」と感じたら、別の処理をしたい場面ってありませんか?
たとえば:
- おかしな値なら「金額」フィールドを空欄にする
- 入力がミスっぽかったら「確認フラグ」をONにする
- 管理者に通知を飛ばす
gusuku Customineでは、「正規表現にマッチするかどうか」を条件にして、 こういった柔らかい分岐を組むことができます。
「フィールドにエラーがあるならば」ではうまく動かなかった話
最初、「エラーがあるかどうかを拾って処理分岐すればいいじゃん!」と思って フィールドにエラーがあるならばという条件を使ってみたんですが……
全く反応しませんでした。
(なんでぇ???😇)
想定していた動き
- 正規表現でエラーを出す
- そのフィールドがエラー状態になる
- 「エラーがある」条件にヒットする
……と思ったら、3で失敗しました😇
おそらくの原因(※推測)
-
フィールドにエラーがあるならば
は、
gusuku Customine 内部で発生した“ロジックエラー” を対象にしていて、 - 「正規表現でエラーチェック(v2)」で出すエラーは対象外だったのかもしれません。
完全に把握できたわけではないので、これはまた別途調べたいところです。(ご存じの方居られましたら是非コメントください……)
解決策:エラーになったフィールド名を自分で拾って判定する!
正規表現でエラーが出たとき、実は…
「どのフィールドがエラーだったか?」のフィールドコード一覧をリスト形式で取得できるんです!
これを使って、こんなワークアラウンドをしました👇
やったこと(ワークアラウンド手順)
-
正規表現エラーの結果(フィールドコード一覧)を、一時的なフィールドに転記
例:["unit_price", "quantity"]
-
フィールド値が特定の値ならばで「その中に 'unit_price' が含まれているか」チェック
→unit_price
がエラーだったら、金額フィールドをクリアしたり、フラグをONにしたり
この時、条件は「含まれる」にして、フィールドごとにgusukuのアクションを作成、フィールドコードを直接gusuku側に設定しておきました -
処理開始時、ログ用フィールドはクリアしておくと都度判定が行えます
-
あとはエラー時の処理をつなげてください。
(この時の私はエラーであるという結果値を別フィールドに入力してその値を基に自動計算を走らせました)
この方法のメリット
-
フィールドにエラーがある
条件を使わなくても 正確に分岐できる - 対象フィールドが複数あっても 柔軟に判定できる
- 「見た目でエラー」も含めてちゃんと拾える
まとめ
- gusuku Customineの「正規表現でエラーチェックを行う」は、入力ミスを防いで #CONVERT! エラーを未然に防ぐ強い味方!
-
フィールドにエラーがある
条件はちょっとクセがあるので注意! - フィールドコードのリストを使ったワークアラウンドで回避可能!
おまけ:今回使った正規表現チートシート
チェックしたい内容 | 正規表現 | 備考 |
---|---|---|
半角数字のみ | ^\d+$ |
数字だけ許可 |
電話番号(10~11桁) | ^\d{10,11}$ |
ハイフンなし |
半角英数字のみ | ^[a-zA-Z0-9]+$ |
記号や全角不可 |
ご参考になれば嬉しいです!
同じように「うまく拾えないな?」と悩んでいる方のお役に立てば…!
参考リンク・使用ドキュメント
-
📄 gusuku Customine|正規表現でエラーチェックを行う
https://docs-customine.gusuku.io/ja/actions/error_check/regex_check_v2/ -
📄 gusuku Customine|フィールドにエラーがあるならば
https://docs-customine.gusuku.io/ja/conditions/condition_field/if_field_error/ -
📄 gusuku Customine|フィールド値が特定の値ならば(文字列一致含む)
https://docs-customine.gusuku.io/ja/conditions/condition_field/field_value_condition/ -
🧾 前回記事:kintoneで #CONVERT! エラーが出て、自動計算フィールドが機能しなくなった話
https://qiita.com/EYnoco/items/0ac3bbad3aa55255f8fe