FormBridgeの新バージョンのフォームを使用しています。
画面表示時テーブルに初期値をセットしたいのですが、1行目にしか初期値をセットできません。
2行目以降にも初期値をセットしたいのですが、これを実現する方法はございますでしょうか?
実行したコードは下記の通りで、「テーブル」というフィールドコードのテーブルに、「メモ」というフィールドコードの文字列型フィールドがあり、このテーブルに3行の初期値をセットしようとしています。
テーブル1行目に初期値をセットする
context.setSubtableFieldValue(‘テーブル’, ‘メモ’, 0, ‘あああ’);
は問題なく成功するのですが、
テーブル2行目に初期値をセットする
context.setSubtableFieldValue(‘テーブル’, ‘メモ’, 1, ‘いいい’);
でエラーが発生します。
ブラウザのコンソールには、
TypeError: Invalid value used as weak map key
というエラーメッセージが表示されます。
<実行したコード>
(function () {
formBridge.events.on('form.show', function (context) {
// テーブルに値をセットする
context.setSubtableFieldValue('テーブル', 'メモ', 0, 'あああ'); // この行は成功する
context.setSubtableFieldValue('テーブル', 'メモ', 1, 'いいい'); // この行でエラーになる
context.setSubtableFieldValue('テーブル', 'メモ', 2, 'ううう');
});
})();
aaa
2
2行目でエラーになるのは、テーブルの行が表示されていない(追加されていない)からのようです。
ならばJavaScriptのカスタマイズで行を追加すればいいのだろうとおもったのですが手段がないようでした。
(フォームブリッジV2)一括テーブル反映を実現せよ! | カスタマイズ事例
を参照してフォームの設定でテーブルの最低行数を3にすると
初期設定ができました。
「いいね!」 1
aaa
4
https://formbridge.kintoneapp.com/robots.txt
# www.robotstxt.org/
# www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449
User-agent: facebookexternalhit
Disallow:
User-agent: LinkedInBot
Disallow:
User-agent: Twitterbot
Disallow:
User-agent: *
Disallow: /
せめて、https://formbridge.kintoneapp.com/help/customize/v2\
ぐらいアクセスできるようにしてほしい。
aaa
5
別解として、1行目自動で値セットして、2行目、3行目は行を追加するボタンをクリックすると自動で値を入れるパターンです。
(() => {
const TABLE = 'テーブル'; // フィールドコードを指定
const MEMO = 'メモ'; // テーブル内フィールドのフィールドコード
const presets = ['あああ', 'いいい', 'ううう'];
// 既存の0行目に入れる(初期表示時点で1行あるケースを想定)
formBridge.events.on('form.show', (context) => {
const record = formBridge.fn.getRecord();
const rows = record[TABLE]?.value ?? [];
if (rows.length >= 1 && presets[0] !== undefined) {
context.setSubtableFieldValue(TABLE, MEMO, 0, presets[0]); // 0行目に「あああ」
}
});
// 追加される行に入れる(1行目以降)
formBridge.events.on(`form.subtable.addRow.${TABLE}`, (context) => {
const record = formBridge.fn.getRecord();
const nextIndex = record[TABLE].value.length; // 追加前の行数 = 追加行のインデックス
const initial = presets[nextIndex];
if (initial !== undefined && context?.newRow?.value?.[MEMO]) {
// 正攻法:newRow を直接初期化
context.newRow.value[MEMO].value = initial;
}
});
})();

system
(system)
クローズされました:
7
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。