0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kintoneの #CONVERT! 対策に!gusuku Customineの「正規表現でエラーチェック」で入力ミスを防止してみた話

Posted at

前回の記事で、kintoneの自動計算フィールドが #CONVERT! エラーを起こしてその後の自動計算が止まった、という話を書きました。

👉 kintoneで #CONVERT! エラーが出て、自動計算フィールドが機能しなくなった話

今回はその対策として、「そもそもおかしい入力をさせない仕組み」として
gusuku Customineの正規表現チェックを導入した話です。


そもそも何が問題だったか

  • kintoneの数値フィールドに、ユーザーが全角や文字列を入れてしまい
  • 計算式が動かず #CONVERT! エラーが発生
  • 結果、他の自動処理も止まってしまった

今回やったこと:入力チェックの仕組みを入れる

使用したアクション

※パラメータは例です

  • gusuku Customine:正規表現でエラーチェックを行う
  • 対象フィールド:数値フィールド(単価など)
  • 正規表現:^\d+$(先頭から末尾まで半角数字のみ)
  • エラーメッセージ:半角数字だけで入力してください

公式ドキュメント 正規表現でエラーチェックを行う

結果

  • ユーザーが文字列や全角数字を入れると、即エラー表示
  • 不正な値が登録される前にブロックできた
  • #CONVERT! エラー、編集画面で値修正後は出なくなりました!!
  • 保存キャンセルのカスタマイズと組み合わせてもよさそう

補足:正規表現って何?という方向けに簡単解説

書き方 意味 今回の使い方例
\d 数字1文字 \d+ で1文字以上の数字
^ 入力の先頭 ^ から始まる文字列
$ 入力の末尾 $ で終わる文字列
+ 1文字以上の繰り返し 数字1文字以上でOK

つまり、^\d+$ は「最初から最後まで半角数字しかないこと」を意味しています。
正規表現は最悪Chat-GPTに「JavaScriptで[入力させたい値の条件]の正規表現出して!」と聞けば大体正しいのを返してくれます。


ただし:弾くだけじゃなく「別の処理をしたい」時もある

もちろん、エラーで弾いて終わり!でもいいんですが、
「この入力おかしいな?」と感じたら、別の処理をしたい場面ってありませんか?

たとえば:

  • おかしな値なら「金額」フィールドを空欄にする
  • 入力がミスっぽかったら「確認フラグ」をONにする
  • 管理者に通知を飛ばす

gusuku Customineでは、「正規表現にマッチするかどうか」を条件にして、 こういった柔らかい分岐を組むことができます。


「フィールドにエラーがあるならば」ではうまく動かなかった話

最初、「エラーがあるかどうかを拾って処理分岐すればいいじゃん!」と思って フィールドにエラーがあるならばという条件を使ってみたんですが……

全く反応しませんでした。
(なんでぇ???😇)

想定していた動き

  1. 正規表現でエラーを出す
  2. そのフィールドがエラー状態になる
  3. 「エラーがある」条件にヒットする

……と思ったら、3で失敗しました😇


おそらくの原因(※推測)

  • フィールドにエラーがあるならば は、
    gusuku Customine 内部で発生した“ロジックエラー” を対象にしていて、
  • 「正規表現でエラーチェック(v2)」で出すエラーは対象外だったのかもしれません。

完全に把握できたわけではないので、これはまた別途調べたいところです。(ご存じの方居られましたら是非コメントください……)


解決策:エラーになったフィールド名を自分で拾って判定する!

正規表現でエラーが出たとき、実は…

「どのフィールドがエラーだったか?」のフィールドコード一覧をリスト形式で取得できるんです!

これを使って、こんなワークアラウンドをしました👇


やったこと(ワークアラウンド手順)

  1. 正規表現エラーの結果(フィールドコード一覧)を、一時的なフィールドに転記
     例:["unit_price", "quantity"]

  2. フィールド値が特定の値ならばで「その中に 'unit_price' が含まれているか」チェック
     → unit_price がエラーだったら、金額フィールドをクリアしたり、フラグをONにしたり
    この時、条件は「含まれる」にして、フィールドごとにgusukuのアクションを作成、フィールドコードを直接gusuku側に設定しておきました

  3. 処理開始時、ログ用フィールドはクリアしておくと都度判定が行えます

  4. あとはエラー時の処理をつなげてください。
    (この時の私はエラーであるという結果値を別フィールドに入力してその値を基に自動計算を走らせました)


この方法のメリット

  • フィールドにエラーがある 条件を使わなくても 正確に分岐できる
  • 対象フィールドが複数あっても 柔軟に判定できる
  • 「見た目でエラー」も含めてちゃんと拾える

まとめ

  • gusuku Customineの「正規表現でエラーチェックを行う」は、入力ミスを防いで #CONVERT! エラーを未然に防ぐ強い味方!
  • フィールドにエラーがある 条件はちょっとクセがあるので注意!
  • フィールドコードのリストを使ったワークアラウンドで回避可能!

おまけ:今回使った正規表現チートシート

チェックしたい内容 正規表現 備考
半角数字のみ ^\d+$ 数字だけ許可
電話番号(10~11桁) ^\d{10,11}$ ハイフンなし
半角英数字のみ ^[a-zA-Z0-9]+$ 記号や全角不可

ご参考になれば嬉しいです!
同じように「うまく拾えないな?」と悩んでいる方のお役に立てば…!


参考リンク・使用ドキュメント

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?