入力値チェックプラグインの編集について

多人数でデータを編集するとなると「表記ゆれ」があると困るのでサンプルの「入力値チェックプラグイン」を参考にプラグインを作っております。

こちらのサンプルをそのまま利用させて頂きますと、文字チェックを不要な項目も設定しないと使用できません。

ただ、使用者によっては全項目を使いたい方もいるので、使える内容は活かしつつ全項目を使用しなくとも利用できるようにしたいと考えております。

自分なりに config.js を変更し設定時の必須チェックを外すことはできましたが「項目を全て設定しておかないとレコードの保存ができない」という状態になってしまいました。

check_sample.js のどこかを変更すれば通るのかなと思いますが一日中試行錯誤してしみましたが項目追加や条件の変更などはできましたが、相変わらず設定時に全ての内容をセットしないとレコードの保存ができないのが解消されません。

javascript等もkintoneを触ることになり勉強をし始めたばかりの者ですが、よろしければご教授頂けますと幸いです

たつ さん

レコード保存時に、コンソール上にどのような表示が出ているか共有していただけませんか?
ないとは思いますが、フィールドに必須チェックが入っている可能性も考えられます。

HANSA様

ご連絡ありがとうございます。

コンソールというのはブラウザ「F12」押した画面でよろしいでしょうか。
上記内容が保存ボタンを押す度にと表示されます。

edit.js:113 Uncaught TypeError: Cannot set property ‘error’ of undefined
at Number01Check (download.do?contentId=346&type=DESKTOP_JS&pluginId=fbciilcnooalnjnjojgflckndgebodkm:40)
at download.do?contentId=346&type=DESKTOP_JS&pluginId=fbciilcnooalnjnjojgflckndgebodkm:226
at edit.js:248
at new qj (edit.js:116)
at ow (edit.js:248)
at edit.js:248
at f.Pt (edit.js:118)
at Hj (edit.js:120)
at Cj (edit.js:120)
at qj.Mw (edit.js:962)

問題のあるコード部分に飛べる部分を押下し、表示された部分を削ったりなんやらとしておりますがなかなか改善しません。
お手数をお掛け致しますがお知恵を貸して頂けますと助かります。

たつ さん

ありがとうございます。

エラー内容から推測すると、「エラーの初期化」を行っている部分でエラーが発生しているようです。
サンプルの中の郵便番号をチェックしている関数内で言うと以下の部分です。

rec[CONFIG_ZIP].error = null

この部分を以下のように書き換えてください。

if (CONFIG_ZIP) {
rec[CONFIG_ZIP].error = null
}

 

HANSA様

お返事ありがとうございます。また、お返事が遅くなりすみません。

変更してみましたが同じようなエラーが出てしまっております。数が変わったようですが…

edit.js:113 Uncaught TypeError: Cannot read property ‘value’ of undefined
at Number01Check (download.do?contentId=400&type=DESKTOP_JS&pluginId=hnkninedgmkojgnljnjobnljjegfaonh:45)
at download.do?contentId=400&type=DESKTOP_JS&pluginId=hnkninedgmkojgnljnjobnljjegfaonh:266
at edit.js:248
at new qj (edit.js:116)
at ow (edit.js:248)
at edit.js:248
at f.Pt (edit.js:118)
at Hj (edit.js:120)
at Cj (edit.js:120)
at qj.Mw (edit.js:962)

自分が作った内容をそのまま載せると下記のような感じになっています。

// 半角数字の入力チェック
function Number01Check(event) {
// 半角数字の定義
var Number01_pattern = /^[0-9]*$/;
// event よりレコード情報を取得します
var rec = event.record;
// エラーの初期化
if (CONFIG_Number01) {
rec[CONFIG_Number01].error = null
};
// 入力値を確認します
var Number01_value = rec[CONFIG_Number01].value;
if (Number01_value) {
if (Number01_value.length > 0) {
// 定義したパターンにマッチするか確認します
if (!(Number01_value.match(Number01_pattern))) {
// マッチしない場合は、エラーの内容を記載します
rec[CONFIG_Number01].error = ‘半角数字で入力して下さい。’;
}
}
}
}

文字の定義部分が変わっているだけであとはHANSA様がご連絡頂いた内容に置き換えている状態です。

コンソールでat Number01Check (download.do?contentId=400&type=DESKTOP_JS&pluginId=hnkninedgmkojgnljnjobnljjegfaonh:45)をクリックすると

var Number01_value = rec[CONFIG_Number01].value;の行まで飛ぶので次はここ等へんなのかなと思っておりますが…

こちらでも何かといじってみますが大変恐縮ではございますがお時間がございましたら、またお知恵を貸して頂けますと幸いです。

たつ さん

より根本的に理解していただく必要がありそうです。

CONFIG オブジェクトには、プラグインの設定画面で保存された情報が保存されています。

今まで設定画面の全ての項目が必須項目となっていたため、
CONFIG_Number01 などの CONFIG オブジェクトの中身が空になることはありませんでしたが、
たつさんの改修によってこの値が空になるパターンが発生しています。(=CONFIG_Number01 が空になる)

私が提示したコードは、この CONFIG_Number01 が空の際は、処理を実行しないという処理です。
今回のエラーも、空なのに、CONFIG_Number01 を使用しようとしているため、エラーとなっています。
なので、そこを回避するように改修しましょう。
(エラーになっている箇所はご認識している通りです。)

この CONFIG オブジェクトについては、プラグインの設定画面 JS で保存しているオブジェクトと、
アプリのカスタマイズ JS で設定を取得してきたオブジェクトを確認するとその挙動について理解が深まるかと思います。

setConfig() でプラグインに設定を保存し、getConfig() で保存された情報を取得しています。

HANSA様

ご指摘ありがとうございます。
私の力不足ゆえ完全には理解できていないとは思いますが、何となく仰っている内容が理解できたため少々頑張ってみます。

var Number01_value = rec[CONFIG_Number01].value;の部分で何か入っていないといけないというならば

連携前の時点でnull時には適当な表現をいれたり、入っていない場合はスキップする条件を手前につけて処理させないようにできるか等で誤魔化せるか等考えて試してみたいと思います。

無事に解決できました!!

CONFIG_Number01 がnullの時には別の値を代入しておき、その後 if文にてその値だった場合には処理をスキップするように設定し
自分の作りたかった内容で作成することができました。

nullのままif文などでスキップできるか試してみたのですがわからなかったので、使わないであろう値を代入することでクリアできました。

お力をお貸し頂いたHANSA様、ありがとうございました!!!

たつ さん

おめでとうございます!
実装できたとのこと、良かったです。