新規レコード追加画面で、区分値が特定の場合のみフォーム内に設置したテーブルのフィールドを必須項目にしたい

お世話になっております。

新規レコード追加画面で、下記の「用途」のラジオボタンを”交通費”、”タクシー代”の場合に、

「使用区間」テーブルの”使用用途”を必須項目にしたいです。

”使用日”、”出発地”、”到着地”、”金額”は用途にかかわらず必須項目のためフォームで設定できるのですが、

”使用用途”は制御が必要なのですが、どのようにソースを書けばよいかわかりません。

https://developer.cybozu.io/hc/ja/community/posts/900001439566-%E3%83%A9%E3%82%B8%E3%82%AA%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%A7%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E9%A0%85%E7%9B%AE%E3%81%AB%E3%82%88%E3%82%8A-%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E5%86%85%E3%81%AE%E9%A0%85%E7%9B%AE%E3%82%92%E5%BF%85%E9%A0%88%E9%A0%85%E7%9B%AE%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%97%E3%81%9F%E3%81%84?input_string=%E5%8C%BA%E5%88%86%E5%80%A4%E3%81%8C%E7%89%B9%E5%AE%9A%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AE%E3%81%BF%E3%80%81%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E5%86%85%E3%81%AB%E8%A8%AD%E7%BD%AE%E3%81%97%E3%81%9F%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E5%BF%85%E9%A0%88%E9%A0%85%E7%9B%AE%E3%81%AB%E3%81%97%E3%81%9F%E3%81%84 

上記リンクを見たのですが、何をどうしてるかさっぱり理解できず…。参考にするものがあっていれば、もしよろしければ解説などいただきたいです。

どうかご教示のほどよろしくお願いいたします。

YYMAさん

こんにちは。

 

その記事の回答した者です。少し書き方が変わりますが、恐らくこちらの方が分かりやすいと思います。

*エラー判定する部分だけ書きます。

const record = event.record;
record.使用区間テーブル.value.forEach((row) => {
    if (!row.value.使用用途.value) {
        row.value.使用用途.error = '必須です';
    }
});
return event;

テーブル内の各行をforEachを使って順に処理します。rowは各行のデータを指します。

今回は「使用用途」だけエラー対象のため、「row.value.使用用途.error = ***」でエラーを設定します。

 

どんな時にエラーとするか→「row.value.使用用途.valueに値が入ってない場合」

if (!row.value.使用用途.value) {
    row.value.使用用途.error = '必須です';
}

 

これだけでは全ての場合にエラーになってしまいますので、用途が「交通費」または「タクシー代」の場合というif文も必要です。

まずはコードに落とし込んでみてください。

koichiさん

こんにちは、お返事が遅くなってしまい申し訳ございません。

丁寧なご回答大変助かります。ありがとうございます。

おっしゃる通り、書いてみたらうまくできました!ありがとうございます。

3つ確認なのですが、①event.recordというものは、「今自分が編集しているレコードの情報を取得する」という認識でよろしいでしょうか?

また、②foreach((row) => の部分ですが、検索すると「テーブルの行数分ループする」というものであるという推測ができたのですが、意味は合っておりますか?

また、③.errorについては、どんなJavaScript(つまりKintoneでなくても)汎用性があるのでしょうか?

用途による分岐も、無事できました。ありがとうございます。

大変お手数をおかけいたしますが、今後の勉強と理解を深めるために、ご回答いただけますと幸いです。

ご確認いただきありがとうございます。

①event.recordはご記載のとおり、「今自分が編集しているレコードの情報を取得する」です。
(より正確には、kintone.events.onに指定したイベント発火時点のレコード情報を取得する)

②forEachもご記載のとおり、行数分のループです。
これはkintoneに関わらず、JavaScriptが持つメソッドで、基本的には配列の中身を順にループするものです。
kintoneのサブテーブルは配列で構成されているため、行のループとなります。
(forEachでなくても、for文で書いても問題ないです)

③.errorはkintone独自のものですので、kintone以外での汎用性はありません。

解決しまして何よりです!

ご回答ありがとうございます。すべて承知いたしました。

大変助かりました。またもし機会がございましたら、質問にご回答をお願いできれば幸いです。

勉強を重ねて少しずつレベルの高い質問ができるよう頑張ります。ありがとうございました。