サブテーブルのレコードを削除することはできますか?
テーブルを二つ設置し、ラジオボタンで選ぶ値によって、片方のテーブルを非表示にして、結果的に一つのテーブルだけを表示させるようなフォームを作成しました。
例えば、ラジオボタンで [選択肢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’){
としたほうがいいですね。
紛らわしい回答をしてしまい申し訳ございません。
江田様
ご回答ありがとうございます。
チェックボックスの場合には上記のような書き方となるのですね。
より参考になりました。
この度は迅速かつご丁寧にご教示いただき、誠にありがとうございました。
system
(system)
クローズされました:
8
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。