お世話になります。
複数行に記載した内容をテーブル内の1行フィールドに
コピーできないか検討しているのですが、なかなか
良い発想ができません。
複数行の行数をカウントして、その行数分のテーブル行を
追加して、for分でsplitを回す感じになるのでしょうか?
下記を参考にできそうですが、テーブルなので良く分かりません。
ご教授お願いいたします。
お世話になります。
複数行に記載した内容をテーブル内の1行フィールドに
コピーできないか検討しているのですが、なかなか
良い発想ができません。
複数行の行数をカウントして、その行数分のテーブル行を
追加して、for分でsplitを回す感じになるのでしょうか?
下記を参考にできそうですが、テーブルなので良く分かりません。
ご教授お願いいたします。
>複数行の行数をカウントして、その行数分のテーブル行を
>追加して、for分でsplitを回す感じになるのでしょうか?
考え方としてはそれで大丈夫です。
行追加の方法は下記リンクを参考にしてみてください。
https://developer.cybozu.io/hc/ja/articles/360022502911-kintone%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E6%93%8D%E4%BD%9C%E3%81%AE%E5%9F%BA%E6%9C%AC-%E8%A1%8C%E3%81%AE%E8%BF%BD%E5%8A%A0-%E6%9B%B4%E6%96%B0-%E5%89%8A%E9%99%A4-
たまねぎさん
アドバイスありがとうございます。
おおよそはできたのですが、問題点がいくつかでました。
1.複数行がブランクの場合、保存できなくなる。
2.1行目が空白で保存される。
3.編集で保存すると再度追加される。
1.はif文で何とかすればいいような気がします。
2.は現状分からない状況です。
3.は一度削除する?、もしくはボタンで追加する。
お手数ですが、再度アドバイス頂ければ幸いです。
(function() {
"use strict";
var events = [
'app.record.create.submit',
'app.record.edit.submit'
];
//作成、編集時に適用
kintone.events.on(events, function(event) {
var record = event.record;
var multiText = record.MultiText.value;
var countMultiText = 1;
//複数行の行数カウント(改行をキーに)
for (var i = 0; i < multiText.length; i++) {
if (multiText.charAt(i) === "") {
countMultiText += 1;
}
}
//複数行を配列に分割
var str = multiText.split(/\r|/);
//行ごとにpushする
for (var j = 0; j < countMultiText; j++) {
record.Table1.value.push({
value: {
"No": {
value: '',
type: 'NUMBER',
},
"Text": {
value: str[j],
type: 'SINGLE_LINE_TEXT',
},
"Value": {
value: '',
type: 'NUMBER',
},
}
});
}
return event;
});
})();
たまねぎさん
一応できました。
作成時のみに変更することで、編集時に延々と追加されることを
防ぐ形にしました。
1行目の空白は、j < countQText-1でなんかできたようです。
if文は最初に追加したので、コピー元が空白の場合も問題なく
対応できました。以下変更分です。(本アプリから持ってきてるので、若干違うかも…)
//複数行の行数カウント(改行をキーに)
if (multiText) {
for (var i = 0; i < multiText.length; i++) {
if (multiText.charAt(i) === "") {
countMultiText += 1;
}
}
//複数行を配列に分割
var str = multiText.split(//);
var table1 = record.Table1.value;
var tableLength = table1.length;
//行ごとにpushする
if (countMultiText != tableLength) {
for (var j = 0; j < countMultiText-1; j++) {
record.Table1.value.push({
value: {
"No": {
value:'',
type:'NUMBER',
},
"Text": {
value: str[j],
type:'SINGLE\_LINE\_TEXT',
},
"Value": {
value:'',
type:'NUMBER',
},
}
});
}
}
//対象に文字列だけを格納する
for (var k = 0; k < countMultiText; k++) {
record.Table1.value[k].value.Text.value = str[k];
}
}