サブテーブルのレコードの削除方法(初期化方法)

サブテーブルのレコードを削除することはできますか?

テーブルを二つ設置し、ラジオボタンで選ぶ値によって、片方のテーブルを非表示にして、結果的に一つのテーブルだけを表示させるようなフォームを作成しました。

例えば、ラジオボタンで [選択肢A] を選ぶと [テーブルA] が表示され、[選択肢B] を選ぶと [テーブルB] が表示されます。 

問題として、データ登録の際、[選択肢A] を選んで  [テーブルA] に入力した後、[選択肢B] の間違いだったことに気づいて [選択肢B] を選びなおして [テーブルB] に入力して保存すると、[テーブルA] にデータが残った状態になってしまいます。

そこで、ラジオボタンの選択で片方のテーブルを非表示にする場合に、非表示にするテーブルを初期状態(一行目は空白、二行目以降は削除)に戻したいです。

ご教示のほどお願いいたします。

kenji様
お世話になっております。
サイボウズスタートアップスの江田と申します。

こちらの二つの記事が参考になるのではないでしょうか。
https://developer.cybozu.io/hc/ja/articles/201941964#step6
https://developer.cybozu.io/hc/ja/articles/200752984

一つ目の記事の「フィールドの値を書き換える」にある通り、各フィールドのvalueに値を代入することで書き換えが可能です。
また、二つ目の記事の「テーブルの内容をすべて削除する」にある通り消去したい方のテーブルのvalueを[]にすることで、値の削除が行えます。

江田様

お世話になります。
ご教示いただきありがとうございます。

二つ目の記事は事前に見つけたのですが、初心者なため、正しく理解ができませんでした。
下記の部分でしょうか。また、どこを書き換えれば良いかがわからないのですが、下記で間違いないでしょうか。

補足)テーブルの内容をすべて削除する
{
    “app”: 2364,
    “id”: 1,
    “record”: {
        “Table”: {
            “value”: []
        }
    }
}

「“app”: 2364」 の2364をそのアプリのIDに置き換え
「“id”: 1」 の1を、JSを呼び出したレコードのIDを事前に取得し、そのIDに置き換え
「“record”」 はそのまま(変更の必要なし)
「“Table”」 はサブテーブルのフィールドコードに置き換え
「“value”: []」 はそのまま(変更の必要なし)

また、このコードをJSファイルに記述し、アプリの設定の「JavaScript / CSSでカスタマイズ」にアップロードする、という手順で間違いないでしょうか。

初歩的な質問にて大変恐縮ですが、何卒、ご教示のほどお願いいたします。

kenji様

テーブルの表示非表示を切り替えるのと同じタイミングで、非表示にしたテーブルのvalueに[]を代入するとうまくいくと思います。
サンプルコードを書いてみたので、参考になればと思います。
なお、フィールドコードはそれぞれ、
ラジオボタンは「ラジオボタン」、
テーブルAは「テーブルA」、
テーブルBは「テーブルB」
と設定していると仮定しています。

(function () {
"use strict";
var events = [
'app.record.detail.show',
'app.record.create.show',
'app.record.edit.show',
'app.record.create.change.ラジオボタン',
'app.record.edit.change.ラジオボタン'
];
kintone.events.on(events, function(event){
var record = event.record;
var radio = record['ラジオボタン']['value'];
if(radio.indexOf('選択肢A') != -1){ //選択肢Aが選択されていたら
kintone.app.record.setFieldShown('テーブルA', true); //テーブルAを表示
kintone.app.record.setFieldShown('テーブルB', false); //テーブルBを非表示
record.テーブルB.value = []; //テーブルBを空にする
}else if(radio.indexOf('選択肢B') != -1){ //選択肢Bが選択されていたら
kintone.app.record.setFieldShown('テーブルB', true); //テーブルBを表示
kintone.app.record.setFieldShown('テーブルA', false); //テーブルAを非表示
record.テーブルA.value = []; //テーブルAを空にする
}else{
kintone.app.record.setFieldShown('テーブルA', false);
kintone.app.record.setFieldShown('テーブルB', false);
}
return event;
});
})();

江田様

ご丁寧なご説明をいただきありがとうございます。
また、サンプルコードまでいただきまして、大変感謝いたします。

いただいたサンプルコードを参考に、実現したいことができました。
本当にありがとうございます。

尚、このスレッドの質問内容とは離れてしまうのですが、
下記の記述方法を初めて目にしました。(といっても経験自体が浅いのですが・・・)

if(radio.indexOf(‘選択肢A’) != -1){ 

これは

if(radio === ‘選択肢A’){ 

としても同じ動きとなりそうに思うのですが、どのような違いがあるのでしょうか。

立て続けに恐縮ですが、よろしくお願いいたします。

kenji様

チェックボックスでちょうど似たような実装をしたコードがあったのでそのまま流用してしまいました。
仰る通り、ラジオボタンの場合は
if(radio === ‘選択肢A’){
としたほうがいいですね。
紛らわしい回答をしてしまい申し訳ございません。

江田様

ご回答ありがとうございます。

チェックボックスの場合には上記のような書き方となるのですね。
より参考になりました。

この度は迅速かつご丁寧にご教示いただき、誠にありがとうございました。