サブテーブルについて教えてください

https://developer.cybozu.io/hc/ja/articles/200752984

上記を見てやってみたのですが、わからないので力を貸して下さい。

最終的にやりたいこととしましては、

edit.showの際、メニュー空白部にボタンを配置し、クリックするとテーブルの一番上に行を追加、また、特定のフィールドを追加されたサブテーブルの一番上の行に配置し、もともとのフィールドのデータを空白にするというものです。

edit.showでのボタンの配置は問題ないのですが、そのあとのスクリプトが上記以外も参考に見ていたのですが、力不足でうまくいきません。

むしろ上記のような動きは可能ですか??

ご教授の程宜しくお願いします。

 

テーブルのフィールドコード名:伝言板

テーブル内フィールド①:時間帯(ドロップダウンで朝昼夜とあります)

テーブル内フィールド②:連絡先(文字列1行)

参照元のフィールド①:受付時間帯(上記と同じ内容のドロップダウン)

参照元のフィールド②:受付連絡先(文字列1行)

 

ももたすさん

こんにちは。ひよこです。

メニュー空白部にボタンを配置し、クリックするとテーブルの一番上に行を追加についてです。

特定のフィールドを追加されたサブテーブルの一番上の行に配置 し、もともとのフィールドのデータを空白にする はちょっとわからなかったので、
どんな感じのイメージか教えてほしいです。
ボタン押したときに、なにかのフィールドの値を空にしたいというのはわかったんですが、太字にした部分がよくわからなかったです…すみません…。

kintone にボタンを配置して、ボタンを押して処理させるのは、
https://developer.cybozu.io/hc/ja/articles/202086734 を参考になるかと思います。

配置したボタンを押したときに、なにかさせたい場合は

// btn は ボタンの要素
btn.onclick = function() {
// ボタンクリックしたときに呼び出す関数
  // ... ここに処理を書く ...
};

とします。
また、クリックさせたときに呼び出す関数で、レコードの編集画面の値を変更したいときは、kintone.app.record.get() / set() を呼びます。

// いまの内容を取ってくる
var record = kintone.app.record.get();
record.record['フィールドコード'].value = 'ボタンを押したよ';

// 値をセットする
kintone.record.set(record);

テーブルの値は配列で定義されているので

// いまの内容を取ってくる
var record = kintone.app.record.get();
var table = record.record['伝言板'].value; // これが配列型
var row = { ... }; // 行のデータ
table.unshift(row); // 先頭に行のデータを挿入
// 値をセットする
kintone.record.set(record);

とします。

 

肝心の行のデータは結構複雑です(参照:https://developer.cybozu.io/hc/ja/articles/202166330

今回の場合は、こういうふうなオブジェクトになるかとおもいます。
セル(連絡先や時間帯の部分です)の値には type を指定しないと怒られたので、今回のフィールドに合わせて指定しています。

var row = {
value: {
'連絡先': {value: '', type: 'SINGLE_LINE_TEXT'},
'時間帯' : {value: '', type: 'DROP_DOWN'}
}
};

以上を踏まえると、こんな感じでしょうか。

kintone.events.on('app.record.edit.show', function(event) {
var btn = document.createElement('button');
btn.textContent = '行追加';
var header = kintone.app.record.getHeaderMenuSpaceElement();
header.appendChild(btn);

btn.onclick = function() {
var record = kintone.app.record.get();
var table = record.record['伝言板'].value;
var row = {
value: {
'連絡先': {value: '', type: 'SINGLE_LINE_TEXT'},
'時間帯' : {value: '', type: 'DROP_DOWN'}
}
};
table.unshift(row);
kintone.app.record.set(record);
};
return event;
});

ひよこさん

おはようございます、ももたすです。

凄くわかりやすい解説とスクリプトありがとうございます。

行のデータとその次に自分が問題視しているところが一番わからず、

スクリプトの知識もないから先に進むことが困難で諦めようとしていたのですが、

出来てしまうのですね。

ひよこさん、大変図々しいのですが、この次も教えてください。

私の日本語が変だった 特定のフィールドを追加されたサブテーブルの一番上の行に配置 に関してですが、

下記のイメージです。

 

(フィールド))受付時間帯 / (フィールド))受付連絡先

  昼     /    〇〇さん 090\*\*\*\*\*\*\*\*

と書いてあるレコードの編集画面にて、上部に配置されたボタンを押すと

(フィールド))受付時間帯 / (フィールド))受付連絡先

(空白になる)    / (空白になる)   

(テーブル上)時間帯      / (テーブル上)時間帯

  昼     /    〇〇さん 090\*\*\*\*\*\*\*\*

になる。

もし既にテーブル上に履歴データがあるのであれば、

(フィールド))受付時間帯 / (フィールド))受付連絡先

  夜     /    △△さん 080\*\*\*\*\*\*\*\*

というデータを履歴側に送りたい場合、ボタンを押すと

(フィールド))受付時間帯 / (フィールド))受付連絡先

(空白になる)    / (空白になる)   

(テーブル上)時間帯      / (テーブル上)時間帯

  夜     /    △△さん 080\*\*\*\*\*\*\*\*

  昼     /    〇〇さん 090\*\*\*\*\*\*\*\*

という感じです。

1レコードはその日そのいない人宛にかかってきた電話の履歴を作成したいと思っております。

フィールドにあるデータを一番最新とし、テーブル上は古いデータにしていこうと考えました。

宜しくお願いします。

ひよこさん

お世話になっております、ももたすです。

上記ですが、フィールドの名前を追加することで解決しました。

ありがとうございました!